为什么 MPI_Scatterv 的 recvcount 是一个固定的 int 而 sendcount 是一个数组?
why is MPI_Scatterv 's recvcount a fixed int and sendcount an array?
这是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()
正在发送存储在 *sendcounts
中的不同块大小的元素,那么为什么 recvcount
是一个固定整数而不是块大小数组?
而且由于它是一个固定整数,因此该值应该是多少。它应该等于 sendcount
数组的最大值吗?例如,如果我有
int sendcount[4] = {1,5,10,8};
recvcount
应该等于 10 吗?
sendcounts
指定要发送的实际块大小。 recvcount
指定本地接收缓冲区的大小,例如recvcount=sendcounts[rank]
.
详细来说它有点复杂:接收缓冲区的大小至少需要足够大以存储给定等级的块。如果涉及不同的类型,类型范围也很重要。
这是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()
正在发送存储在 *sendcounts
中的不同块大小的元素,那么为什么 recvcount
是一个固定整数而不是块大小数组?
而且由于它是一个固定整数,因此该值应该是多少。它应该等于 sendcount
数组的最大值吗?例如,如果我有
int sendcount[4] = {1,5,10,8};
recvcount
应该等于 10 吗?
sendcounts
指定要发送的实际块大小。 recvcount
指定本地接收缓冲区的大小,例如recvcount=sendcounts[rank]
.
详细来说它有点复杂:接收缓冲区的大小至少需要足够大以存储给定等级的块。如果涉及不同的类型,类型范围也很重要。