如何提高MPI_分散/MPI_聚集的速度?

如何提高MPI_分散/MPI_聚集的速度?,mpi,Mpi,我发现,随着工作进程数量的增加,用于MPI_分散/MPI_聚集的时间不断增加(某种程度上是线性的),特别是当工作进程跨越不同节点时 我认为MPI_分散/MPI_聚集是一个并行过程,不知道是什么导致上述增加?是否有任何技巧可以使其更快,特别是对于分布在CPU节点上的工作人员而言?MPI_分散/聚集的工作方式因实现而异。一些MPI实现可能会选择使用一系列MPI_发送作为底层机制。 可能影响MPI_散射工作方式的参数包括: 1.进程数 2.数据大小 3.互连 例如,一个实现可以避免对发送/接收非常大数

我发现,随着工作进程数量的增加,用于MPI_分散/MPI_聚集的时间不断增加(某种程度上是线性的),特别是当工作进程跨越不同节点时


我认为MPI_分散/MPI_聚集是一个并行过程,不知道是什么导致上述增加?是否有任何技巧可以使其更快,特别是对于分布在CPU节点上的工作人员而言?

MPI_分散/聚集的工作方式因实现而异。一些MPI实现可能会选择使用一系列MPI_发送作为底层机制。 可能影响MPI_散射工作方式的参数包括: 1.进程数 2.数据大小 3.互连
例如,一个实现可以避免对发送/接收非常大数据的极少数列组使用广播。

根列组必须将固定数量的数据推送到其他列组。只要所有列组都位于同一计算节点上,该进程就受到可用内存带宽的限制。一旦更多的节点参与进来,网络带宽(通常远低于内存带宽)就成为限制因素


此外,发送消息的时间大致分为两部分-初始(网络设置和MPI协议握手)延迟,然后是物理传输实际数据位所需的时间。由于数据量固定,总物理传输时间保持不变(只要传输类型和带宽保持不变),但随着数据分散到或收集到的每个新列组,会增加更多的设置/延迟开销,因此,完成操作所需的时间呈线性增加。

您使用的是什么MPI实现?作业的规模(列组数和节点数)是多少?节点之间的互连是什么?在分散/聚集中移动了多少数据?最重要的是,您是否也会随着工作人员数量的增加而增加总数据的大小?如果是这样,那么瓶颈最终将是根进程(可能是其节点的通信网络)的I/O带宽。