【问题标题】:MPI one counter for all the process [duplicate]所有进程的 MPI 一个计数器 [重复]
【发布时间】: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 的示例。
  • 是的,但没有使用主从,我无法弄清楚如何让主进程不参与计算并仍然得到正确的结果

标签: c++ c mpi


【解决方案1】:

MPI 没有自动全局计数器。我认为您将不得不手动将增量传达给计数器。

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 2015-05-12
    • 2011-07-28
    • 2011-07-22
    • 2018-05-11
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多