繁体   English   中英

向MPI中的多个进程发送Recv的最佳方式

[英]Optimal Way to Send Recv to multiple processes in MPI

我的具体问题如下:假设我有4个工人和1个主过程。 我想从每个工作人员向所有其他工作人员发送消息。 (从工作人员1到2,3,4;从流程2到1,3,4,依此类推)

我不在乎消息发送的顺序,但是我在乎性能。 我发送的数据非常大,可能以GB为单位。

我目前正在使用Isend和Recv,但一直出现分段错误。 我尝试使用Sendrecv,但似乎由于死锁而挂在中间。 因此,我想知道在多个进程之间进行发送和接收的最佳方法是什么。

这是我当前的代码:

for(int id  = 1; id < num_processes; id++) { 
    // Some computation with the vector vec //
    MPI_Request request;
    if(id != myId)
        MPI_Isend(&vec.front(), vec.size(), mpi_bid, id, 1, MPI_COMM_WORLD, &request);
}

然后接收。

for(int id = 1; id < num_processes; id++) {
    MPI_Request request2;
    if(id != myID)
        MPI_Recv(&recvVec.front(), some_large_value, mpi_bid, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &request2);
}

任何帮助表示赞赏!

如果遇到段错误,则发出的问题可能不是最佳地进行数据传输。 您可能在其他地方也遇到了问题。 您可能想尝试调试器以了解发生了什么。 您可以在此处看到有关MPI调试的重要文章( 如何调试MPI程序? )。 如果您特别想要一个免费的调试器,则可以始终使用GDB(如果您不知道该怎么做,请参见此答案 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM