Czy można używać pragmatów omp takich jak krytyczne, pojedyncze, wzorce lub bariery poza blokiem równoległym omp? Mam funkcję, która może być wywołana z bloku równoległego OMP, lub nie. Jeśli tak, muszę zamknąć część kodu w sekcji krytycznej. Innymi słowy, czy ten kod jest w porządku?omp pragmas outside omp równoległy blok
void myfunc(){
#pragma omp critical
{ /* code */ }
}
// not inside an omp parallel region
myfunc();
#pragma omp parallel
{
// inside an omp parallel region
myfunc();
}
Nie znalazłem żadnej wzmianki o tym w dokumentacji OpenMP. Domyślam się, że kod powinien zachowywać się dokładnie tak, jak przy wykonywaniu 1 wątku - i tak to działa z gcc. Chciałbym wiedzieć, czy to zachowanie jest przenośne, czy jest to coś, czego specyfikacja nie definiuje i czego można się spodziewać.
Myślę, że jest to w porządku dla większości pragm. – osgx