GPU 编程 CPU 异同点_物美价廉: GROMACS 2018在GPU节点上的使用 (3)

该研究考察了在Linux集群上运行GROMACS2018进行分子动力学模拟时的最佳硬件配置。通过对不同计算节点的基准测试,发现GPU节点的性价比优于CPU节点,尤其是新版本的GROMACS更倾向于利用GPU。升级旧节点的GPU可以以较低成本获得接近全新硬件的性能。研究中对比了不同GPU和CPU组合,强调了GPU在处理能力平衡中的重要性,并提供了性能与成本的相关数据。
摘要由CSDN通过智能技术生成

■原文 More bang for your buck: Improved use of GPU nodes for GROMACS 2018, DOI: 10.1002/jcc.26011[1]■翻译: 刘玉杰; 校对: 李继存

摘要

我们确定了在Linux计算集群上, GROMACS 2018程序运行分子动力学(MD)模拟的最佳硬件. 因此, 我们在各种计算节点上对GROMACS性能进行了基准测试, 并将其与节点成本联系起来, 其中的成本可能也包括能源和冷却成本. 与我们早先使用GROMACS 4.6在2014年的硬件上进行的调查一致, 消费级GPU节点的性价比远高于CPU节点. 然而, 在GROMACS 2018中, CPU到GPU处理能力的最佳平衡更多地转向了GPU. 因此, 与针对旧GROMACS版本优化的节点相比, 针对GROMACS 2018及更高版本进行优化的节点具有更高的性价比. 而且, 向GPU处理的转移使得使用新GPU升级旧节点变得更便宜, 得到的性能与相近的全新硬件基本相同.

方法

本研究的主要部分使用了与2014年调查相同的两个基准输入文件(表1), 以便于新旧硬件和软件之间的比较.

软件环境

对GROMACS进行基准评估时, 使用了每个版本的最新版. 其他的所有基准测试均使用GROMACS 2018进行, 编译时将针对Intel CPU启用了AVX2_256 SIMD指令, 针对AMD CPU启用了AVX2_128 SIMD指令(表4除外, 其中使用了AVX_256以反映硬件功能). 此外, 由于4.6版本的SIMD内核不支持AVX2_256指令集, 我们使用了AVX_256并添加了 -mavx2 -mfma 编译器优化标志以便生成AVX2指令.

表4: GROMACS 2018的单节点性能. 类似表3, 但使用现代GPU升级了现有节点. 这里的性价比是根据性能提高(即, 升级GPU后的性能减去使用旧GPU的性能)和GPU成本计算出来的. 所有基准测试均使用CUDA 9.1, GCC 6.4, 多GPU设置使用了Intel MPI 2017. 为获得最佳性能, 除星号表示的之外, PME网格计算都卸载到GPU.
U处理器 Intel插槽×核主频
(GHz)
挂载GPUMEM
(ns/d)
RIB
(ns/d)
≈净价
(€)
MEM性价比
(ns/d/122 €)
RIB性价比
(ns/d/ 1530 €)
使用旧GPU的现存节点
1E3‐1270v21×43.568026.9*1.60
升级GPU
1E3‐1270v21×43.5208091.7464012.45.7
使用旧GPU的现存节点
2E5‐2670v2×22×102.5780Ti×2104.8*6.70
升级GPU
2E5‐2670v2×22×102.51080×2163.47.88408.51.9
2E5‐2670v2×22×102.51080Ti×2208.410.2122010.44.3
2E5‐2670v2×22×102.51080Ti×4361.217.9244012.87
使用旧GPU的现存节点
2E5‐2680v2×22×102.8K20Xm×283.2*50
升级GPU
2E5‐2680v2×22×102.81080Ti×2212.710.1122012.96.4
2E5‐2680v2×22×102.82080×2237.711.5128014.77.8
2E5‐2680v2×22×102.82080×4409.620.3256015.69.2

