混合计算:共享和分布式内存的优势合并

2014年3月6日

以前博客系列,我的同事Pär在共享和分布式内存平台上使用COMSOL多物理学描述了并行数值模拟。今天,我们讨论了这两种方法的组合:混合计算。我将尝试对混合计算和建模的各个方面进行一些启示,并展示Comsol Multiphysics如何使用混合配置以挤出并行平台上的最佳性能。

引入混合计算

近年来,通过合并最新的多项技术,集群系统变得越来越强大。平行性现在在几个层面上传播。庞大的系统必须处理各个节点,插座,核心甚至向量单元(在短矢量或1D数据阵列上执行操作,而不是标量值或单个数据项的操作)。

此外,内存系统也将分为几个级别。随着这些层次结构变得越来越深,更加复杂,编程和执行模型需要反映这些嵌套的配置。事实证明,仅处理一个单身的编程和执行模型。因此,计算变得越来越多杂交种

核心定律和集群

多次计算核心无处不在,每个人都需要处理并行性。随着时钟频率停滞在高水平的2-5 GHz左右,只能通过添加越来越多的核心来满足计算能力的不断增加。众所周知摩尔定律已经变成了推论核心定律- 指出每个死亡区域的核心计数将继续呈指数增长。

这种开发的直接结果是,由于物流,每个核心的资源(例如,缓存内存和内存通道的数量)将变得较小。经典CPU型的最新多项化身具有多达16个内核,但最多只有四个内存频道。

通常,几个多核CPU提供了高功能的共享内存节点,这些节点以gigaflop/s的形式带来了令人印象深刻的计算能力(即每秒十亿个浮点操作)。然后将这些共享内存节点中的几个通过高速互连集成到簇中,以(giga/tera/peta)flop/s和内存能力提供几乎无限的资源。唯一的限制是您的IT部门的预算和底层空间。

如今,集群系统需要拥有100,000多个内核才能在最近的Top500列表

达到极限

群集表示分布式内存系统,其中通过消息传递在节点之间发送消息。在这里,消息传递接口(MPI)具有多个开源和商业实施是DefaTso标准。通常,在节点内,OpenMP用于共享内存编程。

然而,数值实验很容易揭示多核平台的局限性:饲养野兽越来越困难。简而言之,很难足够快地向核心获取更多的数据,以使它们忙碌和误解数字。基本上,您可以说Flop可以免费使用,但您必须关注计算强度,即每个数据元素的翻牌数 - 算法的特征。计算强度为可实现的插槽/s速率提供了上限。

