Сохранить результаты процессора в один массив в MPI

0

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

     mpirun -np 4 storesArrays.out

Это мой код

int main(int argc, char *argv[])
{
 MPI_Init(&argc, &argv);

int currRank;
MPI_Comm_rank(MPI_COMM_WORLD, &currRank);

int numRanks;
MPI_Comm_size(MPI_COMM_WORLD, &numRanks);

int *currArray;
currArray = generateValues(currRank,numRanks);
MPI_Finalize();
}

Теперь я хочу создать массив, который хранит currArray каждого процессора. Проблема в том, что если я инициализирую массив в основном, он каждый раз инициализирует его каждый процессор. Есть ли способ сделать это?

  • 3
    Распределение / сбор данных с помощью MPI выполняется с использованием MPI_Scatter / MPI_Gather .
Теги:
arrays
mpi
parallel-processing

1 ответ

1

Это можно сделать двумя способами:

Используйте MPI_Gather, который будет собирать данные каждого процессора на один "главный" процессор.

Или, если каждому процессору нужны все массивы процессоров, используйте MPI_Allgather.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню