VASP简介
VASP是最常见的第一性原理计算软件之一。第一性原理计算是基于密度泛函理论,通过选择合适的交换关联赝势(GGA或LDA),然后基于迭代方法自洽求解Kohn-Sham方程,直到所求出的新的电荷密度与输入的电荷密度在收敛判据范围内,则认为迭代计算达到收敛,最后求得系统的总能量、能带、波函数、电荷密度、态密度等等。
VASP编译优化
VASP文件中arch目录中有针对不同编译器的配置文件。
其中-xHOST是Intel编译器针对Intel处理器增加的编译优化选项。Intel平台建议开启该选项。非Intel平台不能识别该参数。
VASP_TARGET_CPU ?= -xHOST
FFLAGS += $(VASP_TARGET_CPU)
VASP运行优化
VASP使用MKL库完成其中的数学运算,但该库会通过内部函数检测是否为Intel处理器,在Intel处理器上MKL库的加速效果更好。分析显示MKL使用函数mkl_serv_intel_cpu_true来检测它是否在处理真正的Intel CPU。
非Intel平台在intel mkl 2020版本之前可以通过使用环境变量MKL_DEBUG_CPU_TYPE=5可以强制使用AVX2内核,但后续版本移除了这个变量。我们可以用自己的函数来代替它:
int mkl_serv_intel_cpu_true() {
return 1;
}
并向其编译为共享库:
$ gcc -shared -fPIC -o libisintel.so isintel.c
libisintel.so是识别cpu处理器型号的函数,非Intel平台上运行之前可以加载这个库,替换掉MKL中自带的函数,把非Intel平台识别为Intel,以更好发挥MKL数学库的计算能力。
export LD_PRELOAD=/PATH/libisintel.so
共享内存优化参数:
export I_MPI_FABRICS=shm
Intelmpi默认是shm:ofi,通信过程在查询时会有一定的耗时,针对Intel平台通信做了相关优化,但在非Intel平台会有影响通信性能,导致计算性能降低。可以通过以上参数改善。
UCX优化参数:
export UCX_TLS=sm,dc
调整MPI使用通信协议传输方式为共享内存和动态分配,但UCX参数在单节点测试时,影响不大。
VASP输入文件并行参数优化
VASP主要涉及到K点并行和能带并行两种方式,INCAR主要的并行参数:NCORE,NPAR,KPAR。总核心数=NCORE*NPAR*NKPAR。
KPAR表示同时计算多少个K点,默认为1,可用“grep irre OUTCAR ”查看不可约K点数,体系的K点设置为不可约K点数的除数,最大可设置为体系的不可约K点数。
根据计算体系的实际情况选择性设置,K点较少的体系,并行带来的通信消耗会大于计算的性能提升,对整体计算加速效果不佳。
NCORE决定轨道并行策略,单个轨道计算所使用的核数量。
NPAR决定能带并行策略,同时并行计算多少条能带。
Vaspwiki上建议优先设置NPAR,但实际情况下设置NCORE更为方便。结合实际测试,我们建议在HYGON平台运行时,NCORE设置为一个NUMA的核心数,从而减少跨NUMA的通信消耗。
算例实践
算例简介:对128个si原子构成的图中结构进行结构优化;选取PAW赝势,PBE交换关联泛函;截断能520eV,精度为1.0E-05eV;KPOINTS是Γ-centered网格,大小为3*3*3
NCORE优化:
在使用同样128核心数时,KPAR默认为1,结果显示NCORE=16达到并行效果最好,其中NCORE是一个NUMA的核心数,减少了跨NUMA的通信消耗
KPAR优化:
NCORE=16时性能最优,在此基础上进一步优化KPAR
该算例共有4个不可约K点:
测试可不同K点并行的结果:
从测试结果来看,KPAR=2时有10%左右的提升,但KPAR=4性能有所降低,是由于并行带来的通信消耗大于计算性能提升,对计算整体加速效果不佳。