基于矩阵化检查工具的Abacus应用性能调优实践
发表于 2025/12/05
0
1 背景介绍
ABACUS (Atomic-orbital Based Ab-initio Computation at UStc) 是国产基于密度泛函理论 (DFT) 的开源计算机代码包。该软件利用平面波和数值原子基集,并使用范数守恒的赝势来描述核离子和价电子之间的相互作用。ABACUS支持LDA,GGA,meta-GGA和混合泛函。除了单点计算外,该软件还允许对各种集成进行几何优化和从头算分子动力学。该软件还提供了多种用于模拟材料的高级功能,包括DFT+U、VdW校正和隐式溶剂化模型等。此外,ABACUS致力于提供通用基础设施,以促进新型机器学习辅助DFT方法(DeePKS,DP-GEN,DeepH等)在分子和材料模拟中的开发和应用。
版本号:3.8.2。
2 应用优化
2.1 环境信息
CPU:鲲鹏920系列处理器。
操作系统:openEuler 22.03 LTS SP4 AArch64
2.2 环境搭建及安装
ABACUS应用的安装及使用方法参考用户文档https://mcresearch.github.io/abacus-user-guide/abacus-gcc.html。
本文以abacus-develop-3.8.2版本作为基准。
2.2.1 HPCKit组件安装
选择安装官网最新版本HPCKit组件,详细安装过程参考官网:https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/instg/topic_0000001806090516.html。
下载安装包后,解压缩,并进行HPCKit组件的安装。
关键安装命令:
sh HPCKit_25.1.0_Linux-aarch64/install.sh -y --prefix=/path/to/INSTALL_HPCKit --hmpi_type=mlnx|rdma2.2.2 FFTW库
安装依赖FFTW库,下载路径:https://fftw.org/。
2.2.3 OpenBlas库
安装依赖OpenBlas库,下载路径:https://github.com/xianyi/OpenBLAS。
详细安装过程参考:https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpcindapp/prtg-osc/kunpengxhmm_02_0006.html。
2.2.4 ScaLAPACK库
安装依赖ScaLAPACK库,下载路径:https://www.netlib.org/scalapack/。
2.2.5 ELPA库
安装依赖ELPA库,下载路径:https://www.netlib.org/scalapack/。
2.2.6 ABACUS安装
设置HPCKit组件环境变量:
source /path/to/INSTALL_HPCKit/HPCKit/latest/setvars.sh --use-bisheng
CC=mpicc FC=mpif90 CXX=mpic++ LDFLAGS="-L/path/to/HPCKit/25.1.0/compiler/bisheng/lib -lflang -lflangrti -lbsmath -lpthread -lrt" \
cmake -B build -DCMAKE_INSTALL_PREFIX=/path/to/abacus-develop-3.8.22.2.7 算例运行验证
以官网自带算例P007_H2O_pw进行测试验证。
mpirun --allow-run-as-root -x UCX_TLS=self,sm --bind-to core --map-by ppr:16:numa -np 32 -x OMP_NUM_THREADS=1 \
-wdir /path/to/abacus-develop-3.8.2/tests/performance/P007_H2O_pw /path/to/abacus-develop-3.8.2/bin/abacus2.3 运行与优化
2.3.1 采集热点
运行时,使用perf命令采集热点函数:
perf record command采集热点图如下图所示:

以上为采集到的热点数据表格,其中,第一列Overhead为具体的热点占比数据,表示对应函数消耗的CPU时间占总CPU时间的百分比,最后一列Symbol为二进制模块中的符号名,其命名方式为模块名+函数名。
首先从采集到的热点图中大致分析热点占比情况,其中,符号q1_8、t2_8、n1_2对应为FFTW库中的接口函数,其热点占比分别为26.34%、14.86%、8.10%,总占比约50%,占比较高,因此,需要重点关注fftw接口相关文件的优化。
分析abacus应用中调用fftw库接口的文件,共包括:abacus-develop-3.8.2/source/module_base/math_chebyshev.cpp、abacus-develop-3.8.2/source/module_base/math_chebyshev.h、abacus-develop-3.8.2/source/module_basis/module_pw/fft.cpp、abacus-develop-3.8.2/source/module_basis/module_pw/fft.h。
2.3.2 矩阵化检查扫描
创建矩阵化检查任务,待扫描文件选择2.3.1节中包含fftw接口相关的文件,扫描结果如下:

2.3.3 基线性能测试
基线性能采用原始应用的文件进行编译,编译、运行参考2.2.6、2.2.7节。基线性能测试运行时间为42s。

2.3.4 优化与测试
从扫描结果来看,识别出的技术点类型有领域优化/计算优化、SME矩阵化/FFT。
查看源代码,可以看到识别出的类型有FFT、定长循环展开等领域优化技术。具体优化技术的细节可以参考鲲鹏官网:https://www.hikunpeng.com/document/detail/zh/kunpengdevps/userguide/Plugins_UserGuide/DevKit_Affinity_0019.html。

点击Quick Fix,并选择替换成优化后代码或者一键修改该文件所有可自动优化的代码。
修改完4个待优化文件后,保存并下载优化后的文件。将原始文件替换为优化后的文件,并进行编译测试,除优化文件外,其他需要与基线性能测试保持一致。优化后测试运行时间为27s。

2.4 优化结果对比
abacus应用运行P007_H2O_pw算例,测试基线时间为42s,使用DevKit矩阵化检查工具进行优化后,运行时间为28s,优化达到35.71%。
算例 | 基线用时 | 自动优化用时 | 性能提升 |
P007_H2O_pw | 42s | 27s | 35.71% |


