由于离散单元法的特性,EDEM软件计算量大,对计算设备要求较高。一个计算能力强的计算设备可在更短的时间完成计算任务,加速业务进程,提高业务效率。
过去以来,中央处理器 (CPU) 一直被用作计算设备。然而,随着计算机图形处理器 (俗称显示卡或者显卡,GPU) 的技术更新,GPU也可用于计算,且在特定的计算场景中发挥出 (远) 优于CPU的计算性能。这包括EDEM离散单元法计算场景。
本文将简单讨论GPU计算在EDEM中的应用,以及用于EDEM计算的GPU选取。
为什么要用GPU开展EDEM计算?
GPU与CPU的显著区别在于,前者可同时并行计算的核心数高 (多达数千),但单个核心时钟频率 (与计算速度正相关) 较低;后者核心数少 (几十个),但单个核心始终频率高。一个比喻是,GPU仿佛是一个小学数千名小学生,而CPU是这所小学的数十名老师。对于单一流程的任务而言,一个老师的处理速度胜过一个小学生;但对于诸如完成1000000道口算题这类可分割的计算任务而言,数千小学生并行开动,将胜过数十名老师。
离散单元法就是可分割的计算任务,每一时间步对1000000个颗粒单元的处理,就好比完成1000000道口算题。此时GPU相比CPU将具有显著优势。鉴于上述原因,自EDEM 2019开始,支持GPU运算。当然,实际计算机系统中,GPU由CPU统筹和管辖,如同老师们需要准确分配不同的口算题给具体的小学生。
EDEM GPU计算架构
目前EDEM GPU求解器使用Nvidia CUDA实现,已支持多球团簇 (multi-sphere)、胶囊体 (sphero-cylinder) 和多面体 (polyhedral) 全部三种颗粒形态,并已全面支持API自定义模型,计算效率与内置模型无异。Nvidia CUDA是全球主流GPU高性能计算 (HPC) 架构,历史最为悠久,在国际上具有广泛的用户基础,迭代更新快。
然而,Nvidia CUDA仅支持Nvidia品牌的显卡,诸如AMD等品牌的显卡无法使用Nvidia CUDA进行计算,也无法使用EDEM GPU计算。(先前EDEM GPU求解器使用OpenCL架构实现,OpenCL支持Nvidia和AMD等全品类显卡。但OpenCL已停止更新,鉴于此,EDEM最新版GPU运算已不再支持OpenCL求解器。)
EDEM 对显卡的最低配置要求如下:
支持CUDA,且计算能力支持版本3.5以上 (详见CUDA GPUs - Compute Capability | NVIDIA Developer)。除个别极为古老的显卡 (如Nvidia GTX系列),基本都满足该条件。
驱动程序中,CUDA版本11.0以上。
对EDEM计算而言,几万到十几万颗粒的计算规模,选择普通家用显卡 (如游戏显卡) 足以。后文会详述显卡的选取。
EDEM GPU计算架构
EDEM GPU的计算精度有三种模式:
双精度 (double precision);
单精度 (single precision);
混合精度 (hybrid precision)。
这是与GPU的精度模式相匹配的。
在计算机中,小数多由浮点数 (floating point number) 表示。浮点数以科学计数法表示小数,包含若干位有效数字 (可正可负) 和一个整数指数 (可正可负),如 -1.2E-2 表示小数 -0.012。在计算机中,有效数字和指数整合在一起,以二进制形式存储,为一个浮点数。
单精度和双精度浮点数的区别在于有效数字位数不同。这也直接决定了二者所占存储空间不同。
单精度 (FP32):使用32位二进制 (4字节) 表示,有效数字7位,适用于大多数科学计算和通用计算任务。
双精度 (FP64):使用64位二进制 (8字节) 表示,有效数字15位,适用于需要更高精度计算的科学和工程应用。
对于离散单元法来说,尽可能使用双精度FP64计算,可最大程度保证工程计算精度。曾有文献指出,有学者使用侠盗猎车手5的三维引擎——R星 (Rockstar) 进行离散元计算,但由于引擎只支持单精度FP32,计算误差发散严重,计算结果失真较大。
目前计算机的CPU均支持64位双精度计算。但对于消费级GPU显卡,64位双精度运算由于使用场景较少 (大多数为一般通用计算任务),厂商为了降低售价提高销量,削弱了消费级GPU的FP64能力 (但Nvidia RTX 30系以上消费级显卡基本保留部分FP64能力),导致这些显卡双精度计算能力受限。
对于这些显卡,在使用时需要考虑更换精度模式保证计算速度。对于Nvidia顶尖显卡,如A100 (800)、H100 (800) 等,这些显卡专供HPC科学计算,FP64能力不会削减,因此直接采用双精度模式计算即可。而对于桌面级显卡例如 Nvidia RTX 30/40 系显卡 (如4090等),双精度模式受限,需适当降低精度保证计算效率。尤其是在试算或者粗略计算大概结果的场景,快速计算十分必要。此时,降低精度快速出结果,对于业务而言至关重要。
混合精度模式 (hybrid precision) 为Nvidia特色技术,可根据GPU状况,智能对浮点数据指定单双精度策略。可以在效率和精度之间取得最佳平衡。
多GPU使用策略
最新的EDEM版本已支持调度多个显卡 (GPU) 进行并行计算。依旧以小学作比喻,这就仿佛将一个口算任务分配给两个小学完成。
一般而言,多GPU仅在问题规模特别大时使用。因为计算过程中,GPU之间会通信,通信成本较大。因此,尽可能使用单个GPU进行计算。
但是如果问题规模特别大,例如数百万颗粒的时候,单GPU可能面临存储空间不足的情况 (离散单元法不仅计算量大,存储空间占用也很大)。目前主流计算机内存条 (RAM) 高达32-64GB,但是一张 30 或者 40 系的Nvidia显卡,其显存 (VRAM) 只有几个GB。EDEM GPU计算时,颗粒和接触信息被存入显存进行计算,如果问题规模足够大,显存可能会不足,从而导致无法计算。此时就可以考虑多GPU并行策略,通过多张显卡并行,来分担计算任务,确保每张卡显存容量足够完成对应分块的计算。
但需要考虑多张显卡采购的成本,是否优于单张高显存容量的显卡 (如A100,单张80GB)。还是那句话,显卡间通信速度有限,尽可能使用单张卡进行计算。
EDEM GPU计算表现
以下是不同工况的仿真、分别使用12线程CPU与GPU计算时,EDEM的计算速度。为Altair自测得到。可以发现,使用CUDA GPU计算可以最大程度提升EDEM的计算效率,相比CPU计算提速数十倍。
表1 计算工况
图1 EDEM CPU与GPU计算速度对比 (CPU为12线程)
选择GPU显卡用于EDEM计算,对于提升工程效率至关重要;而我们要如何选择GPU显卡呢?
用于EDEM计算的GPU显卡,主要关注以下几个指标:
时钟频率 (MHz) 与内核数,二者均与计算速度正相关;
FP32 与 FP64 性能 (单位: TFLOPS),直接决定显卡计算浮点小数多快;
显存带宽 (GB/s),决定GPU与CPU通信速度,通信速度太慢可能会成为瓶颈;
显存大小 (GB),将决定单卡可承担的最大计算规模。
Altair 也做了一些计算测试供参考:
搅拌器模型,生成1,000,000颗粒,生成速度100,000/s,颗粒初始下落速度3m/s (图2)。以12线程CPU为基准计算速度,在颗粒生成计算过程中,单卡V100和单卡RTX ada 6000的加速比分别为4.5和7.2。而在颗粒搅拌计算过程中,使用双卡V100和双卡RTX ada 6000仿真,加速比相比单卡近乎加倍。双卡并行计算的效率几乎成倍增加。
(1) 仿真工况
(2) 颗粒生成加速比
(3) 颗粒搅拌加速比
而关于Nvidia RTX 30-40系显卡的计算效率对比详见图3和表2。图3可用于选购显卡时参考。
表2 GPU显卡计算用时对比
图3 不同显卡 (包含多卡) 加速比对比 (以WS4075为基准)
需要说明的是,GPU计算受到CPU、内存等电脑配置因素影响,实际计算用时可能与上述结果有出入。如对显卡采购以及显卡和EDEM适配有疑问,请联系Altair 技术工程师,我们竭诚为您服务。