gpt4 book ai didi

c++ - 如何正确使用 MPI_Scatterv()

转载 作者:搜寻专家 更新时间:2023-10-31 00:33:12 25 4
gpt4 key购买 nike

我在并行程序中使用 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_ScattervMPI_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_Scattervrecvcount5,而进程 1 传递了 15 的计数。

关于c++ - 如何正确使用 MPI_Scatterv(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29329383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com