Parallel processing 为什么我的程序在使用MPI_发送和MPI_接收时挂起?

Parallel processing 为什么我的程序在使用MPI_发送和MPI_接收时挂起?,parallel-processing,mpi,mpich,Parallel Processing,Mpi,Mpich,我在MPICH2中使用了一个简单的通信程序。当我使用 mpiexec.exe -hosts 2 o00 o01 -noprompt mesajlasma.exe 程序开始但不结束。通过使用资源监视器程序,我可以看到它仍在主机“o01”上运行。当我按下CTRL+c时,它结束了。然后我可以看到我的程序运行正常 为什么我的节目还没有结束。它卡在哪里了?为什么我的程序在使用MPI_发送和MPI_接收时挂起 提前谢谢 //mesajlasma.cpp #包括“stdafx.h” #包括“string.

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

mpiexec.exe -hosts 2 o00 o01  -noprompt mesajlasma.exe
程序开始但不结束。通过使用资源监视器程序,我可以看到它仍在主机“o01”上运行。当我按下CTRL+c时,它结束了。然后我可以看到我的程序运行正常

为什么我的节目还没有结束。它卡在哪里了?为什么我的程序在使用MPI_发送和MPI_接收时挂起

提前谢谢

//mesajlasma.cpp
#包括“stdafx.h”
#包括“string.h”
#包括“mpi.h”
int main(int argc,char*argv[])
{
int nTasks,等级;
char-mesaj[20];
MPI_状态;
MPI_Init(&argc,&argv);
MPI_通信大小(MPI_通信世界和nTasks);
MPI通信等级(MPI通信世界和等级);
//printf(“\n线程数=%d,我的排名=%d\n”,nTasks,排名);
如果(秩==1)
{
strcpy_s(mesaj,“你好,世界”);
如果(MPI_SUCCESS==MPI_Send(mesaj,strlen(mesaj)+1,MPI_CHAR,0,99,MPI_COMM_WORLD))printf(“_OK!\un”);
}
如果(秩==0)
{
MPI_Recv(mesaj,20,MPI_CHAR,1,99,MPI_COMM_WORLD和status);
printf(“收到的消息:%s\n”,mesaj);
}
MPI_Finalize();
返回0;
}

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

什么是MPI库?是openmpi、MPICH还是MPICH2?确切的版本是什么?Unix还是Windows?我的库是MPICH2。在这两台计算机中,windows 7都是操作系统。实际上,我安装的MPICH2有41台计算机,对于simple«;你好,世界»;应用。但是如果我使用MPI_发送和MPI_接收函数,那么它将挂起。因此,我将问题简化为两台计算机(o00和o01),并在这个论坛上进行了写作。我尝试使用
-n2
运行,并使用
-machinefile
从host_list.txt获取主机名。但它仍然适用于一台主机(即使是远程主机),但在我按下
ctrl+c
Hmm之前,它不适用于两台主机。。。对我来说,听起来像是一个网络问题。我建议通过
mpich联系完整的MPICH2开发团队-discuss@mcs.anl.gov
。由于您使用的是Windows,因此已超出我解决此问题的能力。如果/当你把问题解决后,一定要把解决方案发回到这里。