我试图跨异构集群执行MPI程序,一个运行Ubuntu 12.04(64位),另一个运行CentOS 6.4(64位).
我在CentOS上编译一个简单的MPI程序,将其转换为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);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:每台机器是否在通信中评估要发送/接收的不同字节数?MPI_INT是否依赖于机器?
如果是这样,有没有人有任何指示,我应该怎么做才能解决这个问题?
编辑:当count = 8且类型为MPI_BYTE时,问题仍然存在.我不知所措.
EDIT2:有趣的是,交换排名时不会出现问题.从测试开始,操作与接收操作比发送操作发送的计数更高的操作相同.因此很明显,CentOS机器认为MPI_INT的1个数量小于Ubuntu机器认为的数量.
当接收者计数>发送者计数时,等待操作完成并且代码继续,但MPI_Barrier导致程序挂起,即使两个等级都被确认为"进入"障碍
谢谢!
| 归档时间: |
|
| 查看次数: |
691 次 |
| 最近记录: |