2012-09-07 19 views
8

È 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.

+0

Penso che questo sia ok per la maggior parte delle direttive. – osgx

risposta

2

Secondo this documento:

La DO/i, SEZIONI, SINGOLO, direttive MASTER e la barriera legano al PARALLEL racchiude dinamicamente, se presente. Se nessuna regione parallela è attualmente in esecuzione, le direttive non hanno alcun effetto.

Quindi la risposta è che i pragma possono essere utilizzati al di fuori di una regione parallela. Anche se non lo trovo ancora scritto esplicitamente nella documentazione.

Problemi correlati