انتقل إلى المحتوى

البناء مع دعم GPU

يمكن تشغيل FrontISTR على وحدات GPU باستخدام وظائف OpenACC في NVIDIA HPC SDK. تشرح هذه الصفحة كيفية بناء FrontISTR مع تمكين دعم 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: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، يجب أن تكون مترجمات غلاف 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