计算化学公社

 找回密码 Forget password
 注册 Register
Views: 82|回复 Reply: 0
打印 Print 上一主题 Last thread 下一主题 Next thread

[CP2K] EPYC 7002使用AOCC+AOCL 编译cp2k-2026-1 全流程 @ubuntu26.04LTS

[复制链接 Copy URL]

11

帖子

0

威望

291

eV
积分
302

Level 3 能力者

跳转到指定楼层 Go to specific reply
楼主
本帖最后由 zhuoh 于 2026-5-11 20:50 编辑

逢ubuntu26.04发布之际,正好编译安装一下cp2k,并测试了一下性能。
省流版本:对比ubuntu22.04+intel oneapi版本,性能提升3.1%

apt包源已切换到amd64v3
先查看cpu兼容性 ld.so --help | grep '\-v[0-9]'
如果输出中包含 x86-64-v3 (supported, searched),则表示你的CPU支持amd64v3
切换指令 echo 'APT::Architecture-Variants "amd64v3";' | sudo tee /etc/apt/apt.conf.d/99enable-amd64v3
然后sudo apt update
sudo apt upgrade
即可切换到amd64v3软件包

以下安装手册为AI总结+人工审核

CP2K 2026.1 编译安装手册(AMD EPYC 全系列 + AOCC 5.1.0 + AOCL 5.2.0)

本手册完整记录了在 AMD EPYC 7002 服务器上,使用 AOCC 5.1.0 编译器与 AOCL 5.2.0 数学库,编译安装 CP2K 2026.1 的详细流程。最终二进制包含所有关键加速库(ELPA、DBCSR、libxsmm、Libint2、FFTW3)且使用 -O2 -march=native 优化,性能良好。同时提供了针对 EPYC 9004/9005 的增强建议、将来可选的性能调优方案,以及防止系统无法启动的安全配置方法。

1. 系统要求与准备

- 操作系统:Ubuntu 26.04(其他 Linux 需自行调整包管理器)
- 硬件:AMD EPYC 7002 (Rome) / 7003 (Milan) / 9004 (Genoa) / 9005 (Turin) 系列
- 需要下载的文件(放置于 ~ 目录):
  - aocc-compiler-5.1.0.tar
  - aocl-linux-aocc-5.2.0.tar.gz(或 aocl-linux-aocc-5.2.0.tar)
  - cp2k-2026.1.tar.bz2
  - openmpi-5.0.10.tar(或其他后缀)

2. 安装 AOCC 编译器

cd ~
tar -xf aocc-compiler-5.1.0.tar
cd aocc-compiler-5.1.0

2.1 安装缺失的系统依赖(32 位库等)

sudo apt update
sudo apt install build-essential cmake python3 zlib1g-dev wget pkg-config gcc-multilib lib32z1-dev lib32stdc++6

2.2 创建 python 解释器软链接(Ubuntu 26.04 默认只有 python3)

sudo ln -s /usr/bin/python3 /usr/bin/python

2.3 设置 opt-viewer(AOCC 自带)

将 opt-viewer 目录加入 PATH(可临时,也可写入 .bashrc 但无风险)
export PATH="$HOME/aocc-compiler-5.1.0/share/opt-viewer:$PATH"
若系统提示找不到 opt-viewer,创建一个软链接
ln -sf "$HOME/aocc-compiler-5.1.0/share/opt-viewer/opt-viewer.py" "$HOME/aocc-compiler-5.1.0/bin/opt-viewer"

2.4 安装 AMD LibM 和 libamdalloc(已包含在 AOCL 包中,后续 AOCL 安装后可解决;若尚未安装 AOCL,先进行 AOCL 安装,然后回到这里复查)

2.5 运行 AOCC 先决条件检查

cd ~/aocc-compiler-5.1.0
bash AOCC-prerequisites-check.sh

预期结果:所有项应显示 Passed。若仍有 OpenMP 警告,确保临时设置了 LD_LIBRARY_PATH 和 LIBRARY_PATH 包含 AOCC 的 lib 和 lib32 目录(见下一步)。

2.6 临时设置库路径(仅在当前终端生效,切勿写入 .bashrc)

