在异构集群上执行MPI(1计数MPI_INT =一致吗?)

时间:2013-09-25 21:16:11

标签: c++ mpi openmpi

我正在尝试跨异构集群执行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导致程序挂起,即使两个等级都被确认为“进入”障碍

谢谢!

0 个答案:

没有答案