登录

宝禄,计算 服务器综合讨论

链接由链接器变量指定,然后链接器被调用为:

$(FCL) -o vasp ..all-objects.. $(LLIBS)

必须将 VASP 链接到用于快速傅立叶变换 (FFT) 的库、lib 库、解析器库和线性代数库 BLAS、LAPACK 和 scaLAPACK,以及 OpenACC GPU 端口 NVIDIA HPC- SDK (≧21.2)。其他库,例如 HDF5 库和 Wannier90,是可选的。

 

内容

· 1个链接器变量

· 1.1FCL

· 1.2LLIBS

· 2个线性代数库(强制)

· 3个fftw 库(强制)

· 3.1OBJECTS

· 3.2INCS

· 3.3FFT 相关对象优化级别的特殊规则

· 4个lib库(必选)

· 4.1CPP_LIB

· 4.2FC_LIB

· 4.3FFLAGS_LIB

· 4.4FREE_LIB

· 4.5CC_LIB

· 4.6CFLAGS_LIB

· 4.7OBJECTS_LIB

· 5个解析器库(强制)

· 5.1CXX_PARS

· 6个量子库

· 7可选库

· 7.1相关文章

链接器变量

fcl

调用链接器的命令。在多数情况下:

FCL=$(FC) [+ 一些选项]

· 使用英特尔 Composer 套jian(Fortran 编译器 + MKL 库),通常:

FCL=$(FC) -mkl=顺序

LLIBS

以通常的方式指定要链接的库和/或对象:

LLIBS=[-L/path/to/installation/lib -llibrary] [/path/to/file/library.a] [/path/to/file/object.o]

必须指定几个数值库(BLAS、LAPACK 或 scaLAPACK 等)。

例如,使用 Intel Composer 套jian(并使用 编译CPP_OPTIONS= .. -DscaLAPACK ..)会产生:

MKL_PATH = $(MKLROOT)/lib/intel64

BLACS = -lmkl_blacs_intelmpi_lp64

SCALAPACK = $(MKL_PATH)/libmkl_scalapack_lp64.a $(BLACS)

LLIBS += $(SCALAPACK)

编译 VASP 所需的默认对象列表由文件SOURCE中的变量给出/path/to/vasp.X.X.X/src/.objectsmak-e-file.include可以通过以下方式 指定要添加到此列表中的对象:

OBJECTS= .. 你的对象列表 ..

实际上,必须以这种方式添加多个对象,例如FFT 库

线性代数库(强制)

要构建 VASP,您需要链接到 BLAS、LAPACK 和 scaLAPACK。一些编译器套jian,例如 Intel Composer 套jian,预先打包了这些库,因此无需自行下载和构建它们。

· 使用英特尔 Composer 套jian,链接到作为 MKL 一部分的 BLAS、LAPACK 和 scaLAPACK 库,操作如下:

FCL = mpiifort -mkl = 顺序

MKL_PATH = $(MKLROOT)/lib/intel64

BLAS =

LAPACK =

BLACS = -lmkl_blacs_intelmpi_lp64

SCALAPACK = $(MKL_PATH)/libmkl_scalapack_lp64.a $(BLACS)

LLIBS += $(SCALAPACK) $(LAPACK) $(BLAS)

如果您使用 Intel 的编译器和 OpenMPI 而不是 Intel-MPI,请将BLACS上面的行替换为:

BLACS = -lmkl_blacs_openmpi_lp64

· 对于NVIDIA HPC-SDK (>=21.2) 即:

BLAS = -lblas

LAPACK = -llapack

SCALAPACK = -Mscalapack

LLIBS += $(SCALAPACK) $(LAPACK) $(BLAS)

· 当您自己构建 BLAS、LAPACK 和 scaLAPACK 时,您应该链接到相应的共享对象 ( lib*.so),如下所示:

LIBDIR = /path/to/my/libs/

BLAS = -L$(LIBDIR) -lrefblas

LAPACK = -L$(LIBDIR) -ltmglib -llapack

SCALAPACK = -L$(LIBDIR) -lscalapack

LLIBS += $(SCALAPACK) $(拉帕克) $(BLAS)

要链接静态库对象 *.a),例如 scaLAPACK,请将SCALAPACK上面的行替换为:

SCALAPACK = $(LIBDIR)/libscalapack.a

fftw 库(强制)

