У меня есть функция, которая хранит некоторые числа в массиве в зависимости от ранга, после окончания я хотел бы иметь больший массив с результатом всех процессоров. Допустим, у меня 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
каждого процессора. Проблема в том, что если я инициализирую массив в основном, он каждый раз инициализирует его каждый процессор. Есть ли способ сделать это?
Это можно сделать двумя способами:
Используйте MPI_Gather, который будет собирать данные каждого процессора на один "главный" процессор.
Или, если каждому процессору нужны все массивы процессоров, используйте MPI_Allgather.
MPI_Scatter
/MPI_Gather
.