如果计算强度在问题大小上线性增加,则带宽不会限制性能。但是,有限元数值模拟的典型操作是稀疏的矩阵矢量类型,它是带宽界限的,并且带宽通常与多核心系统中的内存通道数成正比。一旦可用的内存带宽饱和,越来越多的内核就没有附加值。这就是为什么在多核CPU和共享内存平台上加速的原因通常会饱和,因为内存流量已经处于最大级别,即使并非所有内核都用于计算。另一方面,群集系统具有增加累积带宽,因此具有更好性能的额外好处。(有关流基准示例的带宽限制的更多详细信息这里

在硬件方面,已经尝试通过引入层次结构来减轻带宽的限制缓存。这些范围从小型1个缓存,仅限于只有几百kb的内存大小的单个核心,再到大量3级缓存,在几个内核之间共享,最多有几十个内存的内存大小。缓存的目的是使数据尽可能接近核心,以便重复使用的数据无需一遍又一遍地传输。这消除了内存通道的一些压力。

即使是单个多层处理器本身也可以带来嵌套的内存层次结构。但是,将几个多核心处理器包装到多个插座中,可以用不一致的内存访问(numa)。换句话说,应用程序数据的某些部分存储在内存本地化到核心,其中一些数据存储在遥控器位置。因此,数据的某些部分可以非常快地访问,而其他访问的潜伏期更长。这意味着正确放置数据和计算任务的相应分布对于性能至关重要。

意识到绩效的层次结构

我们了解到,共享内存系统构建了核心和内存的层次结构系统,并且需要充分了解这些层次结构的编程模型,算法和实现。由于共享内存节点的计算资源受到限制,因此可以通过通过分布式计算中的快速互连网络连接几个共享内存节点来添加其他功能。

为了使我们以前的类比从共享内存分布式内存计算博客文章,我们现在正在使用可变数量的会议位置来表示集群,每个位置都提供一个带有大表格的会议室来表示共享内存节点。

如果要完成的整体工作越来越多,会议经理可以致电公司的其他地点寻求帮助。假设会议室位于波士顿,旧金山,伦敦,巴黎和慕尼黑。这些远程位置代表分布式内存过程(MPI进程)。经理现在可以按需包括新的位置,例如添加斯德哥尔摩,或者在混合计算方面,她可以设置每个共享内存节点(即每个会议室位置)的其他流程(即会议表)。

每个会议室的位置(过程)会议室的桌子上有一部电话,员工可以使用该电话来调用任何其他位置(另一个过程)并询问数据或信息(消息传递)。当地的工作人员(有限的资源)正坐在每个会议桌旁的特定位置。会议桌上的每个员工都代表线这有助于在会议室桌上解决任务。

在表格上,本地数据可在报告中获得(1级缓存),在文件夹中(2级缓存),在柜子内部的文件夹中(3级缓存),在同一楼层的图书馆中(主内存),或在地下室的存档中提交(硬盘)。几个助手(内存通道)正在建筑物中跑来跑去,以获取新文件夹,并附上图书馆或档案中的请求信息。助手的数量有限,他们只能同时携带有限数量的文件夹(带宽)。

如果没有更多可用的助手可以为他们带来足够的数据,那么在桌子上有更多的人不会增加任何价值。很明显,会议经理需要确保桌上可用的工作所需的数据,并且房间中的所有员工都可以有效地解决给定问题的解决方案。她还应确保通过桌子上的电话打电话给其他会议地点的电话数量至少保持在桌子上。就数字而言,实现应为层次结构,应保留数据,并且应将通信量保持在最低限度。

会议位置之间的电话表示过程之间的MPI调用。在会议室桌上,应采用共享的内存机制。总共需要分布式内存(MPI)和共享内存(OpenMP)的完美相互作用。

混合集群配置的示例

让我们仔细看看一些可能的群集和核心配置。在下面的测试基准模型中,我们研究了一个由三个共享内存节点组成的小群集。每个节点都有两个插座,每个插座中都有一个四核处理器。总核心计数为24。每个处理器都有一个本地内存库,还说明了主内存的NUMA配置。

现在,我们测试了该群集上配置三个,六个,十二或二十四个MPI进程的情况。使用三个MPI进程,我们每个节点有一个MPI进程和每个MPI进程的八个线程,可以通过节点内的共享内存/OpenMP和节点的两个插座进行通信。在六个MPI过程中,我们每个插座将有一个MPI过程,即每个处理器一个。然后,每个MPI过程都需要四个线程。十二个MPI过程的第三个可能性是每个处理器设置两个MPI进程,每个处理器各个两个线程。最后,我们可以在系统上的每个核心测试一个MPI过程,总计为24 MPI过程。这是非杂交的情况,不需要共享记忆并行性,并且所有通信都是通过分布式内存发生的。

您认为哪种配置是最好的配置?

插图用三个共享内存节点在群集上描述不同的MPI配置
群集上的不同MPI配置,其中三个共享内存节点由两个插座组成,每个节点都带有四核处理器和本地内存库。

为什么要混合?

为什么不使用单个编程和执行模型并忽略层次结构核心和内存配置?首先,这是因为共享内存(OPENMP)机制不能在具有标准安装的标准类型系统上全球使用(没有世界跨度表可共享数据)。

那么,为什么不在所有内核上全球使用消息 - 具有如上示例中的24个MPI过程呢?当然是可能的;您可以在同一共享内存节点上的内核之间使用消息通话。但这意味着,从上面的类比,每个员工都将拥有自己的电话,并且必须在全球所有其他员工打电话。订婚的信号或被搁置的人会出现问题,因此不起作用。

实际上,实际情况更为复杂,因为现代MPI实现非常了解层次结构,并修剪了使用共享的内存机制进行本地通信。MPI的弊端之一是,内存资源在参与过程的数量中二次浪费。这样做的原因是,在可以在过程之间发送实际消息之前,在存储数据(并可能重复)的地方设置了内部缓冲区。106核心,这需要1012单个全局通信调用的内存缓冲区(如果MPI实现不是层次结构 - 意识到)。在混合计算中,MPI过程的数量通常低于核心计数 - 在内存和数据传输方面保存资源。

使用混合模型的另一个大优点是,许多机制(例如数据放置,线程固定或负载平衡,仅举几例)都需要程序员的一些专门操作。混合模型提供了一种更广泛的工具来表达这些细节。它具有内存的全局和离散视图的优势。考虑混合openMP + MPI模型是一种自然的选择,因为它符合记忆和核心配置的混合结构,如图所示。

最重要的是,混合模型具有灵活性和适应性,可帮助减少资源的开销和需求。就有限元建模而言,数据和任务中的层次结构通常可以从物理模型,其几何形状,算法和所使用的求解器中得出。然后可以将这些层次结构转换为共享和分布的内存机制。

当然,混合模型还结合了共享内存和分布式计算的陷阱,最终变得更加复杂。但是,最终结果值得付出努力!comsol多物理学提供复杂的数据结构和算法,在很大程度上代表和利用多层次并行性。它同时支持共享内存和分布式内存,用户可以通过一组参数来调整两者的交互,以获得最佳性能。

基准测试您的模型和系统

毕竟,现在是时候将概念与真实模型联系起来了。我想您很好奇地调查在您部门的计算服务器和簇上并行运行Comsol多物理时的可扩展性,速度和生产率提高。

为了获得适当的结果,关注问题大小非常重要。共享内存节点上的子问题的大小必须足够大,以使每个线程都能获得合理的工作,并且每个过程的计算比率与过程之间通过消息之间通过消息交换的数据量足够大。正如帕尔(Pär)在他早些时候提到的那样博客文章,至关重要的是要考虑问题是否完全可行。例如,如果设置模型时的主要努力致力于计算长时间步进的系列(可能会持续数小时),但是每个时间步骤的问题大小并不大,那么在渐渐升级时,您将不会看到显着的好处增加其他节点和核心。

我鼓励您尝试混合模型的各种配置,即使您只有一台共享存储器。

混合可扩展性研究

在此处介绍的测试场景中,我们考虑了一个结构力学模型,该模型代表一个十个辐条轮辋,其中模拟了轮胎压力和负载分布。

轮辋的型号和子模型
轮辋及其相应的子模型的模型。

我们的仿真在上面提到的三个计算节点上运行,每个节点都有两个插座,带有四核IntelXeon®E5-2609处理器,每个节点为64 GB RAM,其中32 GB与处理器相关。节点与(相当慢的)千兆以太网连接互连。总共,我们在这台特定机器上有24个内核。

在下图中,我们根据混合模型配置比较可以每天运行的该模型的模拟数量。我们考虑运行的1、2、3、6、12和24 MPI过程的情况。这导致1、2、3、4、6、8、12、16和24个活动芯,具体取决于配置。图中的每个栏表示nn x np) - 配置,哪里nn是过程的数量,NP是每个过程的线程数,以及nn*np是活动芯的数量。将棒分为具有相同活性核心计数的块,其中其配置在棒的顶部列出。