export LD_LIBRARY_PATH="$HOME/aocc-compiler-5.1.0/lib:$HOME/aocc-compiler-5.1.0/lib32:$LD_LIBRARY_PATH"
export LIBRARY_PATH="$HOME/aocc-compiler-5.1.0/lib:$HOME/aocc-compiler-5.1.0/lib32:$LIBRARY_PATH"

再次运行检查,应全部通过。

3. 安装 AOCL 数学库

cd ~
tar -xf aocl-linux-aocc-5.2.0.tar.gz   # 或 .tar
cd aocl-linux-aocc-5.2.0
bash install.sh

安装过程中会询问默认库模式,输入 1(LP64)。安装完成后,AOCL 主目录位于 ~/aocl/5.2.0/aocc。

验证关键库是否存在:

ls ~/aocl/5.2.0/aocc/lib/libblis.so ~/aocl/5.2.0/aocc/lib/libflame.so ~/aocl/5.2.0/aocc/lib/libscalapack.so

4. 编译 OpenMPI(AOCC 版本)

cd ~
tar -xf openmpi-5.0.10.tar
cd openmpi-5.0.10
./configure \
  CC=clang CXX=clang++ FC=flang \
  --prefix=$HOME/openmpi-aocc \
  --enable-mpi-fortran 2>&1 | tee configure.log
make -j$(nproc)
make install

验证:

$HOME/openmpi-aocc/bin/mpifort -show
# 应显示以 flang 开头的命令,包含 -lmpi_usempif08
$HOME/openmpi-aocc/bin/mpirun --version   # 确认版本 5.0.10

5. 安全的环境变量配置

5.1 修改 ~/.bashrc(仅设置编译器、PATH,不包含 LD_LIBRARY_PATH)

在 ~/.bashrc 末尾追加以下内容:

# ---------- AOCC 编译器 ----------
export AOCC_HOME="$HOME/aocc-compiler-5.1.0"
export PATH="$AOCC_HOME/bin:$PATH"
ulimit -s 262140

# ---------- AOCL 数学库(仅头文件和 pkgconfig,不包含库路径)----------
export AOCL_HOME="$HOME/aocl/5.2.0/aocc"
export C_INCLUDE_PATH="$AOCL_HOME/include:$C_INCLUDE_PATH"
export PKG_CONFIG_PATH="$AOCL_HOME/lib/pkgconfig:$PKG_CONFIG_PATH"
export CPATH="$AOCL_HOME/include:$CPATH"

# ---------- 编译器选择 ----------
export CC=clang
export CXX=clang++
export FC=flang
export F90=flang
export F77=flang

# ---------- 自定义 OpenMPI ----------
export PATH="$HOME/openmpi-aocc/bin:$PATH"

# ---------- CP2K 可执行文件路径 ----------
export PATH="$HOME/cp2k-2026.1/build_cmake/bin:$PATH"

5.2 创建 CP2K 专用环境脚本 ~/cp2k_env.sh(运行时和编译时 source)

cat > ~/cp2k_env.sh << 'EOF'
#!/bin/bash
# 使用前执行: source ~/cp2k_env.sh

# AOCC 运行时库
export LD_LIBRARY_PATH="$AOCC_HOME/lib:$LD_LIBRARY_PATH"

# AOCL 数学库(LP64)
export LD_LIBRARY_PATH="$AOCL_HOME/lib:$LD_LIBRARY_PATH"
export LIBRARY_PATH="$AOCL_HOME/lib:$LIBRARY_PATH"

# OpenMPI (AOCC)
export LD_LIBRARY_PATH="$HOME/openmpi-aocc/lib:$LD_LIBRARY_PATH"

# CP2K 依赖库(ELPA、libxsmm)
export LD_LIBRARY_PATH="$HOME/cp2k-2026.1/tools/toolchain/install/elpa-2024.05.001/cpu/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH="$HOME/cp2k-2026.1/tools/toolchain/install/libxsmm-e0c4a2389afba36c453233ad7de07bd92c715bec/lib:$LD_LIBRARY_PATH"

