LAMMPS(Large-scale Atomic/Molecular Massively Parallel Simulator),即大规模原子分子并行模拟器,是一款由美国Sandia国家实验室开发的经典分子动力学代码。它主要用于模拟气体、液体和固体状态下粒子的集合行为,能够处理全原子、聚合物、生物、金属、粒状和粗粒化体系。
LAMMPS是目前用于分子动力学模拟的常用软件之一,网上安装教程五花八门,质量良莠不齐。本次教程旨在提供高效可用的安装部署方法,对初级使用Linux系统以及刚接触科学计算类软件用户十分友好。
如何获取LAMMPS
Lammps是开源软件,官方链接参考:https://www.lammps.org
进入下载的页面,历史版本可以通过:
https://github.com/lammps/lammps/releases 获取对应的版本
为了更加灵活的构建或者扩展LAMMPS,建议下载源码,从源代码级别重新构建。
安装编译环境 Intel oneAPI
详细可以参考
安装部署oneAPI
https://blog.csdn.net/u013206206/article/details/139010576?spm=1001.2014.3001.5502
安装部署LAMMPS
加载编译依赖环境:
source /media/public2/compiler/oneapi/setvars.sh
解压安装
tar -xvf lammps-xx.tgz
cd lammps-xx/src/MAKE/OPTIONS
该路径下有常用各类编译器配置的makefile文件,本次以intel+intelmpi为例
cd src
cp -r MAKE/OPTIONS/Makefile.intel_cpu_intelmpi MAKE/Makefile.mpi
编译配置参考
CC = mpiicpc -std=c++11
OPTFLAGS = -O2 -fp-model fast=2 -no-prec-div -qoverride-limits \
-march=haswell
CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \
-DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) \
-I$(MKLROOT)/include
SHFLAGS = -fPIC
DEPFLAGS = -M
LINK = mpiicpc -std=c++11
LINKFLAGS = -qopenmp $(OPTFLAGS) -L$(MKLROOT)/lib/intel64/
LIB = -ltbbmalloc -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core
SIZE = size
ARCHIVE = ar
ARFLAGS = -rc
SHLIBFLAGS = -shared
非intel平台平台的优化和注意事项
修改Makefile.mpi以下内容
去掉-xHost -qopt-zmm-usage=high,添加-march=haswell
-xHOST是Intel 编译器针对Intel处理器增加的编译优化选项,Intel 编译器内没有集成AMD处理器微架构相关信息。但AMD处理器所包含X86扩展指令集特性与Intel Haswell架构处理器类似,所以可参考AMD手册选取合适参数来帮助intel编译器识别AMD处理器上的指令集特性。
可选模块安装
cd src
make ps 查看其他软件包安装情况
make yes-xx:安装所需安装包
make no-xx:卸载对应安装包,需要注意有些安装包需要额外下载编译
例如electrode需要在xx/lib/electrode/下执行
python Install.py -m mpi
生成对应的Makefile.lammps文件和对应的库文件libelectrode.a
VORONOI安装需要额外安装voro++-0.4.6
http://math.lbl.gov/voro++/download
下载解压到lammps/lib/voronoi
cd voro++-0.4.6
make
ln -s voro++-0.4.6/src includelink
ln -s voro++-0.4.6/src liblink
修改lammps-xx/lib/voronoi/Makefile.lammps
# Settings that the LAMMPS build will import when this package library is used
voronoi_SYSINC = -Ilammps/lib/voronoi/voro++-0.4.6/includelink
voronoi_SYSLIB = -lvoro++
voronoi_SYSPATH = -L/lammps/lib/voronoi/voro++-0.4.6/liblink
make -j 10 mpi
在src目录下生成如下可执行文件
./lmp_mpi -h
可以查看已经具体安装配置信息和已安装模块
LAMMPS软件测试
解压目录下:
cd lammps-xx /examples/deposit
加载lammps环境
export PATH=xx/xx/lmp_mpi(绝对路径):$PATH
Lammps使用MKL库完成其中的数学运算,但该库会通过内部函数检测是否为Intel处理器,在Intel处理器上MKL库的加速效果更好。在AMD平台可以加载libisintel.so,把AMD识别成Intel,以更好发挥MKL数学库的计算能力。libisintel.so库具体可参考上期文章
非Intel平台的优化和注意事项
export LD_PRELOAD=/PATH/libisintel.so
手动运行:
-
两个进程默认每个进程一个线程:
mpirun -n 2 lmp_ mpi -in in.deposit.atom
-
两个进程,每个进程绑定4个线程(线程的绑定并不一定会提高并行计算效率。)
mpirun -n 2 lmp_ mpi -in in.deposit.atom -pk omp 4 -sf omp
运行结果示例
图中timesteps/s值为性能参数,值越大性能越好。
参考引用:
-
https://www.lammps.org