Ho un programma strutturato come segue, ed è un enorme maiale della CPU. IO rallenta per l'intero sistema, non riesco a muovere il puntatore del mouse ...Perché il mio programma è un maiale di risorse anche se ho impostato THREAD_MODE_BACKGROUND_BEGIN?
... perché? Pensavo che THREAD_MODE_BACKGROUND_BEGIN avrebbe dovuto impedirlo?
#pragma omp parallel
{
SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN);
#pragma omp for
for (...)
{
doTruckLoadsOfComputation();
if (omp_get_thread_num()==0)
doTinyAmountOfIO(); //progress indicator
}
SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_END);
}
UPDATE:
Aggiunta SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL);
corregge il problema hogging CPU, ma la questione si ferma, perché non era sola modalità background è sufficiente?
Cosa succede se porti in primo piano un'altra finestra/riduci l'applicazione? – OMGtechy
Non posso, l'altra finestra non viene nemmeno in primo piano. –
Domanda stupida: su quale sistema operativo si sta eseguendo? ['THREAD_MODE_BACKGROUND_BEGIN' /' END' non è supportato prima di Vista] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms686277%28v=vs.85%29.aspx), quindi una vecchia macchina WS03 probabilmente non funzionerebbe. Potrebbe essere utile controllare effettivamente il valore restituito da "SetThreadPriority" per assicurarsi che abbia avuto successo. Non è nemmeno chiaro se la modalità di background influenzi effettivamente la priorità di schedulazione della CPU; sembra che sia un addon che modifica la priorità I/O (quali altre impostazioni non lo fanno), ma il comportamento esatto non è documentato correttamente. – ShadowRanger