假设我有 3 个具有以下数组的进程:
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
但是,当我打印出 processes 时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 还是所有进程都可以并行调用它?
谢谢你。