2012-09-07 9 views
8

¿Está bien utilizar omp pragmas como critical, single, master o barrier fuera de un bloque paralelo omp? Tengo una función que se puede llamar desde un bloque paralelo OMP, o no. Si es así, necesito adjuntar parte del código en una sección crítica. En otras palabras, ¿este código está bien?omp pragmas fuera del bloque paralelo omp

void myfunc(){ 
    #pragma omp critical 
    { /* code */ } 
} 

// not inside an omp parallel region 
myfunc(); 

#pragma omp parallel 
{ 
    // inside an omp parallel region 
    myfunc(); 
} 

No he encontrado ninguna mención de esto en la documentación de OpenMP. Supongo que el código debería comportarse exactamente como con 1 ejecución de subprocesos, y así es como funciona con gcc. Me gustaría saber si este comportamiento es portátil, o es algo que la especificación no define y que se puede esperar.

+0

Creo que esto está bien para la mayoría de los pragmas. – osgx

Respuesta

2

Según this documento:

La DO/para, secciones, SIMPLE, el maestro y de barrera directivas se unen a la PARALLEL dinámicamente que encierra, si existe. Si no se está ejecutando ninguna región paralela, las directivas no tienen efecto.

Así que la respuesta es que los pragmas se pueden usar fuera de una región paralela. Aunque todavía no lo encuentro explícitamente escrito en la documentación.

Cuestiones relacionadas