LAMMPSをIntel OneAPIでビルドする

LAMMPS

古典分子動力学パッケージのLAMMPSをLinux(WSL)のIntel OneAPI環境でビルドします。

スポンサーリンク

LAMMPSダウンロード

まずはLAMMPSをダウンロードして展開します。

wget https://download.lammps.org/tars/lammps-stable.tar.gz
tar -xvf lammps-stable.tar.gz
cd lammps-29Aug2024/

LAMMPSの公式ページには複数のインストーラがありますが、特にこだわりがない場合はstableと書いてあるものでいいと思います。

スポンサーリンク

ビルド

ビルドのコマンドは長いのでスクリプトを書いて実行するのがお勧めです。

Intel OneAPIの環境を以下のいずれかで読み込みます。

. /opt/intel/oneapi/setvars.sh
または
. /etc/profile.d/modules.sh
module load compiler/latest
module load mpi/latest

今回は前者でスクリプトを作成します。スクリプトは lammps-stable.tar.gzを展開したディレクトリ内、今回の場合は lammps-29Aug2024/ に作ります。

. /opt/intel/oneapi/setvars.sh

mkdir build
cd build
cmake -C ../cmake/presets/oneapi.cmake \
      -D LAMMPS_MACHINE=intel -D CMAKE_INSTALL_PREFIX=$HOME/.local \
      -D PKG_KSPACE=yes -D PKG_MANYBODY=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes \
      -D PKG_REAXFF=yes -D PKG_OPENMP=yes ../cmake

cmake --build .
make install

プリセットを使わない場合は以下のようにコンパイラコマンド名を直に書きます。OneAPIのバージョンによってはコンパイルオプションのエラーが出ることがあり、その場合はoneapi.cmakeファイルを書き換えるか、以下の書き方を試すといいと思います。

. /opt/intel/oneapi/setvars.sh

mkdir build
cd build
cmake -D LAMMPS_MACHINE=intel -D CMAKE_INSTALL_PREFIX=$HOME/.local \
      -D CMAKE_C_COMPILER=icx -D CMAKE_CXX_COMPILER=icpx -D CMAKE_Fortran_COMPILER=ifx \
      -D PKG_KSPACE=yes -D PKG_MANYBODY=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes \
      -D PKG_REAXFF=yes -D PKG_OPENMP=yes ../cmake

cmake --build .
make install

有効にするPKGはお好みで設定してください。また例えば「cmake –build . -j 8」と書くと8並列コンパイルになり、速く進めることができます。

スポンサーリンク

1回目のcmakeコマンドについて

1回目のcmakeコマンドでは多数の引数を指定しています。

-Dオプション意味
LAMMPS_MACHINE実行ファイルに付ける名前。省略可。省略すると「lmp」というファイルが作られ、上記のスクリプトだと「lmp_intel」が作られる。
CMAKE_INSTALL_PREFIXインストール場所の指定。省略すると$HOME/.localにインストールされる。
CMAKE_C_COMPILERCコンパイラコマンド。
CMAKE_CXX_COMPILERC++コンパイラコマンド
CMAKE_Fortran_COMPILERFortranコンパイラコマンド。
PKG_〇〇=yesLAMMPSのパッケージを有効にする。

また、このcmakeコマンド内で指定する引数はプリセット化されていて、それを読み込むことも可能です。

cmake -C ../cmake/presets/oneapi.cmake \
      -D LAMMPS_MACHINE=intel -D CMAKE_INSTALL_PREFIX=$HOME/.local \
      -D PKG_KSPACE=yes -D PKG_MANYBODY=yes -D PKG_MOLECULE=yes -D PKG_RIGID=yes \
      -D PKG_REAXFF=yes -D PKG_OPENMP=yes ../cmake

この例ではoneapi.cmakeを読み込んでいます。その名の通りIntel OneAPI用のプリセットです。

-D PKGでLAMMPSのパッケージを指定しますが、全部コンパイルしたい場合は
-C ../cmake/all_on.cmake で全部yesにしてくれると思います。

1回目のcmakeコマンドが終わると以下のような出力が出ます。

-- <<< Build configuration >>>
   LAMMPS Version:   20240829
   Operating System: Linux Ubuntu" 22.04
   CMake Version:    3.22.1
   Build type:       RelWithDebInfo
   Install path:     /home/wsl/.local
   Generator:        Unix Makefiles using /usr/bin/gmake
-- Enabled packages: KSPACE;MANYBODY;MOLECULE;OPENMP;REAXFF;RIGID
-- <<< Compilers and Flags: >>>
-- C++ Compiler:     /opt/intel/oneapi/compiler/2024.0/bin/icpx
      Type:          IntelLLVM
      Version:       2024.0.2
      C++ Standard:  11
      C++ Flags:     -O2 -g -DNDEBUG
      Defines:       LAMMPS_SMALLBIG;LAMMPS_MEMALIGN=64;LAMMPS_OMP_COMPAT=4;LAMMPS_GZIP;FFT_KISS;LMP_OPENMP
      Options:       -Wno-tautological-constant-compare;-Wno-unused-command-line-argument
-- <<< Linker flags: >>>
-- Executable name:  lmp_intel
-- Static library flags:
-- <<< MPI flags >>>
-- MPI_defines:      MPICH_SKIP_MPICXX;OMPI_SKIP_MPICXX;_MPICC_H
-- MPI includes:     /opt/intel/oneapi/mpi/2021.11/include
-- MPI libraries:    /opt/intel/oneapi/mpi/2021.11/lib/libmpicxx.so;/opt/intel/oneapi/mpi/2021.11/lib/libmpifort.so;/opt/intel/oneapi/mpi/2021.11/lib/libmpi.so;/lib/x86_64-linux-gnu/libdl.a;/lib/x86_64-linux-gnu/librt.a;/lib/x86_64-linux-gnu/libpthread.a;
-- <<< FFT settings >>>
-- Primary FFT lib:  KISS
-- Using double precision FFTs
-- Using non-threaded FFTs
-- Using builtin distributed FFT algorithms
-- Configuring done
-- Generating done
-- Build files have been written to: /home/wsl/installer/lammps-29Aug2024/build

MPIがちゃんと認識されていることを確認できます。

スポンサーリンク

2回目のcmakeコマンド以降

通常はこちらです。

cmake --build .

しかしLAMMPSのビルドには時間がかかります。せっかちな人は -j 8 のようにオプションを付けると、この場合は8並列でコンパイルを進めてくれます。

cmake --build . -j 8

全て正常に終わると最後のmake installでファイルを指定した場所に置いてくれます。今回は$HOME/.localなので、$HOME/.local/bin内にlmp_intelという実行ファイルが作られます。

スポンサーリンク

LAMMPSの実行方法

LAMMPSを動かすためには2つの環境変数を設定します。

export PATH=$HOME/.local/bin:$PATH
export LAMMPS_POENTIALS=$HOME/.local/share/lammps/potentials

これを.bashrc等に書いておけばOKです。

実行コマンドは

. /opt/intel/oneapi/setvars.sh
mpiexec -n 4 lmp -in aaa.in

のような書き方で動くと思います。lmpは標準的な名前ですが、上記のスクリプトで名前を変えた場合はlmp_intelといったコマンドになります。

コメント

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