gpt4 book ai didi

multithreading - OpenMP-进入关键区域时是否需要刷新共享变量?

转载 作者:行者123 更新时间:2023-12-03 12:54:10 26 4
gpt4 key购买 nike

我想知道在OpenMP中,是否需要在关键区域中刷新要在关键区域中更新的共享变量,然后才能对其进行实际更新?

例如,我想使用以下代码在向量中计算最大值:

int max = vec[0];
#pragma omp parallel
{
int local_max = vec[0];
#pragma omp for
for (uint i = 0; i < vec.size(); i++) {
if (vec[i] > local_max) local_max = vec[i];
}
#pragma omp critical
{
if (local_max > max) max = local_max;
}
}

我想知道进入临界区后是否需要先刷新变量,因为很可能一个线程获取了变量“max”的陈旧 View ,并将其更新为小于真实max却大于过时的值最大限度。

最佳答案

进入关键区域时不需要刷新-进入和退出关键区域时已经存在隐式刷新。

注意:对于您的示例案例,建议使用reduction子句-基本上可以完成您的工作,但更加简洁。

关于multithreading - OpenMP-进入关键区域时是否需要刷新共享变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51803548/

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