Skip to content

Translation update pending

The Marathi translation may be out of date because the Japanese source has changed. The existing translation remains available while it is being updated.

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 क्लस्टर वातावरणात 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

OpenACC शिवाय (CPU आवृत्ती)

NVIDIA HPC SDK कंपाइलर वापरून OpenACC नसलेली CPU आवृत्ती बिल्ड करण्यासाठी -DNVHPC_NO_ACC=ON निर्दिष्ट करा. अशा वेळी -acc, -Minfo=accel आणि -gpu=ccnative,mem:managed सेट केले जात नाहीत. त्याच कंपाइलरने बिल्ड केलेल्या GPU आवृत्तीशी गणना परिणामांची तुलना करण्यासाठी ही संरचना वापरा.

mkdir build
cd build
CC=nvc CXX=nvc++ FC=nvfortran cmake \
  -DNVHPC_NO_ACC=ON \
  -DWITH_MPI=OFF -DWITH_OPENMP=ON \
  ..
make -j

चालवण्याची पद्धत

GPU बिल्ड चालवण्याची मूलभूत प्रक्रिया CPU च्या बाबतीतल्या प्रक्रियेपेक्षा वेगळी नाही. सर्वसाधारण कार्यान्वयन प्रक्रियेसाठी कार्यन्वयन मार्गदर्शक पहा.

प्रोफाइलिंग

NVIDIA Nsight प्रणाली (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