该图表明,与活动核的数量相比,性能会增加。我们看到不同配置的微小变化。当使用24个活动内核达到完整的系统负载时,我们发现最好的配置是每个插座分配一个MPI进程(即总共六个MPI进程)。具有混合过程线程配置(情况6×4)的三节点系统上的性能和生产力增长是单个共享存储节点(情况1×8)的性能的两倍以上。它也比完全分布的模型(情况24×1)好几乎要好30%,该模型使用相同数量的核心。

当将其与其相邻的完全分布的配置(情况12×1)进行比较时,我们看到,尽管核心数量增加了一倍,但性能没有真正的增益。这是因为慢慢的千兆以太网网络已经在12个MPI过程中非常接近其极限。因此,更多的MPI过程无益。当比较12×1和12×2个配置时,情况有所不同,其中每个过程的螺纹数与活动核的数量加倍。这基本上意味着在这种情况下,通过以太网的通信量不会增加。

用于基准使用混合模型中不同配置的车轮边缘的结构力学模型的图表
使用混合模型中的不同配置对轮辋的结构力学模型进行基准测试。Y轴通过该模型的模拟总数可以在一天内运行。条表示不同的配置nn x np,在哪里nn是MPI过程的数量,并且NP是每个过程的线程数。

在comsol多物理学中设置混合动力运行

在并行混合模式下运行comsol多物理时,您将有各种可能性调整所使用的过程和线程的可能性。有些设置可以在多核集群计算部分偏爱对话或集群计算子节点的子节点学习模型构建器中的节点。您可以微调设置集群计算子节点的子节点作业配置节点,您可以在群集计算中指定要使用的(物理)节点的数量。使用下拉菜单设置窗口,您有其他选择,例如每个主机的过程数量或节点粒度,该过程决定是每个节点,插座还是核心的一个过程。

每个过程使用的线程数是自动设置的。comsol多物理始终利用可用核的最大数量,即,每个过程的核心数设置为节点上可用核的数量除以节点上的过程数量。您可以通过设置每个过程的核心数量处理器数量在里面多核部分优先对话与请求的价值。

在Linux系统上,您有命令行选项-nn对于过程数,-np用于覆盖每个进程的自动确定的线程数,以及选项-nnhost这设置了每个主机的过程数量。自然选择nnhost为1或每个节点的插座数。

下一步

  • 有关其他选项,用例和示例,请参阅comsol多物理文档。
  • 我们的最后一篇文章混合建模博客系列将是关于批处理的主题。

评论(1)

发表评论
乐动体育app
加载...
加文普林格
加文普林格
2015年3月27日

您还可以评论-numasets标志吗?

探索comsol乐动体育赛事播报博客