Использовать двумерный динамически распределенный массив для сбора данных с помощью MPI_Gatherv? - PullRequest
0 голосов
/ 29 мая 2019

Я использую MPI_Gatherv для сбора данных каждого ранга, а для собранных данных я хочу сохранить их в двумерном массиве.

Вот часть моего кода:

       std::vector<int> n_of_BP;
    if(rank == 0)
    {
        n_of_BP.resize(size);
    }

    int n_of_BP_local = 100;
    MPI_Gather(&n_of_BP_local, 1, MPI_INT, &(n_of_BP[0]), 1, MPI_INT, 0, MPI_COMM_WORLD);
    std::vector<int> offsets;
    if(rank == 0)
    {
        offsets.resize(size);
        offsets[0] = 0;
        for(int i=1; i<size; i++)
        {
            offsets[i] = offsets[i-1] + 100;
        }
    }

    int sendBuf[100];

    for(int i=0; i<100; i++)
    {
        sendBuf[i] = i*rank;
    }
    int ** recvBuf;
    recvBuf = (int **) malloc(sizeof(int *)*size);
    for(int i=0; i<size; i++)
    {
        recvBuf[i] = (int *) malloc(sizeof(int)*100);
    }
    MPI_Gatherv(&(sendBuf[0]), n_of_BP_local, MPI_INT, &(recvBuf[0][0]), &(n_of_BP[0]), &(offsets[0]), MPI_INT, 0, MPI_COMM_WORLD);

Ошибка возникает при объявлении recvBuf и всегда приводит к повреждению памяти. Когда я объявляю 'recvBuf' как 'int recvBuf [size] [100]', код может ошибаться без ошибок. Но я хочу использовать динамически распределенный массив, чтобы объявить 'recvBuf', какие-либо предложения по этому поводу? Сначала спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...