在omp关键部分之后是否会有隐式的omp屏障?
例如,我能否将以下代码版本1修改为版本2。
版本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)
}
}
版本-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)
版本1和版本2的结果会相同吗?
在omp关键区域之后是否有隐含屏障?
编辑:很抱歉示例很差..另外,我想知道版本1和版本2之间是否会有任何性能差异。