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 |