安装简介
-
教程作者:量子御坂 -
贡献者:(暂无,欢迎参与!) -
上次更新时间:2025-06-03 -
关键词:ABACUS安装,Toolchain, AMD
01 前言
ABACUS业已发布了3.10-LTS稳定版,并仍在持续迭代当中,不少用户都希望能在自己的机器上部署ABACUS软件,体验ABACUS带来的计算效率提升。ABACUS Toolchain是一套内置于ABACUS仓库中的bash脚本集,它能帮助我们在线或离线地编译安装ABACUS所需的软件依赖,自动处理各个依赖库的环境变量,并基于这些依赖库快速完成ABACUS源码编译过程,实现高效、高性能、易修改和易移植的自动化ABACUS编译方案。
本教程基于2025-02版本的ABACUS Toolchain撰写,目前,ABACUS Toolchain支持如下编译安装功能:
-
GNU Toolchain,即从足够版本的GNU编译套件( gcc,g++,gfortran,统称GCC)出发,从头编译安装ABACUS依赖库及ABACUS本体的Toolchain方法。 -
Intel Toolchain,即基于Intel的编译器、数学库和并行库(通常打包在Intel-OneAPI或Intel-parallel-xe-studio内)编译安装ABACUS依赖库及ABACUS本体的Toolchain方法。 -
AMD Toolchain,即基于AMD的编译器和数学库进行ABACUS编译安装的方法,细分为GCC-AOCL Toolchain和AOCC-AOCL Toolchain。
同时,ABACUS Toolchain还支持包括功能插件支持、打包离线安装等一系列高级功能。
总体来说,ABACUS Toolchain希望达到的愿景是:
-
方便用户高效地从源码编译最适合当前服务器环境的ABACUS,并能快速测试不同依赖库类型的Toolchain编译所得ABACUS的计算效率。 -
建立一套ABACUS源码编译的标准流程,ABACUS开发者可以直接在Toolchain中控制ABACUS各个依赖库的版本和编译方式,而不需要自行编译并手动加入各种编译选项。
此前已有两部Toolchain相关的教程,分别介绍如何了使用GNU Toolchain直接地从头编译ABACUS,以及如何使用Intel Toolchain利用Intel OneAPI在Intel-CPU机器上编译具有高效率的ABACUS,并同时利用Toolchain的可选项编辑方式引入ABACUS功能插件。这一教程我们将讲解如何在AMD-CPU机器上,通过Toolchain编译能高效运行的ABACUS。
02 已有方案
1.GNU Toolchain
这一方案最为通用,自然也可以在AMD-CPU机器上完成ABACUS的编译,编译过程中并没有需要特别调整的选项,具体参考ABACUS安装教程 - Toolchain (1-GNU)
注意:使用Toolchain进行源码安装前,务必确保你正确加载了对应的Intel OneAPI环境或其他相关环境变量!
2. Intel Toolchain
AMD-CPU机器上其实也是可以使用Intel Toolchain基于Intel-OneAPI(甚至Intel parallel_xe_studio)编译ABACUS的,不过这一做法存在以下问题:
-
编译器只能选用Intel classic compiler系列,即icc/icpc/ifort,不能采用Intel-OneAPI 2024.0+之后更新的新版Intel编译器,即icx/icpx/ifx,否则ELPA编译是过不去的。
-
在AMD-CPU机器上,这一编译方案的计算效率一般来说较GNU Toolchain偏低(Intel机器则相反),这是源于Intel-OneAPI(主要是Math Kernel Library)对Intel-CPU的特化处理。网络上有一些解除这种特化处理带来的限制,让MKL在AMD-CPU上发挥应有性能的办法,但这些方法往往都需要管理员权限和一些额外的技巧,也不推荐普通用户花过多精力去琢磨。
Intel Toolchain使用参考:ABACUS安装教程 - Toolchain (2-Intel)
03 AMD Toolchain
1. AOCL和AOCC简介
AMD Optimizing CPU Libraries (AOCL) 和 AMD Optimizing C/C++ Compiler (AOCC) 是AMD开发的面向高性能计算(HPC)和科学应用的优化工具库,分别对标Intel的Intel MKL和Intel Compiler。
其中,toolchain_*.sh主要通过调用install_abacus_toolchain.sh主脚本完成,涉及到几个编译选项,这些编译选项及其作用分为几类:
-
AOCL: 是一组高度优化的数学库(如BLAS、LAPACK、SCALAPACK, FFTW等),专为AMD EPYC等处理器深度调优,显著提升科学计算、数据分析等任务的运行速度和效率。用户无需修改代码即可通过链接库获得性能提升。AOCL的各个数学库与开源版本的数学库兼容性基本一致。AOCL官网:https://www.amd.com/en/developer/aocl.html -
AOCC: 是基于LLVM/Clang的C/C++编译器套件,针对AMD Zen架构处理器(如EPYC)进行了深度优化。它利用高级优化技术(如多目标代码生成、循环优化),帮助开发者编译出在AMD平台上性能出色的应用。AOCC官网:https://www.amd.com/en/developer/aocc.html
AOCL和AOCC的安装可以参见官网的下载部分,一般来说需要咨询服务器管理员获取其在服务器上的安装位置,并通过module等方式加载对应的环境变量。
本教程中,AOCC依赖的AOCL安装位置为/data/softwares/AMD/5.0.0-aocl-aocc/aocl,其中内容为:
(base) mikoto@amd-cpu:/data/softwares/AMD/5.0.0-aocl-aocc/aocl$ ls
amd-blis amd-libs.cfg include_ILP64
amd-compression amd-rng include_LP64
amd-crypto amd-scalapack lib
amd-da amd-securerng lib_ILP64
amd-fftw amd-sparse lib_LP64
amd-libflame amd-utils README
amd-libm aocl-linux-aocc-5.0.0_module set_aocl_interface_symlink.sh
amd-libmem include
AOCC安装位置为/data/softwares/AMD/5.0.0-aocl-aocc/aocc,其中内容为:
(base) mikoto@amd-cpu:/data/softwares/AMD/5.0.0-aocl-aocc/aocc$ ls
AMDALLOC-LICENSE.TXT FLANG-LICENSE.TXT LICENSERV.TXT
aocc-compiler-5.0.0_module include LICENSE.TXT
AOCC-LICENSE.TXT install.sh ompd
AOCC-prerequisites-check.sh lib README
bin lib32 setenv_AOCC.sh
FLANG-CHANGELOG.TXT libexec share
通过AOCL和AOCC文件夹里面的_module后缀文件,服务器管理者可以快捷的配置二者的Modulefile,并便利用户使用。其中AOCL的环境变量被命名为AOCLhome,类似于Intel MKL的MKLROOT。
2.基于AOCC-AOCL的编译方案
(1)正确加载AOCC和AOCL环境,同时确保系统内没有其他多余环境变量(尤其不能有Intel OneAPI的环境变量)。作者本人采用的方式是:
(base) mikoto@amd-cpu:~$ module load aocl-5.0.0-aocc
Loading aocl-5.0.0-aocc
Loading requirement: aocc-5.0.0
作者注:有很多人使用服务器喜欢把各种环境变量相关的source和export命令写在$HOME/.bashrc文件内,甚至有某些服务器运维喜欢把一些环境变量写在更公用的/etc/profile文件内,这都是非常不好的习惯!久而久之,很容易忘记自己到底都加载了哪些环境变量。合理的环境变量管理方式应该是每个需要的环境变量单独做一个.sh脚本,需要哪个source哪个。当然更好的做法是直接用module-env方式管理。
(2)下载ABACUS仓库。
可以通过git clone下载,这一做法允许我们通过git包管理器快速更新或切换版本。也可以通过wget拉取ABACUS仓库压缩包,这样得到的ABACUS仓库没有git相关的信息,文件体积更小。
注:代码块是可以滑动的哦 >_<
# via github
git clone https://github.com/deepmodeling/abacus-develop.git -b LTS
# via wget from github by codeload: can be used under CN Internet
wget https://codeload.github.com/deepmodeling/abacus-develop/tar.gz/LTS -O abacus-LTS.tar.gz
tar -zxvf abacus-LTS.tar.gz
(3)进入toolchain目录
cd abacus-develop/toolchain
# if you download abacus via wget from codeload
cd abacus-develop-LTS/toolchain
(4)运行 toolchain_aocc-aocl.sh 脚本
sh ./toolchain_aocc-aocl.sh
如此即可开始基于Toolchain的ABACUS依赖库编译安装。以Intel Toolchain默认设置为例,会做如下操作:
检查你的系统GNU编译器版本,其版本不能低于5(2025-02版本Toolchain新功能),并链接AMD-AOCC编译器,输出类似于:
WARNING: (./install_abacus_toolchain.sh, line 315) No MPI installation detected (ignore this message in Cray Linux Environment or when MPI installation was requested).
Checking system GCC version for gcc, intel and amd toolchain
Your System gcc/g++/gfortran version should be consistent
Minimum required version: 5
Your gcc version: 11.4.0
Your g++ version: 11.4.0
Your gfortran version: 11.4.0
Your GCC version seems to be enough for ABACUS installation.
Compiling with 128 processes for target native.
Step gcc took 0.00 seconds.
Step intel took 0.00 seconds.
==================== Finding AMD compiler from system paths ====================
path to clang is /data/softwares/AMD/5.0.0-aocl-aocc/aocc/bin/clang
path to clang++ is /data/softwares/AMD/5.0.0-aocl-aocc/aocc/bin/clang++
path to gfortran is /usr/bin/gfortran
Found lib directory /usr/lib/x86_64-linux-gnu
CC is /data/softwares/AMD/5.0.0-aocl-aocc/aocc/bin/clang
Check the AMD C compiler path
CXX is /data/softwares/AMD/5.0.0-aocl-aocc/aocc/bin/clang++
Check the AMD C++ compiler path
FC is gfortran
Check the GNU Fortran compiler path
Step amd took 1.00 seconds.
gfortran而不是AMD-AOCC的flang,原因会在后续说明。
下载OpenBLAS,通过OpenBLAS内置的genarch程序识别系统指令集和架构:
==================== Getting proc arch info using OpenBLAS tools ====================
wget https://codeload.github.com/OpenMathLib/OpenBLAS/tar.gz/v0.3.29 -O OpenBLAS-0.3.29.tar.gz --no-check-certificate
--2025-06-02 23:18:25-- https://codeload.github.com/OpenMathLib/OpenBLAS/tar.gz/v0.3.29
Resolving codeload.github.com (codeload.github.com)... 20.205.243.165
Connecting to codeload.github.com (codeload.github.com)|20.205.243.165|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/x-gzip]
Saving to: ‘OpenBLAS-0.3.29.tar.gz’
OpenBLAS-0.3.29.tar.gz [ <=> ] 23.53M 3.69MB/s in 8.0s
2025-06-02 23:18:34 (2.92 MB/s) - ‘OpenBLAS-0.3.29.tar.gz’ saved [24671913]
OpenBLAS-0.3.29.tar.gz: OK
Checksum of OpenBLAS-0.3.29.tar.gz Ok
OpenBLAS detected LIBCORE = zen
OpenBLAS detected ARCH = x86_64
此处若出现提示:./f_check: 100: [: Illegal number: , 须知其只是运行OpenBLAS genarch程序中可能出现的问题,不影响Toolchain编译过程
自动下载和安装CMake编译库以及OpenMPI并行库:
==================== Installing CMake ====================
wget https://cmake.org/files/v3.31/cmake-3.31.7-linux-x86_64.sh -O cmake-3.31.7-linux-x86_64.sh --no-check-certificate
cmake-3.31.7-linux-x86_64.sh: OK
Checksum of cmake-3.31.7-linux-x86_64.sh Ok
Installing from scratch into /home/mikoto/abacus-develop/toolchain/install/cmake-3.31.7
Step cmake took 26.00 seconds.
==================== Installing OpenMPI ====================
wget https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.7.tar.bz2 -O openmpi-5.0.7.tar.bz2 --no-check-certificate
openmpi-5.0.7.tar.bz2: OK
Checksum of openmpi-5.0.7.tar.bz2 Ok
Installing from scratch into /home/mikoto/abacus-develop/toolchain/install/openmpi-5.0.7
Found directory /home/mikoto/abacus-develop/toolchain/install/openmpi-5.0.7/bin
Found directory /home/mikoto/abacus-develop/toolchain/install/openmpi-5.0.7/lib
Found directory /home/mikoto/abacus-develop/toolchain/install/openmpi-5.0.7/include
mpiexec is installed as /home/mikoto/abacus-develop/toolchain/install/openmpi-5.0.7/bin/mpiexec
mpicc is installed as /home/mikoto/abacus-develop/toolchain/install/openmpi-5.0.7/bin/mpicc
mpicxx is installed as /home/mikoto/abacus-develop/toolchain/install/openmpi-5.0.7/bin/mpicxx
mpifort is installed as /home/mikoto/abacus-develop/toolchain/install/openmpi-5.0.7/bin/mpifort
Step openmpi took 541.00 seconds.
从环境变量中定位并链接AOCL中的BLAS,LAPACK,ScaLAPACK和FFTW。
自动下载并编译安装ELPA,LibXC,CEREAL等需求库。
==================== Finding AOCL from system paths ====================
libblis is found in ld search path
libflame is found in ld search path
Found lib directory /data/softwares/AMD/5.0.0-aocl-aocc/aocl/lib_LP64
Found lib directory /data/softwares/AMD/5.0.0-aocl-aocc/aocl/lib_LP64
Step aocl took 0.00 seconds.
==================== Installing LIBXC ====================
wget https://gitlab.com/libxc/libxc/-/archive/7.0.0/libxc-7.0.0.tar.bz2 -O libxc-7.0.0.tar.bz2 --no-check-certificate
libxc-7.0.0.tar.bz2: OK
Checksum of libxc-7.0.0.tar.bz2 Ok
Installing from scratch into /home/mikoto/abacus-develop/toolchain/install/libxc-7.0.0
Step libxc took 20.00 seconds.
==================== Finding FFTW from system paths ====================
libfftw3 is found in ld search path
libfftw3_omp is found in ld search path
libfftw3_mpi is found in ld search path
Found lib directory /data/softwares/AMD/5.0.0-aocl-aocc/aocl/lib_LP64
Step fftw took 0.00 seconds.
==================== Finding ScaLAPACK from system paths ====================
libscalapack is found in ld search path
Found lib directory /data/softwares/AMD/5.0.0-aocl-aocc/aocl/lib_LP64
Step scalapack took 1.00 seconds.
==================== Installing ELPA ====================
wget https://elpa.mpcdf.mpg.de/software/tarball-archive/Releases/2025.01.001/elpa-2025.01.001.tar.gz -O elpa-2025.01.001.tar.gz --no-check-certificate
elpa-2025.01.001.tar.gz: OK
Checksum of elpa-2025.01.001.tar.gz Ok
Installing from scratch into /home/mikoto/abacus-develop/toolchain/install/elpa-2025.01.001/cpu
Step elpa took 158.00 seconds.
==================== Installing CEREAL ====================
===> Notice: This version of CEREAL is downloaded in GitHub master repository <===
wget https://codeload.github.com/USCiLab/cereal/tar.gz/master -O cereal-master.tar.gz --no-check-certificate
Installing from scratch into /home/mikoto/abacus-develop/toolchain/install/cereal-master
Step cereal took 2.00 seconds.
==================== Installing RAPIDJSON ====================
===> Notice: This version of rapidjson is downloaded in GitHub master repository <===
wget https://codeload.github.com/Tencent/rapidjson/tar.gz/master -O rapidjson-master.tar.gz --no-check-certificate
Installing from scratch into /home/mikoto/abacus-develop/toolchain/install/rapidjson-master
Step rapidjson took 3.00 seconds.
Step libtorch took 0.00 seconds.
Step libnpy took 0.00 seconds.
Step libri took 0.00 seconds.
Step libcomm took 0.00 seconds.
========================== usage =========================
Done!
To use the installed tools and libraries and ABACUS version
compiled with it you will first need to execute at the prompt:
source /home/mikoto/abacus-develop/toolchain/install/setup
To build ABACUS by gnu-toolchain, just use:
./build_abacus_gnu.sh
To build ABACUS by intel-toolchain, just use:
./build_abacus_intel.sh
To build ABACUS by amd-toolchain in gcc-aocl, just use:
./build_abacus_gcc-aocl.sh
To build ABACUS by amd-toolchain in aocc-aocl, just use:
./build_abacus_aocc-aocl.sh
or you can modify the builder scripts to suit your needs.
build_abacus_aocc-aocl.sh
vim ./build_abacus_aocc-aocl.sh
#!/bin/bash
#SBATCH -J build
#SBATCH -N 1
#SBATCH -n 16
#SBATCH -o install.log
#SBATCH -e install.err
# JamesMisaka in 2025.03.09
# Build ABACUS by amd-openmpi toolchain
# module load openmpi aocc aocl
ABACUS_DIR=..
TOOL=$(pwd)
INSTALL_DIR=$TOOL/install
source$INSTALL_DIR/setup
cd$ABACUS_DIR
ABACUS_DIR=$(pwd)
#AOCLhome=/opt/aocl-linux-aocc-5.0.0/5.0.0/aocl/ # user should specify this parameter
BUILD_DIR=build_abacus_aocl
rm -rf $BUILD_DIR
PREFIX=$ABACUS_DIR
ELPA=$INSTALL_DIR/elpa-2025.01.001/cpu
# ELPA=$INSTALL_DIR/elpa-2025.01.001/nvidia # for gpu-lcao
CEREAL=$INSTALL_DIR/cereal-master/include/cereal
LIBXC=$INSTALL_DIR/libxc-7.0.0
RAPIDJSON=$INSTALL_DIR/rapidjson-master/
LAPACK=$AOCLhome/lib
SCALAPACK=$AOCLhome/lib
FFTW3=$AOCLhome
# LIBRI=$INSTALL_DIR/LibRI-0.2.1.0
# LIBCOMM=$INSTALL_DIR/LibComm-master
# LIBTORCH=$INSTALL_DIR/libtorch-2.1.2/share/cmake/Torch
# LIBNPY=$INSTALL_DIR/libnpy-1.0.1/include
# DEEPMD=$HOME/apps/anaconda3/envs/deepmd # v3.0 might have problem
# if clang++ have problem, switch back to g++
cmake -B $BUILD_DIR -DCMAKE_INSTALL_PREFIX=$PREFIX \
-DCMAKE_CXX_COMPILER=clang++ \
-DMPI_CXX_COMPILER=mpicxx \
-DLAPACK_DIR=$LAPACK \
-DSCALAPACK_DIR=$SCALAPACK \
-DFFTW3_DIR=$FFTW3 \
-DELPA_DIR=$ELPA \
-DCEREAL_INCLUDE_DIR=$CEREAL \
-DLibxc_DIR=$LIBXC \
-DENABLE_LCAO=ON \
-DENABLE_LIBXC=ON \
-DUSE_OPENMP=ON \
-DUSE_ELPA=ON \
-DENABLE_RAPIDJSON=ON \
-DRapidJSON_DIR=$RAPIDJSON \
# -DENABLE_DEEPKS=1 \
# -DTorch_DIR=$LIBTORCH \
# -Dlibnpy_INCLUDE_DIR=$LIBNPY \
# -DENABLE_LIBRI=ON \
# -DLIBRI_DIR=$LIBRI \
# -DLIBCOMM_DIR=$LIBCOMM \
# -DDeePMD_DIR=$DEEPMD \
# -DUSE_CUDA=ON \
# -DENABLE_CUSOLVERMP=ON \
# -D CAL_CUSOLVERMP_PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/2x.xx/math_libs/1x.x/targets/x86_64-linux/lib
# if one want's to include deepmd, your system gcc version should be >= 11.3.0 for glibc requirements
cmake --build $BUILD_DIR -j `nproc`
cmake --install $BUILD_DIR 2>/dev/null
# generate abacus_env.sh
cat << EOF > "${TOOL}/abacus_env.sh"
#!/bin/bash
source$INSTALL_DIR/setup
export PATH="${PREFIX}/bin":\${PATH}
EOF
# generate information
cat << EOF
========================== usage =========================
Done!
To use the installed ABACUS version
You need to source${TOOL}/abacus_env.sh first !
"""
EOF
AOCLhome=/data/softwares/AMD/5.0.0-aocl-aocc/aocl
注:这里需要手动修改的主要原因是AOCLhome这个环境变量在AMD AOCL的modulefile里面并没有写成全局的形式,说的更具体一点,其modulefile里面AOCLhome的定义用的是set指令而非setenv。
:wq保存并退出,再运行这一脚本。
sh ./build_abacus_aocc-aocl.sh
-- The CXX compiler identification is Clang 17.0.6
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /data/softwares/AMD/5.0.0-aocl-aocc/aocc/bin/clang++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- RapidJSON found. Headers:
-- Found Git: /usr/bin/git (found version "2.34.1")
-- Found git: attempting to get commit info...
-- Current commit hash: ede143784
-- Last commit date: Sat May 31 20:20:02 2025 +0800
-- Found Cereal: /home/mikoto/abacus-develop/toolchain/install/cereal-master/include/cereal
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.2")
-- Found ELPA: /home/mikoto/abacus-develop/toolchain/install/elpa-2025.01.001/cpu/lib/libelpa_openmp.so
-- Performing Test ELPA_VERSION_SATISFIES
-- Performing Test ELPA_VERSION_SATISFIES - Success
-- Found MPI_CXX: /home/mikoto/abacus-develop/toolchain/install/openmpi-5.0.7/lib/libmpi.so (found version "3.1")
-- Found MPI: TRUE (found version "3.1")
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Found OpenMP_CXX: -fopenmp=libomp (found version "5.1")
-- Found OpenMP: TRUE (found version "5.1")
-- Looking for a CUDA compiler
-- Looking for a CUDA compiler - NOTFOUND
-- Found FFTW3: /data/softwares/AMD/5.0.0-aocl-aocc/aocl/lib/libfftw3_omp.so
-- Looking for sgemm_
-- Looking for sgemm_ - not found
-- Looking for sgemm_
-- Looking for sgemm_ - found
-- Found BLAS: /data/softwares/AMD/5.0.0-aocl-aocc/aocl/lib/libblis.so
-- Looking for cheev_
-- Looking for cheev_ - not found
-- Looking for cheev_
-- Looking for cheev_ - found
-- Found LAPACK: /data/softwares/AMD/5.0.0-aocl-aocc/aocl/lib/libflame.so;/data/softwares/AMD/5.0.0-aocl-aocc/aocl/lib/libblis.so
-- Found ScaLAPACK: /data/softwares/AMD/5.0.0-aocl-aocc/aocl/lib/libscalapack.so
-- Checking for one of the modules 'libxc'
-- Found Libxc: /home/mikoto/abacus-develop/toolchain/install/libxc-7.0.0/lib/libxc.so
-- Found Libxc: version 7.0.0
-- Configuring done (3.2s)
-- Generating done (0.2s)
-- Build files have been written to: /home/mikoto/abacus-develop/build_abacus_aocl
[ 0%] Building CXX object source/CMakeFiles/driver.dir/driver_run.cpp.o
[ 0%] Building CXX object source/module_base/module_container/CMakeFiles/container.dir/ATen/ops/einsum_op.cpp.o
...
[100%] Built target lr
[100%] Built target io_basic
[100%] Building CXX object CMakeFiles/abacus.dir/source/main.cpp.o
[100%] Linking CXX executable abacus
[100%] Built target abacus
-- Install configuration: ""
-- Installing: /home/mikoto/abacus-develop/bin/abacus
========================== usage =========================
Done!
To use the installed ABACUS version
You need to source /home/mikoto/abacus-develop/toolchain/abacus_env.sh first!
完成编译后,通过toolchain给出的abacus_env.sh环境变量文件,即可加载ABACUS相关环境。需注意,从系统内读入的环境变量并不会被写入到abacus_env.sh对应的install/setup文件中,因此在实际使用这一abacus时,除了source abacus_env.sh,我们还需要加载对应的AOCC-AOCL环境。
# after load AOCC-AOCL env via module-load or source
source abacus_env.sh
如此即可加载ABACUS所有依赖库环境和ABACUS本体,此时可以通过abacus --version命令确认ABACUS已正确安装和加载:
(base) mikoto@amd-cpu:~/abacus-develop/toolchain$ which abacus
/home/mikoto/abacus-develop/bin/abacus
(base) mikoto@amd-cpu:~/abacus-develop/toolchain$ abacus --version
ABACUS version v3.10.0
这样编译就是完成了,此时我们回顾一下toolchain_aocc-aocl.sh脚本。
(base) mikoto@amd-cpu:~/abacus-develop/toolchain$ cat toolchain_aocc-aocl.sh
#!/bin/bash
#SBATCH -J install
#SBATCH -N 1
#SBATCH -n 16
#SBATCH -o compile.log
#SBATCH -e compile.err
# JamesMisaka in 2025-05-05
# install abacus dependency by aocc-aocl toolchain
# openmpi is recommended to use
# libtorch and libnpy are for deepks support, which can be =no
# if you want to run EXX calculation, you should set --with-libri=install
# gpu-lcao supporting modify: CUDA_PATH and --enable-cuda
# export CUDA_PATH=/usr/local/cuda
./install_abacus_toolchain.sh \
--with-amd=system \
--math-mode=aocl \
--with-intel=no \
--with-gcc=no \
--with-openmpi=install \
--with-cmake=install \
--with-scalapack=system \
--with-libxc=install \
--with-fftw=system \
--with-elpa=install \
--with-cereal=install \
--with-rapidjson=install \
--with-libtorch=no \
--with-libnpy=no \
--with-libri=no \
--with-libcomm=no \
--with-4th-openmpi=no \
--with-flang=no \
| tee compile.log
# to use openmpi-version4: set --with-4th-openmpi=yes
可以发现几个有趣的点,分别解释如下:
--with-scalapack,--with-fftw都是system,并通过这一方案分别链接AOCL里面的ScaLAPACK和FFTW。这点和Intel Toolchain的--with-scalapack,--with-fftw都是no不同,因为在那时这些数学库都被打包在MKL里面了。
--with-openmpi=install: AOCL-AOCC并不自带MPI,并推荐采用OpenMPI作为MPI库。Toolchain默认采用OpenMPI v5,如果用户发现OpenMPI编译存在问题,可以指定--with-4th-openmpi=yes来下载安装v4版本的OpenMPI,这一版本通常兼容性更好,但计算效率会偏低。--with-flang=no: 若使用flang编译器,则ELPA的编译是会报错的,虽然可以通过修改ELPA源码里面的libtool文件绕过相关报错,但绕过这些报错之后所编译出来的ABACUS使用LCAO-genelpa计算时计算效率相对较差,故Toolchain默认方案是将flang编译器强行替换为gfortran。在Toolchain中,用户可以修改--with-flang=yes尝试使用flang编译器编译依赖库并验证这件事情,此时相关源码修改会自动进行。
3.基于GCC-AOCL的编译方案
如果我们仔细查看AOCL官网,会发现AOCL不仅有AOCC依赖的包,还有GCC依赖的包,我们也可以采用GCC依赖的AOCL进行编译,这些编译方案在Toolchain里面也提供了支持,具体可见toolchain_gcc-aocl.sh和build_abacus_gcc-aocl.sh脚本,操作流程与AOCC-AOCL方案基本一致。
1. 加载GCC依赖的AOCL环境;
2. 运行toolchain_gcc-aocl.sh脚本;
3. 安装完成后,编辑build_abacus_gcc-aocl.sh脚本中的AOCLhome环境变量;
4. 编辑完成后保存退出,运行build_abacus_gcc-aocl.sh完成ABACUS本体编译;
仅有的差别是编译器为GCC编译器,而AOCL库是GCC依赖的。与此同时,基于Toolchain,如下方案也是可以尝试的:
可采用AOCC依赖的AOCL库,通过GCC-AOCL Toolchain编译ABACUS依赖和ABACUS本体,这点只需要在加载环境变量的时候加载AOCC和对应AOCL库,并在编译时采用GCC-AOCL Toolchain的编译脚本等。
可采用AOCC-AOCL Toolchain编译ABACUS依赖库,而用GCC-AOCL编译ABACUS本体,这只需要在加载好AOCC-AOCL库的环境变量后,先
运行toolchain_aocc-aocl.sh,再编辑并运行build_abacus_gcc-aocl.sh即可。
总结
本教程是ABACUS用户教程的一部分,也是ABACUS安装系列的第三个教程,讲解了包括AMD-Toolchain在内的,在AMD-CPU服务器上编译安装ABACUS的Toolchain方法,并希望这三个教程能让ABACUS用户对Toolchain更为熟悉。这三个教程依然有些细节没有涵盖,用户可以通过阅读Toolchain文件夹内的README获取更多信息。
关于安装方法,后续教程将进一步更新:
-
基于Toolchain编译安装GPU版本的ABACUS -
通过Conda和Docker快速部署ABACUS的办法
联系我们

