Han*_*i_l 2 c c++ parallel-processing mpi
我MPI_Scatterv在并行程序中使用时遇到问题。这是它的定义方式:
int MPI_Scatterv(const void *sendbuf, const int *sendcounts,
const int *displs, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
Run Code Online (Sandbox Code Playgroud)
顺便我的理解,之间的差MPI_Scatterv和MPI_Scatter是一个事实,即在MPI_Scatterv段不必是相同长度的,它们不必是连续的(在存储器中的间隙被允许)。我不了解的部分是recvbuf,对于每个过程,如果可以是不同大小的数组,那么应该使用什么recvcount。假设我要发送5个sendbuf元素到进程0,发送15个元素到进程1。be的值应该recvcount是多少?
每个过程都必须MPI_Scatterv以正确的方式进行调用recvcount。您可以传递一个变量,其值取决于每个进程的等级。
例如:
int recvcount = (rank == 0) ? 5 : 15;
MPI_Scatterv( sendbuf, sendcounts, displs, sendtype,
recvbuf, recvcount, recvtype, 0, MPI_COMM_WORLD );
Run Code Online (Sandbox Code Playgroud)
具有等级0调用的进程带有MPI_Scatterv的recvcount,5而进程1传递的计数为15。