¿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.
Creo que esto está bien para la mayoría de los pragmas. – osgx