我在一个非常简单的 PI 计算中使用 MPI,使用数值积分,使用一些数学规则,最终我将计算转换为求和,它具有以下格式:
PI = ∑(f(i)),其中 i 从 1 到 100000 开始,f(i) 是一个基于 i 返回某个 double 类型值的函数。
在编程时,我可以将 sum 转换为 for 循环,迭代 100000 次,这是相当困难的。对于使用 p 个处理器的 MPI,我将 for 循环分成 p 个段,每个处理器得到 100000/p 个循环(假设 100000%p = 0)。然后使用 MPI_Reduce、MPI_SUM 收集这些子结果并将它们相加得到最终结果。
但是,当我使用不同数量的进程时,最终结果会略有不同,我的最终 PI 结果有 12 位精度,并且在大约 7 位之后结果开始有所不同。
我无法回答为什么结果会有所不同,因为在我看来,无论任务如何分配,它都只是执行完全相同的任务。
任何帮助将不胜感激!