Sto scrivendo un'applicazione che utilizza una libreria di terze parti per eseguire calcoli pesanti.Riduci contesto Commuta tra thread con la stessa priorità
Questa libreria implementa il parallelismo internamente e genera i thread numerici specificati. Voglio eseguire diverse istanze (conteggio dinamico) di questa libreria e quindi finire con un oversubscribing piuttosto pesante della cpu.
Esiste un modo per aumentare il "quantum tempo" di tutti i thread in un processo in modo che ad es. tutti i thread con priorità normale raramente switch di contesto (yield) a meno che non siano esplicitamente ottenuti attraverso ad es. semafori?
In questo modo, è possibile evitare la maggior parte delle spese generali relative all'aumento dell'abbonamento alla CPU. Nota che in questo caso non mi interessa se un thread è affamato per alcuni secondi.
EDIT:
Un modo complicato per farlo è quello di eseguire la pianificazione filo manualmente.
- Enumerare tutti i thread con una priorità specifica (ad esempio normale).
- Sospendi tutti.
- Creare un ciclo che riprende/sospende i thread ogni ad es. 40 ms e si assicura che non venga eseguito alcun mor thread del conteggio corrente della CPU.
Eventuali svantaggi principali con questo approccio? Non sei sicuro di quale sia il sovraccarico di riprendere/sospendere un thread?
Le istanze lib sono interdipendenti? In caso contrario, perché non si può evitare di sovraccaricare i core disponibili eseguendo il numero di thread come core nel modo di un pool di thread? –
Bene visto che il numero di istanze cambia dinamicamente è difficile. Avrei bisogno di inizializzare/reinizializzare la libreria più volte per cambiare il numero di thread in base al carico corrente. – ronag
Se si è utilizzato un pool di thread, il numero di istanze di libreria in esecuzione in qualsiasi momento sarà uguale al numero di thread nel pool. Le altre istanze della libreria si accodavano fino a quando i thread del pool non diventano disponibili per elaborarle. Non sembra esserci alcun motivo nell'applicare la CPU a un'istanza se il risultato è sovraccarico? –