MPI中向多个进程发送Recv的最佳方式
Optimal Way to Send Recv to multiple processes in 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);
}
感谢您的帮助!
如果您遇到segfault,您的问题可能不是优化数据传输。你可能在其他地方也有问题。你可能想试试调试器来了解发生了什么。你可以在这里看到关于MPI调试的大文章(我如何调试MPI程序?)。如果你特别想要一个免费的调试器,你可以一直使用GDB(如果你不知道如何做到这一点,请参阅这个答案)。
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 使用std::source_location报告错误的最佳实践
- 派生类销毁的最佳实践是什么
- 将寄存器设计成可由C和C++访问的外设的最佳实践
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 检测win32服务创建和删除的最佳方法
- 在reactor中存储eventHandlers的最佳方式是什么
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- MPI中向多个进程发送Recv的最佳方式
- 在recv/WSARecv钩子中,将数据与windows中的SOCKET关联的最佳方法