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にしてもそこまで速度が変わらないというのはちょっと納得がいきません。
サンプルが悪かったのでしょうか。コンパイル方法がよくないのでしょうか。何かわかったら追記します。
コメント