MPI_散射:散射顺序

MPI_散射:散射顺序,mpi,openmpi,Mpi,Openmpi,在我的工作中,我注意到,即使我将相同数量的数据分散到每个进程,从根进程向最高级别进程传输数据也需要更多的时间。我在分布式内存机器上测试了这个。如果需要MWE,我会准备一个,但在此之前,我想知道MPI_Scatter是否为低级别进程提供了特权。MPI标准没有这样说,因此MPI库可以自由地实现MPI_Scatter()关于哪个任务可能比其他任务更早返回的方式 例如,打开MPI可以进行线性或二项式散布(默认情况下,根据通信器和消息大小选择algo) 也就是说,所有数据都必须从根进程发送到其他节点,因此

在我的工作中,我注意到,即使我将相同数量的数据分散到每个进程,从根进程向最高级别进程传输数据也需要更多的时间。我在分布式内存机器上测试了这个。如果需要MWE,我会准备一个,但在此之前,我想知道MPI_Scatter是否为低级别进程提供了特权。

MPI标准没有这样说,因此MPI库可以自由地实现
MPI_Scatter()
关于哪个任务可能比其他任务更早返回的方式

例如,
打开MPI
可以进行线性或二项式散布(默认情况下,根据通信器和消息大小选择algo)

也就是说,所有数据都必须从根进程发送到其他节点,因此显然,一些节点将首先得到服务。如果根进程的秩为零,我希望秩最高的进程最终会收到数据(我不知道有哪个MPI库实现了拓扑感知的
MPI\u Scatter()
,但可能有一天会实现)。如果根进程没有秩零,那么MPI可能会在内部重新对秩进行编号(因此根总是虚拟秩零),如果实现了此模式,则接收数据的最后一个进程将是
(root+size-1)%size


如果从应用程序的角度来看,这是次优的,则始终可以选择以自己的方式重新实现
MPI\u Scatter()
(如果需要,可以调用提供的库
PMPI\u Scatter()
)。另一种方法是使用
MPI\u Comm\u split()
(使用单色)重新对列组进行编号,如果标准没有规定,则使用新的通讯器进行
MPI\u Scatter()

。凭直觉,我认为情况并非如此。我希望分散以树状方式(或以某种特殊/硬件加速的方式,取决于底层硬件)将所有数据发送到所有级别。99.9%确定它完全是实现定义的,并且对于OpenMPI,根据配置可能会非常不同。这背后有实际问题吗?一般来说,您谈论的是具有不同时钟的不同节点,因此没有定义良好的全局顺序。