0

有没有办法知道 OpenMP 中归约运算符的执行顺序?换句话说,我想知道线程是如何执行归约操作的——是从左到右吗?当有数字不是 2 的幂时会发生什么?

4

2 回答 2

2

我想您会发现 OpenMP 只会减少关联操作,例如+*(或加法和乘法,如果您愿意的话),这意味着它可以忽略跨线程减少表达式的组成部分的评估顺序。

我强烈建议您在使用 OpenMP 时以相同的方式进行操作,尝试找出或限制执行顺序最多会将您的并行程序变成一个顺序程序,最坏的情况是继续为您提供有效的随机结果。

我无法理解你关于不是 2 次幂的数字的最后一句话。

正如@JimCownie 指出的那样,诸如+和之类的操作*在浮点数上并不是严格关联的。将我在第一句中对关联运算的引用解释为当应用于实数时具有关联性的运算,但由于现代计算机上数值计算的熟练从业者充分理解的原因,当应用于浮点数时不能具有关联性——点数

于 2013-04-30T18:31:10.603 回答
1

OpenMP 标准未指定缩减顺序。

该标准允许减少浮点数(例如使用 +),这不是关联的。如果你不明白,你应该去阅读“每个计算机科学家都应该知道的关于浮点运算的知识”

于 2013-05-02T09:00:55.453 回答