vasp 5.4.4 在 win10/Ubuntu 18.04 上的安装#
linux 命令全部黑体表示,目录、文件用斜体表示。
更新:ubuntu 20.04 不可以安装 parallel studio
win10 1903 开启 wsl 后下载 Ubuntu 18.04 lts 并关闭 windows defender 的实时保护(可选,不然 linux 系统下 io 不行)。新版本的 Ubuntu 登陆后首先需要自己创建一个用户,设置 sudo 密码。你可以载设置 root 密码(可选)
sudo passwd root
进入系统后安装 Intel Parallel Studio XE 配置编译环境。
本次不使用 gnu 安装的原因是个人尝试多次都编译报错,待有空研究一下。理论上 gnu 安装是最方便的,只需要 apt-get 少数几个包后就能编译。
Intel Parallel Studio X 用 edu.cn 邮箱注册教育账号后下载在线安装包,大小 18 MB。wget 后 tar -xzvf 解压,进入目录。用 root 权限运行 install.sh(当然你也可以修改安装目录后只为当前用户安装)
sudo ./install.sh
一路按照要求进行安装,注意后面选择自定义安装,把不需要的组件全部取消选择(硬盘空间大除外)。编译 vasp 的环境只需要:Intel C++,Intel fortran,math kernel for fortran,以及 Intel mpi 。当然 math kenel for C++ 建议安装上,其他软件可以使用。总共安装五个组件,大小约为 3 GB。(完整的是 11 GB )
安装完后配置环境变量,在_~/.bashrc_ 内添加如下内容:
source /opt/intel/compilers_and_libraries_2019.4.243/linux/bin/compilervars.sh intel64
source /opt/intel/compilers_and_libraries_2019.4.243/linux/bin/iccvars.sh intel64
source /opt/intel/compilers_and_libraries_2019.4.243/linux/bin/ifortvars.sh intel64
source /opt/intel/compilers_and_libraries_2019.4.243/linux/mkl/bin/mklvars.sh intel64
source /opt/intel/impi/2019.4.243/intel64/bin/mpivars.sh
本次安装的是 2019.4.243 版本的 Parallel Studio XE ,添加的内容需要根据实际情况变化。添加完 source 一下更新变量,随后 which icc ifort icpc mpiifort 检查是否完成。
之后需要编译并行 fftw ,进入目录:
cd /opt/intel/compilers_and_libraries_2019.4.243/linux/mkl/interfaces/fftw3xf
进入后切换为 root 用户,并 source /home/user/.bashrc ,随后才能编译 fftw3xf :
make libintel64
需要切换 root 的原因是直接 make 会提示权限不足(因为当前操作在_/opt_ 内)。提权 sudo make 时,由于 root 用户没有配置环境变量,导致无法编译。编译结束后 exit 退出 root 用户,该目录下出现文件:libfftw3xf_intel.a
另一个做法是安装 Intel 库时就不以 root 权限安装,丢到自己目录下,两个方法都行。
随后下载 vasp 文件,tar 解压, cd 入目录。将 makefile.iclude copy 出来:
cp arch/makefile.include.linux_intel makefile.include
修改少数内容即可。首先是数学库的位置(就添加了一行代码):
MKLROOT = /opt/intel/compilers_and_libraries_2019.4.243/linux/mkl
MKL_PATH = $(MKLROOT)/lib/intel64
BLAS =
LAPACK =
BLACS = -lmkl_blacs_intelmpi_lp64
SCALAPACK = $(MKL_PATH)/libmkl_scalapack_lp64.a $(BLACS)
当然第一行也可以不在 makefile.iclude 中加,直接加到 ~/.bashrc 中(因为 $MKLROOT 是一个环境路径)。如果你不会这样操作还是老老实实加在这里。
最后 fftm 配置需要修改为:
OBJECTS = fftmpiw.o fftmpi_map.o fft3dlib.o fftw3d.o \
$(MKLROOT)/interfaces/fftw3xf/libfftw3xf_intel.a
没错,你只需要修改两个位置就可以完成。网上的那些首先安装 ifort ,然后编译 openmpi ,然后编译 fftm ,然后编译 vasp 的教程是针对无法取得 Parallel Studio XE 的情况下写的。个人使用的话,上 Parallel Studio XE 就行,简单粗暴。
随后 make all 或者 make std ,取决于你需要什么版本。编译时不能用,不能用,不能用 -j 指令,因为 vasp 包内依赖关系严重,加指令会导致编译失败。单线程编译三个包约一个小时。如果编译不成功可能是有些依赖包没安装,apt-get 一下就好。
编译完成后配置环境变量,运行方法可以使用 mpirun 或者直接 vasp 。
完整的 makefile.iclude 如下:
# Precompiler options
CPP_OPTIONS= -DHOST=\"LinuxIFC\"\
-DMPI -DMPI_BLOCK=8000 \
-Duse_collective \
-DscaLAPACK \
-DCACHE_SIZE=4000 \
-Davoidalloc \
-Duse_bse_te \
-Dtbdyn \
-Duse_shmem
CPP = fpp -f_com=no -free -w0 $*$(FUFFIX) $*$(SUFFIX) $(CPP_OPTIONS)
FC = mpiifort
FCL = mpiifort -mkl=sequential -lstdc++
FREE = -free -names lowercase
FFLAGS = -assume byterecl -w
OFLAG = -O2
OFLAG_IN = $(OFLAG)
DEBUG = -O0
MKLROOT = /opt/intel/compilers_and_libraries_2019.4.243/linux/mkl
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 \
$(MKLROOT)/interfaces/fftw3xf/libfftw3xf_intel.a
INCS =-I$(MKLROOT)/include/fftw
LLIBS = $(SCALAPACK) $(LAPACK) $(BLAS)
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
笔记本双核四线程,mpirun -np 2 运行结果显示 CPU 占用仅有 50%,但超线程 cpu 不应该设置为 - np 两倍核心数,所以就按 50% 跑吧。
另外在 Ubuntu 机器下,用非 root 方法安装之后,在一个四核机器上能跑到 8 线程。因此更可能是 wsl 系统的问题
另外,说一下一些 bug 的解决。如果不开跨节点,需要删除相应配置文件。自己电脑上运行可能会报内存不够的错,此时用 mpirun 不能直接用 vasp_std 。另外对于大体系需要修改 stack 大小,例如改成 256 MB ,不然会内存溢出。