콘텐츠로 이동

GPU 지원 빌드

FrontISTR는 NVIDIA HPC SDK의 OpenACC 기능을 사용하여 GPU에서 실행할 수 있습니다. 이 페이지에서는 GPU 지원을 활성화하여 FrontISTR를 빌드하고 실행하는 방법을 설명합니다.

필수 라이브러리는 필수 및 선택 의존 라이브러리를 참조하십시오.

빌드 절차

NVIDIA HPC SDK 컴파일러(nvc, nvc++, nvfortran)를 사용합니다. HPC 클러스터 환경에서는 환경 매뉴얼에 따라 빌드 전에 NVIDIA HPC SDK를 로드해야 합니다(예: module load nvhpc).

METIS, MUMPS, MKL과 같은 선택 라이브러리는 GPU를 지원하지 않으므로 아래 명령 예에서는 비활성화합니다(예: WITH_METIS=OFF).

CMake를 사용한 빌드에 설명된 것처럼 NVIDIA HPC SDK(nvc, nvc++, nvfortran)를 컴파일러로 지정하면 CMakeLists.txt에서 -gpu=ccnative,mem:managed가 설정됩니다. ccnative는 빌드 환경의 GPU를 자동 감지해 최적의 타깃을 선택하는 옵션이므로 환경별로 수동 변경할 필요가 없습니다. mem:은 GPU 메모리 처리 방식을 지정하는 옵션이며, FrontISTR의 GPU 구현이 Unified Memory를 전제로 하기 때문에 필요합니다. mem:managed는 CPU와 GPU의 메모리가 분리된 일반적인 환경의 기본 설정입니다.

참고: Miyabi(GH200)처럼 CPU와 GPU가 NVLink로 통합된 아키텍처에서는 mem:managed 대신 mem:unified를 사용합니다. 사용 환경에 맞게 설정을 변경하십시오(-gpu=ccnative,mem:unified).

OpenACC + OpenMP (MPI 없음)

mkdir build
cd build
CC=nvc CXX=nvc++ FC=nvfortran cmake \
  -DWITH_MPI=OFF -DWITH_OPENMP=ON \
  -DWITH_METIS=OFF -DWITH_MUMPS=OFF \
  -DWITH_MKL=OFF -DWITH_LAPACK=OFF \
  -DWITH_ML=OFF -DWITH_REFINER=OFF -DWITH_REVOCAP=OFF \
  ..
make -j

OpenACC + OpenMP + MPI

MPI를 사용할 경우 MPI 래퍼 컴파일러(예: mpicc)가 내부적으로 NVIDIA HPC SDK 컴파일러(예: nvc)를 호출하도록 구성해야 합니다. 많은 HPC 클러스터 환경에서는 module load 등의 명령으로 NVIDIA HPC SDK와 MPI 라이브러리를 로드하면 이 구성이 자동으로 제공됩니다. 다만 권장 버전과 로드 절차는 환경마다 다르므로 자세한 내용은 각 환경의 사용자 매뉴얼 등의 문서를 참조하십시오.

mkdir build
cd build
CC=mpicc CXX=mpic++ FC=mpif90 cmake \
  -DWITH_MPI=ON -DWITH_OPENMP=ON \
  -DWITH_METIS=OFF -DWITH_MUMPS=OFF \
  -DWITH_MKL=OFF -DWITH_LAPACK=OFF \
  -DWITH_ML=OFF -DWITH_REFINER=OFF -DWITH_REVOCAP=OFF \
  ..
make -j

실행

GPU 빌드의 실행 절차는 기본적으로 CPU 빌드와 동일합니다. 일반적인 실행 절차는 실행 가이드를 참조하십시오.

프로파일링

NVIDIA Nsight Systems(nsys)를 사용하여 프로파일링 데이터를 수집할 수 있습니다.

MPI 없음

nsys profile -t cuda -s none -o profile_result /path/to/FrontISTR/build/fistr1/fistr1

MPI 사용

nsys profile -t cuda,mpi -s none -o profile_result \
  mpiexec -n <프로세스수> /path/to/FrontISTR/build/fistr1/fistr1 -t 8