alla ricerca di un algoritmo di distribuzione task / thead

0

Ambiente

  • Abbiamo attività che può utilizzare multi-thread
  • Il nostro compito utilizza sempre il 100% del processore, quindi definiamo 1 thread- 1 core .
  • quando lanciamo una nuova attività, possiamo assegnare la quantità di thread che può avere.
  • il tempo necessario per terminare i compiti è indeterminato, ma possiamo stimare il tempo richiesto con 1 thread (con circa il 25% di errore). ma quando usiamo più thread non è una progressione lineare. (con due thread non prendi la metà del tempo)
  • Abbiamo un numero limitato di core. (ora ne abbiamo 36 ma potremmo cambiare)

Problema

Ora abbiamo un numero fisso di processori per attività (sempre 4 thread) che consente 9 task contemporaneamente senza problemi ... e una variabile che dice quanto task possiamo lanciare (doppio rispetto ai core ora, è il limite che testato che funziona lentamente ma funziona). In tempo di punta, quando vogliamo eseguire il numero massimo di attività possibile il server è impegnato rispetto all'attività, come 10 volte più lento del dovuto e ha errori di calcolo e fallisce.

Obiettivi

Vogliamo implementare un algoritmo che abbia un equilibrio tra velocità e numero di attività. Se il server è scaricato, utilizzare una buona parte di esso per elaborare più velocemente una o due attività ... ma se abbiamo più che le nuove attività ricevono un numero inferiore di thread. Vogliamo che l'attività massima funzioni simultaneamente (i lavori in coda fanno male a noi) ma con il tempo più lento possibile per l'attività (se mettiamo tutti i core funzionanti, nuova attività fai in modo che il tempo per l'attività aumenti in modo esponenziale)

Approssimazioni Mi sono allenato a pensare in modi diversi per risolverlo, ma non riuscivo a trovare nulla di ciò che mi convinceva.

OPZIONI (tutte scartate):

  1. Assegna il numero massimo di core liberi a una nuova attività e se non ne ho dato solo 1 core fino ad arrivare al massimo dell'attività (core * 2).
    • vantaggio: 1 compito andare il più veloce possibile
    • problema: > 1 attività. è il più lento possibile e rallenta anche il primo compito.
  2. Assegna la metà dei nuclei liberi a una nuova attività e, se non ne ho, dai solo 1 core fino ad arrivare al massimo dell'attività (core * 2).
    • vantaggio: più attività stanno andando più velocemente
    • problema: > 5 attività. è il più lento possibile e rallenta anche il primo compito.
posta haran 13.10.2016 - 15:02
fonte

0 risposte

Leggi altre domande sui tag