È corretto utilizzare i prompm omp come critico, singolo, master o barriera al di fuori di un blocco parallelo omp? Ho una funzione che può essere chiamata da un blocco parallelo OMP o no. Se sì, ho bisogno di allegare parte del codice in una sezione critica. In altre parole, questo codice è valido?omp pragmas al di fuori del blocco parallelo di omp
void myfunc(){
#pragma omp critical
{ /* code */ }
}
// not inside an omp parallel region
myfunc();
#pragma omp parallel
{
// inside an omp parallel region
myfunc();
}
Non ho trovato alcuna menzione di questo nella documentazione di OpenMP. Immagino che il codice dovrebbe comportarsi esattamente come con l'esecuzione di 1 thread - ed è così che funziona con gcc. Mi piacerebbe sapere se questo comportamento è portatile, o è qualcosa che la specifica non definisce e tutto può essere previsto.
Penso che questo sia ok per la maggior parte delle direttive. – osgx