[英]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.