当我使用MPI_Send和MPI_Recv时,为什么我的程序会挂起?

时间:2011-08-27 16:20:17

标签: parallel-processing mpi mpich

我在MPICH2中使用了一个简单的通信程序。当我使用

执行程序时
mpiexec.exe -hosts 2 o00 o01  -noprompt mesajlasma.exe

程序启动但未结束。通过使用资源监视程序,我可以看到它仍然在主机“o01”上运行。当我按 CTRL + c 时,它结束。然后我可以看到我的程序正常运行

为什么我的程序没有结束。它在哪里卡住了?为什么我的程序在使用MPI_Send和MPI_Recv时会挂起?

提前致谢

// mesajlasma.cpp

#include "stdafx.h"
#include "string.h"
#include "mpi.h"

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

    int  nTasks, rank;
    char mesaj[20];
    MPI_Status status;

    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD,&nTasks);
    MPI_Comm_rank(MPI_COMM_WORLD,&rank);

    //printf ("\nNumber of threads = %d, My rank = %d\n", nTasks, rank);

    if(rank == 1)
    {
        strcpy_s(mesaj, "Hello World");
        if (MPI_SUCCESS==MPI_Send(mesaj, strlen(mesaj)+1, MPI_CHAR, 0, 99, MPI_COMM_WORLD)) printf("_OK!_\n");
    }


    if(rank == 0)
    {
        MPI_Recv(mesaj, 20, MPI_CHAR, 1, 99, MPI_COMM_WORLD, &status);
        printf("Received Message:%s\n", mesaj);
    }

    MPI_Finalize();

    return 0;
}

1 个答案:

答案 0 :(得分:2)

您可能还需要将-n 2之类的参数传递给mpiexec.exe命令,以指示它启动2个进程。我相信-hosts参数只是指定运行程序的主机的另一种方法,而不是创建多少进程。