该库提供执行快速傅立叶变换 (FFT) 的例程。

对象

添加提供 FFT 的要编译(或链接)的对象(可能包括对象的静态库*.a)。

很可能您正在构建并希望使用来自某个fftw-DMPI库(推荐)的 FFT 。在这种情况下:

对象 = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o

INCS

对于fftw库,即

对象= .. fftw3d.o fftmpiw.o ..

该变量INCS必须设置为包含包含以下内容的目录fftw3.f

INCS+=-I/路径/to/fftw/安装

这是必需的,因为fftw3d.F包括.fftmpiw.Ffftw3.f

注意: 如果未设置fftwINCS库必须存在于fftw3.f/path/to/vasp.X.X.X/src

常见的选择是:

· 使用英特尔 Composer 套jian

构建时,最好链接到英特尔 FFT 的MKL fftw包装器:

FCL = $(FC) -mkl=顺序

对象 = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o

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

· 要显式链接fftw库(在本例中为fftw-3.3.4):

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

FFTW ?= /path/to/your/fftw-3.3.4

LLIBS += -L$(FFTW)/lib -lfftw3

INCS += -I$(FFTW )/包括

· 对于其他配置,请参考/path/to/vasp.xxx/archmak-e-file.include.your_choice中的文件或查看mak-e-file.include

FFT 相关对象优化级别的特殊规则

根据过去的经验,明确设置了 FFT 相关对象编译的优化级别。这是按如下方式完成的:

OBJECTS_O1 += fft3dfurth.o fftw3d.o fftmpi.o fftmpiw.o

OBJECTS_O2 += fft3dlib.o

lib库(必选)

该库的源代码包含在 VASP 发行版中。以下变量与其配置相关:

CPP_LIB

调用预编译器的命令。在大多数情况下,它被设置为:

CPP_LIB=$(CPP)

FC_LIB

调用 Fortran 编译器的命令。通常,设置为:

FC_LIB=$(FC)

注意: 库可以在没有 MPI 支持的情况下编译,即,当FC=mpif90FC_LIB 可以指定一个没有 MPI 支持的 Fortran 编译器,例如,FC_LIB=ifort

FFLAGS_LIB

Fortran 编译器标志,包括优化级别的规范。在多数情况下:

FFLAGS_LIB=-O1

FREE_LIB

指定 Fortran 编译器接受自由格式源布局所需的选项,没有行长度限制。在大多数情况下,设置就足够了:

FREE_LIB=$(免费)

CC_LIB

调用 C 编译器的命令,例如 gcc、icc 等。

注意: lib库可以在没有 MPI 支持的情况下编译。

CFLAGS_LIB

C 编译器标志,包括优化级别的规范。在多数情况下:

CFLAGS_LIB=-O

OBJECTS_LIB

要添加到库中的“非标准”对象列表。在多数情况下:

OBJECTS_LIB= linpack_double.o

使用-Duse_shmem编译 VASP 时,还必须添加getshmem.o,即添加以下行:

OBJECTS_LIB+= getshmem.o

解析器库(强制)

该库的源代码包含在 VASP 发行版中。以下变量与其配置相关:

CXX_PARS

调用 C++ 编译器的命令,例如 g++、icpc 等。

解析器需要链接到C++ 标准。如果这还不是定义的一部分,则可以将其添加到编译器选项中。使用英特尔 Composer 套jian时,这相当于: FCL LLIBS

LLIBS += -lstdc++

量子库

QD库包含在NVIDIA HPC SDK ≧21.2中,支持四倍精度运算。将以下行添加到您的mak-ef-ile.include

NVROOT ?= /path/to/nvidia/hpc_sdk/Linux_x86_64/version

QD ?= $(NVROOT)/compilers/extras/qd

LLIBS += -L$(QD)/lib -lqdmod -lqd

INCS += -I$( QD)/包含/qd

提示:以下行可能有助于找到 NVIDIA 根目录:

NVROOT =$(shell which nvfortran | awk -F /compilers/bin/nvfortran '{ print $$1 }')

重要提示:NVIDIA HPC SDK = 21.2起,需要在系统环境中手动添加QD库的库路径:

导出 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(NVROOT)/compilers/extras/qd/lib

 


展开全文
打开APP,一键看同内容文章>

相关推荐

最新问答

查看更多问答
反馈