2013-07-11 132 views
1

随着工作人员数量的增加,我发现用于MPI_scatter/MPI_gather的时间不断增加(某种程度上线性),特别是当工作人员跨越不同节点时。如何提高MPI_scatter/MPI_gather的速度?

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

+3

您正在使用哪种MPI实现?这个工作是什么规模(等级数量和节点数量)?节点之间的互连是什么?在分散/聚集中移动了多少数据? –

+1

最重要的是,您是否也随着工作人员数量的增加而增加总数据的大小?如果是这样,那么瓶颈将最终成为根进程的I/O带宽(可能是它的节点的通信网络)。 – Zulan

回答

1

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

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

1

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