为什么在OpenMP中减少如此之快?它的速度几乎是另一种解决方案的两倍



就像我上一个问题说的(如何处理OpenMP中的数据竞争?)有三种解决方案可以进行聚合。 就像@wolfpack88的答案一样,但三种解决方案的性能不同,减少速度是其他解决方案的两倍。

所以我的问题是为什么会发生这种情况,以及我如何使用其他关键和自动来获得相同的性能。

当我们使用 reduction 子句时,编译器会创建reduction(operator:list)中指定的变量的私有副本,并且在所有线程的执行结束时,reduction 中指定的运算符将应用于每个私有副本到一个全局副本中。 因此,线程不需要等待获取锁,以便它们可以写入变量, 与使用每个线程等待获取锁的atomiccritical相比,这提供了更好的性能

最新更新