C'è una barriera OMP implicita dopo OMP sezione criticaC'è una barriera implicita dopo OMP sezione critica
Per esempio, posso modificare questo codice seguente versione-1 in versione-2.
VERSIONE-1
int min = 100;
#pragma omp parallel
{
int localmin = min;
#pragma omp for schedule(static)
for(int i = 0; i < 1000; i++)
localmin = std::min(localmin, arr[i]);
#pragma omp critical
{
min = std::min(localmin, min)
}
}
VERSION-2
int min = 100;
#pragma omp parallel
{
int localmin = min;
#pragma omp for schedule(static) nowait
for(int i = 0; i < 1000; i++)
localmin = std::min(localmin, arr[i]);
#pragma omp critical
{
min = std::min(localmin, min)
}
} // will I get the right "min" after this (because I have included nowait)
Avrò ottenere lo stesso risultato sia per la versione 1 e la versione-2?
Esiste una barriera implicita dopo la regione omp-critical?
EDIT: Scusate se l'esempio è molto povera .. Inoltre, vorrei sapere se ci sarebbe alcuna differenza di prestazioni tra la versione-1 e la versione 2-
Probabilmente non è il migliore esempio dato che ci sarà una barriera quando si lascia la regione parallela. Ma buona domanda comunque. +1 – Mysticial
Non c'è alcun vantaggio in termini di prestazioni in v2 rispetto a v1 nell'esempio inventato che hai pubblicato, ma nel mondo reale, ci potrebbe essere. –