在MPI中将Recv发送到多个进程的最佳方式

时间:2013-07-23 23:41:09

标签: c++ debugging parallel-processing mpi

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

我不关心发送消息的顺序,但我关心性能。我发送的数据非常大,可能是千兆字节。

我目前正在使用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);
}

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

如果您遇到段错误,那么您的问题可能不是以最佳方式进行数据传输。你可能也在其他地方遇到问题。您可能想尝试使用调试器来确定发生了什么。你可以在这里看到关于MPI调试的重要帖子(How do I debug an MPI program?)。如果您特别需要一个免费的调试器,您可以随时使用GDB(如果您不知道如何操作,请参阅this answer。)