소프트웨어 설치누리온 CP2K CP2K-6.1.0 버전 설치 소개 슈퍼컴퓨팅인프라센터 2020. 9. 11. 11:39
이 문서에서는 CP2K 6.1.0 버전을 컴파일 하여 설치 하는 방법에 대해 예시로 소개합니다.
가. 설치 환경
Intel Xeon Phi 7250
Intel Xeon 6148
나. 설치 전 환경 설정
CP2K 설치에는 여러 의존성 패키지들이 필요합니다. 본 내용은 컴파일러와 MPI, CMAKE를 제외한 의존 라이브러리들을 CP2K 의 toolchain 을 이용하는 방법으로 소개합니다.
[환경설정]
Copy $ module purge
$ module load gcc/7.2.0 openmpi/3.1.0 cmake/3.12.3
다. CP2K-v6.1.0 버전 설치 과정
설치 과정 소개는 tar 를 이용한 압축 해제 방법과 설정 방법등 진행 절차를 위주로 설명하고, 소스 파일 다운로드 등은 생략합니다.
설치 소개 시 사용된 경로 ${HOME}/CP2K-6.1.0/ 는 설치 안내를 위한 경로이므로, 실제 설치할 경로를 지정하여 설치 진행하시기 바랍니다.
[설치과정]
Copy $ cd ${HOME}/CP2K-6.1.0/
$ cd tools/toolchain
$ vi install_cp2k_toolchain.sh
- - - [install_cp2k_toolchain.sh 수정 사항] 참고 - - -
$ vi scripts/install_ptscotch.sh
- - - [install_ptscotch.sh 수정 사항] 참고 - - -
$ vi scripts/install_pexsi.sh
- - - [install_pexsi.sh 수정 사항] 참고 - - -
$ ./install_cp2k_toolchain.sh -j 2 --install-all \
--mpi-mode=openmpi --math-mode=openblas --enable-omp \
--with-binutils=system --with-openblas --with-gcc=system \
--with-openmpi=system --with-cmake=system
$ cp install/arch/* ../../arch
$ cd ../../makefiles
$ vi ../arch/local.popt
- - - [local.popt 수정 사항] 참고 - - -
$ vi ../arch/local.psmp
- - - [local.psmp 수정 사항] 참고 - - -
$ make -j 2 ARCH=local VERSION="popt psmp"
※ popt : MPI 버전
※ psmp : MPI+OpenMP의 Hybrid 버전
※ 참고 : https://www.cp2k.org/howto:compile
[install_cp2k_toolchain.sh 수정 사항]
Copy 760라인 : CFLAGS="-O2 -ftree-vectorize -g -fno-omit-frame-pointer -mfma -mavx512f -mavx512cd -ffast-math $TSANFLAGS"
761라인 : FFLAGS="-O2 -ftree-vectorize -g -fno-omit-frame-pointer -mfma -mavx512f -mavx512cd -ffast-math $TSANFLAGS"
762라인 : F77FLAGS="-O2 -ftree-vectorize -g -fno-omit-frame-pointer -mfma -mavx512f -mavx512cd -ffast-math $TSANFLAGS"
763라인 : F90FLAGS="-O2 -ftree-vectorize -g -fno-omit-frame-pointer -mfma -mavx512f -mavx512cd -ffast-math $TSANFLAGS"
764라인 : FCFLAGS="-O2 -ftree-vectorize -g -fno-omit-frame-pointer -mfma -mavx512f -mavx512cd -ffast-math $TSANFLAGS"
765라인 : CXXFLAGS="-O2 -ftree-vectorize -g -fno-omit-frame-pointer -mfma -mavx512f -mavx512cd -ffast-math $TSANFLAGS"
859라인 : BASEFLAGS="-mfma -mavx512f -mavx512cd -fno-omit-frame-pointer -g $"
※ 위 수정 예제는 "-march=native" 를 "-mfma -mavx512f -mavx512cd" 로 변경
"-march=native" 는 설치 시스템에 장착된 CPU 의 최적 옵션을 찾아 컴파일하는 옵션으로,
소개 내용은 누리온의 skylake 와 knl 계산노드에서 모두 사용 가능하도록 "-mfma -mavx512f -mavx512cd" 로 빌드
※ 참고 : https://colfaxresearch.com/knl-avx512
[install_ptscotch.sh 수정 사항]
Copy 38라인 : sed -e "s|\(^CCS\).*|\1 = $MPICC|g" \
40라인 : -e "s|\(^CCD\).*|\1 = $MPICC|g" \
※ "$CC " 대신 "$MPICC " 를 사용
[install_pexsi.sh수정 사항]
Copy 55라인 : -e "s|\(CPP_LIB *=\).*|\1 -lstdc++ $ $ -lmpi_cxx |g" \
※ "-lmpi_cxx" 옵션을 추가
[local.popt 수정 사항]
Copy line 17 LIBS = -lquip_core -latoms -lFoX_sax -lFoX_common -lFoX_utils -lFoX_fsys -lpexsi -lsuperlu_dist -lptscotchparmetis -lptscotch -lptscotcherr -lscotchmetis -lscotch -lscotcherr -lelpa -lscalapack -lxsmmf -lxsmm -ldl -lpthread -lsmm_dnn -lxcf03 -lxc -lderiv -lint -lfftw3 -lmpi -lopenblas -lstdc++ -lmpi_cxx
※ 17라인 LIBS 항목에 "-lmpi_cxx" 가 없는 경우 **** "-lmpi -lmpi_cxx" 와 같이 "-lmpi_cxx" 를 추가
[local.psmp 수정 사항]
Copy line 17 LIBS = -lquip_core -latoms -lFoX_sax -lFoX_common -lFoX_utils -lFoX_fsys -lpexsi -lsuperlu_dist -lptscotchparmetis -lptscotch -lptscotcherr -lscotchmetis -lscotch -lscotcherr -lelpa_openmp -lscalapack -lxsmmf -lxsmm -ldl -lpthread -lsmm_dnn -lxcf03 -lxc -lderiv -lint -lfftw3 -lfftw3_omp -lmpi -lopenblas_omp -lstdc++ -lmpi_cxx
※ 17라인 LIBS 항목에 "-lmpi_cxx" 가 없는 경우 "-lmpi -lmpi_cxx" 와 같이 "-lmpi_cxx" 를 추가
라. 테스트
Copy #!/bin/sh
#PBS -V
#PBS -N cp2k_sample
#PBS -q normal
#PBS -A etc
#PBS -l select=1:ncpus=64:mpiprocs=32:ompthreads=2
#PBS -l walltime=04:00:00
cd $PBS_O_WORKDIR
module purge
module load gcc/6.1.0 openmpi/3.1.0 cmake/3.12.3
export PATH=$PATH:$/cp2k-6.1.0/exe/local
mpirun cp2k.psmp -i H2O-32.inp
※ ${HOME}/CP2K-6.1.0/tests 경로에 예제가 들어 있으니 필요한 경우 본인의 스크레치(/scratch/$USER) 경로로 복사해서 테스트 진행해 볼 수 있습니다.
마. 기타
CP2K toolchain 이용하여 설치 시 "-march=native" 옵션이 포함되어져 있어 KNL 계산노드 전용으로 설치하는 경우 KNL 계산노드에서 설치를 진행해야 오류가 발생하지 않습니다.
KNL 계산노드 전용으로 설치하는 경우 PBS 스케줄러의 Interactive 기능을 이용하여 KNL 계산노드로 접속하여 빌드를 진행해야 합니다. 아래는 누리온 KNL 계산노드(debug 큐) 로 접속하는 예제입니다.
Copy $ qsub -I -V -q debug -l select=1:ncpus=68:mpiprocs=68:ompthreads=1 -l walltime=24:00:00 -A cp2k
※ qsub 명령 뒤 문자는 I(대문자 아이) 이고, select 와 walltime 앞에 문자는 l(소문자 엘) 입니다.