LAMMPSをGPUで動かす

LAMMPS

Windows版のLAMMPSを、ノートPCの内蔵グラフィックで動かしてみます。

2023.12.24追記 デスクトップPC(GPU:GeForce RTX 4060 Ti)での結果を載せました。

スポンサーリンク

GPUパッケージ

LAMMPSをGPUで動かすにはGPUパッケージがインストールされている必要があります。
Windows用のインストーラからインストールした場合はすでに組み込まれています。

パッケージの確認方法については以下の記事で紹介しています。

lmp -h で確認すると最初のほうにGPU関係の記述があります。

OS: Windows 11 23H2, Windows ABI 6.2 (9200) on x86_64

Compiler: MinGW-w64 64bit 10.0 / GNU C++ 12.2.1 20221121 (Fedora MinGW 12.2.1-8.fc38) with OpenMP 4.5
C++ standard: C++14
MPI v2.0: Microsoft MPI v10.1.12498.18

Accelerator configuration:

GPU package API: OpenCL
GPU package precision: mixed
KOKKOS package API: OpenMP Serial
KOKKOS package precision: double
Kokkos library version: 3.7.2
OPENMP package API: OpenMP
OPENMP package precision: double
OpenMP standard: OpenMP 4.5
INTEL package API: OpenMP
INTEL package precision: single mixed double

Compatible GPU present: yes
スポンサーリンク

計算の実行

計算はLAMMPS公式のベンチマークである in.lj.txt を使用します。
CPUで計算した際の計算方法や結果はこちらの記事をご覧ください。

ではGPU計算のコマンドを実行します。

lmp -sf gpu -pk gpu 1 -in in.lj.txt

結果の出力から計算速度にかかわる部分を抜き出すと、

Loop time of 0.125722 on 1 procs for 100 steps with 32000 atoms

Performance: 343615.278 tau/day, 795.406 timesteps/s, 25.453 Matom-step/s

CPU単体での計算との比較は後ほど。続いてCPU並列を併用してみます。コマンドはこちらです。

mpiexec -n 4 lmp -sf gpu -pk gpu 1 -in in.lj.txt

同様に、速度に関する出力はこちらです。

Loop time of 0.118425 on 4 procs for 100 steps with 32000 atoms

Performance: 364787.840 tau/day, 844.416 timesteps/s, 27.021 Matom-step/s

少し速くなっていますが、そもそもの計算負荷が軽すぎるのであまり恩恵がないですね。

スポンサーリンク

CPUとの比較

LAMMPS公式が配布しているWindows用のMSMPIバイナリを使用し、in.ljベンチマークのtimesteps/sの値を比較します。測定の環境は以下の通り。

ノートPCデスクトップPC
CPUAMD Ryzen 5 7530U
6コア 12スレッド
AMD Ryzen 7 5700X
8コア 16スレッド
RAM16GB16GB
GPURadeon Graphics
(CPU内蔵グラフィック)
NVIDIA GeForce RTX 4060 Ti
ノートPCとデスクトップPCのスペック

計算はin.lj 32,000原子の100ステップです。

条件ノートPC 速度 [timesteps/s]デスクトップ 速度 [timesteps/s]
CPU 1プロセス83.49297.137
CPU 4プロセス329.869333.560
CPU 1プロセス+GPU795.4061569.341
CPU 4プロセス+GPU844.416926.724
CPUとGPUの計算速度 (32,000 atoms)

内蔵グラフィックなのにそんなに速いの???
という結果になりました。もちろんRTXのほうが速いですが、2倍くらいしか差がありません。
また、計算時間としては1秒以下で終わっており、CPUの瞬間的な動作クロック数はノートPCもデスクトップ並みに高いようで、あまり差がありません。

次に、in.ljを少し書き換えて原子数を増やしました。

variable	xx equal 50*$x
variable	yy equal 50*$y
variable	zz equal 50*$z

20倍ずつだったのを50倍ずつに増やして、原子数は32,000原子から500,000原子になりました。
この計算で同様に比較してみます。

条件ノートPC 速度 [timesteps/s]デスクトップ 速度 [timesteps/s]
CPU 1プロセス5.6936.086
CPU 4プロセス17.65120.316
CPU 1プロセス+GPU55.838100.646
CPU 4プロセス+GPU51.475101.514
CPUとGPUの計算速度 (500,000 atoms)

こちらは1プロセスでの計算に15秒程度かかる規模ですが、CPUについてはノートもデスクトップも差があまりなく、GPUも2倍くらいの差しかありません。納得いかねえ!

LAMMPS公式のWindowsバイナリはGPU APIがOpenCLで、これがCUDAになるとRTXがさらに速くなるのか、それか計算サンプルが悪くて差が出ないのか… 進展があればまた追記します。

また、今回は非常に短い時間で終わる計算で速度を比較しました。
長時間の計算をした場合はCPUの排熱問題でクロックがダウンすることが予想されますので、ノートとデスクトップの差はそこで出てくると思います。

スポンサーリンク

まとめ

今回はLAMMPSをGPUで動かしてみました。
CPUの内蔵グラフィックでも劇的に速くなり、ちゃんとしたグラフィックボードではそれ以上の速度になりましたが、思ったよりも差が出ませんでした。
WSLでCUDA版LAMMPSを作って試そうと思いますが、なかなか上手くいきません… できたら更新します。

コメント

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