【发布时间】:2016-09-15 09:04:00
【问题描述】:
我正在试验 MPI,到目前为止,我有一个计算简单总和的小程序:
#include <mpi.h>
#include <stdio.h>
int main(int argc, char *argv[]){
int i=0, myid, nproc,N=5;
double result=0.0,res;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
MPI_Comm_size(MPI_COMM_WORLD, &nproc);
MPI_Bcast(&N, 1, MPI_INT, 0, MPI_COMM_WORLD);
while (i<N) {
result += i;
i++;
printf("process %d i %d\n",myid,i);
MPI_Reduce(&result, &res, 1, MPI_DOUBLE,MPI_SUM, 0, MPI_COMM_WORLD);
}
if (myid == 0)
{
printf("result = %lf\n", res);
}
MPI_Finalize();
}
根据打印结果,我可以看到i 达到每个进程的限制 (5)。如何将其配置为保留全局计数器之类的内容,以便 i 对所有进程仅达到一次限制?
【问题讨论】:
-
在深入了解优秀的链接问题/答案之前,我强烈建议您熟悉 MPI 的基本原则:独立进程和通过消息进行的明确通信。想想你是否可以围绕这些原则设计你的应用程序,或者问问你是否卡住了。
-
我正在尝试以主从方式计算 pi。我得到的结果是预期结果的 4 倍,因为我使用了 4 个进程,我认为问题在于每个进程都会增加任务计数器。
-
实际上有很多关于如何使用 MPI 计算 pi 的示例。
-
是的,但没有使用主从,我无法弄清楚如何让主进程不参与计算并仍然得到正确的结果