پرش به محتویات

ساخت با GPU

FrontISTR با استفاده از قابلیت OpenACC در NVIDIA HPC SDK می‌تواند روی 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 را مشخص می‌کند و چون پیاده‌سازی 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