# OpenMP 线程控制
export OMP_NUM_THREADS=1
export OMP_PLACES=threads
export OMP_PROC_BIND=close
export BLIS_NUM_THREADS=1          # 抑制 AOCL 内部多线程
export OPENBLAS_NUM_THREADS=1      # 安全冗余
EOF

chmod +x ~/cp2k_env.sh

重要警告:
- 永远不要把 LD_LIBRARY_PATH 写入 ~/.bashrc 或 ~/.profile,否则可能导致系统服务(如 Xorg)加载不兼容的库,造成无法启动。
- 每次编译或运行 CP2K 前,请先执行 source ~/cp2k_env.sh。
- 如果你不小心将路径写入了全局环境并导致系统无法启动,请参考本手册第 9 节恢复。

6. 准备 CP2K 源码并修复 Toolchain

6.1 解压 CP2K

cd ~
tar -xjf cp2k-2026.1.tar.bz2
cd cp2k-2026.1

6.2 修复 toolchain 脚本

# 1. 修复 install_mathlibs.sh 覆盖 MATH_LIBS
cd tools/toolchain/scripts/stage2
sed -i "s|export MATH_CFLAGS=''|export MATH_CFLAGS=\"\${MATH_CFLAGS:-}\"|" install_mathlibs.sh
sed -i "s|export MATH_LDFLAGS=''|export MATH_LDFLAGS=\"\${MATH_LDFLAGS:-}\"|" install_mathlibs.sh
sed -i "s|export MATH_LIBS=''|export MATH_LIBS=\"\${MATH_LIBS:-}\"|" install_mathlibs.sh
cd ~/cp2k-2026.1

# 2. 修复 ELPA 预处理错误
cd tools/toolchain/scripts/stage5
sed -i '/\.\.\/configure \\/,/^[[:space:]]*;;/ {
  /^[[:space:]]*\.\.\// a\    sed -i "s/^CPP = cpp -E/CPP = clang -E/" Makefile
}' install_elpa.sh
cd ~/cp2k-2026.1

7. 运行 CP2K Toolchain(自动生成大部分依赖)

执行前务必 source 环境:

source ~/cp2k_env.sh

cd ~/cp2k-2026.1/tools/toolchain
./install_cp2k_toolchain.sh \
  -j $(nproc) \
  --mpi-mode=openmpi \
  --with-amd=system \
  --with-openblas=no \
  --with-acml=no \
  --with-scalapack=system \
  --with-cosma=no \
  --with-sirius=no \
  --with-plumed=no \
  --with-elpa=no \
  --with-dbcsr=no

预期:FFTW、Libxc、Libxsmm、ScaLAPACK、spglib、libvori 等全部编译成功。

8. 手动编译安装 ELPA

8.1 下载源码

cd ~/cp2k-2026.1/tools/toolchain/build
wget https://www.cp2k.org/static/downloads/elpa-2024.05.001.tar.gz
tar -xzf elpa-2024.05.001.tar.gz
cd elpa-2024.05.001
mkdir build_cpu && cd build_cpu

8.2 配置(EPYC 7002/7003 禁用 AVX512;9004/9005 应移除 --disable-avx512)

../configure \
  --prefix=$HOME/cp2k-2026.1/tools/toolchain/install/elpa-2024.05.001/cpu \
  --libdir=$HOME/cp2k-2026.1/tools/toolchain/install/elpa-2024.05.001/cpu/lib \
  --enable-openmp=yes \
  --disable-avx512 \
  FC=mpifort CC=mpicc CXX=mpicxx \
  CFLAGS="-O2 -fPIC -fopenmp -g -mtune=native -mavx -mfma -mavx2 -msse4 -fno-lto" \
  FCFLAGS="-O2 -fPIC -fopenmp -g -mtune=native -mavx -mfma -mavx2 -msse4 -fno-lto" \
  LDFLAGS="-Wl,--allow-multiple-definition -Wl,--enable-new-dtags ${MATH_LDFLAGS} ${SCALAPACK_LDFLAGS} -lstdc++" \
  LIBS="${SCALAPACK_LIBS} -lblis -lflame"

8.3 修复预处理并编译

