Skoči na vsebino

EuroCC in SLING

Programiranje grafičnih procesnih enot12

Patricio Bulić, 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 OpenCL, ki podpira GPE različnih proizvajalcev (Nvidia, AMD, Intel). Enake pristope k uporabi GPE vključujejo tudi druga ogrodja, zato se boste s pridobljenim znanjem zlahka lotili programiranja grafičnih kartic Nvidia v ogrodju CUDA ali pa programski jezik C zamenjali s kakšnim drugim.

Potek

Tečaj bo potekal preko sistema Zoom. Izvedli ga bomo v treh popoldnevih. Povezavo na sejo Zoom bomo prijavljenim sporočili naknadno.

Dan 1

Spoznavanje strojne zgradbe in delovanja GPE; spoznavanje povezave med gostiteljem in GPE; spoznavanje programskega in pomnilniškega modela GPE; spoznavanje okolja OpenCL; pisanje, prevajanje ter zagon preprostega programa, napisanega v OpenCL, na GPE.

Dan 2

Na praktičnem primeru bomo po korakih spoznavali učinkovito implementacijo računskih nalog na GPE, njihovo učinkovito paralelizacijo in razdelitev dela po procesnih enotah ter učinkovito uporabo pomnilnika na GPE.

Dan 3

Obdelava slik na GPE: slike bomo na gostitelju prebrali, jih prenesli na GPE, tam z zanimivim filtrom obdelali in obdelane slike prenesli nazaj na gostitelja.

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,
  • poznali programsko ogrodje OpenCL,
  • znali pisati, prevajati ter zaganjati programe za GPE,
  • znali učinkovito razdeliti delo po procesnih enotah in uporabljati pomnilnik na GPE,
  • znali smiselno uporabiti že pripravljene knjižnice za GPE.

Na delavnici bomo programirali v razvojnem okolju Visual Studio Code ter programe zaganjali gruči NSC. Zato bomo v okolju Visual Studio Code uporabljali razširitev Remote-SSH, ki nam omogoča povezovanje na gručo NSC 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 jih bomo obravnavali na delavnici, najdete na https://repo.sling.si/patriciob/opencl-delavnica. Na svoj računalnik si jo lahko prenesete z ukazom:

$ git clone https://repo.sling.si/patriciob/opencl-delavnica.git

  1. Gradivo je objavljeno pod licenco Creative Commons Priznanje avtorstva-Nekomercialno-Deljenje pod enakimi pogoji 4.0 Mednarodna

  2. 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. EuroCC in SLING