有没有办法知道OpenMP中减少运算符的执行顺序?换句话说,我想知道线程如何执行还原操作 - 它是从左到右吗?当数字不是2的幂时会发生什么?
答案 0 :(得分:2)
我认为您会发现OpenMP只会减少关联操作,例如+
和*
(如果您愿意,还可以添加和乘法),这意味着它可能会无视跨线程的减少表达式的组成部分的评估顺序。
我强烈建议您在使用OpenMP时以相同的方式继续,尝试找出或约束执行顺序最多会将并行程序转换为顺序程序,最坏的情况是继续为您提供有效的随机结果。
我无法理解你关于数字不是2的数字的最后一句话。
正如@JimCownie指出的那样,+
和*
等操作并不是浮点数的严格关联。在第一句中解释我对关联操作的引用,意味着操作,当应用于实数时,它们是关联的,但是由于现代计算机上数值计算的熟练技术人员所熟知的原因,应用于浮点数时无法关联。
答案 1 :(得分:1)
OpenMP标准没有规定减少的顺序。
该标准允许减少浮点数(例如,使用+),这不是关联的。如果你不明白,你应该去阅读"What every computer scientist should know about floating-point arithmetic"。