es una barrera omp implícita después de omp sección críticahay ¿Hay una barrera implícita después de omp sección crítica
Por ejemplo, ¿Puedo modificar esta siguiente versión-1 código en versión-2.
VERSIÓN-1
int min = 100;
#pragma omp parallel
{
int localmin = min;
#pragma omp for schedule(static)
for(int i = 0; i < 1000; i++)
localmin = std::min(localmin, arr[i]);
#pragma omp critical
{
min = std::min(localmin, min)
}
}
VERSION-2
int min = 100;
#pragma omp parallel
{
int localmin = min;
#pragma omp for schedule(static) nowait
for(int i = 0; i < 1000; i++)
localmin = std::min(localmin, arr[i]);
#pragma omp critical
{
min = std::min(localmin, min)
}
} // will I get the right "min" after this (because I have included nowait)
Voy a recibir el mismo resultado, tanto para la versión 1 y versión-2?
¿Existe una barrera implícita después de la región crítica omp?
EDIT: Lo siento si el ejemplo es muy pobre .. También, me gustaría saber si habría alguna diferencia de rendimiento entre versión 1 y versión 2-
Probablemente no sea el mejor ejemplo, ya que habrá una barrera cuando salga de la región paralela. Pero una buena pregunta, no obstante. +1 – Mysticial
No hay beneficio de rendimiento en v2 sobre v1 en el ejemplo artificial que publicaste, pero en el mundo real, podría haberlo. –