Parallel processing MPI_分散冗余参数?

Parallel processing MPI_分散冗余参数?,parallel-processing,mpi,Parallel Processing,Mpi,我的问题很简单,MPI_散射函数的定义是: #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 #包括 void MPI::Comm::Scatter(

我的问题很简单,MPI_散射函数的定义是:

#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
#包括
void MPI::Comm::Scatter(常量void*sendbuf,int sendcount,
常量MPI::数据类型和发送类型,void*recvbuf,
int recvcount,const MPI::Datatype和recvtype,
int根)常量
“sendcount”和“sendtype”是否冗余? 在这种情况下,它可能发生:sendcount=重新计数

编辑: 也许这个问题需要澄清一下。我理解可能是因为,对于根来说,数据是一些“结构X”,而对于接收器来说,数据是一些“结构Y”,这在某种程度上也是有意义的(它都符合“Ok”)

如果是这样的话。。。我不明白为什么需要再次说明,预期接收的数据的总大小与发送的数据大小相同。如果这仅仅是一个铸造数据视图的问题,我只会做铸造。事实上,缓冲区是一个(void*)。

MPI_scatter()用于将消息以相等的方式断开,并在子节点和您自己的节点中处理每个消息。知道这一点:

“sendcount”和“sendtype”是否冗余

-如果sendCount是发送的元素数,sendType是这些元素的类型,那么这怎么可能发生呢。两者都包含不同的信息

关于最后一个问题:

在这种情况下,它可能发生:sendcount=重新计数


-当您想要对一系列数字进行排序时,可以向节点发送大小为N且类型为int的块。您需要相同但已排序的数据类型。

MPI允许发送端和接收端的两种数据类型不同,只要它们是由相同的基本数据类型构造的。在很多情况下,这很方便,例如,将矩阵的行从根进程分散到其他进程的列中。在C和C++中,发送和接收行是直接的,因为矩阵的存储器布局是行的。发送和接收列要求首先构造特殊的跨步向量类型。通常,这种类型是为指定数量的行和列构造的,然后在接收数据时必须提供
1
的计数


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

为什么“sendcount”和“recvcount”不同?这两个都是N。哦,“我罪过了”当前位置我一直在看电影比如“…ount=…”。我仍然不明白为什么添加两个额外的参数是必要的,如果所有参数都可以修复的话(事实上,它将是),那么执行cast.MPI将提供尽可能多的通用接口。它来自于科学和技术计算领域的人们,在科学和技术计算领域,通常使用具有多个参数的函数,而不是同一函数的多个不同版本。MPI上还有其他C++包装,它隐藏了“不必要”的参数(此外,当前MPI C++绑定被弃用,并且将在MPI 3中删除)。