შიგთავსზე გადასვლა

GPU-ის გამოყენებით აგება

FrontISTR შეიძლება შესრულდეს GPU-ზე NVIDIA HPC SDK-ის OpenACC ფუნქციონალის გამოყენებით. ამ გვერდზე აღწერილია GPU-ის ჩართული ვერსიის აგებისა და შესრულების პროცედურა.

წინაპირობად საჭირო ბიბლიოთეკებისთვის იხილეთ აუცილებელი და არასავალდებულო დამოკიდებულებების ბიბლიოთეკები.

აგების პროცედურა

გამოიყენეთ 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-ს და არჩევს შესაბამის ოპტიმალურ target-ს, ამიტომ გარემოს მიხედვით ხელით ცვლილება საჭირო არ არის. 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 wrapper კომპილატორი (mpicc და სხვ.) შიგნით უნდა იძახებდეს NVIDIA HPC SDK-ის კომპილატორს (nvc და სხვ.). HPC კლასტერებში NVIDIA HPC SDK-ისა და MPI ბიბლიოთეკების module load-ით ჩატვირთვისას ასეთი კონფიგურაცია ხშირად ავტომატურად იქმნება, თუმცა რეკომენდებული ვერსიები და ჩატვირთვის პროცედურები გარემოს მიხედვით განსხვავდება; დეტალებისთვის იხილეთ შესაბამისი გარემოს მომხმარებლის სახელმძღვანელო.

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
AI-assisted translation May contain errors Official docs Status