一個隱含的屏障是有後OMP臨界區是否有後OMP臨界部
例如隱式OMP屏障,我可以修改這個下面的代碼版本1到版本2。
VERSION-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)
我會得到兩個版本1和版本2相同的結果?
omp臨界區之後是否存在隱性障礙?
編輯:如果不好意思的例子是非常差..還有,我想知道是否會有版本1和版本2之間的性能差異
這可能不是最好的例子,因爲離開平行區域時會有障礙。但很好的問題。 +1 – Mysticial
在您發佈的設計示例中,v2比v1沒有性能優勢,但在現實世界中可能會有。 –