OpenMP和MPI混合程序比纯MPI更快吗?

时间:2013-11-04 21:30:07

标签: mpi openmp hpc

我正在开发一些程序而不是在4节点集群上运行,每个节点上有4个核心。我有一个非常快的OpenMP版本的程序只能在一个集群上运行,我试图使用MPI扩展它。由于我的经验有限,我想知道哪一个会给我更快的性能,OpenMP混合架构或仅MPI架构?我已经看到this slide声称混合版本通常无法执行纯MPI版本,但它没有提供支持证据,对我来说是一种反直觉。

BTW,我的平台使用infiniband来互连节点。

非常感谢, 鲍勃

1 个答案:

答案 0 :(得分:1)

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

该材料表明,仅MPI应用程序通常比混合应用程序更好或更好,尽管它们通常具有更大的内存要求。

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

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

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

  2. 负载平衡:每个*并行计算到序列化通信**阶段意味着同步障碍。此障碍迫使最快核心等待并行区域中的最慢核心。操作系统抢占(与其他系统进程共享时间),动态频率扩展等可能会影响最快/最慢的不平衡。

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

    要真正利用共享内存并行性的效率,最好的选择是尝试将通信与计算重叠,并确保所有进程之间的负载平衡,以便降低同步成本。

    然而,开发既负载均衡又不会造成大同步障碍的混合应用程序非常困难,而且现在有很强的研究工作来解决这种复杂性。