# 生成正确的 fortran_constants.F90
clang -E -I. -I../src -I.. ../src/fortran_constants.h -o test_clang.F90_
awk '/!ELPA_C_DEFINE/ {gsub(/!ELPA_C_DEFINE/, "\n"); gsub(/NEWLINE/, "\n"); print;}' test_clang.F90_ > src/fortran_constants.F90

# 使用 clang 作为预处理器
sed -i 's/^CPP = cpp -E/CPP = clang -E/' Makefile

# 编译(链接会失败,但 .o 文件都会生成)
make -j$(nproc) 2>&1 | tail -20

8.4 手动链接共享库(用 flang 保证运行时库完整)

flang -shared -fopenmp -o libelpa_openmp.so $(find src -name '*.o' -path '*/.libs/*') \
  -L$AOCL_HOME/lib -lscalapack -lblis -lflame

8.5 安装库、模块、pkg-config 文件

mkdir -p $HOME/cp2k-2026.1/tools/toolchain/install/elpa-2024.05.001/cpu/lib
mkdir -p $HOME/cp2k-2026.1/tools/toolchain/install/elpa-2024.05.001/cpu/include/elpa_openmp-2024.05.001/modules
cp libelpa_openmp.so $HOME/cp2k-2026.1/tools/toolchain/install/elpa-2024.05.001/cpu/lib/libelpa_openmp.so.19
ln -sf libelpa_openmp.so.19 $HOME/cp2k-2026.1/tools/toolchain/install/elpa-2024.05.001/cpu/lib/libelpa_openmp.so
cp -r modules/. $HOME/cp2k-2026.1/tools/toolchain/install/elpa-2024.05.001/cpu/include/elpa_openmp-2024.05.001/modules/

mkdir -p $HOME/cp2k-2026.1/tools/toolchain/install/elpa-2024.05.001/cpu/lib/pkgconfig
cat > $HOME/cp2k-2026.1/tools/toolchain/install/elpa-2024.05.001/cpu/lib/pkgconfig/elpa_openmp.pc << 'EOF'
prefix=/home/zhuoh/cp2k-2026.1/tools/toolchain/install/elpa-2024.05.001/cpu
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include/elpa_openmp-2024.05.001

Name: ELPA
Description: Eigenvalue SoLvers for Petaflop-Applications (OpenMP version)
Version: 2024.05.001
Libs: -L${libdir} -lelpa_openmp
Cflags: -I${includedir} -I${includedir}/modules
EOF

9. 手动编译安装 DBCSR

9.1 下载与配置

cd ~/cp2k-2026.1/tools/toolchain/build
wget https://www.cp2k.org/static/downloads/dbcsr-2.9.0.tar.gz
tar -xzf dbcsr-2.9.0.tar.gz
cd dbcsr-2.9.0
mkdir build-cpu && cd build-cpu

cmake .. \
  -DCMAKE_INSTALL_PREFIX=$HOME/cp2k-2026.1/tools/toolchain/install/dbcsr-2.9.0 \
  -DUSE_MPI=ON \
  -DUSE_OPENMP=ON \
  -DUSE_LIBXSMM=ON \
  -DCMAKE_C_COMPILER=clang \
  -DCMAKE_CXX_COMPILER=clang++ \
  -DCMAKE_Fortran_COMPILER=flang \
  -DCMAKE_Fortran_FLAGS="-ffree-form -O2" \
  -DLIBXSMM_ROOT="$HOME/cp2k-2026.1/tools/toolchain/install/libxsmm-e0c4a2389afba36c453233ad7de07bd92c715bec"
make -j$(nproc)   # 部分 C++ 示例链接失败可忽略

9.2 手动编译缺失的 dbcsr_c 文件

xsmm_dir=$(dirname $(find $HOME/cp2k-2026.1/tools/toolchain/install/libxsmm-*/include -name 'libxsmm.mod' -print -quit))

flang -I src -I ~/cp2k-2026.1/tools/toolchain/build/dbcsr-2.9.0/src \
  -I "$xsmm_dir" -I $HOME/openmpi-aocc/include -I $HOME/openmpi-aocc/lib \
  -O2 -fPIC -fopenmp -g -mtune=native -ffree-form -cpp -c \
  src/dbcsr_api_c.F -o src/CMakeFiles/dbcsr_c.dir/dbcsr_api_c.F.o