在没有或只有一个GPU的节点上, 使用了GROMACS的内置线程MPI库, 而在多GPU节点上使用了Intel MPI 2017. OpenMP支持始终开启. 此外, GROMACS还链接到便携式硬件局部性库hwloc[23]1.11版. 在没有GPU的节点上, PME所需的FFT在CPU上计算. 因此, 我们使用使用了FFTW 3.3.7[24], 编译时GCC 4.8启用了选项 --enable-sse2 --enable-avx --enable-avx2, 这些推荐选项可以获得GROMACS的最佳性能. 在GPU节点上, CUDA cuFFT自动与PME卸载一起使用.

所有硬件都在相同的软件环境中进行测试, 使用Scientific Linux 7.4作为操作系统公共映像启动节点(Gold6148/V100节点除外, 它运行SLES 12p3, 进行GROMACS评估基准测试时使用了Ubuntu16.04服务器版).

使用GCC 5.4和CUDA 8.0或GCC 6.4和CUDA 9.1编译的GROMACS用于主要研究, 而在GROMACS评估部分使用GCC 7.3和CUDA 10进行编译.

编译器选择和CUDA版本的影响

为了评估所选GCC/CUDA组合对性能的影响, 我们在完全相同硬件上运行了MEM基准测试, 但同时使用了两种CUDA/GCC组合. 在具有两个E5-2670v2 CPU和两个GTX 1080Ti GPU的节点上, 对我们的MEM基准测试, 在GCC 6.4/CUDA9.1上比GCC 5.4/CUDA8快3.5%(10次运行平均). 在配备GTX 1070的E3-1270v2 CPU上, 大约快4%, 而在配备E5-1650v4和GTX 980的工作站上大约快1.5%. 为了在比较硬件时校正这种影响, 使用较旧的GCC/CUDA组合所测量的性能会乘以1.025.

使用CUDA 9.1和CUDA 10.0之间的性能差异是以类似的方式确定的, 结果小于0.5%, 我们没有校正这个小的影响.

GROMACS性能评估基准

对于GROMACS评估基准测试(图7和8), 使用了专门为评估不同代码版本的性能而设计的数据收集协议. 所有运行所用的GPU都连接到所用CPU的PCI总线(或者, 在图8中当使用两个CPU时, 连接到运行主线程所在的第一个CPU). 每个核心使用两个CPU线程, 通过附着线程的HyperThreading进行性能分析.

ee4f18fc43b7bbe8dae1d61ee2f09ce8.png

图7: GPU节点上GROMACS 4.6-2018版的性能的演变. 在所有实例中, 短程非键相互作用都卸载到GPU, 对于2018版, 也可以将PME网格计算部分卸载到GPU(最顶部的黑条). Tesla V100和GTX 1080 GPU挂载到一个带有两个Xeon E5-2620v4处理器(2×8核)的节点上. Tesla K80 GPU挂载到一个带有两个Xeon E5-2620v3处理器(2×6核)的节点上.

574f4ea8f4d0a2df73c5de8f54bbb7aa.png

图8: GROMACS 2018性能与每个GPU使用CPU核心的关系. GTX 1080, RTX 2080和Tesla V100卡安装在带有Xeon E5-2620v4处理器(2×8核)的服务器节点上, 而Tesla K80安装在带有两个E5-2620v3处理器(2×6核)的节点上. 实线表示PME卸载到GPU时的性能, 而带有较小符号的虚线表示使用CPU计算PME时的性能(水平轴给出核心数目).

为了评估每个GPU所用CPU核心数对性能的影响(图8), 我们使用的CPU仅在核心数上有所不同, 其他情况完全相同. 我们使用单个CPU模型来模拟这种情况, 也就是运行时只使用CPU可用核心的一部分. 然而, 对于当前的CPU, 当只使用一部分核心时, 会增加工作核心的时钟频率. 这样进行比较就不公平了. 因此, 我们要确保未运行基准测试的核心同样保持忙碌, 这是通过在这些核心上同时运行仅使用CPU的GROMACS(使用与基准测试相同的输入体系)达到的. 这样所有核心都使用大致相同的时钟频率, 而与基准测试运行的核心数无关[^1]. 评估时, GROMACS基准测试会重复运行三次, 取平均值.

^1 注意, 使用这种方法, CPU上的两个GROMACS运行会共享最后一级缓存. 因此, 所得测量结果与关掉不使用的CPU, 并将所有运行CPU的主频固定为同一个值的情况下所得的结果并不完全等价. 后一种做法提供了具有少数核心, 不合实际的缓存量情况下的基准.

