본문 바로가기

LAMMPS

Build LAMMPS with AOCC and AOCL

AMD 에서는 AMD Zen Software Studio를 통해 자사의 CPU에 최적화된 컴파일러를 제공하고 있다.

AOCC와 AOCL로 LLVM에 기초로 작성된 컴파일러 이다.

 

https://www.amd.com/ko/developer/zen-software-studio.html

 

AMD Zen Software Studio

 

www.amd.com

위에 링크에서 AOCC와 AOCL을 설치한다. Ubuntu의 경우 deb 배포판으로 dpkg install을 하면 된다.

 

설치하면 아래와 같은 위치에 설치되는데, 각각의 디렉토리를 보면 module설정을 위한 파일이 위치한다.

:/opt/AMD  ls
aocc-compiler-5.0.0  aocl

 

:/opt/AMD/aocc-compiler-5.0.0  ls
AMDALLOC-LICENSE.TXT        AOCC-LICENSE.TXT             bin                  FLANG-LICENSE.TXT  install.sh  lib32    LICENSERV.TXT  ompd    setenv_AOCC.sh
aocc-compiler-5.0.0_module  AOCC-prerequisites-check.sh  FLANG-CHANGELOG.TXT  include            lib         libexec  LICENSE.TXT    README  share
:/opt/AMD/aocl/aocl-linux-aocc-4.2.0/aocc  ls
amd-blis         amd-crypto  amd-libflame  amd-libmem    amd-rng        amd-securerng  amd-utils                     include        include_LP64  lib_ILP64  README
amd-compression  amd-fftw    amd-libm      amd-libs.cfg  amd-scalapack  amd-sparse     aocl-linux-aocc-4.2.0_module  include_ILP64  lib           lib_LP64   set_aocl_interface_symlink.sh

 

~/.bashrc 에 아래와 같이 모듈설정을 한다.

source /usr/share/modules/init/bash
module use /opt/AMD/aocc-compiler-5.0.0
module use /opt/AMD/aocl

 

모듈을 확인해 보면 (bash를 열 때마다 세팅된다)

:~  module avail
--------------------------------------------------------------------------------------- /opt/AMD/aocl ----------------------------------------------------------------------------------------
aocl-linux-aocc-4.2.0/aocc/aocl-linux-aocc-4.2.0_module

-------------------------------------------------------------------------------- /opt/AMD/aocc-compiler-5.0.0 --------------------------------------------------------------------------------
aocc-compiler-5.0.0_module

------------------------------------------------------------------------------- /usr/share/modules/modulefiles -------------------------------------------------------------------------------
dot  module-git  module-info  modules  null  use.own

 

모듈을 로드하고 확인

:~  module load aocl-linux-aocc-4.2.0/aocc/aocl-linux-aocc-4.2.0_module
:~  module load aocc-compiler-5.0.0_module
:~  module list
Currently Loaded Modulefiles:
 1) aocl-linux-aocc-4.2.0/aocc/aocl-linux-aocc-4.2.0_module   2) aocc-compiler-5.0.0_module
:~  which clang
/opt/AMD/aocc-compiler-5.0.0/bin/clang
:~  which clang++
/opt/AMD/aocc-compiler-5.0.0/bin/clang++
:~  which flang
/opt/AMD/aocc-compiler-5.0.0/bin/flang

 

잘 로드되어 있다. AOCC컴파일러는 clang계열을 쓴다.

 

이제 LAMMPS의 소스코드를 다운 받는다.

git clone https://github.com/lammps/lammps.git

 

패키지 매니저로 설치하지 않는 응용프로그램 (컴파일 하는 것들)은 /usr/local/src 에 설치하는게 기본인데, root privileage가 필요해서 sudo cmake를 해야된다.

그런데 우분투에서는 sudo cmake를 하면 environmetal setup이 초기화 되므로 애써 module로 clang의 path 를 AOCC로 타겟 잡은것이 풀려버린다. 그래서 우분투 기본 컴파일러를 쓰지 않는경우 user권한이 있는 디렉토리에서 컴파일하는게 좋다.

 

그래서 여기서 build_AOCC 디렉토리를 만들고 작업하자.

물론 /usr/local/src에서 도 가능하지만 그러려면 cmake에서 full path를 지정해야 하고 인스톨 등등 할때 마다 sudo를 써야 되서 귀찮다.

:~/Downloads/lammps  ls
bench  build_AOCC  CITATION.cff  cmake  doc  examples  fortran  lib  LICENSE  potentials  python  README  SECURITY.md  src  tools  unittest

 

Cmake의 셋업은 다음과 같다.

