MPI точка-точка связи для коллективной коммуникации - PullRequest
0 голосов
/ 17 января 2019

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

Ниже приведен фрагмент моего кода для умножения матриц с использованием связи MPI точка-точка ...

int i;
    if(rank == 0) {
        for(i = 1; i < size; i++){
            MPI_Send(&rows, 1, MPI_INT, i, 0, MPI_COMM_WORLD);
            MPI_Send(&columns, 1, MPI_INT, i, 0, MPI_COMM_WORLD);
        }
    } else {
        MPI_Recv(&rows, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
        MPI_Recv(&columns, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
    }   

    int local_block_size = rows / size;
    int process, column_pivot;

    if(rank == 0) {
        for(i = 1; i < size; i++){
            MPI_Send((matrix_1D_mapped + (i * (local_block_size * rows))), (local_block_size * rows), MPI_DOUBLE, i, 0, MPI_COMM_WORLD);
            MPI_Send((rhs + (i * local_block_size)), local_block_size, MPI_DOUBLE, i, 0, MPI_COMM_WORLD);
        }
        for(i = 0; i < local_block_size * rows; i++){
            matrix_local_block[i] = matrix_1D_mapped[i];
        }
        for(i = 0; i < local_block_size; i++){
            rhs_local_block[i] = rhs[i];
        }
    } else {
        MPI_Recv(matrix_local_block, local_block_size * rows, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &status);
        MPI_Recv(rhs_local_block, local_block_size, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &status);
    }

Я думаю о замене MPI_Send на MPI_Bcast ... это будет правильный подход?

1 Ответ

0 голосов
/ 17 января 2019

Для первого сообщения, что данные, отправленные всем получателям, фактически идентичны, поэтому MPI_Bcast является правильным подходом. Второе сообщение распределяет разные порции большего массива среди получателей, это делается как коллектив с MPI_Scatter. Обратите внимание, что разброс включает в сообщение корневой ранг, поэтому вы можете не указывать локальную копию вручную.

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