【问题标题】:why does my program hang when I use MPI_Send and MPI_Recv?为什么当我使用 MPI_Send 和 MPI_Recv 时我的程序会挂起?
【发布时间】:2011-11-05 03:45:48
【问题描述】:

我在 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;
}

【问题讨论】:

  • 你的 MPI 库是什么?它是 openmpi 还是 MPICH 还是 MPICH2?什么是精确版本? Unix 还是 Windows?
  • 我的库是 MPICH2。在两台计算机中,Windows 7 都是操作系统。实际上,我安装了 MPICH2 的 41 台计算机,它们在简单的 «hello world» 中正常工作。应用程序。但是如果我使用 MPI_Send 和 MPI_Receive 函数,它就会挂起。因此,我将问题简单化到两台计算机(o00和o01)上,并在这个论坛上写了。

标签: parallel-processing mpi mpich


【解决方案1】:

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

【讨论】:

  • 我尝试使用-n 2 运行,并使用-machinefilehost_list.txt 中获取主机名。但它仍然适用于主机(甚至是远程主机),但它不适用于两个主机,直到我按下ctrl+c
  • 嗯...对我来说听起来像是网络问题。我建议通过mpich-discuss@mcs.anl.gov 联系完整的 MPICH2 开发团队。由于您使用的是 Windows,因此您已经超出了我解决此问题的能力。如果/当您解决问题时,请务必将解决方案发回 SO。
猜你喜欢
  • 2021-08-03
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多