Programiranje grafičnih procesnih enot12
Patricio Bulić, Davor Sluga, Univerza v Ljubljani, Fakulteta za računalništvo in informatiko
Vsebina
Na delavnici se bomo seznanili z zgradbo grafičnih procesnih enot (GPE) in njihovim programiranjem. Skozi preproste primere se bomo naučili pisati in poganjati programe na GPE, prenašati podatke med gostiteljem in GPE ter učinkovito uporabljati pomnilnik na GPE. Na koncu bomo napisali paralelni program za obdelovanje slik, ki se bo izvajal na GPE. Programirali bomo v programskem jeziku C in uporabljali ogrodje CUDA, ki se uporablja za programiranje grafičnih procesnih enot Nvidia. Principi programiranja GPE so zelo podobni na vseh platformah, zato boste pridobljeno znanje lahko uporabili tudi pri programiranju GPE drugih proizvajalcev in v drugih programskih jezikih.
Potek
Prvi dan se bomo seznanili z zasnovo strojne opreme grafičnega procesorja in s tem, kako se razlikuje od zasnove običajnih računalnikov v smislu procesiranja in pomnilnika. Razmislili bomo o prednostih in pomanjkljivostih modela razbremenitve ter se seznanili s programskim modelom GPE z uporabo orodja CUDA Toolkit, s katerim bomo zagnali svoj prvi program.
Drugi dan se bomo ukvarjali s številnimi praktičnimi primeri. Učenje pomembnih konceptov bomo začeli z optimizacijo preprostih algoritmov in na koncu pridobljeno znanje uporabili pri optimizaciji algoritma za obdelavo slik.
Zaželena predznanja
- Poznavanje odjemalca SSH in vmesne programske opreme SLURM. Poglejte vsebine delavnice Osnove superračunalništva
- Znanje programiranja, zaželeno poznavanje programskega jezika C
Pridobljena znanja
Po končani delavnici boste:
- razumeli, kako deluje heterogen računalniški sistem z GPE;
- razumeli, kako deluje GPE;
- kako s pomočjo orodja CUDA pisati, prevajati ter zaganjati programe za GPE;
- kako učinkovito razdeliti delo po procesnih enotah in učinkovito uporabljati pomnilnik na GPE;
- kako smiselno uporabiti že pripravljene knjižnice za GPE.
Navodila za namestitev Visual Studio Code
Na delavnici bomo programirali v razvojnem okolju Visual Studio Code ter programe zaganjali gruči ARNES. Zato bomo v okolju Visual Studio Code uporabljali razširitev Remote-SSH, ki nam omogoča povezovanje na gručo ARNES preko protokola SSH. S to razširitvijo je mogoče prenašati in urejati datoteke neposredno na gruči NSC, zaganjati ukaze in celo razhroščevati programe, ki tečejo na njej. Navodila za namestitev okolja Visual Studio Code, razširitve Remote-SSH ter povezovanje na gručo NSC najdete tukaj.
Programska koda
Programsko kodo problemov, ki jo bomo obravnavali na delavnici, najdete na https://repo.sling.si/dsluga/programming-cuda. Na gručo si jo lahko prenesete z ukazom:
$ git clone https://repo.sling.si/dsluga/programming-cuda.git
-
Gradivo je objavljeno pod licenco Creative Commons Priznanje avtorstva-Nekomercialno-Deljenje pod enakimi pogoji 4.0 Mednarodna. ↩
-
Delavnica je pripravljena pod okriljem evropskega projekta EuroCC, ki je namenjen vzpostavitvi nacionalnih kompetenčnih centrov za superračunalništvo. Več o projektu EuroCC najdete na spletnih straneh SLING. ↩