跳到正文
IT之家·· 3 小时前AI 评分48

北大团队优化 ABACUS 原子算筹软件,华为鲲鹏 920 上性能最高快 10.7 倍

华为鲲鹏 920 上跑出超越同代主流硬件的性能:北大团队完成 ABACUS 原子算筹软件深度优化,优化 19 类材料核心算子

AI 导读

北京大学陈默涵研究员团队完成 ABACUS(原子算筹)在华为鲲鹏 920 全系列平台的适配,并优化 19 类材料核心算子。在 28 核、28 进程 ×1 线程配置下,SVE 版本比业界主流 x86 CPU 快 1.3 至 3.9 倍;单节点满核启用矩阵运算单元时最高快 10.7 倍。相关代码已推送至 GitHub 开源社区。

正文

IT之家 11 月 1 日消息,密度泛函理论(Density Functional Theory,DFT)是研究半导体、金属等关键材料性质的主流第一性原理方法。ABACUS(原子算筹)是国内自主研发的密度泛函开源软件,由多家单位联合开发,国内外用户超过一千人,应用单位过百家。

华为计算昨晚发文,在北京大学鲲鹏昇腾科教创新卓越中心支持下,北京大学力学与工程科学学院陈默涵研究员团队完成了 ABACUS 在鲲鹏 920 全系列平台上的适配,并把 19 类材料领域核心算子抽出来逐项优化。

据介绍,在和业界主流 CPU 相同的 28 核、28 进程 ×1 线程配置下,采用 SVE 指令集的版本在标准测试集上快 1.3 至 3.9 倍;放到单节点满核、启用矩阵运算单元的配置,最高快 10.7 倍。相关代码已经推送到 GitHub 开源社区。

▲ 10 种典型材料体系总计算耗时对比(同为 28 核、28 进程 ×1 线程,绿色为业界主流 x86,蓝色为鲲鹏 920 新型号)

IT之家附技术内容如下:

要让 ABACUS 先跑起来,第一步是把编译链和数学库依赖打通。这里遇到的第一个问题比较隐蔽:鲲鹏 920 的几个型号支持的向量指令集并不一样,分别是 NEON、SVE 和 SVE512,还内置一个专门做矩阵运算的单元。如果沿用通用编译选项,程序只会走最基础的那条代码路径,这些硬件能力实际上一直闲着,测出来的只是没调过的“开箱”成绩。

团队因此给三款芯片各自适配了一条路径。其中两款用 gcc-openmpi-openblas,分别编译出 NEON 和 SVE 版本;第三款换成 clang-hmpi-kblas,编译 SVE512 和矩阵运算指令集版本。另一个改动是新增 USE_KML 编译选项,把鲲鹏数学库(KML)接进 ABACUS。接口层面也得跟着调:KFFT 和开源 fftw3、KScaLAPACK 和开源 ScaLAPACK 在函数签名与默认行为上不完全一致,团队改掉了 FFT 接口的 OMP 配置,也调整了 abstol 和 orfac 两个默认值,第三款芯片才算整体适配完成。

第一步得保证算得对。NEON、SVE 和矩阵运算三个版本的 ABACUS 都跑通了自带的平面波基组求解 Kohn-Sham DFT、线性组合原子轨道(LCAO)求解 Kohn-Sham DFT、随机波函数 DFT(sDFT)、深度学习泛函 DeePKS 等集成测试,数值结果与业界主流实现一致。性能测试用了 10 个典型材料体系(GaAs、C2H6O、MoS2、Pt (111)、BaTiO3、Na、Fe、H2O、Li27Ni9O54Mn9Co9、Si),体系规模覆盖 8 至 216 原子并采用周期性边界条件,双方都取 28 核、28 进程 ×1 线程。SVE 版本比业界主流 x86 CPU 快 1.3 至 3.9 倍;矩阵运算指令集版本在单节点满核运行时最高快 10.7 倍。随机轨道 DFT 算例上的差距更明显,SVE 版本快 2.8 至 3.1 倍,矩阵运算指令集版本快 6.1 至 20.1 倍。

适配只解决了能不能跑。要在同代硬件里跑得更快,得往下走到算法层。DFT 的算力主要花在一批被反复调用的小算子上,而这些地方恰是通用编译器和数学库的盲区:编译器一次只能看一条语句、一个循环,看不到跨模块的重复计算;体系一大,有些操作的复杂度按平方增长,算力和内存很快不够用,能算的体系规模也就卡在这里。

团队把 19 类核心算子抽出来,逐个做算法分析再改写,涉及基础数学函数、数值插值积分、球谐函数、矩阵变换、混合精度计算、TDDFT、DeePKS、近邻搜索、并行调度等模块,动手的方向大致有三类。

最见效的是压掉平方级复杂度。广义拉盖尔多项式原本用递归,算高阶项时低阶结果被反复重算,调用量接近斐波那契式增长;改成迭代递推、只留三个中间变量后,复杂度降到 O (n),同一算子的百万次调用测试快了约 8 倍。多项式插值的区间查找原来从表头扫到表尾,换成二分查找后,400 项的表平均比较次数从约 200 次降到 9 次。同类的还有查表复用和整数幂特化。

第二类是减掉重复运算。能化简的用数学公式化简,三角函数用递推,循环里的不变量提到循环外,省下来的是同一批数据被反复算几十遍的开销。还有一类针对内存:混合精度、内存布局调整、负载均衡并行,目的是别让访存拖住计算。所有算子的数值结果都复核过,没有一个算错,多数有明显加速,部分到数倍甚至十余倍。

这套方法,团队没有只留在 ABACUS 里。手工调优有个绕不开的问题:换一个体系、换一类硬件,专家得从头再调一遍,经验很难复用。他们使用了一站式开发套件 DevKit 源码自动优化能力,让工具自己去识别同类性能瓶颈,并给出优化后的代码。在 920 新型号上实测 ABACUS,计算 8 个原子的温稠密碳 (sDFT) 算例的速度快了 2.28 倍,计算 512 个 Si 原子的体系(LCAO 基组)算例的速度快了 2.66 倍。

这套方案能落地,靠的是鲲鹏从硬件、基础软件、迁移优化工具到系统的全链路支撑。硬件侧是 920 的 NEON、SVE、SVE512 和矩阵运算单元,基础软件侧是 KBLAS、KFFT 等,迁移优化工具侧是一站式开发套件 Devkit。对鲲鹏来说,这次项目的关键意义在于支撑了几十万行的大型科学计算软件,通过适配优化后的代码能比业界主流硬件跑得更快,相关调优经验还能沉淀成其它科学软件项目也能用的基础工具。

IT之家附开源链接:

来源:IT之家 · ithome.com