အကြောင်းအရာသို့ ကရန်

GPUအသုံးပြု၍တည်ဆောက်ခြင်း

FrontISTRသည်NVIDIA HPC SDK၏OpenACCလုပ်ဆောင်ချက်အသုံးပြု၍linearsolverတွက်ချက်မှုများကိုGPUပေါ်တွင်လုပ်ဆောင်နိုင်သည်။ ဤစာမျက်နှာတွင်GPUကိုဖွင့်ထားသောတည်ဆောက်လုပ်ငန်းစဉ်နှင့်လုပ်ဆောင်မှုနည်းလမ်းကိုရှင်းပြထားသည်။

GPUပေါ်တွင်တွက်ချက်သည့်လုပ်ငန်းများနှင့်ထပ်ကျော့တွက်ချက်မှုနည်းလမ်းနှင့်preconditionerရွေးချယ်ပုံအတွက်လုပ်ဆောင်ချက်ရည်ညွှန်းရှိGPUအသုံးပြု၍တွက်ချက်ခြင်းကိုကြည့်ပါ။

လိုအပ်သောလိုင်ဘရီများအတွက်မဖြစ်မနေ/ရွေးချယ်နိုင်သောမှီခိုမှုလိုင်ဘရီများကိုကြည့်ပါ။

တည်ဆောက်လုပ်ငန်းစဉ်

NVIDIA HPC SDKကွန်ပိုင်လာများ(nvc, nvc++, nvfortran)ကိုအသုံးပြုသည်။ HPCကလပ်စတာပတ်ဝန်းကျင်တွင်တည်ဆောက်မလုပ်မီပတ်ဝန်းကျင်၏လက်စွဲအတိုင်းNVIDIA HPC SDKကိုဝန်လုပ်ထားရန်လိုအပ်သည်(ဥပမာmodule load nvhpc)。

METIS၊ MUMPS၊ MKLစသည့်ရွေးချယ်နိုင်သောလိုင်ဘရီများသည်GPUကိုမပံ့ပိုးသောကြောင့်အောက်ပါကွန်မန်းဥပမာများတွင်ပိတ်ထားသည်(WITH_METIS=OFFစသည်)။ SA-AMGရှေ့ကိုင်တွယ်မှုကိုအသုံးပြုလိုပါကLAPACKကိုဖွင့်ထားသောတည်ဆောက်မှုလိုအပ်သည်။

CMakeဖြင့်တည်ဆောက်လုပ်ငန်းစဉ်တွင်ဖော်ပြထားသကဲ့သို့ကွန်ပိုင်လာအဖြစ်NVIDIA HPC SDK(nvc, nvc++, nvfortran)ကိုသတ်မှတ်ပါကCMakeLists.txtတွင်-gpu=ccnative,mem:managedကိုသတ်မှတ်သည်။ ccnativeသည်တည်ဆောက်ပတ်ဝန်းကျင်ရှိGPUကိုအလိုအလျောက်ရှာဖွေပြီးအကောင်းဆုံးပစ်မှတ်ကိုရွေးချယ်သည့်ရွေးချယ်စရာဖြစ်သောကြောင့်ပတ်ဝန်းကျင်တစ်ခုချင်းစီအတွက်လက်ဖြင့်ပြောင်းရန်မလိုအပ်ပါ။ mem:သည်GPUမှတ်ဉာဏ်ကိုဘယ်လوكိုင်တွယ်မည်ကိုသတ်မှတ်သည့်ရွေးချယ်စရာဖြစ်ပြီးFrontISTR၏GPUအကောင်အထည်ဖော်မှုသည်Unifiedမှတ်ဉာဏ်ကိုအခြေခံသောကြောင့်မဖြစ်မနေသတ်မှတ်ရသည်။ 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_ML=OFF -DWITH_REFINER=OFF -DWITH_REVOCAP=OFF \
  ..
make -j

OpenACC + OpenMP + MPI

MPIကိုအသုံးပြုပါကMPIဝရက်ပါကွန်ပိုင်လာများ(mpiccစသည်)ကအတွင်းပိုင်းတွင်NVIDIA HPC SDKကွန်ပိုင်လာများ(nvcစသည်)ကိုခေါ်သည့်ဖွဲ့စည်းပုံဖြစ်ရန်လိုအပ်သည်။ HPCကလပ်စတာပတ်ဝန်းကျင်များတွင်module loadစသည့်ကွန်မန်းများဖြင့်NVIDIA HPC SDKနှင့်MPIလိုင်ဘရီကိုဝန်လုပ်သည့်အခါထိုဖွဲ့စည်းပုံအဖြစ်အလိုအလျောက်ဖြစ်လာသည့်ပတ်ဝန်းကျင်များအများအပြားရှိသော်လည်းအကြံပြုဗားရှင်းနှင့်ဝန်လုပ်ငန်းစဉ်သည်ပတ်ဝန်းကျင်အလိုက်မတူသဖြင့်အသေးစိတ်ကိုပတ်ဝန်းကျင်တစ်ခုချင်းစီ၏အသုံးပြုသူလက်စွဲများတွင်ကြည့်ပါ။

GPUဗားရှင်းကိုMPIအပြိုင်တွက်ချက်မှုဖြင့်လုပ်ဆောင်သည့်အခါGPUမှတ်ဉာဏ်ပွိုင့်များကိုကိုင်တွယ်နိုင်သောMPI(CUDA-aware MPI)ကိုအသုံးပြုပါ။ FrontISTR၏READMEတွင်NVIDIA HPC-Xကိုအကြံပြုထားသည်။

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_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ကိစ္စနှင့်မကွာခြားပါ။ အထွေထွေလုပ်ဆောင်မှုလုပ်ငန်းစဉ်ကိုလုပ်ဆောင်မှုလမ်းညွှန်တွင်ကြည့်ပါ။ အောက်ပါသည်GPUတည်ဆောက်မှုအတွက်သာလက်ထိသည့်အချက်များဖြစ်သည်။

တည်ဆောက်မှုအတည်ပြုနည်း

fistr1 -v၏တည်ဆောက်မှုအချက်အလက်များတွင်GPUတည်ဆောက်မှုအတွက်OpenACC:လိုင်းတွင်ဂဏန်းတစ်ခုကိုမြင်ရသည်။ LAPACKကိုဖွင့်ထားသောတည်ဆောက်မှုတွင်option:လိုင်းတွင်--with-lapackပါဝင်သည်။

MPIအပြိုင်တွက်ချက်မှုတွင်GPUခွဲဝေခြင်း

MPIအပြိုင်တွက်ချက်မှုဖြင့်လုပ်ဆောင်သည့်အခါတစ်ခုစီသောပရိုဆက်စ်သည်တစ်ပရိုဆက်စ်စီ၏ရင့်နံနံပါတ်ကိုထိုပရိုဆက်စ်မှမြင်ရသောGPUအရေအတွက်ဖြင့်စားသည့်ကြွင်းရေကိုနံပါတ်အဖြစ်သတ်မှတ်ထားသောGPUကိုအသုံးပြုသည်။

ရင့်နံ0ပရိုဆက်စ်မှGPUတစ်ခုမျှမမြင်ရပါကအောက်ပါမက်ဆေ့ချ်ကိုထုတ်သည်။

No GPU devices found.

ပရိုဖိုင်လေ့လာမှု

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