1

我发现用于 MPI_scatter/MPI_gather 的时间随着工作人员数量的增加而不断增加(以某种方式呈线性),尤其是当工作人员跨越不同节点时。

我以为 MPI_scatter/MPI_gather 是一个并行过程,不知道是什么导致上述增加?有什么技巧可以让它更快,特别是对于分布在 CPU 节点上的工作人员?

4

2 回答 2

1

根级别必须将固定数量的数据推送到其他级别。只要所有等级都驻留在同一个计算节点上,该过程就会受到可用内存带宽的限制。一旦涉及更多节点,网络带宽(通常远低于内存带宽)就成为限制因素。

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

于 2013-07-12T23:28:51.653 回答
1

MPI_Scatter/Gather 的工作方式因实现而异。一些 MPI 实现可能会选择使用一系列 MPI_Send 作为底层机制。可能影响 MPI_Scatter 工作方式的参数是: 1. 进程数 2. 数据大小 3. 互连 例如,一个实现可以避免使用广播来发送/接收非常大的数据。

于 2013-07-12T17:24:40.147 回答