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

标签 c++ debugging parallel-processing mpi

我的具体问题如下: 假设我有 4 个 worker 和 1 个主进程。我想将每个 worker 的消息发送给所有其他 worker 。 (从worker 1到2,3,4;从process 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);
}

感谢任何帮助!

最佳答案

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

关于c++ - 将 Recv 发送到 MPI 中的多个进程的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822825/

相关文章:

c++ - 为什么我不能 move map 的元素?

c++ - 为什么 C++11 没有模板类型定义?

iPhone 开发者 : Xcode debugger does not stop on breakpoints

python - 并行线程 python GIL 与 Java

c - 并行使用 pragma 进行构造

ios - ReactiveCocoa -如何并行处理多个独立信号?

c++ - 为什么这个段错误没有?

c++ - Sprite 的 SFML vector 和 Sprite 碰撞错误

android - 如何调试已发布的 native 应用程序 (C++)?

python - 扭曲回溯中的 "<exception caught here>"行是什么意思?