我正在尝试跨异构集群执行MPI程序,一个运行Ubuntu 12.04(64位),另一个运行另一个CentOS 6.4(64位)。
我在CentOS上编译一个简单的MPI程序,将其转换为Ubuntu,并测试它是否适用于每台机器本地的1个或多个MPI进程。我可以单独确认它是否有效。
当我尝试在两台机器上执行程序时,我在MPI_Wait上收到“消息截断”错误。我相信这告诉我一台机器发送的字节数比接收机准备好的更多/更少。
程序(摘录):
if(rank==0){
taskobject_id[0] = 4;
taskobject_id[1] = 5;
MPI_Request* req = new MPI_Request();
MPI_Isend(&taskobject_id, 2, MPI_INT, 1, 0, MPI_COMM_WORLD, req);
MPI_Status stat;
MPI_Wait(req, &stat);
}
else if(rank==1){
taskobject_id[0] = 1;
taskobject_id[1] = 1;
MPI_Request* req = new MPI_Request();
MPI_Irecv(&taskobject_id, 2, MPI_INT, 0, 0, MPI_COMM_WORLD, req);
MPI_Status stat;
MPI_Wait(req, &stat);
}
我的问题是:每台机器评估通信中发送/接收的不同字节数吗? MPI_INT是否与机器有关?
如果是这样,有没有人在这里有任何指示我应该怎么做才能解决这个问题?
编辑:当count = 8且类型为MPI_BYTE时,问题仍然存在。我很茫然。
EDIT2:有趣的是,交换排名时不会出现问题。从测试开始,操作与接收操作比发送操作发送的计数更高的操作相同。因此很明显,CentOS机器认为MPI_INT的1个数量小于Ubuntu机器认为的数量。
当接收者计数>发送者计数,等待操作完成并且代码继续,但MPI_Barrier导致程序挂起,即使两个等级都被确认为“进入”障碍
谢谢!