Μετάβαση στο περιεχόμενο

Μεταγλώττιση με υποστήριξη GPU

Το FrontISTR μπορεί να εκτελείται σε GPU χρησιμοποιώντας τη λειτουργία OpenACC του NVIDIA HPC SDK. Αυτή η σελίδα περιγράφει τη διαδικασία μεταγλώττισης με ενεργοποιημένη 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 και είναι υποχρεωτικό επειδή η υλοποίηση GPU του FrontISTR προϋποθέτει Unified Memory. Το mem:managed είναι η προεπιλεγμένη ρύθμιση για συνήθη περιβάλλοντα όπου CPU και GPU διαθέτουν ξεχωριστή μνήμη.

Σημείωση: Σε αρχιτεκτονικές όπως το Miyabi (GH200), όπου CPU και GPU είναι ενοποιημένα μέσω NVLink, χρησιμοποιείται mem:unified αντί για mem:managed. Αλλάξτε τη ρύθμιση ανάλογα με το περιβάλλον (-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, οι wrapper μεταγλωττιστές MPI (όπως 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. Για τη γενική διαδικασία εκτέλεσης, ανατρέξτε στον Οδηγό εκτέλεσης.

Δημιουργία προφίλ

Μπορείτε να συλλέξετε δεδομένα profiling χρησιμοποιώντας το 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