Skip to content

GPU በመጠቀም መገንባት

FrontISTR የNVIDIA HPC SDK OpenACC ተግባርን በመጠቀም GPU ላይ ሊሠራ ይችላል። ይህ ገጽ 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 በራስ-ሰር ፈልጎ ተስማሚውን ዒላማ የሚመርጥ አማራጭ ስለሆነ ለእያንዳንዱ አካባቢ በእጅ መቀየር አያስፈልግም። 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