我正在尝试跨异构集群执行 MPI 程序,一个运行 Ubuntu 12.04(64 位),另一个运行 CentOS 6.4(64 位)。
我在 CentOS 上编译了一个简单的 MPI 程序,将其 scp 到 Ubuntu,并测试它是否适用于每台机器本地的 1 个或多个 MPI 进程。我可以确认它分别适用于每个。
当我尝试在两台机器上执行程序时,我在 MPI_Wait 上收到“消息被截断”错误。我相信这告诉我 1 台机器发送的字节数高于/低于接收机器准备接收的字节数。
程序(片段):
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 机器认为 1 个 MPI_INT 计数小于 Ubuntu 机器的想法。
当接收者计数 > 发送者计数时,等待操作完成并且代码继续,但 MPI_Barrier 导致程序挂起,即使两个等级都被确认“进入”屏障
谢谢!