我在并行程序中使用 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)
据我了解,MPI_Scatterv
和 MPI_Scatter
之间的区别在于 MPI_Scatterv
段不必是相同的长度并且它们不必是连续的(允许内存中的间隙)。我不明白的部分是,如果 recvbuf
可以是每个进程的不同大小的数组,那么 recvcount
应该使用什么。假设我想将 sendbuf 的 5 个元素发送到进程 0,将 15 个元素发送到进程 1。recvcount
的值应该是多少?
最佳答案
每个进程都必须使用正确的recvcount
调用MPI_Scatterv
。您可以传递一个变量,其值取决于每个进程的等级。
例如:
int recvcount = (rank == 0) ? 5 : 15;
MPI_Scatterv( sendbuf, sendcounts, displs, sendtype,
recvbuf, recvcount, recvtype, 0, MPI_COMM_WORLD );
等级为 0
的进程调用 MPI_Scatterv
,recvcount
为 5
,而进程 1
传递了 15
的计数。
关于c++ - 如何正确使用 MPI_Scatterv(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29329383/