Page 90 - 《软件学报》2021年第8期
P. 90

2372                                   Journal of Software  软件学报 Vol.32, No.8,  August 2021

                 区域分解的并行计算方式(如图 7 所示),格点子区域上的计算任务分配到不同的处理器上计算,各处理器核负责
                 格点边界上的数据通信,总体上使得数值模拟计算具有高可并行性和高可扩展性等特点,是高性能科学计算的
                 典型应用领域     [32] ,曾获得 1988、1998、2006 年的 Gordon Bell 奖,2018 年也入围该奖项的决赛      [33] .















                           Fig.7    A schematic diagram of domain decomposition in parallel computing lattice QCD
                                           图 7   格点 QCD 区域划分并行计算示意图
                    在格点 QCD 软件设计上,抽象分层软件架构的设计方法得到了重要应用,比如美国的 USQCD 软件框架分
                 为 4 层:最上层应用层包括 Chroma,之下 3 层为支撑库层,分别进行消息通信、数据结构定义和基本算法实现.
                                  [6]
                 再如英国的 Grid 软件 也是抽象了数据并行计算模型,针对格点 QCD 的热点计算抽象了统一的数据并行模型,
                 支持多种平台的 SIMD 矢量化计算,如 AVX2 和 AVX512 等形式.这种数据并行模型可以有效支撑上层应用的
                 开发,保证较高的高性能计算效率.软件框架的这种分层抽象的设计方法极大地提高了代码的开发效率和运行
                 效率,大大地促进了整个格点 QCD 研究领域的高速发展.针对异构计算环境,美国为主的团队开发了针对 GPU
                 加速的格点 QCD 软件包 QUDA,软件包主要采用 C++模版类支持不同数据类型的加速计算,已在美国 Summit
                 超级计算机上实现大规模 GPU 加速的格点 QCD 计算,取得了显著的加速效果.基于 CUDA 设计的 QUDA 软件
                 如要移植到曙光国产超算平台,需要经过转码为 ROCm 支持的 HIP 代码形式.

                 2    共性问题的提炼及解决对策

                 2.1    共性算法

                    2004 年著名高性能计算专家 Colella      [17] 从计算物理问题中提出了科学计算的 7 种算法模型,即结构性网格、
                 非结构性网格、快速傅里叶变换(FFT)、稠密线性代数(dense linear algebra)、稀疏线性代数(sparse linear
                 algebra)、粒子动力学(particles)、蒙特卡洛(Monte Carlo).这 7 种算法模型还可以进一步归类为求解数值微分法
                 方程类和求解数值线性代数类,实现形式上有显性计算方式和隐性计算方式.这些核心的共性计算模型对高性
                 能计算机提出了不同方面和层次的需求,也基本覆盖了常见高性能计算应用.如 N 粒子相互作用中等设计 FFT
                 计算长程相互作用,粒子动力学是一个微分方程的求解,格点 QCD 计算也会涉及大量的线性系统求解,通常为
                 千万到亿级矩阵维度的巨大计算量,同时存在海量 3x3 低维向量矩阵乘法.提炼以上共性算法特征,有利于集中
                 研发力量开发可共享使用的软件算法包;也有利于突破计算关键技术问题,提高高性能计算软件研发的效率.
                    国产软件编程框架 JASMIN        [14] 和 JAUMIN [15] 核心正是从共性算法提炼出发,对大量物理模型计算问题进
                 行抽象和提炼共性特征,形成编程框架的核心.编程框架底层以网格数据模型为基础,提供数值算法构件,中间
                 层实现并行计算模式和负载平衡建模,顶层为数值代数解法器库或者独立于编程框架的第三方解法器库接口.
                 2.2    浮点计算精度
                    不论何种科学计算应用,浮点计算精度的问题均扮演着重要的角色.从应用问题的角度来看,数值结果精度
                 往往越高越好,但高精度浮点计算较低精度浮点计算需要更多的时间.一般 64 位的双精度计算所需时间是 32
                 位的单精度浮点计算时间的两倍,因此常常遇到在高精度和高计算性能之间的取舍问题.高低精度混合计算是
   85   86   87   88   89   90   91   92   93   94   95