一、前言
去年想写一篇关于机器硬件参数对仿真/数值模拟影响的文章,但阿程一直没抽出时间。今天将之前积累的装机经验做一个分享,供大家参考,如有需要数值模拟装机的朋友也可跟我联系,有偿提供服务。
二、影响仿真/数值模拟的硬件因素
2.1 CPU
CPU 的类型、基频、缓存、CPU 数量、每个 CPU 的内核数均会对仿真模拟产生影响。下面针对常见的几个因素给出一些配置建议。
2.1.1 CPU类型
高端 CPU(如英特尔® 至强® Gold 和 Platinum 或者 AMD® EPYC®)处理器采用 CPU 到 CPU 互连技术,使每台计算机支持多个 CPU,并允许 CPU 之间相互通信,以访问大量内存。这些处理器具有最大内存带宽,能够在内存与处理器之间来回快速传输大量数据,这是它们在运行有限元和离散元软件时的主要优势。高端 CPU 应在双 CPU、甚至四 CPU 或八 CPU 配置中使用。如果您需要寻址大量内存,或者计划连续并行运行多个仿真,则此类 CPU 是最理想的选择。在求解单个模型时,性能将随着 CPU 数量的增加而提高,但相对性能的提高取决于模型的大小。在多 CPU 系统上求解较大模型时,速度提升更快。建议科研经费充足且已经在博士后工作站工作的朋友优先考虑此档配置的CPU。
中端 CPU(如英特尔® 至强® W 或 AMD® Ryzen™ Threadripper™)处理器没有 CPU 到 CPU 互连结构,因此对于单 CPU 计算机来说是不错的选择。它们具有与高端系统相当的时钟速度和内核数,建议科研经费不是很多的情况下优先考虑此配置,即使计算的模型较大时也能有不错的表现。
英特尔® 酷睿™ 处理器等消费级 CPU 可以具有非常好甚至更加出色的性能,在求解小内存模型时体现尤其明显。建议还在攻读硕博学位的朋友不要好高骛远,优先考虑此档位配置即可。
2.1.2 时钟频率
较高的时钟频率通常会从软件的各个方面提升性能速度。如果两台计算机的所有其他硬件规格都相同,则它们之间的相对性能主要取决于时钟频率。
2.1.3 高速缓存
高速缓存直接内置在处理器中,缓存越大越好。在所有其他因素都相同的情况下,缓存较大的机器将表现出更好的性能。
2.1.4 内核数
处理器中的内核越多,一次可以执行的并行线程就越多,这就是多线程处理。仿真软件将自动利用所有可用的内核,但这需要计算成本。并行使用过多内核通常只用于求解相对较小的模型,而且这样做会导致速度降低,有些模型和老版本的仿真软件受限于内核的单线程性能控制。一般来说,六核或八核系统是比较好的全方位选择,但是性能核越多肯定越好,这在并行运行多个模型或工况时尤其如此。
2.1.5 双精度浮点算力
说完以上四点,就可以谈谈CPU的双精度浮点算力了。对于数值模拟计算,主要看CPU的双精度浮点算力(FP64),CPU核心越多越好,主频越高越好。峰值浮点算力的计算公式为:
注:单CPU的双精度浮点算力峰值 = 核数 × 单核主频 × CPU单个周期双精度浮点计算次数
其中CPU单个周期双精度浮点计算值取决于SIMD指令集合,SIMD指令集合包括SSE、SSE2、SSE3、AVX、AVX2、AVX512等,各指令集相应的单周期浮点计算次数见下表。
指令集 | 每时钟周期单精度浮点计算次数 | 每时钟周期双精度浮点计算次数 |
---|---|---|
SSE(128-bit) | 8 | 4 |
AVX(256-bit) | 16 | 8 |
AVX2(256-bit) | 32 | 16 |
AVX512(512-bit) | 64 | 32(FMA=2) 16(FMA=1) |
建议选择带AVX2或者AVX512指令集的CPU,双精度浮点能力更强。
这里再提一嘴软件优化:intel有MKL数学核心函数库,因此大多数科学计算软件对intel优化更好,在核心数目相差不大的情况下,建议优先选择intel的CPU。但是,在HEDT平台和服务器领域,同价位下AMD有更多的物理核心,可以靠无脑堆核心数量获得更高的算力。
2.2 内存
内存也是一个极其重要的影响因素。求解模型需要有足够的物理内存 (RAM) ,并且内存容量不够会直接影响计算结果的准确性。一旦物理内存耗尽时,系统将自动启用虚拟内存。由于虚拟内存位于硬盘上,因此运算效率会大大降低,并且出错率极大增加。
2.2.1 内存容量
上图显示了以有限元问题求解为例的几个求解不同三维有限元问题时所需的内存量。内存的用量与计算模型的大小有关,建议不论是有限元软件还是离散元软件,均以自由度(DOF)来进行大致的判断。而自由度涉及多方面因素,包括网格(颗粒)数量,物理场(因变量)数量,形参单元阶次(维度)等。
以上图为例,一台计算机具有1个 CPU四个内存通道,每个通道有两个插槽,总共有 8 个开放的 DIMM 内存插槽。提升性能的最佳做法是使用一根 8 GB 内存条填充所有八个插槽。这样做的缺点是无法进行扩展,如果后期需要内存扩容,则需要购买所有新的内存。次佳的方法是为每个内存通道选配一根 16 GB 内存条。性能可能略低于最佳配置,但通过再购买四个 16 GB 内存条,安装的内存可以增加一倍,因此这种配置总体上是最好的。纯粹就可扩展性而言,最佳选择是安装单个 64 GB 的内存条,因为这样预留出的插槽数量是最多的。下方的示意图对这个例子(一堆废话)进行了汇总。
因此确定内存容量最好的办法就是拿几个自己已经熟练的项目跑一下,打开你的任务管理器看看内存占用是多少。
2.2.2 内存频率
内存频率在有些特殊的计算场景中也会影响计算效率,比如在CFD仿真中,计算效率的瓶颈往往在内存带宽上,而内存带宽和通道数、频率之间呈正相关,所以CFD用户优先考虑用 DDR5 内存的平台,或者 HEDT 四通道平台,而在未来 HEDT也可能上 DDR5。
2.3 硬盘
如果模型不大,普通家用M.2固态就足够了;如果做特大项目得需要带独立缓存的高性能PCIE5.0固态,原因如下:
(1)后处理文件特别大,硬盘读写性能不行的话打开文件加载时间会很久。
(2)网格/颗粒特别多的工况下,比如动态网格法/三维圆盘劈裂试验等,内存经常不够用,需要部分硬盘空间来充当虚拟内存,此时固态硬盘的读写性能就直接决定计算效率。
(3)在对生成的较大模型的计算结果文件进行读写或剪切拷贝等操作时,若固态硬盘不支持独立缓存可能会导致操作期间出现硬盘掉速的情况。
如果模型求解精确进入后期封存归档的阶段,则可以配置2TB大容量机械硬盘,因为机械硬盘的数据安全性更高。
2.4 显卡
数值模拟的建模计算,intel的UHD或Xe核显就够了,没必要用高性能游戏显卡,而对于小模型的有限元计算或数值模拟3D模型的细节展示,则一般的 Nvidia 游戏显卡也能够胜任。
一般数值模拟软件都有“GPU加速”功能,那是面向双精度计算卡:Tesla 的功能,游戏卡Geforce和专业绘图卡Quadro的双精度单元都被阉割了,无法实现“GPU加速”,开了加速很可能更慢,请谨慎使用。
Nvidia Tesla 双精度计算卡比较昂贵,如果你的预算只有10w以内,建议优先去堆CPU核心数和内存。
三、总结
阿程从CPU、内存、硬盘和显卡四个方面分别聊了聊硬件参数对仿真/数值模拟试验的影响,这里只是读书期间积累的经验之谈,可能理论并不严谨,也欢迎有兴趣的朋友一起交流探讨。