【发布时间】:2025-11-25 09:20:06
【问题描述】:
抱歉,如果标题描述不准确!我是 OMP 的新手,并试图使这个循环并行。我在关键、原子和锁方面苦苦挣扎,但无法让它发挥作用。 b 是一个大小为 n 的双精度数组。
结果和我去掉omp代码时不一样
我的真实代码比较复杂,但如果我能理解 OMP 在这方面的使用,那将是一个很大的帮助
#pragma omp parallel
for(int i = 0; i < n; i++)
{
double v = 0;
#pragma omp critical
for (int j=i-1; j <= i+1; j++)
if (j >= 0 && j < n)
v += b[j];
b[i] = somecalculation(v);
}
【问题讨论】:
-
您确定这是您希望使用的正确算法吗?您可能打算使用以下内容:
bnew[i]=somecalculation(v);在循环后将bnew数组复制回b。如果是这样,它可以很容易地并行化。