Quantum ESPRESSOのビルド

Wisteria Odyssey


$ module add fj fjmpi fftw
$ ./install/configure LANG=C MPIF90=mpifrtpx CC=fccpx F90=frtpx BLAS_LIBS=-SSL2BLAMP FFT_LIBS="-lfftw3_omp -lfftw3" --enable-openmp
    
このままだと上手くいかないので、あとはmake.incを手動で書き換えるmake.inc。 特に重要なのは

FFLAGS         = -Kfast -Kopenmp -X08 -Cpp
    
順番に、最適化、OpenMP、Fortran08仕様、Cプリプロセッサマクロ有効化。
その後

make pw
    
libmbd (Many Body Dispersion)のところで一旦コケる。 これは富士通コンパイラがFortran2018の仕様の一部(c_bindとオプショナル引数の併用)をサポートしていないため。

sed -i -e "s/, bind(c)//g" -e "s/bind(c)//g" mbd_c_api.F90
    

スレッド並列版ZGEMMを呼ぶとスレッド数と行列サイズによっては落ちる(SSL2のバグ)。 回避するためには-KNOSVE(SVE無効化)のオプションを入れる。


富士通言語環境バージョン1.2.38にて修正された。

Wisteria Aquarius


$ module add nvidia nvmpi
$ ./configure --with-cuda=${NVHPC}/Linux_x86_64/22.7/cuda --with-cuda-cc=80 --with-cuda-runtime=11.7 --enable-openmp --with-cuda-mpi=yes BLAS_LIBS="-L${NVHPC}/Linux_x86_64/22.7/compilers/lib/ -lblas" LAPACK_LIBS="-L${NVHPC}/Linux_x86_64/22.7/compilers/lib/ -llapack"
$ make pw
    
小さい系では-nkを増やしたくなり、その場合にはGPUあたりのprocess数を増やしたくなる。 MPSを使うと良い

#!/bin/bash

export CUDA_VISIBLE_DEVICES="0,1,2,3,4,5,6,7"
export CUDA_MPS_PIPE_DIRECTORY=/tmp/nvidia-mps
export CUDA_MPS_LOG_DIRECTORY=/tmp/nvidia-log
nvidia-cuda-mps-control -d

unset CUDA_VISIBLE_DEVICES

export OMP_NUM_THREADS=1
mpiexec -np 72 ~/program/qe/a/bin/pw.x -nk 72 -in scf_1000026.in |tee mps_72.out

echo quit | nvidia-cuda-mps-control
    
のようにする。

ISSP system-C kugui ACC-node


$ module add  nvhpc-nompi openmpi_nvhpc
$ ./configure --with-cuda=${NVHPC}/Linux_x86_64/22.2/cuda --with-cuda-cc=80 --with-cuda-runtime=11.6 --enable-openmp --with-cuda-mpi=yes BLAS_LIBS="-L${NVHPC}/Linux_x86_64/22.2/compilers/lib/ -lblas" LAPACK_LIBS="-L${NVHPC}/Linux_x86_64/22.2/compilers/lib/ -llapack"
$ make pw
    
動作未確認