Se uso una variabile condivisa, diciamo una doppia, per calcolare un qualche tipo di somma lungo l'esecuzione del programma. Ciò sarebbe in ogni caso vulnerabile a operazioni non stabili? Voglio dire, sarebbe possibile che più di un core acceda a questa variabile in modo asincrono e provochi risultati instabili?C++: Protezione memoria condivisa OpenMP
Ad esempio: questa è una variabile globale:
double totalTime = 0;
e in ogni core un comando è chiamato:
totalTime += elapsedTime;
Quest'ultima operazione/istruzione viene eseguita prendendo il valore di totalTime , mettilo nel registro della CPU e poi fai l'aggiunta. Posso immaginare che più di un core prenderebbe lo stesso valore nello stesso istante, e quindi aggiungere il nuovo tempo trascorso, e quindi il valore memorizzato in TotalTime verrebbe sovrascritto con il valore sbagliato, a causa della latenza. È possibile? e come posso risolvere questo?
Grazie.
Grazie, amico :) –
Mi chiedo come OpenMP supporti l'aggiunta atomica per i tipi di dati in virgola mobile su x86 - non ci sono istruzioni native per questo. Sezioni critiche? – snemarch
@snemarch: Non sono riuscito a trovare nulla di definitivo al riguardo, quindi credo che usi le serrature. – Tudor