在我的代码中,每个进程都处理数组的某个部分。我希望每个进程将自己处理的部分发送给其他进程,并从其他进程接收其他部分。为此,我使用了MPI_Allgatherv
,但是我保持发送和接收缓冲区相同:
MPI_Allgatherv (&vel[0], localSizesFaceV[rank], MPI_DOUBLE, &vel[0], localSizesFaceV, displsFaceV, MPI_DOUBLE, MPI_COMM_WORLD);
我之前已经使用过此函数,用于不同的发送和接收缓冲区,其能正常工作。因此我确定其他参数没有问题。
在有2个进程的情况下,其中一个进程无法返回。当我将发送缓冲区复制到另一个 std::vector
时发生了这种情况。
vector <double> vel2;
vel2 = vel;
为什么使用vel2
作为发送缓冲区后所有进程都返回了?