4

我正在开发一些程序,而不是在每个节点上有 4 个内核的 4 个节点集群上运行。我有一个相当快的 OpenMP 版本的程序,它只在一个集群上运行,我正在尝试使用 MPI 对其进行扩展。由于我的经验有限,我想知道哪一个会给我带来更快的性能,OpenMP 混合架构还是仅 MPI 架构?我看过这张幻灯片,声称混合型通常无法胜过纯 MPI 型,但它没有提供支持证据,而且对我来说有点违反直觉。

顺便说一句,我的平台使用 infiniband 互连节点。

非常感谢,鲍勃

4

1 回答 1

1

共享内存通常比消息传递更有效,因为后者通常需要增加数据移动(将数据从源移动到其目的地),这在性能和能源方面都是昂贵的。预计这一成本将随着每一代人而不断增长。

该材料指出,仅 MPI 应用程序通常与混合应用程序相当或更好,尽管它们通常具有更大的内存需求。

然而,它们是基于这样一个事实,即所示的大多数大型混合应用程序都是基于并行计算,然后是串行通信

这种实现通常容易出现以下问题:

  1. 非统一内存访问:在单个节点中有两个套接字是 HPC 中的一种流行设置。由于现代处理器的内存控制器在芯片上,一半的内存可以很容易地从本地内存控制器访问,而另一半必须通过远程内存控制器(即存在于另一个插槽中的内存控制器)。因此,程序如何分配内存非常重要:如果在序列化阶段保留内存(在最接近的内存上),那么一半的内核将遭受更长的主内存访问。

  2. 负载平衡:每个*并行计算到串行通信**阶段都意味着一个同步屏障。这种障碍迫使最快的核心在并行区域中等待最慢的核心。最快/最慢不平衡可能受操作系统抢占(时间与其他系统进程共享)、动态频率缩放等影响。

其中一些问题比其他问题更容易解决。例如,可以缓解多套接字 NUMA 问题,将不同的 MPI 进程放置在同一节点内的不同套接字中。

为了真正发挥共享内存并行的效率,最好的选择是尝试将通信与计算重叠,并确保所有进程之间的负载平衡,从而降低同步成本。

然而,开发负载均衡且不施加大同步障碍的混合应用程序是非常困难的,现在有强大的研究努力来解决这种复杂性。

于 2016-10-03T18:51:41.257 回答