Предположим, у меня есть 3 процесса, которые имеют следующие массивы:Может использовать более одного процесса MPI_Scatter?
P0 - int sendBuff[3] = {1,2,3};
P1 - int sendBuff[3] = {4,5,6};
P2 - int sendBuff[3] = {7,8,9};
предполагается, что каждый процесс имеет int recvBuff[3];
Я хочу, чтобы рассеять каждый процесс sendBuff в каждом процессе recvBuff, поэтому у меня есть код в моей основной файл:
int rank, size, i;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Scatter(&sendBuff[0], 1, MPI_INT, &recvBuff[0], 3, MPI_INT, rank, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
//print recvBuffs
Однако, когда я печатаю из процессов recvBuff
, я получаю:
recvBuff of P0: 1, -1077259864, 134517329
recvBuff of P1: 5, 6, 4
recvBuff of P2: 9, 7, 8
Если я не получаю:
recvBuff of P0: 1, 4, 7
recvBuff of P1: 2, 5, 8
recvBuff of P2: 3, 6, 9
У меня есть ощущение, каждый процесс перезаписью recvBuff каждого процесса каждый раз они называют MPI_Scatter
.
Кроме того, может ли только один процесс в группе процессов вызвать MPI_Scatter или все они могут вызвать его параллельно?
спасибо.
, по-видимому, то, что я искал был MPI_Alltoall (..), но мне кажется, что я до сих пор не могу заставить его работать должным образом. – ali