gpt4 book ai didi

c++ - omp 临界区后是否存在隐式 Barrier

转载 作者:可可西里 更新时间:2023-11-01 16:35:04 25 4
gpt4 key购买 nike

在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 之间是否会有任何性能差异

最佳答案

关键部分没有障碍,无论是在它们的开始还是在它们的结束。关键部分本身就是一个同步结构,可防止多个线程同时访问相同的数据。如果您想在退出并行区域之前获得正确的全局最小值,则在临界区之后需要一个额外的屏障。如前所述,平行区域在末尾有一个隐式屏障。

关于c++ - omp 临界区后是否存在隐式 Barrier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10443528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com