我正在尝试使用这个原语,但我找不到好的解决方案。
在我的示例中,我有 nProcesses,每个 ona 有一个包含 k 个元素的向量 c。我希望每个进程也具有其他进程的所有元素,因此每个进程都有一个由 k*k 元素组成的新向量。这就是我所做的
int c[k];
int mtemp[k*k];
MPI_Allgather(&c[0],k,MPI_INT,&mtemp[0],k*(nProc-1),MPI_INT,MPI_COMM_WORLD);
这样每个进程发送 k 个元素并接收 k*(nProc-1) 个元素,但是当我运行时,对于每个进程我只有 k*2 个元素的 mtemp,它们的元素和进程 0 的元素
问题是
mtemp
是 k*nProc
而不是 k*k
。
此答案是由 OP AlessandroIV 在 CC BY-SA 4.0 下发布为问题 C 原语 MPI_Allgather中的 MPI 的 评论。