最后, 除测试之外的所有编译和运行设置都保留其默认值或自动调整值(包括配对搜索频率和CPU-GPU负载均衡).

测定节点的性能

可以通过各种方式评估不同型号节点的性能. 而且, 不同的基准测试会给出不同的硬件排名. 我们对基准测试流程和由此得到的硬件排名的要求是: (1) 基准测试应该与预期的硬件使用密切相关; (2) 整体计算能力(例如, 将两个节点的硬件组件组合到一个节点中), 这可以节省价格和机架空间, 不应该受到限制.

我们提出第二个要求的动机如下: 假设你将 (a) 两个单插槽节点(各有一个CPU X和一个GPU Y)与 (b) 一个双插槽节点(带有两个CPU X, 两个GPU Y)进行比较, 预计(a)和(b)的总体性能是相同的, 因为两个独立的模拟总是可以在(b)上运行.

符合这两个要求的基准测试流程是: 在具有N个GPU的节点上并行运行N个模拟, 每个使用1/N的可用CPU核心或硬件线程, 并报告整体性能, 也就是说单个模拟的性能之和. 使用GROMACS的-multidir命令行参数很容易完成这个流程. 因为在初始阶段, 负载均衡机制尚未找到其最佳状态, 因此, 对总共ntot个时间步的性能测量, 我们会排除前n个时间步. 对于MEM和VES基准测试, 我们使用n=15k, ntot=20k, 而对于RIB和BIG基准测试, 我们使用n=8k, ntot=10k.

在只有一个GPU的单插槽节点上, 使用与可用核心(或硬件线程)一样多的OpenMP线程的单个进程通常是最快的, 因为可以避免MPI和区域分解引入的开销[16, 17]. 因此, 先前的调查和本研究的单GPU基准测试是可以进行比较的, 而在多GPU节点上, 新的基准测试流程预计会得到比2014年的单一模拟性能更高的整体性能.

功耗测量

我们使用Linux程序ipmi-sensors 1.5.7版(http://www. gnu. org/software/freeipmi/)和ipmitool 1.8.17版(https://github. com/ipmitool/ipmitool)测量节点的功耗. 在某些节点上, 例如在不支持通过ipmi读取功率的Ryzen工作站上, 我们使用了VOLTCRAFT Power Monitor Pro. 在所有情况下, 我们计算了60个单独的功率数据的平均值, 功率数据之间的时间差为1秒. 在测量功率期间, 使用相同的设置运行RIB基准测试以便获得性能数据.

使用Martini进行粗粒化模拟

为了检查全原子基准测试的结果可以在多大程度上用于粗粒化模拟, 我们增加了使用Martini[25, 26]力场的基准测试. 对于Martini力场, 粒子密度低于全原子力场的, 静电相互作用通常不使用PME计算. 因此, 尚不清楚粗粒化模拟的最佳硬件是否与原子模拟的相同.

为了便于与全原子系统进行比较, 我们选择了粒子数目相近的粗粒化系统, 见表1. 小的Martini基准系统 VES 是水中的POPE囊泡, 总共有72,076个粒子, 尺寸与MEM原子基准系统相当. 它是www.cgmartini.nl提供下载的可用示例之一[21]. 大的Martini基准系统 BIG 是根据哺乳动细胞质膜示例体系创建的[27]. 为了得到最终的大基准系统, 我们用gmx genconf在原始膜的x和y方向进行2×2的扩展, 得到了具有2,094,812个粒子的最终膜体系, 因此其尺寸与RIB原子基准系统相当.

根据使用GPU进行Martini模拟的建议, 我们使用了New-RF模拟参数设置[28, 29]. GROMACS自2018版起, 引入了双配对列表算法(见图5C), 我们将邻区搜索间隔从20(New-RF参数设置所用)增加到50步(内部配对列表存在周期为4步)以提高性能.

参考

[1] More bang for your buck: Improved use of GPU nodes for GROMACS 2018, DOI: 10.1002/jcc.26011: https://onlinelibrary.wiley.com/doi/full/10.1002/jcc.26011

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值