Kursthemen

  • Allgemeines

    • V tomto fóre diskutujeme o otázkach, ktoré potrebujete zodpovedať počas štúdia v kurze, týkajúci sa študijného obsahu.

    • V dohodnutých časoch je možné diskutovať priamo s tútorom.

  • Úvod

  • Hardvér pre paralelné počítanie

    V tejto kapitole sa budeme zaoberať nasledujúcimi témami:

    • Historický vývoj
      • Rýchla vyrovnávacia pamäť
      • Virtuálna pamäť
      • Inštrukčný paralelizmus
    • Paralelné architektúry
      • Flynnova taxonómia
      • Architektúra SIMD
      • Architektúra MIMD
    • Viacjadrové procesory
      • Systém so zdieľanou pamäťou
      • Systém s distribuovanou pamäťou
    • Počítačový klaster
    • Prepojovacie siete
      • Systémy so zdieľanou pamäťou
      • Systémy s distribuovanou pamäťou
    • Akcelerátory GPGPU
    • Cloudové počítanie


  • Základy paralelizácie

    V tejto kapitole sa budeme zaoberať nasledujúcimi témami:

    • Paralelizmus
      • Dekompozícia problému
      • Granularita výpočtu
    • Výkonnosť paralelných algoritmov
      • Zrýchlenie a efektívnosť paralelného programu
      • Amdahlovo pravidlo
    • Škálovateľnosť
    • Vyvažovanie záťaže
      • Statické vyvažovanie záťaže
      • Dynamické vyvažovanie záťaže
    • Návrh paralelného programu
      • Rozdelenie
      • Komunikácia
      • Aglomerácia
      • Mapovanie


  • Programovanie pre model s distribuovanou pamäťou - MPI

    V tejto kapitole sa budeme zaoberať nasledujúcimi témami:

    • Jednoduchý program v prostredí MPI
      • Inicializácia a ukončenie paralelného programu
      • Kompilovanie a spúšťanie MPI programov
      • Práca so vstupmi a výstupmi
      • Komunikátor
    • Komunikácia
      • Blokujúca komunikácia dvoch procesov
      • Riešená úloha
      • Neblokujúca komunikácia dvoch procesov
      • Riešená úloha
      • Kolektívna komunikácia procesov
      • Riešená úloha
      • Jednostranná komunikácia procesov
    • Odvodené údajové typy
      • Zbaľovanie a rozbaľovanie
      • Nové údajové typy
    • Paralelné vstupno-výstupné operácie
    • Meranie času v MPI programe
    • Efektívnosť paralelného MPI programu
      • Komunikácia
      • Synchronizácia a serializácia


  • Rozdelený globálny adresný priestor

    V tejto kapitole sa budeme zaoberať nasledujúcimi témami:

    • Global Arrays
      • Prehľad a história
      • Základné funkcie
      • Riešená úloha
    • GASPI
      • Prehľad a história
      • Segmenty, komunikácia a synchronizácia
      • Kolektívne operácie
      • Odolnosť voči chybám pri vykonávaní paralelného programu
      • Riešená úloha


  • Programovanie pre model so zdieľanou pamäťou - OpenMP

    V tejto kapitole sa budeme zaoberať nasledujúcimi témami:

    • Jednoduchý program v prostredí OpenMP
      • Paralelná oblasť
      • Kompilovanie a spúšťanie OpenMP programov
      • Knižnica OpenMP
    • Rozdeľovanie práce
      • Direktíva for
      • Riešená úloha
      • Direktíva sections
      • Direktíva task
      • Direktíva single
      • Klauzuly direktív
    • Synchronizácia
      • Direktíva master
      • Direktíva barrier
      • Direktíva taskwait
      • Direktíva critical
      • Direktíva ordered
      • Direktíva atomic
      • Direktíva flush
    • Meranie času v OpenMP programe
      • Riešená úloha
    • Efektívnosť paralelného OpenMP programu
      • Optimalizácia paralelného programu


  • Programovanie akcelerátorov GPGPU - CUDA

    V tejto kapitole sa budeme zaoberať nasledujúcimi témami:

    • Jednoduchý program pre GPGPU
      • Kompilovanie a spúšťanie programov pre GPGPU
    • Pamäť zariadenia GPGPU
      • Alokácia pamäte
      • Prenos údajov
      • Riešená úloha
    • Hierarchia pamäte GPGPU
      • Hostiteľská pamäť
      • Globálna pamäť
      • Registre
      • Zdieľaná pamäť
      • Pamäť konštánt
      • Pamäť textúr
    • Synchronizácia
      • Atomické operácie


  • Úlohy na precvičenie

    V tejto časti ponúkame niekoľko zadaní úloh, ktoré je možné riešiť pomocou rôznych metód a nástrojov. Úlohy je možné riešiť pomocou paralelných programov s distribuovanou pamäťou, ako aj so zdieľanou pamäťou. Väčšina dostupných systémov vhodných pre vysokovýkonné počítanie umožňuje spúšťať tzv. hybridné paralelné programy, ktoré pri implementácií využívajú oba prístupy, ako s distribuovanou, tak aj so zdieľanou pamäťou. Kombináciou týchto dvoch prístupov je možné zväčša dosiahnuť vyššiu výkonnosť paralelných programov.

    Vytvorené programy je možné otestovať aj na bežne dostupných stolových alebo prenosných počítačoch, ktoré sú vybavené viacjadrovými procesormi. Vhodnejším riešením je však použitie vysokovýkonného klastra alebo superpočítača, ktorý disponuje vysokorýchlostným prepojením viacerých výpočtových uzlov a umožní rozsiahlejšie meranie efektívnosti a škálovania paralelného programu.

    Odhadnutie správneho počtu použitých výpočtových jadier niekedy priamo súvisí s návrhom samotného algoritmu. V iných prípadoch môže byť zvolenie vhodného počtu procesov a vlákien pre vykonávanie paralelného programu náročnejšie a vyžaduje určité skúsenosti a znalosti špecifík používaného výpočtového systému pre vysokovýkonné počítanie.



    • V jazyku C navrhnite a vytvorte paralelný program na odhad hodnoty konštanty π pomocou metódy "Monte Carlo".

    • V jazyku C navrhnite a vytvorte paralelný program, ktorý vynásobí maticu a vektor, pričom maticu rozblokuje po stĺpcoch.

    • V jazyku C navrhnite a vytvorte paralelný program na hľadanie prvočísel pomocou Eratostenovho sita po číslo 2n, pričom číslo n bude zadané ako vstup.

    • V jazyku C navrhnite a vytvorte paralelný program na výpočet Mandelbrotovej množiny M.

    • V jazyku C navrhnite a vytvorte paralelný program, ktorý implementuje program typu producent-konzument.

    • V jazyku C navrhnite a vytvorte paralelný program, na aproximáciu π.