Ho dato un'occhiata alle definizioni ufficiali, ma sono ancora abbastanza confuso.In che modo FirstPlus e LastPliving differiscono dalle clausole private in OpenMP?
firstprivate
: specifica che ciascun filo deve avere una propria istanza di una variabile, e che la variabile deve essere inizializzato con il valore della variabile, poiché esiste prima del costrutto parallelo.
Per me, sembra molto privato. Ho cercato degli esempi, ma non sembra capire come sia speciale o come possa essere usato.
lastprivate
: Specifica che la versione del contesto racchiude della variabile è impostata uguale alla versione privata di qualsiasi thread esegue l'iterazione finale (ad anello costrutto) o ultima sezione (sezioni #pragma).
Mi sento come se ho capito questo un po 'meglio a causa del seguente esempio:
#pragma omp parallel
{
#pragma omp for lastprivate(i)
for (i=0; i<n-1; i++)
a[i] = b[i] + b[i+1];
}
a[i]=b[i];
Quindi, in questo esempio, capisco che lastprivate
consente una i
da restituire al di fuori del ciclo come l'ultimo valore era.
Ho appena iniziato ad imparare OpenMP oggi.
Questa è un'ottima risposta! Grazie mille! – SaiyanGirl
Beh, direi che "firstprivate" e "lastprivate" sono casi MOLTO speciali di "private". Di solito non è nemmeno necessario usare 'private' (basta definire la variabile all'interno del parallel block), possibilmente oscurando l'ambito esterno. Interessante è l'uso di oggetti C++ come variabili 'firstprivate' automatiche - saranno inizializzate attraverso la costruzione della copia, una volta, e distrutte dopo il blocco, e non è necessario conoscere il numero di thread in anticipo - poiché molte copie essere creato in base alle esigenze. –
Un grande esempio! Piace di più. Apprezzo Hristo. – Fusionmate