Ограничение размера сообщения кажется намного меньше, чем должно быть в Open MPI - PullRequest
1 голос
/ 05 мая 2020

Как я понял из этого ответа , существует ограничение на размер 2^31-1 элементов для сообщений, которые вы можете отправлять / получать в Open MPI. Тем не менее, когда я пытаюсь отправить массив int, содержащий более ровно 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();
}

Я провел несколько тестов с Isend и Irecv, и, похоже, это ничего не меняет. Я не уверен, что я делаю что-то не так в коде или это проблема из-за моего MPI.

Кстати, для компиляции и запуска я использую Open MPI 4.0.1 и Apple clang 11.0.3 в macOS 10.15.4.

1 Ответ

0 голосов
/ 06 мая 2020

Похоже, это известная проблема из версии 4.0.1 Open MPI, работающей на macOS. MPI прекращает обмен данными после передачи 19145881 байта, что дает ровно массив из 4786470 целых чисел. Ошибка была исправлена ​​для версий> = 4.0.2, и после установки более новой версии пример работал отлично.

...