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တစ်ခုမျှမမြင်ရပါကအောက်ပါမက်ဆေ့ချ်ကိုထုတ်သည်။
ပရိုဖိုင်လေ့လာမှု¶
NVIDIA Nsight Systems(nsys)ကိုအသုံးပြု၍ပရိုဖိုင်ဒေတာကိုစုဆောင်းနိုင်သည်။