gpt4 book ai didi

parallel-processing - MPI_Scatter 冗余参数?

转载 作者:行者123 更新时间:2023-12-01 12:50:47 62 4
gpt4 key购买 nike

我的问题很简单,MPI_Scatter函数定义是:

#include <mpi.h>
void MPI::Comm::Scatter(const void* sendbuf, int sendcount,
const MPI::Datatype& sendtype, void* recvbuf,
int recvcount, const MPI::Datatype& recvtype,
int root) const

'sendcount' 和 'sendtype' 是多余的吗?在这种情况下可能会发生:sendcount!=recvcount?

编辑:也许需要对这个问题进行一些澄清。我知道也许原因是,对于根来说,数据是一些“结构 X”,对于接收者来说是一些“结构 Y”,不知何故它也有意义(都适合“好”)。

如果是这样的话……我不明白为什么需要再次说明要接收的预期数据的总大小与发送的数据大小相同。如果只是转换数据 View 的问题,我只会进行转换。实际上,缓冲区是一个(void *)。

最佳答案

MPI 允许发送端和接收端的数据类型不同,只要它们是从相同的基本数据类型构建的即可。在很多情况下这会派上用场,例如将矩阵的行从根进程分散到其他进程的列中。在 C 和 C++ 中发送和接收行很简单,因为矩阵的内存布局是行优先的。发送和接收列需要首先构造一个特殊的跨步向量类型。通常这种类型是为指定数量的行和列构造的,然后在接收数据时必须提供 1 的计数。

还有许多其他情况 sendcountrecvcount 可能不同。还要注意 recvcount 指定要接收的消息的大小,而是指定接收缓冲区的容量,并且该容量可能是大于消息的大小。

关于parallel-processing - MPI_Scatter 冗余参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12522240/

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