在 omp 临界区之后是否存在隐式 omp 障碍
例如,我可以将以下代码版本 1 修改为版本 2。
版本一
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 之间是否会有任何性能差异