1

让我们考虑 MPI 应用程序的以下简单场景:根进程广播(MPI_Bcast)一些参数(几十个字节 - 固定大小),然后所有节点开始执行一些计算,然后根收集结果(MPI_Gather- 可能非常大的数据集)。数据被root保存后,程序结束。

在什么情况下(进程数、延迟等)(如果有)使用使用虚拟星形拓扑创建的通信器会提供比使用更好的性能MPI_COMM_WORLD,为什么?通信器是否对实际通道使用延迟初始化(即仅在第一次需要时打开管道、套接字等)。这种行为实现是否依赖?

注意:我使用openmpi1.4.3-2的是纯 C。

4

1 回答 1

4

通信器拓扑是便利的映射功能,它们不需要改变实际通信发生的方式。即使在星形或任何其他图形拓扑中存在未连接的进程(在拓扑意义上),如果它们知道通信器中其他进程的等级,这也不会阻止它们相互发送消息. MPI 实现可能会使用拓扑作为提示来优化通信路径,但这会使它们成为非常复杂的代码片段,至少 Open MPI 在其集体算法中没有这样做(没有经过很好的测试,因此通常禁用hierarch的集合组件考虑硬件层次结构,但不考虑虚拟拓扑)。

如果给reorder=1通信器构造函数,拓扑可能会通过等级重新排序来影响通信。这使 MPI 实现可以自由地对进程等级重新排序,以便在给定下面硬件的物理拓扑的情况下,尽可能地将它们的物理位置与提供给构造函数的拓扑方案相匹配。有用于集体操作的具有专用网络的硬件平台。例如,IBM Blue Gene/P 有一个允许快速实施的全局中断网络MPI_BARRIER和一个加速某些集合操作(​​包括广播)的专用集合网络。但这些仅可用于MPI_COMM_WORLD- 后备软件实现用于任何其他通信器。

这种行为实现是否依赖?

是的,它取决于实现系统(对于支持多个硬件/通信系统的实现)。这也是您其余问题的答案。

于 2012-12-15T18:16:30.283 回答