消息大小限制似乎比在Open MPI中应该小得多

问题描述 投票:1回答:1

据我从this answer了解到,可以在Open MPI中发送/接收的消息有2^31-1个元素的大小限制。但是,当我尝试发送一个int数组,该数组具有超过[[exactly 4786470个元素时,我的代码完全停止工作。它不会给我任何错误消息或段错误,它只会卡在通信中,并且永远不会完成执行。

这里是一个最小的示例:

#include "mpi.h" int main(int argc, char **argv){ MPI_Init(&argc,&argv); int rank; MPI_Comm_rank(MPI_COMM_WORLD, &rank); const int n = 4786470 + 1; // it works when n = 4786470 int* send_array = new int[n]; int* recv_array = new int[n]; for(int i=0; i<n; i++) send_array[i] = 0; for(int i=0; i<n; i++) recv_array[i] = 0; if(rank==0) MPI_Send(send_array, n, MPI_INT, 1, 0, MPI_COMM_WORLD); if(rank==1) MPI_Recv(recv_array, n, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); delete[] send_array; delete[] recv_array; MPI_Finalize(); }

我用IsendIrecv做了一些测试,它似乎没有任何改变。我不确定代码中是否做错了什么,还是我的MPI出现了问题。 

顺便说一下,要编译和运行,我在macOS 10.15.4中使用Open MPI 4.0.1和Apple clang 11.0.3。

c++ mpi openmpi
1个回答
0
投票
看来这是在macOS上运行的Open MPI版本4.0.1的known issue。 MPI在传输19145881个字节后停止通信,该字节恰好给出了4786470个整数的数组。该错误已修复,适用于> = 4.0.2的版本,并且在安装了较新的版本后,该示例运行良好。
© www.soinside.com 2019 - 2024. All rights reserved.