gpt4 book ai didi

c++ - 我如何在这个循环中使用 openMP?

转载 作者:搜寻专家 更新时间:2023-10-31 01:16:54 25 4
gpt4 key购买 nike

我想知道使用 openMP 使这个循环并行化是否可行。

当然,竞争条件存在问题。我不确定如何处理由外循环生成的内循环中的 n,以及 D=A[n] 处的竞争条件。您认为尝试将其平行化是否可行?

for(n=0; n < 10000000; ++n) {   

for (n2=0; n2< 100; ++n2) {
A[n]=A[n]+B[n2][n+C[n2]+200];

}

D=D+A[n];

}

最佳答案

是的,假设所有指针都没有别名,这确实是可并行化的。

int D = 0;  //  Or whatever the type is.

#pragma omp parallel for reduction(+:D) private(n2)
for (n=0; n < 10000000; ++n) {

for (n2 = 0; n2 < 100; ++n2) {
A[n] = A[n] + B[n2][n + C[n2] + 200];
}

D += A[n];
}

它实际上可以优化如下:

int D = 0;  //  Or whatever the type is.

#pragma omp parallel for reduction(+:D) private(n2)
for (n=0; n < 10000000; ++n) {

int tmp = A[n]
for (n2 = 0; n2 < 100; ++n2) {
tmp += B[n2][n + C[n2] + 200];
}

A[n] = tmp;
D += tmp;
}

关于c++ - 我如何在这个循环中使用 openMP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8662888/

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