【问题标题】:Message size limit seems much smaller than should be in Open MPI消息大小限制似乎比 Open MPI 中的应小得多
【发布时间】:2020-05-05 20:01:48
【问题描述】:

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

这是一个最小的例子:

#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】:

    看起来这是在 macOS 上运行的 Open MPI 4.0.1 版的known issue。 MPI 在传输 19145881 个字节后停止通信,这恰好给出了 4786470 个整数的数组。该错误已针对 >= 4.0.2 的版本进行了修复,并且在安装了较新版本后,该示例运行良好。

    【讨论】:

      猜你喜欢
      • 2015-03-14
      • 2011-05-15
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多