使用mpi发送消息

时间:2017-12-12 01:58:27

标签: c mpi

我需要一些帮助。我有一个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 

就像你可以看到程序没有完成。 我觉得它有用...... 感谢您的帮助,对我的英语再次感到抱歉。

1 个答案:

答案 0 :(得分:2)

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添加的评论。