cmake ../cmake \
  -G Ninja \
  -D BUILD_MPI=yes \
  -D BUILD_OMP=yes \
  -D CMAKE_C_COMPILER=clang \
  -D CMAKE_CXX_COMPILER=clang++ \
  -D CMAKE_Fortran_COMPILER=flang \
  -D CMAKE_C_FLAGS="-Ofast -march=native" \
  -D CMAKE_CXX_FLAGS="-Ofast -march=native" \
  -D CMAKE_Fortran_FLAGS="-Ofast -march=native" \
  -D PKG_OPENMP=yes \
  -D PKG_GRANULAR=yes \
  -D PKG_VTK=yes \
  -D PKG_RIGID=yes \
  -D PKG_MOLECULE=yes \
  -D PKG_PYTHON=yes \
  -D Python_EXECUTABLE=/usr/bin/python3 \
  -D VTK_DIR=$HOME/VTK_gcc_install/lib/cmake/vtk-9.4 \
  -D LAMMPS_MACHINE=AOCCP \
  -D CMAKE_INSTALL_PREFIX=~/LAMMPS_AOCCP

 

재설치를 위한 uninstall은

sudo xargs rm -v < install_manifest.txt

 

 

아래의 옵션은 좀 더 연구해 보자

 

3. Architecture/Optimization

You can pass AOCC/Clang-specific flags via:

-D CMAKE_C_FLAGS="-Ofast -march=znver3" \
-D CMAKE_CXX_FLAGS="-Ofast -march=znver3" \
-D CMAKE_Fortran_FLAGS="-Ofast -march=znver3"

Adjust -march according to your CPU (e.g. znver2, znver3, etc.).

 

4. BLAS/LAPACK

If you want to link against AMD’s optimized BLAS/LAPACK (part of AOCL), you can specify appropriate -D LAMMPS_BLAS_LIB, -D LAMMPS_LAPACK_LIB, or direct -D CMAKE_EXE_LINKER_FLAGS to link the AMD libraries. Usually, you can rely on -lblis-mt -lflame -lm etc., depending on which libraries you have loaded.

 

추가 테스트할 것

 

cmake ../cmake \
  -G Ninja \
  -D BUILD_MPI=yes \
  -DMPI_HOME=/opt/openmpi/aocc/5.0.6 \  
  -D BUILD_OMP=yes \
  -D CMAKE_C_COMPILER=clang \
  -D CMAKE_CXX_COMPILER=clang++ \
  -D CMAKE_Fortran_COMPILER=flang \
  -D CMAKE_C_FLAGS="-Ofast -march=native" \
  -D CMAKE_CXX_FLAGS="-Ofast -march=native" \
  -D CMAKE_Fortran_FLAGS="-Ofast -march=native" \
  -D PKG_OPENMP=on \
  -D PKG_GRANULAR=on \
  -D PKG_VTK=on \
  -D PKG_RIGID=on \
  -D PKG_MOLECULE=on \
  -D VTK_DIR=/usr/local/lib/vtk-9.4 \
  -D LAMMPS_MACHINE=AOCC \
  -D CMAKE_INSTALL_PREFIX=~/LAMMPS_AOCC

 

또는

 

  cmake ../cmake \
  -G Ninja \
  -D BUILD_MPI=ON \
  -D BUILD_OMP=ON \
  -D CMAKE_C_COMPILER=/opt/openmpi/aocc/5.0.6/bin/mpicc \
  -D CMAKE_CXX_COMPILER=/opt/openmpi/aocc/5.0.6/bin/mpicxx \
  -D CMAKE_Fortran_COMPILER=/opt/openmpi/aocc/5.0.6/bin/mpifort \
  -D CMAKE_C_FLAGS="-Ofast -march=native" \
  -D CMAKE_CXX_FLAGS="-Ofast -march=native" \
  -D CMAKE_Fortran_FLAGS="-Ofast -march=native" \
  -D PKG_OPENMP=yes \
  -D PKG_GRANULAR=yes \
  -D PKG_VTK=yes \
  -D PKG_RIGID=yes \
  -D PKG_MOLECULE=yes \
  -D PKG_PYTHON=yes \
  -D Python_EXECUTABLE=/usr/bin/python3 \
  -D BUILD_SHARED_LIBS=yes \
  -D VTK_DIR=$HOME/VTK_gcc_install/lib/cmake/vtk-9.4 \
  -D LAMMPS_MACHINE=AOCCP \
  -D CMAKE_INSTALL_PREFIX=~/LAMMPS_AOCCP \
  -D LAMMPS_BLAS_LIB="-L/opt/AMD/aocl/aocl-linux-aocc-4.2.0/aocc/lib_LP64 -lblis-mt -lflame-mt -lpthread -lm" \
  -D LAMMPS_LAPACK_LIB="-L/opt/AMD/aocl/aocl-linux-aocc-4.2.0/aocc/lib_LP64 -lblis-mt -lflame-mt -lpthread -lm"  
  
  ninja -j 4
  ninja install
  ninja install-python

 

 Update 25.02.06 for Thinkstation p620

 

