GPU+VORONOI+KOKKOS+OPENMP反应力场加速

关注 M r . m a t e r i a l   , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 多 \color{blue}{多} 精 \color{orange}{精} 彩 \color{green}{彩}


主要专栏内容包括:
  †《LAMMPS小技巧》: ‾ \textbf{ \underline{\dag《LAMMPS小技巧》:}}  LAMMPS小技巧》: 主要介绍采用分子动力学( L a m m p s Lammps Lammps)模拟相关安装教程、原理以及模拟小技巧(难度: ★ \bigstar
  ††《LAMMPS实例教程—In文件详解》: ‾ \textbf{ \underline{\dag\dag《LAMMPS实例教程—In文件详解》:}}  ††LAMMPS实例教程—In文件详解》: 主要介绍采用分子动力学( L a m m p s Lammps Lammps)模拟相关物理过程模拟。(包含:热导率计算、定压比热容计算,难度: ★ \bigstar ★ \bigstar ★ \bigstar
  †††《Lammps编程技巧及后处理程序技巧》: ‾ \textbf{ \underline{\dag\dag\dag《Lammps编程技巧及后处理程序技巧》:}}  †††Lammps编程技巧及后处理程序技巧》: 主要介绍针对分子模拟的动力学过程(轨迹文件)进行后相关的处理分析(需要一定编程能力。难度: ★ \bigstar ★ \bigstar ★ \bigstar ★ \bigstar ★ \bigstar )。
  ††††《分子动力学后处理集成函数—Matlab》: ‾ \textbf{ \underline{\dag\dag\dag\dag《分子动力学后处理集成函数—Matlab》:}}  ††††《分子动力学后处理集成函数—Matlab》: 主要介绍针对后处理过程中指定函数,进行包装,方便使用者直接调用(需要一定编程能力,难度: ★ \bigstar ★ \bigstar ★ \bigstar ★ \bigstar )。
  †††††《SCI论文绘图—Python绘图常用模板及技巧》: ‾ \textbf{ \underline{\dag\dag\dag\dag\dag《SCI论文绘图—Python绘图常用模板及技巧》:}}  †††††SCI论文绘图—Python绘图常用模板及技巧》: 主要介绍针对处理后的数据可视化,并提供对应的绘图模板(需要一定编程能力,难度: ★ \bigstar ★ \bigstar ★ \bigstar ★ \bigstar )。
  ††††††《分子模拟—Ovito渲染案例教程》: ‾ \textbf{ \underline{\dag\dag\dag\dag\dag\dag《分子模拟—Ovito渲染案例教程》:}}  ††††††《分子模拟—Ovito渲染案例教程》: 主要采用 O v i t o \rm Ovito Ovito软件,对 L a m m p s \rm Lammps Lammps 生成的轨迹文件进行渲染(难度: ★ \bigstar ★ \bigstar )。

  专栏说明(订阅后可浏览对应专栏全部博文): ‾ \color{red}{\textbf{ \underline{专栏说明(订阅后可浏览对应专栏全部博文):}}}  专栏说明(订阅后可浏览对应专栏全部博文):
注意: \color{red} 注意: 注意:如需只订阅某个单独博文,请联系博主邮箱咨询。 l a m m p s _ m a t e r i a l s @ 163. c o m \rm lammps\[email protected] [email protected]

♠ \spadesuit † \dag 开源后处理集成程序:请关注专栏《LAMMPS后处理——MATLAB子函数合集整理》
♠ \spadesuit † \dag † \dag 需要付费定制后处理程序请邮件联系: l a m m p s _ m a t e r i a l s @ 163. c o m \rm lammps\[email protected] [email protected]


安装lammps及相关库的步骤网上很多,这里介绍在前期步骤准备好的情况下,如果in文件中包含反应力 场以及需要通过voronoi库计算应力,如何通过基于gpu架构的kokkos+openmp实现计算加速

基于GPU的kokkos加速安装

1. 安装lammps

下载lammps稳定版本安装包,在同目录下键入命令行:tar -xvzf lammpsxxx.tar.gz

2. 安装cmake

具体方法参照 ubuntu安装cmake_yuanzhoulvpi的博客-CSDN博客_ubuntu安装cmake
安装完成后cmake --version查看安装版本,which cmake 查看安装路径

3. cmake相关文件修改

在解压好的lammps目录下执行如下命令行:

mkdir build_kokkos_cuda 
cd build_kokkos_cuda 

修改 / c m a k e / p r e s e t s \rm /cmake/presets /cmake/presets 文件夹中的 b a s i c . m a k e \rm basic.make basic.make文件,根据自己需要安装的 p a c k a g e \rm package package 在文件中 进行修改,也可以不修改,后面在命令行中添加即可。将 k o k k o s − c u d a . c m a k e \rm kokkos-cuda.cmake kokkoscuda.cmake文件中带有 A R C H _ G P U A R C H \rm ARCH\_GPUARCH ARCH_GPUARCH那一行删

4. cmake编译

在build_kokkos_cuda目录下进行编译,对于多核+gpu,
参考官方网址
3.7. Packages with extra build options — LAMMPS documentation,
编译需要设置如下变量:
在这里插入图片描述
在这里插入图片描述
其中HOSTARCH以及GPUARCH需要根据自己机器型号参考官网给出的表进行修改, 机器具体型号可参考官网:https://ark.intel.com/content/www/us/en/ark.html#@Processors

在这里插入图片描述
使用如下命令行设置上述相关变量:

cmake -C ../cmake/presets/basic.cmake -C ../cmake/presets/kokkos-cuda.cmake DKokkos_ENABLE_OPENMP=on -DKokkos_ARCH_SKX=on -DBUILD_OMP=on ../cmake

cmake -C ../cmake/presets/basic.cmake -C ../cmake/presets/kokkos-cuda.cmake DKokkos_ARCH_AMPERE86=on -DKokkos_ENABLE_CUDA=on -DCMAKE_CXX_COMPILER= ${
    
    HOME}/lammps/lib/kokkos/bin/nvcc_wrapper ../cmake 

注意这里的 n v c c _ w r a p p e r nvcc\_wrapper nvcc_wrapper 需要写绝对路径,一般在安装好的 l a m m p s / l i b / k o k k o s / b i n \rm lammps/lib/kokkos/bin lammps/lib/kokkos/bin 目录下变量设置完成后使用如下命令行进行编译,后面的20为编译时使用的核数:

cmake --build . -- -j20 

编译完成后会在 b u i l d _ k o k k o s _ c u d a \rm build\_kokkos\_cuda build_kokkos_cuda 目录下生成可执行文件 l m p \rm lmp lmp

5. 测试

使用 l a m m p s lammps lammps 自带的 e x a m p l e example example 进行测试,找到 / e x a m p l e s / r e a x f f \rm /examples/reaxff /examples/reaxff 目录,将 i n . r e a x f f . r d x \rm in.reaxff.rdx in.reaxff.rdx 文件 中的 p a i r _ s t y l e \rm pair\_style pair_style 改成 r e a x f f / k k \rm reaxff/kk reaxff/kk,在此目录下键入如下命令

mpirun -np 2 /home/groupc/lammps-new/lammps-3Nov2022/build_kokkos_cuda/lmp -k on g 1 sf kk -pk kokkos newton on neigh half -in in.reaxff.rdx

6. 安装VORONOI库

1. 安装voro++

进入安装好的 l a m m p s \rm lammps lammps l i b / v o r o n o i \rm lib/voronoi lib/voronoi 文件夹

V o r o + + − D o w n l o a d ( l b l . g o v ) \rm Voro++ - Download (lbl.gov) Voro++Download(lbl.gov)下载voro++压 缩安装包
也可以用wget+网址命令进行下载。下载好后

tar -xvzf voro++-0.4.6.tar.gz

进入解压好的voro++文件夹,执行make,完成后执行sudo make install

2. 软链接

cd …退回lib/voronoi目录,键入如下命令:

 ln -s voro++-0.4.6/src includelink
 ln -s voro++-0.4.6/src liblink 

会生成两个软链接includelink和liblink

3. 编译lammps

进入安装好的lammps/src目录,在此目录下安装需要的package,根据自己的需要安装 package。每个package关联的命令见6.1. Available Packages — LAMMPS documentation。这 里不建议通过make yes-all,make no-lib,make no-ext三个命令将所有不需要外接库的 包直接装上,建议make yes-package安装自己需要的那些包,不然后续编译可能会出错。 这里除了需要的简单包,还需要make yes-voronoi,即安装上我们需要的voronoi包。通 过命令make package-status查看包的安装情况。安装完成后执行命令make mpi即可,编 译完成后会在src目录下生成lmp_mpi文件

4. 测试

进入 l a m m p s / e x a m p l e s / v o r o n o i \rm lammps/examples/voronoi lammps/examples/voronoi 文件夹,运行 m p i r u n − n p   N   l m p _ m p i ( p a t h )   − i n   i n . v o r o n o i \rm mpirun -np\ N\ lmp\_mpi(path)\ -in\ in.voronoi mpirunnp N lmp_mpi(path) in in.voronoi,测试是否安装上。这里 l m p _ m p i ( p a t h ) \rm lmp\_mpi(path) lmp_mpipath) 指的是需要写出可执行文件的路径, 如果不想这么麻烦,可以把这个路径写到系统变量中即可。

5. 注意

这里编译完成后有两个可执行文件,一个是 b u i l d _ k o k k o s _ c u d a \rm build\_kokkos\_cuda build_kokkos_cuda 目录下有一个 l m p \rm lmp lmp文件,另一个 是 l a m m p s / s r c \rm lammps/src lammps/src 目录下有一个
l m p _ m p i \rm lmp\_mpi lmp_mpi 文件。如果你的 in 文件中使用的是反应力场,并且包含 c o m p u t e v o r o n o i / a t o m \rm compute voronoi/atom computevoronoi/atom 命令,我建议使用如下方式进行加速并调用 v o r o n o i \rm voronoi voronoi 库进行计算,这么 做的原因一方面是因为 k o k k o s \rm kokkos kokkos 加速主要在gpu完成计算(我的 g p u \rm gpu gpu 使用率达到97%),而 v o r o n o i \rm voronoi voronoi 库的计算主要在cpu上完成,这么做可以发挥gpu及cpu的最大性能;另一方面是因为我 暂时还不知道如何在 k o k k o s + o p e n m p \rm kokkos+openmp kokkos+openmp 编译时同时实现 v o r o n o i \rm voronoi voronoi 的编译,方式如下:

  1. 先通过 k o k k o s \rm kokkos kokkos 加速完成整个运算并输出轨迹文件,这里运算可执行文件路径写 b u i l d _ k o k k o s _ c u d a \rm build\_kokkos\_cuda build_kokkos_cuda 下的 l m p \rm lmp lmp 文件路径。建议轨迹文件的输出步长尽量小一些;
  2. 完成后重新书写一个in文件,在in文件中使用 r e r u n \rm rerun rerun 命令读取上一步骤输出的轨迹文件并进 行 v o r o n o i \rm voronoi voronoi 计算输出数据,设置好后运行 i n \rm in in 文件。运行时采用纯 c p u \rm cpu cpu 计算,可执行文件路径 写 s r c \rm src src 目录下的 l m p _ m p i \rm lmp\_mpi lmp_mpi 文件路径。 i n \rm in in 文件的设置可以参考如下:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43689832/article/details/127948630