Vážení študenti,
vitajte v kurze Úvod do paralelného programovania.
Koncom minulého storočia bolo paralelné programovanie doménou relatívne úzkej
skupiny ľudí. Hlavným dôvodom bola skutočnosť, že pre vykonávanie takýchto
programov bol potrebný špeciálny hardvér, ktorý nebol bežne dostupný širokému
spektru používateľov. Od tých čias však nastalo mnoho zmien a hardvér
umožňujúci paralelné výpočty sa dnes bežne dostáva ku každému používateľovi.
Za jeden z významných míľnikov možno považovať aj použitie Beowulf klastra, čo
otvorilo možnosti paralelného počítania za relatívne nízke náklady. V
súčasnosti je takýto hardvér bežne dostupný a poskytovaný pre vedecké a
komerčné účely výpočtovými strediskami a univerzitami v podobe superpočítačov a
vysokovýkonných klastrov. Zároveň si ale treba uvedomiť, že hardvér umožňujúci
paralelné počítanie sa dostal aj do rúk bežných používateľov v podobe
viacjadrových procesorov, bežne používaných v stolových a prenosných počítačoch
alebo v podobe grafických kariet disponujúcich nezanedbateľným výpočtovým
výkonom. V neposlednom rade je potrebné sa zmieniť aj o stále stúpajúcom trende
nasadzovania cloudových riešení, ktoré dokážu poskytnúť používateľom širokú
škálu infraštruktúry pre paralelné počítanie.
Tieto zmeny si vyžadujú aj zmenu pohľadu na paralelné programovanie ako také a
je potrebné sa zamerať na vzdelávanie v tejto oblasti. Veľké množstvo študentov
si často ani len neuvedomuje potenciál hardvéru, ktorý dennodenne používajú.
Samozrejme existuje nespočetne veľa aplikácií, ktoré si vystačia aj bez potreby
znalosti akéhokoľvek paralelného programovania, avšak v momente, kedy už výkon
jedného jadra procesora nie je postačujúci, je potrebné poznať zákonitosti a
nástroje pre paralelné programovanie umožňujúce plne využiť výpočtový potenciál
súčasného hardvéru.
S cieľom umožniť študentom naučiť sa základy paralelného programovania sme
zaviedli nový kurz určený pre študentov bakalárskeho stupňa aplikovanej
informatiky. Absolvovaním tohto kurzu nadobudnú potrebné vedomosti a zručnosti,
ktoré môžu ďalej využiť v rámci iných predmetov alebo vo svojej ďalšej
profesii. Absolvovanie tohto predmetu si vyžaduje znalosti z programovania v
jazyku C, ako aj niektoré poznatky z oblasti počítačových sietí a operačných
systémov, najmä týkajúce sa oblasti procesov a vlákien. Preto odporúčame
absolvovanie tohto kurzu až po absolvovaní základného kurzu z programovania,
počítačových sietí a operačných systémov.
Táto učebnica pozostáva z niekoľkých celkov. V prvej časti sa oboznámime s
dôvodmi a historickým vývojom hardvéru, ktorý zohrával významnú úlohu pri
rozvoji paralelného programovania a počítania. Tiež sa budeme zaoberať
architektúrami paralelných počítačov vhodných pre vysokovýkonné počítanie. V
ďalších častiach sa budeme zaoberať základnými technikami používanými pri
navrhovaní paralelných programov a efektivite paralelných programov. Čitateľ sa
bude môcť oboznámiť so základnou syntaxou používanou v rámci štandardu MPI
alebo OpenMP, ako aj so stručným úvodom k platforme a programovému rozhraniu
CUDA pre programovanie GPGPU. V jednotlivých kapitolách sa nachádzajú rôzne
poznámky a teoretické alebo praktické úlohy na precvičenie a lepšie
pochopenie danej problematiky.
Radi by sme poznamenali, že problematika paralelného programovania a
vysokovýkonného počítania je svojim rozsahom komplexná a rozsiahla téma, ktorú
nie je možné pokryť jednou učebnicou. Našim cieľom je poskytnúť čitateľovi
základné poznatky a možnosť oboznámiť sa s bežnými programátorskými technikami
používanými v praxi, ktoré sú nevyhnutne potrebné na vývoj a implementáciu
efektívnych paralelných programov. Preto by sme radi povzbudili čitateľa k
ďalšiemu štúdiu manuálov a dokumentácie.
Autori