项目概览

马克西米兰•卡茨和亚当•雅各布斯是美国石溪大学物理与天文 学系的博士研究生,他们力图通过研究恒星爆炸的成因来探察 难于捉摸的暗能量。卡茨研究两个恒星残骸的合并,而雅各布 斯专注研究另一种模式:一个恒星残骸靠万有引力从伴星吸积 物质并再次爆炸。

为此,卡茨和雅各布斯致力于发展一个计算方法用来研究Ia型 超新星的起源。雅各布斯使用由Fortran开发的软件MAESTRO 来研究双爆起源模型。那些代码针对恒性爆炸的不同阶段做了优化。

卡茨使用CASTRO软件,一个三维可压缩流体动力学代码,专 为研究恒星爆炸中的天体物理学流体流动而设计。MAESTRO 专们模拟亚音速流体流动,而CASTRO是一个更常见的可压缩 流体动力学代码,能够模拟MAESTRO不能胜任的超音速流体 流动。

“CASTRO和MAESTRO的微物理模块非常适合GPU加速,因为 它们只用到本节点上的已有数据,这意味着跑在具有多个节点 的超级计算上也不会增加复杂度”,雅各布斯说。“每个单元上的 数据计算都相互独立,因此它们可以容易地向量化和大规模并行。”

该团队积极加速代码,从而更多复杂的核反应集可以在三维 仿真中建模,这可能是本领域的一个巨大进步。“通常,只有 最简单的反应集能做三维模拟”, 雅各布斯说。“核反应,即使 是我们为提高计算效率而使用的最简单的反应,也要消耗一次 MAESTRO典型计算10-20%的时间,因此我们预期在加速器上 加速能够对该代码产生实质性的影响。”

挑战

研究人员面临两个主要挑战。第一,天体物理系统中的多种长 度尺度相差很大,但必须同时模拟。

第二,他们必须精确计算一个系统的重力场,该系统远离像地 球或太阳这样的良好球体,并且随时间快速变化。“这个操作计 算密集并且由通信驱动,严重制约扩展性差不多一个量级”,卡 茨说。“接下来我要尝试的事情之一就是将重力求解操作转换一 种表达形式,降低通信密度,代价是可能需要更多的FLOP(每 秒浮点运算)。”

该团队通过美国能源部激励计划使用位于橡树岭 领先计算设备处的泰坦超级计算机,泰坦的绝大 部分计算能力来自GPU。“为保持申请机时的竞 争力,我们必须找到一个高效利用GPU的方法” ,他说。

研究人员必须决定在GPU上编程使用哪种语 言。CASTRO和MAESTRO都建立在网格管理库 BoxLib之上,这个库设计了多层级C++和Fortran类,以便高效管理空间网格的构建和加密,网格 承载着计算区域上的数据。雅各布斯精通Open-MP、MPI和OpenACC。OpenACC是一种导语 式加速器编程模型,目标用户是那些非全职开发 软件的科学家、工程师以及其它领域的专家。卡 茨拥用丰富的OpenMP编程经验和适度的MPI经 验——这两种编程模型是BoxLib的根基。然而, 两位研究人员都没有多少CUDA经验。

“CUDA不适合,这是因为它与厂商和硬件绑定太 紧密”,雅各布斯说。“有些科学应用需要运行在 多台不同的超级计算架构之上,并要求能够利用 多代架构。对这些应用,CUDA的劣势超过了优 势。这就是我们为何偏爱OpenACC。”

“我们系统中的主要工作量通常可以表示为 空间单个格点上的独立循环,因此大部分并 行都是用OpenMP导语加速这些循环”,卡茨 说。

解决方案

该团队选择使用PGI的OpenACC编译器,PGI公

司走在OpenACC开发的前列。卡茨从向量化关 键模块之一开始——“状态方程”模块——该模块 的任务是逐点计算热力学属性。“学习如何高效 使用OpenACC导语和将该模块向量化花费两周 时间。还需要投入一两周时间调整代码,以便我 们可以实现、使用通信更加友好的重力求解器, 然后将它在GPU上加速。”

将反应模块加速之前,雅各布斯先熟悉一个简化 的原型模块。加速之后,观察到它比运行在16 核的传统多核计算机上快了4.4倍。在最优条件 下,将原型中学到的经验应用到在GPU上加速 MAESTRO的核反应模块,与运行在一个多核系 统上相比,整体性能应该会提高10%左右。

成果

现在他们有能力加速微物理计算,卡茨和雅各布 斯能够更快地运行更多有趣的科学仿真。

“如果我能成功编码实现这个重力方法并取得期 望的性能提升,它将解决我现在无法有效利用超 过1-2万核的困难”,卡茨说。“如果能够加速几 倍,我就能以更高的解析度研究这个系统,细致 观察最感兴趣的区域,从而查明它们是否会引发 一个热核爆炸。”

“在反应侧,提速的计算允许我们模拟更大的核 反应,计算开销与现在的简单网络模型相当”, 雅各布斯说。“这使们能得到更高科学精度的和 更感兴趣的模型。”

该团队讨论过将天体物理动力学求解器整体放到 GPU上的可能性,这种情形下,主机节点将主要 承担通信操作。

“我现在忙着重构CASTRO中的代码,以便在用 OpenACC加速时能直观一些”,卡茨说。“只完成 了针对GPU加速的第一步,我们团队正在重构代 码的第二部分,最终目标是在GPU上加速全部代 码。”