gpt4 book ai didi

openmp - openmp中reduction有什么用?

转载 作者:行者123 更新时间:2023-12-04 04:57:54 25 4
gpt4 key购买 nike

我有这段并行化的代码。

int i,n; double area,pi,x;
area=0.0;
#pragma omp parallel for private(x) reduction (+:area)
for(i=0; i<n; i++){
x= (i+0.5)/n;
area+= 4.0/(1.0+x*x);
}
pi = area/n;

据说减少会消除如果我们不使用减少可能发生的竞争条件。我仍然想知道我们是否需要为区域添加 lastprivate,因为它在并行循环之外使用并且在它之外不可见。否则减少是否也涵盖了这一点?

最佳答案

Reduction 负责制作 area 的私有(private)副本对于每个线程。一旦平行区域结束,面积就会在一个原子操作中减少。换句话说,area暴露的是所有私有(private) area 的集合。每个线程的 s。

thread 1 - private area = compute(x)
thread 2 - private area = compute(y)
thread 3 - private area = compute(z)

reduction step - public area = area<thread1> + area<thread2> + area<thread3> ...

关于openmp - openmp中reduction有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16532229/

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