LAMMPSをGPU用にコンパイル

LAMMPS

NVIDIA GeForce RTX 4060 Tiを載せたPCでLAMMPSをGPU用にコンパイルしました。

スポンサーリンク

環境

WSLです。グラフィックドライバやコンパイル環境の導入は他の詳しい記事を参考にしてください。

環境変数はmoduleで読み込んでいます。

$ module show nvhpc-openmpi3/23.11
-------------------------------------------------------------------
/opt/nvidia/hpc_sdk/modulefiles/nvhpc-openmpi3/23.11:

conflict        nvhpc
conflict        nvhpc-nompi
conflict        nvhpc-byo-compiler
conflict        nvhpc-hpcx
conflict        nvhpc-openmpi3
setenv          NVHPC /opt/nvidia/hpc_sdk
setenv          NVHPC_ROOT /opt/nvidia/hpc_sdk/Linux_x86_64/23.11
setenv          CC /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/compilers/bin/nvc
setenv          CXX /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/compilers/bin/nvc++
setenv          FC /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/compilers/bin/nvfortran
setenv          F90 /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/compilers/bin/nvfortran
setenv          F77 /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/compilers/bin/nvfortran
setenv          CPP cpp
prepend-path    PATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/cuda/bin
prepend-path    PATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/compilers/bin
prepend-path    PATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/comm_libs/openmpi/openmpi-3.1.5/bin
prepend-path    PATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/compilers/extras/qd/bin
prepend-path    LD_LIBRARY_PATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/cuda/lib64
prepend-path    LD_LIBRARY_PATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/cuda/extras/CUPTI/lib64
prepend-path    LD_LIBRARY_PATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/compilers/extras/qd/lib
prepend-path    LD_LIBRARY_PATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/compilers/lib
prepend-path    LD_LIBRARY_PATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/math_libs/lib64
prepend-path    LD_LIBRARY_PATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/comm_libs/openmpi/openmpi-3.1.5/lib
prepend-path    LD_LIBRARY_PATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/comm_libs/nccl/lib
prepend-path    LD_LIBRARY_PATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/comm_libs/nvshmem/lib
prepend-path    CPATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/math_libs/include
prepend-path    CPATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/comm_libs/mpi/include
prepend-path    CPATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/comm_libs/nccl/include
prepend-path    CPATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/comm_libs/nvshmem/include
prepend-path    CPATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/compilers/extras/qd/include/qd
prepend-path    MANPATH /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/compilers/man
setenv          OPAL_PREFIX /opt/nvidia/hpc_sdk/Linux_x86_64/23.11/comm_libs/openmpi/openmpi-3.1.5
-------------------------------------------------------------------
スポンサーリンク

コンパイル

LAMMPSのアーカイブを展開したところで以下のスクリプトを実行しました。

. /etc/profile.d/modules.sh
module load nvhpc-openmpi3/23.11
export CUDA_HOME=/opt/nvidia/hpc_sdk/Linux_x86_64/23.11/cuda/12.3

mkdir build
cd build

cmake -D LAMMPS_MACHINE=gpu -D PKG_KSPACE=yes -D PKG_MANYBODY=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes -D PKG_REAXFF=yes -D PKG_OPENMP=yes \
-D PKG_GPU=yes -D GPU_API=cuda -D GPU_ARCH=sm_90 \
-DBIN2C=${CUDA_HOME}/bin/bin2c ../cmake

cmake --build .
make install

-D LAMMPS_MACHINE=gpu とすることで、最終的にできる実行ファイル名がlmp_gpuになります。
CPU用のものと区別するためにこのようにしました。

スポンサーリンク

実行コマンド

. /etc/profile.d/modules.sh
module load nvhpc-openmpi3/23.11

mpirun -n 1 /home/wsl/.local/bin/lmp_gpu -sf gpu -pk gpu 1 -in in.lj

これで動きました。
なお50万原子のサンプルで実行したところ、Windows用インストーラでインストールしたLAMMPSと同等の速度になりました。
Windows用インストーラではOpenCLでGPUを使って高速化しているようですが、CUDAにしてもそこまで速度が変わらないというのはちょっと納得がいきません。
サンプルが悪かったのでしょうか。コンパイル方法がよくないのでしょうか。何かわかったら追記します。

コメント

タイトルとURLをコピーしました