विषय पर बढ़ें

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 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

निष्पादन

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