flang -I src -I ~/cp2k-2026.1/tools/toolchain/build/dbcsr-2.9.0/src \
  -I "$xsmm_dir" -I $HOME/openmpi-aocc/include -I $HOME/openmpi-aocc/lib \
  -O2 -fPIC -fopenmp -g -mtune=native -ffree-form -cpp -c \
  src/tensors/dbcsr_tensor_api_c.F -o src/CMakeFiles/dbcsr_c.dir/tensors/dbcsr_tensor_api_c.F.o

9.3 打包并安装

mkdir -p lib
ar qc lib/libdbcsr_c.a src/CMakeFiles/dbcsr_c.dir/dbcsr_api_c.F.o src/CMakeFiles/dbcsr_c.dir/tensors/dbcsr_tensor_api_c.F.o
ranlib lib/libdbcsr_c.a

mkdir -p $HOME/cp2k-2026.1/tools/toolchain/install/dbcsr-2.9.0/lib
mkdir -p $HOME/cp2k-2026.1/tools/toolchain/install/dbcsr-2.9.0/include
cp lib/libdbcsr_c.a $HOME/cp2k-2026.1/tools/toolchain/install/dbcsr-2.9.0/lib/
cp src/libdbcsr.a $HOME/cp2k-2026.1/tools/toolchain/install/dbcsr-2.9.0/lib/
cp src/*.mod $HOME/cp2k-2026.1/tools/toolchain/install/dbcsr-2.9.0/include/
cp src/dbcsr.h $HOME/cp2k-2026.1/tools/toolchain/install/dbcsr-2.9.0/include/ 2>/dev/null || true
cp src/tensors/dbcsr_tensor.h $HOME/cp2k-2026.1/tools/toolchain/install/dbcsr-2.9.0/include/ 2>/dev/null || true

9.4 创建 CMake 配置文件

mkdir -p $HOME/cp2k-2026.1/tools/toolchain/install/dbcsr-2.9.0/lib/cmake/dbcsr

cat > $HOME/cp2k-2026.1/tools/toolchain/install/dbcsr-2.9.0/lib/cmake/dbcsr/DBCSRConfig.cmake << 'EOF'
set(DBCSR_INCLUDE_DIRS "${CMAKE_CURRENT_LIST_DIR}/../../../include")
set(DBCSR_LIBRARY_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../lib")
add_library(DBCSR::dbcsr STATIC IMPORTED)
set_target_properties(DBCSR::dbcsr PROPERTIES
  IMPORTED_LOCATION "${DBCSR_LIBRARY_DIR}/libdbcsr.a"
  INTERFACE_INCLUDE_DIRECTORIES "${DBCSR_INCLUDE_DIRS}"
  INTERFACE_LINK_LIBRARIES "${DBCSR_LIBRARY_DIR}/libdbcsr_c.a"
)
EOF

cat > $HOME/cp2k-2026.1/tools/toolchain/install/dbcsr-2.9.0/lib/cmake/dbcsr/DBCSRConfigVersion.cmake << 'EOF'
set(PACKAGE_VERSION "2.9.0")
if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
  set(PACKAGE_VERSION_COMPATIBLE FALSE)
else()
  set(PACKAGE_VERSION_COMPATIBLE TRUE)
  if(PACKAGE_VERSION VERSION_EQUAL PACKAGE_FIND_VERSION)
    set(PACKAGE_VERSION_EXACT TRUE)
  endif()
endif()
EOF

10. 手动编译 Libint2 并添加 Fortran 接口

10.1 进入已有的构建目录(若不存在则重新下载)

cd ~/cp2k-2026.1/tools/toolchain/build/libint-v2.6.0-cp2k-lmax-5   # 若不存在,重新下载解压

10.2 重新配置并编译(启用 Fortran)

./configure CC=clang CXX=clang++ FC=flang --enable-fortran \
  --prefix=$HOME/cp2k-2026.1/tools/toolchain/install/libint-v2.6.0-cp2k-lmax-5
make -j$(nproc)
make install

10.3 手动打包 Fortran 库(如果未自动生成)

cd fortran
ar qc libint2_f.a libint_f.o
ranlib libint2_f.a
mkdir -p $HOME/cp2k-2026.1/tools/toolchain/install/libint-v2.6.0-cp2k-lmax-5/lib
cp libint2_f.a $HOME/cp2k-2026.1/tools/toolchain/install/libint-v2.6.0-cp2k-lmax-5/lib/
cp libint_f.mod $HOME/cp2k-2026.1/tools/toolchain/install/libint-v2.6.0-cp2k-lmax-5/include/

11. 创建缺失的 CMake 配置文件

11.1 Libxc

mkdir -p ~/cp2k-2026.1/tools/toolchain/install/libxc-7.0.0/lib/cmake/libxc

cat > ~/cp2k-2026.1/tools/toolchain/install/libxc-7.0.0/lib/cmake/libxc/LibxcConfig.cmake << 'EOF'
set(Libxc_INCLUDE_DIRS "${CMAKE_CURRENT_LIST_DIR}/../../../include")
set(Libxc_LIBRARY_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../lib")
add_library(Libxc::xcf03 STATIC IMPORTED)
set_target_properties(Libxc::xcf03 PROPERTIES
  IMPORTED_LOCATION "${Libxc_LIBRARY_DIR}/libxcf03.a"
  INTERFACE_INCLUDE_DIRECTORIES "${Libxc_INCLUDE_DIRS}"
)
add_library(Libxc::xc STATIC IMPORTED)
set_target_properties(Libxc::xc PROPERTIES
  IMPORTED_LOCATION "${Libxc_LIBRARY_DIR}/libxc.a"
  INTERFACE_INCLUDE_DIRECTORIES "${Libxc_INCLUDE_DIRS}"
  INTERFACE_LINK_LIBRARIES "Libxc::xcf03"
)
set(Libxc_LIBRARIES Libxc::xc Libxc::xcf03)
set(Libxc_FOUND TRUE)
EOF

cat > ~/cp2k-2026.1/tools/toolchain/install/libxc-7.0.0/lib/cmake/libxc/LibxcConfigVersion.cmake << 'EOF'
set(PACKAGE_VERSION "7.0.0")
if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
  set(PACKAGE_VERSION_COMPATIBLE FALSE)
else()
  set(PACKAGE_VERSION_COMPATIBLE TRUE)
  if(PACKAGE_VERSION VERSION_EQUAL PACKAGE_FIND_VERSION)
    set(PACKAGE_VERSION_EXACT TRUE)
  endif()
endif()
EOF

11.2 设置 PKG_CONFIG_PATH(在继续前执行)

export PKG_CONFIG_PATH="$HOME/cp2k-2026.1/tools/toolchain/install/elpa-2024.05.001/cpu/lib/pkgconfig:$HOME/cp2k-2026.1/tools/toolchain/install/libxsmm-e0c4a2389afba36c453233ad7de07bd92c715bec/lib/pkgconfig:$HOME/cp2k-2026.1/tools/toolchain/install/fftw-3.3.10/lib/pkgconfig:$HOME/cp2k-2026.1/tools/toolchain/install/libint-v2.6.0-cp2k-lmax-5/lib/pkgconfig:$PKG_CONFIG_PATH"

12. CMake 配置与编译 CP2K

12.1 准备构建目录并 source 环境

source ~/cp2k_env.sh   # 确保库路径已设置
cd ~/cp2k-2026.1
rm -rf build_cmake
mkdir build_cmake && cd build_cmake

12.2 CMake 命令(启用全部加速库,使用 -O2 -march=native)

cmake \
  -DCMAKE_C_COMPILER=clang \
  -DCMAKE_CXX_COMPILER=clang++ \
  -DCMAKE_Fortran_COMPILER=flang \
  -DCMAKE_Fortran_FLAGS="-ffree-form -march=native -O2" \
  -DFFTW_ROOT="$HOME/cp2k-2026.1/tools/toolchain/install/fftw-3.3.10" \
  -DLibxc_DIR="$HOME/cp2k-2026.1/tools/toolchain/install/libxc-7.0.0/lib/cmake/libxc" \
  -DCP2K_LIBXC_LINK_LIBRARIES="$HOME/cp2k-2026.1/tools/toolchain/install/libxc-7.0.0/lib/libxcf03.a;$HOME/cp2k-2026.1/tools/toolchain/install/libxc-7.0.0/lib/libxc.a" \
  -DCP2K_LIBINT2_ROOT="$HOME/cp2k-2026.1/tools/toolchain/install/libint-v2.6.0-cp2k-lmax-5" \
  -DCP2K_LIBINT2_MOD_FILE="$HOME/cp2k-2026.1/tools/toolchain/install/libint-v2.6.0-cp2k-lmax-5/include/libint_f.mod" \
  -DCP2K_LIBINT2_LINK_LIBRARIES="$HOME/cp2k-2026.1/tools/toolchain/install/libint-v2.6.0-cp2k-lmax-5/lib/libint2.a;$HOME/cp2k-2026.1/tools/toolchain/install/libint-v2.6.0-cp2k-lmax-5/lib/libint2_f.a" \
  -DCP2K_LIBXSMM_INCLUDE_DIRS="/home/zhuoh/cp2k-2026.1/tools/toolchain/install/libxsmm-e0c4a2389afba36c453233ad7de07bd92c715bec/include" \
  -DCP2K_LIBXSMM_LINK_LIBRARIES="/home/zhuoh/cp2k-2026.1/tools/toolchain/install/libxsmm-e0c4a2389afba36c453233ad7de07bd92c715bec/lib/libxsmmext.so;/home/zhuoh/cp2k-2026.1/tools/toolchain/install/libxsmm-e0c4a2389afba36c453233ad7de07bd92c715bec/lib/libxsmmf.so;/home/zhuoh/cp2k-2026.1/tools/toolchain/install/libxsmm-e0c4a2389afba36c453233ad7de07bd92c715bec/lib/libxsmm.a;/usr/lib/x86_64-linux-gnu/libpthread.a;/usr/lib/x86_64-linux-gnu/librt.a;/usr/lib/x86_64-linux-gnu/libdl.a;/usr/lib/x86_64-linux-gnu/libm.so;/usr/lib/x86_64-linux-gnu/libc.so" \
  -DDBCSR_DIR="$HOME/cp2k-2026.1/tools/toolchain/install/dbcsr-2.9.0/lib/cmake/dbcsr" \
  -DCP2K_BLAS_LINK_LIBRARIES="blis;flame" \
  -DCP2K_LAPACK_LINK_LIBRARIES="flame" \
  -DCP2K_SCALAPACK_LINK_LIBRARIES="scalapack" \
  -DCP2K_USE_MPI=ON \
  -DCP2K_USE_FFTW3=ON \
  -DCP2K_USE_LIBXC=ON \
  -DCP2K_USE_LIBINT2=ON \
  -DCP2K_USE_LIBXSMM=ON \
  -DCP2K_USE_ELPA=ON \
  -DCP2K_USE_SCALAPACK=ON \
  -DCP2K_USE_DBCSR=ON \
  ..

12.3 编译

make -j$(nproc)

如果遇到 dkh_main.F 内部编译器错误,单独降级该文件至 -O0 即可:

rm -f src/CMakeFiles/cp2k.dir/dkh_main.F.o
# 手动用 flang -O0 ... 编译,或修改 build.make 中该文件的优化标志
make -j$(nproc)

13. 验证安装

source ~/cp2k_env.sh   # 若不运行时,无需,但本步骤需要
cd ~/cp2k-2026.1/build_cmake

# 查看版本
./bin/cp2k.psmp --version
# 预期: CP2K version 2026.1, cp2kflags: omp libint fftw3 libxc elpa parallel scalapack xsmm

14. EPYC 9004/9005 优化建议

对于 Genoa (9004) 和 Turin (9005),上述步骤完全适用,仅需调整以下内容以发挥全部性能:

14.1 ELPA 启用 AVX-512
在 ELPA 配置时不要使用 --disable-avx512,并考虑添加 --enable-avx512-kernels(如果 ELPA 版本支持)。

14.2 CMake 编译标志
将 -march=native 改为显式指定架构(如果 AOCC 5.1 支持):
- Genoa: -march=znver4
- Turin: -march=znver5(或仍使用 -march=native)

此外,可添加 -mprefer-avx512(AOCC 特有)以倾向生成 AVX-512 代码。

14.3 libxsmm 更新
libxsmm 1.17 对 Zen4/5 有针对性优化,但若想进一步,可从 GitHub 下载新版 libxsmm 并替换 toolchain 安装目录里的版本,然后重新编译 CP2K。

14.4 线程数调整
将 OMP_NUM_THREADS 设为实际物理核心数(如 96 或 128)。

15. 将来性能调优选项(当前已使用 -O2 -march=native)

优化项 | 方法 | 预期提升 | 风险
升级到 -O3 | 修改 cmake 的 Fortran 标志为 -O3,若某文件 ICE 则单独降级 | 3~8% | 个别文件可能触发 ICE
启用链接时优化 (LTO) | 添加 -flto 到编译和链接标志 | 5~10% | 链接时间增加,需外部库也用 LTO 编译
使用 -ffast-math | 允许编译器打破 IEEE 浮点规则 | 5~10% | 可能改变数值结果,需验证
显式请求 AVX-512 | 添加 -mprefer-avx512 (仅 EPYC 9004+) | 5~15% | 仅 Zen4+ 可用
优化 ELPA 内核 | 在 configure 时选择合适的 --with-generic-kernel | 2~5% | 低
内存分配器 | 运行时使用 LD_PRELOAD=/usr/lib/libjemalloc.so | 0~5% | 极低

实施建议:每次只改一个选项,用 cp2k.psmp -i test.inp 验证正确性和性能改善,使用 CP2K 自带回归测试保证无错。

16. 常见问题与恢复

16.1 系统无法启动(可能因为全局 LD_LIBRARY_PATH)
如果你误将包含 AOCC/AOCL 库的 LD_LIBRARY_PATH 写入了 ~/.bashrc 或 /etc/environment,导致图形界面崩溃,按以下步骤恢复:

1. 在虚拟机宿主机上使用 virsh console VM_NAME 进入控制台。
2. 若看到登录提示,直接输入用户名密码(注意可能因 .bashrc 加载后立即崩溃),可尝试在登录后立即按 Ctrl+C 中断 bash 初始化。更可靠的方法是重启虚拟机,在 GRUB 引导时按 e 编辑启动命令行,添加 rw init=/bin/bash 或 single,然后按 F10 启动。
3. 进入 root shell 后,挂载文件系统为可读写:mount -o remount,rw /
4. 重命名有问题的 .bashrc:mv /home/zhuoh/.bashrc /home/zhuoh/.bashrc.broken
5. 重启:reboot,然后重新登录,修正 .bashrc。

16.2 重新编译时出现内部编译器错误(ICE)
通常是 dkh_main.F,可将其优化降至 -O0 并继续 make。其他文件极少遇到,若遇到同样处理。

16.3 链接时找不到 libxc 符号
运行 sed -i 's|/libxcf03.a|/libxcf03.a /home/zhuoh/cp2k-2026.1/tools/toolchain/install/libxc-7.0.0/lib/libxc.a|' src/CMakeFiles/cp2k.dir/link.txt,然后重新 make。

17. 版本信息

- AOCC: 5.1.0
- AOCL: 5.2.0 (LP64)
- OpenMPI: 5.0.10 (AOCC 编译)
- CP2K: 2026.1
- 依赖库:ELPA 2024.05.001, DBCSR 2.9.0, LIBINT 2.6.0-cp2k-lmax-5, LIBXC 7.0.0, LIBXSMM 1.17.0, FFTW 3.3.10✨ DeepSeek

评分 Rate

参与人数
Participants 1
eV +1 收起 理由
Reason
guoguoping199 + 1 牛!

查看全部评分 View all ratings

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-5-30 13:13 , Processed in 0.363865 second(s), 23 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list