Page 91 - 《软件学报》2021年第8期
P. 91
徐顺 等:面向异构计算的高性能计算算法与软件 2373
一般的处理方式,但大型科学计算模拟中浮点运算过程非常复杂,很难从理论上推导出合理的精度位,不得不凭
经验判断,但这不可靠更不科学.一个相对科学的方式是先评估科学计算应用算法中最少需要多少位数值有效
位数,而这个有效位数能满足对结果需求精度.这可以借助软件工具 Verificarlo [34] 来推算出计算算法中保持结
果所需的最低有效位,然后选择相匹配的浮点数表示精度.另外,在某些体系结构支持多个低精度浮点拼凑为高
精度浮点的运算,但这增加了算法实现的复杂度.在通用处理器中一般只提供浮点精度计算,对应于 C 语言中的
double 和 float 精度;而专用 FPGA 加速模块却可以自定义浮点计算精度;最近的 Nvidia GPU 也支持半精度的运
算 .科学计 算中 浮点运算追 求的目标之 一是所谓的 “高准确 率低 精度 (high-accuracy low-precision, 简称
HALP)” [35] .
2.3 海量数据存储及可视化
高性能计算应用在大规模模拟中,往往会遇到大量数据存储的问题.比如分子模拟常规 100 万原子体系中,
每个原子单精度浮点数仅存储三维的速度和位移数据,大约需要 24MB 存储空间,如果需要 1 万帧轨迹数据则
需要 240GB 文件,如果再需要不同温度和压强的组合条件下的轨迹数据,对存储空间需求剧增.另外,数据格式
在异构系统上不兼容,直接数据传输存储会产生问题.当前可以借助专门的 HDF(hierarchical data format)文件格
式接口来避免,它可存储不同类型的图像和数码数据的文件格式,并可在不同类型的机器上传输,同时还有统一
处理这种文件格式的函数库.
数值模拟数据的可视化特点见表 2,数据源可以按网格特征进行划分,数据的可视化也具有一般的流程.大
规模数值模拟数据对其可视化也带来了困难,主要体现在空间表示和空间存储方面.比如粒子数超过了 32 位整
数可表示的范围可能导致软件崩溃,渲染时 GPU 显存一次性无法容纳一个数据文件时,导致数据分批导入显存,
增加了算法的复杂度也往往降低了计算性能.
Table 2 Visualization features in numerical simulation
表 2 数值模拟数据可视化特点
分类 特点
网格特征 均匀网格、正交网格、曲线网格、无结构网格、离散点等分类
维度场 标量场、矢量场
可视化流程 数据预处理、几何映射、绘制、显示
2.4 软件框架设计
软件框架决定了软件的生命力,其最主要特征是软件功能的适应性,具体包括理论建模支撑、计算模块、
逻辑流程控制和数据分析等模块.随着计算机硬件特性和软件编程语言的发展,许多科学计算软件已不能很好
地适应应用需求,大部分问题是软件的原框架受到冲击导致的.如原有程序采用 Fortran 语言编写,后来为了适应
新的运行环境改用 C++实现大规模设计,又需要新的 C++11 改进编程效率,导致软件框架不稳定.其次早期采用
OpenMP 为主的多 CPU 核计算模型,需要转为异构 OpenCL 计算模式;另外由于新的加速设备,原来的 CUDA 程
序可能需要改造为 OpenACC 并行编程方式.以上问题在高性能计算软件的设计中普遍存在,内在原因为软件并
行计算模式较多,硬件体系结构差异大.
对于高性能计算软件来说,优秀的软件框架可提高编程开发效率,适应新的软件需求和用户服务推广.如何
以不变的设计原则应对多变的软件需求是一个关键问题.对于软件框架来说,分层式设计常用方式如通用并行
软件 JASMIN 和格点 QCD 应用软件 Chroma.但从异构计算这方面考虑,面向异构计算环境有机统一计算模拟
的各方面是根本性解决问题,如统一处理器核计算、主存和加速内存管理和网络通信等三大模块,屏蔽异构计
算带来的差异性可以使上层软件设计保持不变性;当前 Khronos 组织发表的 SYCL 规范 [36] 和 Intel oneAPI [37] 正
在建立面向异构计算环境的统一编程接口,SYCL 底层基于 OpenCL 跨平台异构 API 规范,基于 SYCL 的 DPC++
作为 Intel oneAPI 的主体,已经实现了 Intel GPU 和 Nvidia GPU 的异构加速计算;针对 AMD GPU 常用选择
ROCm 框架下的 HIP 编程方式,而 HIP 实际上能够兼容 CUDA 在 Nvidia GPU 上编译运行,另外,值得注意的是,