Lewati ke isi

Build dengan Dukungan GPU

FrontISTR dapat berjalan pada GPU menggunakan fungsi OpenACC dari NVIDIA HPC SDK. Halaman ini menjelaskan cara membangun FrontISTR dengan dukungan GPU diaktifkan serta cara menjalankannya.

Untuk library prasyarat, lihat Dependensi Wajib dan Opsional.

Prosedur Build

Gunakan compiler NVIDIA HPC SDK (nvc, nvc++, dan nvfortran). Dalam lingkungan cluster HPC, NVIDIA HPC SDK harus dimuat sebelum build sesuai manual lingkungan (misalnya, module load nvhpc).

Library opsional seperti METIS, MUMPS, dan MKL tidak mendukung GPU, sehingga dinonaktifkan dalam contoh perintah di bawah ini (misalnya, WITH_METIS=OFF).

Seperti dijelaskan dalam Build dengan CMake, ketika NVIDIA HPC SDK (nvc, nvc++, nvfortran) ditentukan sebagai compiler, -gpu=ccnative,mem:managed disetel dalam CMakeLists.txt. ccnative adalah opsi yang secara otomatis mendeteksi GPU di lingkungan build dan memilih target optimal, sehingga tidak diperlukan perubahan manual untuk setiap lingkungan. mem: adalah opsi yang menentukan cara memori GPU ditangani; opsi ini diperlukan karena implementasi GPU FrontISTR mengasumsikan Unified Memory. mem:managed adalah pengaturan default untuk lingkungan umum tempat CPU dan GPU memiliki memori terpisah.

Catatan: Pada arsitektur seperti Miyabi (GH200), tempat CPU dan GPU terintegrasi melalui NVLink, gunakan mem:unified sebagai ganti mem:managed; ubah pengaturan sesuai lingkungan yang digunakan (-gpu=ccnative,mem:unified).

OpenACC + OpenMP (tanpa 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

Saat menggunakan MPI, compiler wrapper MPI (seperti mpicc) harus dikonfigurasi untuk memanggil compiler NVIDIA HPC SDK (seperti nvc) secara internal. Dalam banyak lingkungan cluster HPC, memuat NVIDIA HPC SDK dan library MPI dengan perintah seperti module load secara otomatis menyediakan konfigurasi ini. Namun, versi yang direkomendasikan dan prosedur pemuatan berbeda menurut lingkungan, jadi lihat manual pengguna atau dokumentasi lain untuk setiap lingkungan.

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

Eksekusi

Prosedur eksekusi untuk build GPU pada dasarnya sama dengan build CPU. Untuk prosedur eksekusi umum, lihat Panduan Eksekusi.

Profiling

Data profiling dapat dikumpulkan menggunakan NVIDIA Nsight Systems (nsys).

Tanpa MPI

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

Dengan MPI

nsys profile -t cuda,mpi -s none -o profile_result \
  mpiexec -n <number_of_processes> /path/to/FrontISTR/build/fistr1/fistr1 -t 8