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

OpenMP和MPI混合程序比纯MPI快吗?,mpi,openmp,hpc,Mpi,Openmp,Hpc,我正在开发一些在4节点集群上运行的程序,每个节点上有4个内核。我有一个相当快的OpenMP版本的程序,它只在一个集群上运行,我正在尝试使用MPI扩展它。由于我的经验有限,我想知道哪一种会给我带来更快的性能,OpenMP混合体系结构还是仅MPI体系结构?我曾经看到过这样的说法,混合动力车的性能通常不能超过纯MPI车,但它没有提供支持证据,对我来说有点违反直觉 顺便说一句,我的平台使用infiniband互连节点 非常感谢, Bob共享内存通常比消息传递更高效,因为后者通常需要增加数据移动(将数据从

我正在开发一些在4节点集群上运行的程序,每个节点上有4个内核。我有一个相当快的OpenMP版本的程序,它只在一个集群上运行,我正在尝试使用MPI扩展它。由于我的经验有限,我想知道哪一种会给我带来更快的性能,OpenMP混合体系结构还是仅MPI体系结构?我曾经看到过这样的说法,混合动力车的性能通常不能超过纯MPI车,但它没有提供支持证据,对我来说有点违反直觉

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

非常感谢,
Bob

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

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

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

此类实现通常容易出现以下问题:

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

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

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

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


    但是,开发负载平衡且不会造成较大同步障碍的混合应用程序非常困难,目前有大量的研究工作来解决这一复杂性。

    这完全取决于您的MPI/OpenMP实现以及算法的设计(例如,MPI消息的数量和大小).为什么不分析这两种方法?@suszterpatt我知道,我在问一般意义上的问题,看看是否有任何关于两种不同方法的理论推理,一种方法肯定比另一种更好。这更像是快速排序优于冒泡排序?是的,这取决于实现,也取决于你真正想要什么,b但我们都知道快速排序在理论上更快。没有成熟的理论支持第一原理中的观点,即混合程序比纯程序更快(或更慢)。你将得到的唯一答案将来自实验。我可以根据自己的经验确认幻灯片。