Անցնել պարունակությանը

Կառուցում GPU-ի կիրառմամբ

FrontISTR-ը կարող է աշխատել GPU-ի վրա՝ օգտագործելով NVIDIA HPC SDK-ի OpenACC հնարավորությունները։ Այս էջում նկարագրվում են 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 հիշողության մշակման եղանակը նշող ընտրանք է, և քանի որ 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 կլաստերային միջավայրերում 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