생 우분투에는 파이썬도 필요

sudo apt install python3.12-dev

 

 

몇가지 찝찝한 옵션은 제거

cmake ../cmake \
  -G Ninja \
  -D BUILD_MPI=ON \
  -D BUILD_OMP=ON \
  -D CMAKE_C_COMPILER=/opt/openmpi/aocc/5.0.6/bin/mpicc \
  -D CMAKE_CXX_COMPILER=/opt/openmpi/aocc/5.0.6/bin/mpicxx \
  -D CMAKE_Fortran_COMPILER=/opt/openmpi/aocc/5.0.6/bin/mpifort \
  -D CMAKE_C_FLAGS="-Ofast -march=native" \
  -D CMAKE_CXX_FLAGS="-Ofast -march=native" \
  -D CMAKE_Fortran_FLAGS="-Ofast -march=native" \
  -D PKG_OPENMP=yes \
  -D PKG_GRANULAR=yes \
  -D PKG_VTK=yes \
  -D PKG_RIGID=yes \
  -D PKG_MOLECULE=yes \
  -D PKG_PYTHON=yes \
  -D PKG_EXTRA-FIX=yes \
  -D Python_EXECUTABLE=/usr/bin/python3 \
  -D BUILD_SHARED_LIBS=yes \
  -D CMAKE_INSTALL_PREFIX=$HOME/LAMMPS_AOCCP \
  -D CMAKE_INSTALL_RPATH="$HOME/LAMMPS_AOCCP/lib" \
  -D LAMMPS_BLAS_LIB="-L/opt/AMD/aocl/aocl-linux-aocc-4.2.0/aocc/lib_LP64 -lblis-mt -lflame-mt -lpthread -lm" \
  -D LAMMPS_LAPACK_LIB="-L/opt/AMD/aocl/aocl-linux-aocc-4.2.0/aocc/lib_LP64 -lblis-mt -lflame-mt -lpthread -lm"

 

여기서   -D CMAKE_INSTALL_RPATH="$HOME/LAMMPS_AOCCP/lib" \ 는 실행화일에 라이브러리 위치를 심어주는 옵션이다.

 

빌드, 설치,

ninja -j 4
sudo ninja install

 

가상환경 아래에서 파이썬 설치,

python3 -m venv ~/my_lammps_venv
source ~/my_lammps_venv/bin/activate

ninja install-python

 

패스 잡아주기

export PATH="$HOME/LAMMPS_AOCCP/bin:$PATH"

 

 

 

파이썬 가상환경에서 설치해야 할 것

 

MPICC=/opt/openmpi/aocc/5.0.6/bin/mpicc python -m pip install mpi4py

 

실행

# Option A: map-by node:PE=32
mpirun -np 2 \
  -x OMP_NUM_THREADS=32 \
  -x OMP_PLACES=cores \
  -x OMP_PROC_BIND=spread \
  --map-by node:PE=32 \
  --bind-to core \
  ./lmp_AOCC -in MWE_4.in

# Option B: cpus-per-proc 32
mpirun -np 2 \
  --cpus-per-proc 32 \
  --bind-to core \
  -x OMP_NUM_THREADS=32 \
  -x OMP_PLACES=cores \
  -x OMP_PROC_BIND=spread \
  ./lmp_AOCC -in MWE_4.in

 

CPU 모니터링

glances --percpu

 

25.02.07 Update for P620

mpirun -np 4 \
  --map-by numa \
  --bind-to numa \
  -x OMP_PLACES=cores \
  -x OMP_PROC_BIND=spread \
  ./lmp -var nX 2 -var nY 2 -var nZ 1 -var nNp 4 -var ompTh 8 -in MWE_P620.in

 

'LAMMPS' 카테고리의 다른 글

별도의 Python 파일에 있는 함수를 이용하여 LAMMPS의 변수를 읽어 들이기  (2) 2025.01.28
Python Shared Library 설치  (1) 2025.01.28
Build with Spack and AOCC  (0) 2025.01.22
MWE clumps - check  (0) 2025.01.15
NVE/NVT/NPT/NHT  (0) 2025.01.15