Paralelní počítání
Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od
verze recenzované 5. října 2014; kontroly vyžadují
12 úprav .
Paralelní výpočetní technika je způsob organizace výpočetní techniky , ve kterém jsou programy vyvíjeny jako soubor vzájemně se ovlivňujících výpočetních procesů, které pracují paralelně (současně). Termín zahrnuje všechny otázky paralelismu v programování , stejně jako vytváření efektivních hardwarových implementací . Teorie paralelních počítání je částí aplikované teorie algoritmů [1] .
Existují různé způsoby, jak implementovat paralelní výpočty. Každý výpočetní proces může být například implementován jako proces operačního systému nebo výpočetní procesy mohou být sadou prováděcích vláken v rámci jednoho procesu operačního systému. Paralelní programy mohou být fyzicky prováděny buď sekvenčně na jediném procesoru – střídání kroků provádění každého výpočetního procesu, nebo paralelně – přidělováním jednoho nebo více procesorů (umístěných poblíž nebo distribuovaných v počítačové síti ) každému výpočetnímu procesu.
Hlavním problémem při navrhování paralelních programů je zajistit správnou sekvenci interakcí mezi různými výpočetními procesy a také koordinaci zdrojů sdílených mezi procesy.
Způsoby synchronizace paralelní komunikace
V některých souběžných programovacích systémech je předávání dat mezi komponentami před programátorem skryto (například pomocí mechanismu slibu ), zatímco v jiných musí být výslovně specifikováno. Explicitní interakce lze rozdělit do dvou typů:
- Interakce prostřednictvím sdílené paměti : na každém procesoru víceprocesorového systému je spuštěno vlákno provádění , které patří jednomu procesu. Vlákna si vyměňují data přes sdílenou paměťovou oblast pro daný proces [2] . Počet vláken odpovídá počtu procesorů. Vlákna jsou vytvářena buď pomocí jazyka (například v Javě nebo C# , C++ (počínaje C++11 ), C (počínaje C11 ) nebo explicitně pomocí knihoven (například v C/C++ pomocí PThreads ), nebo deklarativně (například pomocí knihovny OpenMP), nebo automaticky vestavěné nástroje kompilátoru (například High Performance Fortran ). Tento druh paralelního programování obvykle vyžaduje nějakou formu zachycení kontroly ( mutexy , semafory , monitory ) pro koordinaci vláken mezi sebou.
- Komunikace prostřednictvím předávání zpráv : Jednovláknový proces běží na každém procesoru víceprocesorového systému a komunikuje s dalšími procesy běžícími na jiných procesorech pomocí zpráv. Procesy se vytvářejí explicitně voláním příslušné funkce operačního systému a zasílání zpráv se vytváří pomocí knihovny (například implementace protokolu MPI ) nebo pomocí jazykových nástrojů (například High Performance Fortran , Erlang nebo occam ). Zprávy lze vyměňovat asynchronně nebo pomocí metody rendezvous, kdy je odesílatel zablokován, dokud není jeho zpráva doručena. Asynchronní předávání zpráv může být buď spolehlivé (s garantovaným doručením), nebo nespolehlivé [3] .
Paralelní systémy založené na zasílání zpráv jsou často srozumitelnější než systémy se sdílenou pamětí a jsou obecně považovány za vynikající metodu paralelního programování. Existuje široká škála matematických teorií pro studium a analýzu systémů předávání zpráv, včetně modelu aktéra a různých druhů procesního počtu . Zasílání zpráv lze efektivně implementovat na symetrických multiprocesorech jak se sdílenou koherentní pamětí, tak bez ní.
Paralelismus distribuované paměti a paralelismus předávání zpráv mají různé výkonnostní charakteristiky. Obvykle (ale ne vždy) je režie paměti procesu a doba přepínání úloh nižší u systémů s předáváním zpráv, ale samotné předávání zprávy je více režie než volání procedur. Tyto rozdíly jsou často potlačeny jinými faktory, které ovlivňují výkon.
- Hybridní metoda : Na víceprocesorových systémech s distribuovanou pamětí ( DM-MIMD ), kde každý uzel systému je multiprocesor se sdílenou pamětí ( SM-MIMD ), lze použít metodu hybridního programování [4] . Na každém uzlu systému je spuštěn vícevláknový proces, který rozděluje vlákna mezi procesory tohoto uzlu. Výměna dat mezi vlákny v uzlu se provádí prostřednictvím sdílené paměti a výměna dat mezi uzly se provádí předáváním zpráv. V tomto případě je počet procesů určen počtem uzlů a počet vláken je určen počtem procesorů na každém uzlu. Metoda hybridního programování je složitější (vyžaduje speciální přepis paralelního programu), ale je nejúčinnější ve využití hardwarových prostředků každého uzlu multiprocesorového systému.
V takovém systému je samozřejmě také možné použít výhradně metodu předávání zpráv, tedy spustit samostatný proces na každém procesoru každého uzlu. V tomto případě se počet procesů (a vláken) bude rovnat počtu procesorů na všech uzlech. Tato metoda je jednodušší (v paralelním programu stačí zvýšit počet procesů), ale je méně efektivní, protože procesory stejného uzlu si budou vyměňovat zprávy, jako by byly na různých strojích
[5] .
Typické úlohy, které umožňují paralelní výpočty
- map - provedení stejné funkce na každém prvku pole vstupních dat, čímž se získá pole výsledků výpočtů o stejné síle
- snížit - provedení stejné funkce pro přidání příspěvku každého prvku vstupu k jedné konečné hodnotě
Concurrency Software Tools
Viz také
Poznámky
- ↑ Michalevič, 1989 , s. jeden.
- ↑ RedBook, 1999 , str. jeden.
- ↑ RedBook, 1999 , str. 2.
- ↑ RedBook, 1999 , str. 5.
- ↑ RedBook, 1999 , str. čtyři.
Literatura
Odkazy
Slovníky a encyklopedie |
|
---|