【試験研究】第一原理計算セットアップ(5):VASP.5.4.4.pl2のコンパイル(Intel Fortran版), (5) VASP 5.4.4.pl2 compile by Intel oneAPI

概要

 VASP5.4.4で十分な計算もあるので、インストールしておくことにした。MPI並列化版。 あっさりとバイナリが生成でき、それなりの速さで、過去に実行したことのある計算が高速に行えた。

インストール手順

  • Intel oneAPI BaseKit 2023.2, HPCKit 2023.2をインストール
  • wannier90-3.1.0をインストール
tar zxvf vasp.5.4.4.pl2.tgz
cd vasp.5.4.4.pl2
cp arch/makefile.include.linux_intel makefile.include

としておいて、makefile.includeを編集。下記のとおり。

# Precompiler options
CPP_OPTIONS= -DHOST=\"LinuxIFC\"\
             -DMPI -DMPI_BLOCK=8000 \
             -Duse_collective \
             -DscaLAPACK \
             -DCACHE_SIZE=4000 \
             -Davoidalloc \
             -Duse_bse_te \
             -Dtbdyn \
             -Duse_shmem \
             -DVASP2WANNIER90

CPP        = fpp -f_com=no -free -w0  $*$(FUFFIX) $*$(SUFFIX) $(CPP_OPTIONS)

FC         = mpiifort
FCL        = mpiifort -qmkl=sequential -lstdc++

FREE       = -free -names lowercase

FFLAGS     = -assume byterecl -w
OFLAG      = -O2
OFLAG_IN   = $(OFLAG)
DEBUG      = -O0

MKL_PATH   = $(MKLROOT)/lib/intel64
BLAS       =
LAPACK     =
BLACS      = -lmkl_blacs_intelmpi_lp64
SCALAPACK  = $(MKL_PATH)/libmkl_scalapack_lp64.a $(BLACS)

OBJECTS    = fftmpiw.o fftmpi_map.o fft3dlib.o fftw3d.o

INCS       =-I$(MKLROOT)/include/fftw

LLIBS      = $(SCALAPACK) $(LAPACK) $(BLAS) /usr/local/vasp/tools/lib/libwannier.a


OBJECTS_O1 += fftw3d.o fftmpi.o fftmpiw.o
OBJECTS_O2 += fft3dlib.o

# For what used to be vasp.5.lib
CPP_LIB    = $(CPP)
FC_LIB     = $(FC)
CC_LIB     = icc
CFLAGS_LIB = -O
FFLAGS_LIB = -O1
FREE_LIB   = $(FREE)

OBJECTS_LIB= linpack_double.o getshmem.o

# For the parser library
CXX_PARS   = icpc

LIBS       += parser
LLIBS      += -Lparser -lparser -lstdc++

# Normally no need to change this
SRCDIR     = ../../src
BINDIR     = ../../bin

#================================================
# GPU Stuff

CPP_GPU    = -DCUDA_GPU -DRPROMU_CPROJ_OVERLAP -DUSE_PINNED_MEMORY -DCUFFT_MIN=28 -UscaLAPACK

OBJECTS_GPU = fftmpiw.o fftmpi_map.o fft3dlib.o fftw3d_gpu.o fftmpiw_gpu.o

CC         = icc
CXX        = icpc
CFLAGS     = -fPIC -DADD_ -Wall -openmp -DMAGMA_WITH_MKL -DMAGMA_SETAFFINITY -DGPUSHMEM=300 -DHAVE_CUBLAS

CUDA_ROOT  ?= /usr/local/cuda/
NVCC       := $(CUDA_ROOT)/bin/nvcc -ccbin=icc
CUDA_LIB   := -L$(CUDA_ROOT)/lib64 -lnvToolsExt -lcudart -lcuda -lcufft -lcublas

GENCODE_ARCH    := -gencode=arch=compute_30,code=\"sm_30,compute_30\" \
                   -gencode=arch=compute_35,code=\"sm_35,compute_35\" \
                   -gencode=arch=compute_60,code=\"sm_60,compute_60\"

MPI_INC    = $(I_MPI_ROOT)/include64/

その後、コンパイル

make std
make gam
make ncl

bin/vasp_std, bin/vasp_gam, bin/vasp_nclができるので、これをコピーして使う。

mkdir /usr/local/vasp/vasp544bin
cp bin/vasp_std /usr/local/vasp/vasp544bin
cp bin/vasp_gam /usr/local/vasp/vasp544bin
cp bin/vasp_ncl /usr/local/vasp/vasp544bin

実行

  • vasp6, serial version, 3'30'' (210 sec)
  • vasp.5.4.4.pl2, MPI 4 core, 1'23'' (83 sec)
  • vasp.5.4.4.pl2, MPI 8 core, 60'' (60 sec)
  • vasp.5.4.4.pl2, MPI 4 core, NCORE=4 in INCAR, 1'09'' (69 sec)
  • vasp.5.4.4.pl2, MPI 6 core, NCORE=6 in INCAR, 49'' (49 sec)
  • vasp.5.4.4.pl2, MPI 8 core, NCORE=8 in INCAR, 49'' (49 sec)

という結果が得られた。 - やっぱり並列化の威力は大きい - vasp6で発揮できていないのは残念 - INCARにNCOREを指定しておくと20%ほどスピードアップ - ポテンシャルはPBE64を使った。 - vasp 5.4.4にはtestsuiteがないので完璧なバイナリかと問われたら何とも言えないが、あっさりと並列計算バイナリが生成できた。