我发现随着工作人员数量的增加,用于MPI_scatter / MPI_gather的时间不断增加(以某种方式线性增加),尤其是当工作人员跨越不同的节点时。
我认为MPI_scatter / MPI_gather是一个并行进程,并想知道导致上述增加的原因是什么?是否有任何技巧可以使它更快,特别是对于跨CPU节点分布的工作人员?
答案 0 :(得分:1)
MPI_Scatter / Gather如何工作因实现而异。一些MPI实现可以选择使用一系列MPI_Send作为底层机制。 可能影响MPI_Scatter工作方式的参数是: 1.流程数量 2.数据大小 3.互连 例如,实现可以避免对发送/接收非常大的数据的非常少量的秩使用广播。
答案 1 :(得分:1)
根级别必须将固定数量的数据推送到其他级别。只要所有等级都驻留在同一计算节点上,该过程就受到可用内存带宽的限制。一旦涉及更多节点,通常远低于内存带宽的网络带宽就成为限制因素。
此外,发送消息的时间大致分为两部分 - 初始(网络设置和MPI协议握手)延迟,然后是物理传输实际数据位所需的时间。由于数据量是固定的,总物理传输时间保持不变(只要传输类型,因此带宽保持不变),但是数据被分散到的每个新等级都会增加更多的设置/延迟开销。从中收集起来,因此完成操作所需的时间呈线性增长。