本文记录了在ARM架构的Ubuntu系统(基于天河星逸arm架构的docker镜像)上使用K8s镜像安装SIESTA量子化学软件包的过程。主要步骤包括:1)安装GCC-9等基础工具;2)安装OpenMPI并行计算库;3)安装OpenBLAS、LAPACK等数学库;4)安装SCALAPACK并行线性代数库;5)安装FFTW3傅里叶变换库;6)编译SIESTA主程序及工具包。期间解决了编译器版本过高导致的SCALAPACK编译错误、系统架构识别问题等。最终成功构建了完整的SIESTA计算环境。

0. gcc安装

apt-get update
apt-get install gcc-9 g++-9 gfortran-9
apt-get install make cmake vim
apt-get install rsync //vasp安装需要

镜像其实可以安装gcc11,gcc14,但是在安装scalapack的时候会报错Rank mismatch between actual argument at (1) and actual argument at (2).错误就是编译器版本太高了,网上说编译命令后边加上-fallow-argument-mismatch可以解决,但似乎又会出现新的错误,只有把编译器版本降低

1. openmpi安装

./configure CC=gcc-9 CXX=g++-9 FC=gfortran-9 F77=gfortran-9 --prefix=/HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/openmpi-gcc9
CC=gcc-9 CXX=g++-9 FC=gfortran-9 F77=gfortran-9 make all install

2. openblas安装

CC=gcc-9 CXX=g++-9 FC=gfortran-9 F77=gfortran-9 make PREFIX=/HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/mathlib-gcc9
CC=gcc-9 CXX=g++-9 FC=gfortran-9 F77=gfortran-9 make PREFIX=/HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/mathlib-gcc9 install

3. lapack安装

vi make.inc
CC=gcc-9
FC=gfortran-9
BLASLIB      = /HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/mathlib-gcc9/lib/libopenblas.a
CBLASLIB     = /HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/mathlib-gcc9/lib/libcblas.a
LAPACKLIB    = /HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/mathlib-gcc9/lib/liblapack.a
TMGLIB       = /HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/mathlib-gcc9/lib/libtmglib.a
LAPACKELIB   = /HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/mathlib-gcc9/lib/liblapacke.a
make cblaslib
make lapackelib
make lapacklib
//vasp还需要编译tmglib
make tmglib

4. scalapack安装

mkdir build && cd build
CC=mpicc FC=mpifort cmake -DMPI_ROOT=/HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/openmpi-gcc9 -DBLAS_LIBRARIES=/HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/mathlib-gcc9/lib/libopenblas.a -DLAPACK_LIBRARIES=/HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/mathlib-gcc9/lib/liblapack.a -DCMAKE_INSTALL_PREFIX=/HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/mathlib-gcc9/lib ..
CC=mpicc FC=mpifort make -j4

5. fftw3安装

fftw3并不是siesta必须的,只是在编译siesta之后编译Util文件夹的时候, STM/ol-stm文件夹的Makefile需要指定FFTW位置,而且需要--enable-float

CC=gcc-9 Fc=gfortran-9 ./configure --prefix=/HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/mathlib-gcc9 --enable-mpi --enable-float --enable-openmp
make -j4
make install

5. siesta安装

wget https://launchpad.net/siesta/4.0/4.0.2/+download/siesta-4.0.2.tar.gz
tar zxvf siesta-4.0.2.tar.gz
cd siesta-4.0.2
cd Obj
sh ../Src/obj_setup.sh
CC=gcc-9 FC=gfortran-9 ../Src/configure --with-blas=/HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/mathlib-gcc9/lib/libopenblas.a --with-lapack=/HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/mathlib-gcc9/lib/liblapack.a --with-scalapack=/HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/software/scalapack-2.2.2/libscalapack.a --prefix=/HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/siesta --enable-mpi

报错configure: error: cannot guess build type; you must specify one‘,这是因为 uname -a 显示的是aarch64,在config.guess种找不到对应的,因此需要在config.guess文件增加该选项,通过vim打开文件,增加aarch64判断

    arm*:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit 0 ;;
    //增加一下内容
    aarch64*:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit 0 ;;
make siesta
cd ../Util
vi STM/ol-stm/Src/Makefile
#修改FFTW-ROOT
FFTW_ROOT=/HOME/nscc-gz/nscc-gz_qmo3/HDD_POOL/install/mathlib-gcc9
sh build_all.sh

报错及解决

  1. gcc: fatal error: cannot execute 'f951': execvp: No such file or directory
    在这里插入图片描述
    原因:gcc和mpif90版本不同,将Makefile和Makefile.include里面所有gcc改成gcc-9,g++改成g++-9

更多推荐