【发布时间】:2013-02-19 02:32:10
【问题描述】:
我在一个非常简单的 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 位后结果开始不同。
我无法回答为什么结果会有所不同,因为在我看来,无论任务如何分配,它只是执行完全相同的任务。
任何帮助将不胜感激!
【问题讨论】:
-
我认为你的问题被切断了
-
抱歉,我刚刚重新编辑了我的问题。
-
你能展示你的代码吗?
-
您的源代码被编译为使用 x87 FPU 指令的 32 位 x86 代码,不是吗?
标签: mpi