为什么在openmp中减速如此之快?它几乎是其他解决方案的两倍

时间:2014-12-08 15:33:39

标签: openmp critical-section reduction

像我上一个问题所说的那样(How do I deal with a data race in OpenMP?)有三种解决方案可以进行聚合。比如@ wolfpack88的答案,但三种解决方案的性能不同,减少速度是其他解决方案的两倍。

所以我的问题是它为什么会发生,我怎样才能使用其他关键和自动来获得相同的性能。

1 个答案:

答案 0 :(得分:0)

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