לדלג לתוכן

בנייה באמצעות 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) מוגדר כמהדר, -gpu=ccnative,mem:managed מוגדר ב-CMakeLists.txt. ‏ccnative היא אפשרות המזהה אוטומטית את ה-GPU בסביבת הבנייה ובוחרת את יעד ההידור המתאים, ולכן אין צורך בשינוי ידני לכל סביבה. ‏mem: היא אפשרות הקובעת כיצד מטופל זיכרון ה-GPU, והיא נדרשת משום שמימוש ה-GPU של FrontISTR מניח שימוש ב-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 (כגון 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