【问题标题】:Sending messages with mpi使用 mpi 发送消息
【发布时间】:2018-05-25 15:28:18
【问题描述】:

我需要一些帮助。我有一个 mpi 程序,它只是发送和接收消息。但是程序不能正常工作。我阅读并看到了另一个例子,我认为我的程序必须工作。当程序运行时,消息被发送但程序没有完成。好像它在等待什么。这是代码

#include<stdio.h>
#include<mpi.h>

int main( int argc, char* argv[] ) {
int this_proc, total_procs;


MPI_Init( &argc, &argv );
MPI_Comm_size( MPI_COMM_WORLD, &total_procs );
MPI_Comm_rank( MPI_COMM_WORLD, &this_proc );



int i;
int* localI;
localI=(int*)malloc(sizeof(double));

if (this_proc != 0)
{
    MPI_Send(&this_proc, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
    printf("Enviado %d\n",this_proc );
}
else
{
    for (i = 1; i < total_procs; i++)
    {
        MPI_Recv(localI, 1, MPI_INT, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
        printf("Recibiendo mensaje del proceso nro %d \n", *localI);
     }

    // This is only called for the process that enters the else block

}
MPI_Finalize();
printf("Finalizando %d\n", this_proc);
}

我为 5 个进程运行我的程序

mpirun -np 5 holaMundo

输出是下一个:

Recibiendo mensaje del proceso nro 1 
Recibiendo mensaje del proceso nro 2 
Recibiendo mensaje del proceso nro 3  
Recibiendo mensaje del proceso nro 4 

就像您可以看到程序没有完成一样。 我认为它有工作... 感谢您的帮助,再次为我的英语感到抱歉。

【问题讨论】:

  • 您的程序无法编译。先修复缩进,再修复程序。

标签: c mpi


【解决方案1】:

MPI_Finalize: "All processes must call this routine before exiting"

您的缩进更好的代码如下所示:

if (this_proc != 0)
{
    MPI_Send(&this_proc, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
}
else
{
    for (i = 1; i < total_procs; i++)
    {
        MPI_Recv(localI, 1, MPI_INT, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
        printf("Recibiendo mensaje del proceso nro %d \n", *localI);
    }

    // This is only called for the process that enters the else block
    MPI_Finalize();
    printf("Finalizando %d\n", this_proc);
}

MPI_Finalize查看我添加的评论。

【讨论】:

  • 那是个错误。但我已经纠正了这个错误,输出保持不变。程序没有结束,没有显示任何“Finishing #”消息。我的代码现在看起来像你的代码,但它不起作用。抱歉,我不明白为什么。
  • @Patricio 请用更新的代码编辑问题......你的代码不应该像我的,我只是指出错误而不是修复它。如果您了解引用的文档并了解正在发生的事情,那么您将能够修复它。
  • 代码已更新。也许我没有正确表达自己。我更正了代码。现在所有进程都完成了执行。
猜你喜欢
  • 1970-01-01
  • 2015-08-20
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 2016-01-08
  • 1970-01-01
相关资源
最近更新 更多