Paralelní programování
Paralelní programování je v informatice označení konceptu, který umožňuje naprogramovat úlohy, které jsou schopny paralelního (souběžného) chodu. Paralelní programování je hodnoceno podle toho, jak dobře dokáže různé problémy popsat a jakého výkonu je možné dosáhnout na různých počítačových platformách. Implementace paralelního programování může být v podobě knihoven pro tradiční sekvenční programovací jazyky, ve formě rozšíření stávajícího programovacího jazyka nebo úplně nový přístup (programovací jazyk).
Rozdíl sekvenčního a paralelního programování
[editovat | editovat zdroj]Standardní struktura počítačového softwaru je založena na sekvenčním výpočtu. Při řešení problému je algoritmus určený k řešení tohoto problému realizován jako série za sebou následujících instrukcí. Tyto instrukce jsou prováděny pomocí CPU jednoho počítače. Z toho plyne, že současně může být vykonávána pouze jedna instrukce. Teprve po vykonání této instrukce následuje vykonávání další instrukce.
Paralelně programovaný software využívá možnost rozdělení jednoho velkého výpočetního problému na několik menších problémů, které jsou řešeny „současně“ (resp. na základě pseudoparalelismu). Prvky sloužící k paralelnímu zpracování výpočtu mohou být různé. Jedná se například o jeden počítač s více procesory, několik počítačů v síti, specializovaný hardware nebo kombinaci těchto prvků.
Problémy paralelního programování
[editovat | editovat zdroj]V prostředí paralelního programování je zvláště důležitá synchronizace jednotlivých výpočtů. V případě volně vázaných počítačů je nutné použít jako synchronizační primitivum zasílání zpráv. V případě těsně vázaných počítačů systém často podporuje atomické operace na sdílené paměti a je možné na nich implementovat semafory. Špatné použití synchronizačních primitiv může vést k deadlockům, což jsou programátorské chyby.
Software
[editovat | editovat zdroj]Paralelní programovací jazyky, knihovny a API byly vytvořeny pro programování paralelních počítačů. Tyto počítače mohou být rozděleny do několika kategorií, na základě toho jaký používají typ paměti: sdílenou paměť, distribuovaná paměť nebo sdílená distribuovaná paměť. Programy využívající sdílenou paměť komunikují pomocí manipulace s proměnnými ve sdílené paměti. Programy využívající distribuovanou paměť používají metodu zasílání zpráv (POSIX vlákna, OpenMP).
Hlavní klasifikace a paradigmata
[editovat | editovat zdroj]Klasifikace paralelních programovacích modelů můžeme rozdělit do dvou částí: interakce procesů a problém dekompozice.
Interakce procesů
[editovat | editovat zdroj]Interakce procesů se zabývá problematikou komunikace dvou procesů. Nejpoužívanější formou interakce je sdílená paměť a message passing.
Sdílená paměť
[editovat | editovat zdroj]V modelu se sdílenou pamětí, paralelně běžící procesy sdílejí globální adresní prostor, přičemž z něj čtou a zapisují asynchronně. Ovšem tento přístup potřebuje ochranné mechanismy, jako například zamykání paměti. Sdílená paměť může být emulována na systémech s distribuovanou pamětí, a může zde být použita neuniformní kontrola paměti.
Message passing
[editovat | editovat zdroj]V message passing modelu si paralelní úlohy vyměňují data pomocí posíláním zpráv mezi sebou. Tato komunikace může být synchronní i asynchronní.
Problém dekompozice
[editovat | editovat zdroj]Každý paralelní program je složen ze zároveň vykonávajících se procesů. Problém dekompozice se týká způsobu jak tyto procesy definovat.
Související články
[editovat | editovat zdroj]- Paralelní výpočty
- Meziprocesová komunikace – hraje v paralelním programování velkou roli
- Asymetrický multiprocesing (SMP)
- Non-Uniform Memory Access (NUMA)
- Paralelismus