---
title: 基于矩阵化检查工具的Abacus应用性能调优实践-官方技术文章-鲲鹏社区
description: 高性能计算应用代码中存在大量的循环，这些循环通常会包含N维数组、向量的计算，以及一些其他可向量化、可优化访存访存局部性的部分，矩阵化检查工具通过对源码分析检查，识别矩阵计算、类矩阵计算、可向量化计算以及其他可以提升计算效率的计算模式，并对源代码的片段提供修改优化方案或建议。本文介绍使用矩阵化检查工具对Abacus应用进行优化的实践。
keywords: Abacus,基于矩阵化检,查工具的,应用性能调优,实践,官方技术文章,鲲鹏社区,背景介绍
url: https://www.hikunpeng.com/developer/techArticles/20251205-6?envFlag=1
section: (其他)
---

# 基于矩阵化检查工具的Abacus应用性能调优实践-官方技术文章-鲲鹏社区

URL: https://www.hikunpeng.com/developer/techArticles/20251205-6?envFlag=1
描述: 高性能计算应用代码中存在大量的循环，这些循环通常会包含N维数组、向量的计算，以及一些其他可向量化、可优化访存访存局部性的部分，矩阵化检查工具通过对源码分析检查，识别矩阵计算、类矩阵计算、可向量化计算以及其他可以提升计算效率的计算模式，并对源代码的片段提供修改优化方案或建议。本文介绍使用矩阵化检查工具对Abacus应用进行优化的实践。
关键词: Abacus,基于矩阵化检,查工具的,应用性能调优,实践,官方技术文章,鲲鹏社区,背景介绍

官方技术文章 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles)

基于矩阵化检查工具的Abacus应用性能调优实践

基于矩阵化检查工具的Abacus应用性能调优实践

DevKit同辕开发

发表于 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等）在分子和材料模拟中的开发和应用。

源码下载地址：GitHub - abacusmodeling/abacus-develop: An electronic structure package based on either plane wave basis or numerical atomic orbitals [了解详情](https://github.com/abacusmodeling/abacus-develop)。

版本号：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 [了解详情](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 [了解详情](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|rdma
```

#### 2.2.2 FFTW库

安装依赖FFTW库，下载路径：https://fftw.org/ [了解详情](https://fftw.org/)。

详细安装过程参考：https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpcindapp/prtg-osc/kunpengrelion_02_0007.html [了解详情](https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpcindapp/prtg-osc/kunpengrelion_02_0007.html)。

#### 2.2.3 OpenBlas库

安装依赖OpenBlas库，下载路径：https://github.com/xianyi/OpenBLAS [了解详情](https://github.com/xianyi/OpenBLAS)。

详细安装过程参考：https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpcindapp/prtg-osc/kunpengxhmm_02_0006.html [了解详情](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/ [了解详情](https://www.netlib.org/scalapack/)。

详细安装过程参考：https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpcindapp/prtg-osc/kunpengsiesta_02_0006.html [了解详情](https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpcindapp/prtg-osc/kunpengsiesta_02_0006.html)。

#### 2.2.5 ELPA库

安装依赖ELPA库，下载路径：https://www.netlib.org/scalapack/ [了解详情](https://www.netlib.org/scalapack/)。

详细安装过程参考：https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpcindapp/prtg-osc/kunpengcp2k7_02_0011.html [了解详情](https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpcindapp/prtg-osc/kunpengcp2k7_02_0011.html)。

#### 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.2
```

#### 2.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/abacus
```

### 2.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 [了解详情](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% |

本页内容
