Detail předmětu

Paralelní výpočty na GPU

FIT-PCGAk. rok: 2024/2025

Předmět pokrývá architekturu a programování grafických karet Nvidia a částečně i AMD. Nejprve je detailně rozebrána architektura grafických karet. Následně je popsán model vykonávání programu pomocí techniky SIMT a víceúrovňové rozdělení výpočtu do vláken a bloků. Následuje popis hierarchie paměti CUDA, techniky synchronizace a redukce. Následuje popis pokročilých technik dynamického paralelismu a data-flow zpracování na GPU zakončené možnostmi využití více GPU v distribuovaných systémech s technologií NVlink a MPI společně s technikami překrývání výpočtu a komunikace. Předmět dále popisuje vysokoúrovňové knihovny pro akceleraci algoritmů na GPU. Zbytek předmětu se věnuje technologii OpenACC, která významně zjednodušuje programování grafických karet pomocí pragma nápověd pro kompilátor.

Jazyk výuky

čeština

Počet kreditů

5

Vstupní znalosti

Látka vyučovaná v předmětech AVS, PRL a částečně PPP.

Pravidla hodnocení a ukončení předmětu

Vyhodnocení dvou projektů v celkovém rozsahu 14 hodin a půlsemestrální písemky.

  • Zameškaná cvičení je možné nahradit v alternativní termín.
  • V poslední týdnu semestru budou probíhat náhradní cvičení.

Učební cíle

Detailně se seznámit s architekturou a programováním grafických karet v oblasti obecných výpočtů pomocí knihoven Nvidia CUDA a standardu OpenACC. Naučit se navrhovat akcelerované programy využívající potenciál grafických karet. Seznámit se dostupnými knihovnami pro akceleraci výpočtu na grafických kartách. 
Znalost využití grafických karet pro akceleraci obecných výpočtů, orientace v oblasti akcelerovaných výpočetních systémů a knihoven.
Pochopení důsledků hardwarových omezení na efektivitu softwarových řešení.

Doporučení literatura

Storti,D., and Yurtoglu, M.: CUDA for Engineers: An Introduction to High-Performance Parallel Computing, Addison-Wesley Professional; 1 edition, 2015. ISBN 978-0134177410. link.
Current PPT slides for lectures (EN)
Nvidia CUDA documentation: https://docs.nvidia.com/cuda/ (EN)
OpenACC documentation: https://www.openacc.org/ (EN)
Kirk, D., and Hwu, W.: Programming Massively Parallel Processors: A Hands-on Approach, Elsevier, 2010, s. 256, ISBN: 978-0-12-381472-2. download.
Dokumentace OpenACC: https://www.openacc.org/ (CS)
Sanders, J., & Kandrot, E: CUDA by Example: An Introduction to General-Purpose GPU Programming. Review Literature And Arts Of The Americas. Addison-Wesley, 2010. download.
Chandrasekaran, S., and Juckeland, G.: OpenACC for Programmers: Concepts and Strategies,  Addison-Wesley Professional, 2017, ISBN 978-0134694283. link.
Aktuální PPT prezentace přednášek v Elearningu. (CS)
Dokumentace Nvidia: https://docs.nvidia.com/cuda/ (CS)

Zařazení předmětu ve studijních plánech

  • Program MITAI magisterský navazující

    specializace NGRI , 0 ročník, zimní semestr, volitelný
    specializace NADE , 0 ročník, zimní semestr, volitelný
    specializace NISD , 0 ročník, zimní semestr, volitelný
    specializace NMAT , 0 ročník, zimní semestr, volitelný
    specializace NSEC , 0 ročník, zimní semestr, volitelný
    specializace NISY do 2020/21 , 0 ročník, zimní semestr, volitelný
    specializace NNET , 0 ročník, zimní semestr, volitelný
    specializace NMAL , 0 ročník, zimní semestr, volitelný
    specializace NCPS , 0 ročník, zimní semestr, volitelný
    specializace NHPC , 0 ročník, zimní semestr, povinný
    specializace NVER , 0 ročník, zimní semestr, volitelný
    specializace NIDE , 0 ročník, zimní semestr, volitelný
    specializace NISY , 0 ročník, zimní semestr, volitelný
    specializace NEMB do 2023/24 , 0 ročník, zimní semestr, volitelný
    specializace NSPE , 0 ročník, zimní semestr, volitelný
    specializace NEMB , 0 ročník, zimní semestr, volitelný
    specializace NBIO , 0 ročník, zimní semestr, volitelný
    specializace NSEN , 0 ročník, zimní semestr, volitelný
    specializace NVIZ , 0 ročník, zimní semestr, volitelný

Typ (způsob) výuky

 

Přednáška

26 hod., nepovinná

Vyučující / Lektor

Osnova

  1. Architektura grafických jednotek GPU. 
  2. CUDA model vykonávání programu. 
  3. CUDA hierarchie pamětí. 
  4. Synchronizace a redukce. 
  5. Dynamický paralelismus a unifikovaná paměť. 
  6. Návrh a optimalizace algoritmů pro GPU. 
  7. Víceproudové zpracování, překrytí komunikace a výpočtu. 
  8. Multi-GPU systémy. 
  9. Knihovna Nvidia Thrust. 
  10. Základy knihovny OpenACC. 
  11. Správa paměti v OpenACC. 
  12. Optimalizace s OpenACC. 
  13. Knihovny pro akceleraci výpočtů pomocí GPU.

Cvičení na počítači

12 hod., nepovinná

Vyučující / Lektor

Osnova

  1. CUDA: Paměťové přenosy, jednoduché kernely (3. týden)
  2. CUDA: Práce se sdílenou pamětí (5. týden).
  3. CUDA: Práce s texturní a konstantní pamětí (6. týden).
  4. CUDA: Dynamický paralelismus, streamy (7. týden).
  5. OpenACC: základní techniky (10. týden).
  6. OpenACC: pokročilé techniky (11. týden).

Projekt

14 hod., povinná

Vyučující / Lektor

Osnova

  • Vývoj aplikace v prostředí Nvidia CUDA
  • Vývoj aplikace v prostředí OpenACC