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

Translation update pending

The Armenian translation may be out of date because the Japanese source has changed. The existing translation remains available while it is being updated.

Կառուցում 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

Առանց OpenACC-ի (CPU տարբերակ)

NVIDIA HPC SDK կոմպիլյատորներով առանց OpenACC-ի CPU տարբերակ կառուցելու համար նշեք -DNVHPC_NO_ACC=ON։ Այս դեպքում -acc, -Minfo=accel և -gpu=ccnative,mem:managed ընտրանքները չեն սահմանվում։ Այս կազմաձևն օգտագործեք նույն կոմպիլյատորներով կառուցված GPU տարբերակի արդյունքների հետ համեմատելու համար։

mkdir build
cd build
CC=nvc CXX=nvc++ FC=nvfortran cmake \
  -DNVHPC_NO_ACC=ON \
  -DWITH_MPI=OFF -DWITH_OPENMP=ON \
  ..
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