V programování je SPMD ( jeden program, více dat ) technika používaná k dosažení paralelismu; je to podkategorie MIMD -třídy počítačových systémů v Flynn klasifikaci .
V této kategorii jsou úlohy odděleny a spuštěny současně na více procesorech s různými vstupy, aby bylo dosaženo rychlejších výsledků. SPMD je nejběžnější styl paralelního programování . [1] Je také nezbytným předpokladem pro zkoumání konceptů, jako jsou aktivní zprávy a distribuovaná sdílená paměť .
V SPMD mnoho autonomních procesorů současně provádí stejný program z různých míst (což znamená části kódu), a nikoli v rigidním pořadí, které SIMD vyžaduje pro zpracování různých dat. Díky SPMD lze úlohy provádět na procesorech pro všeobecné použití . SIMD vyžaduje vektorové procesory pro řízení toku dat . Všimněte si, že tyto dvě metody se vzájemně nevylučují.
SPMD se běžně označuje jako programování zpráv pro architektury distribuované paměti. Distribuovaná paměť se skládá ze sady nezávislých počítačů nazývaných "uzly". Každý uzel spouští svůj vlastní program a komunikuje s ostatními uzly odesíláním a přijímáním zpráv voláním procedur odesílání a přijímání. Bariérovou synchronizaci lze realizovat pomocí zpráv. Zprávy lze odesílat pomocí komunikačních mechanismů, jako je TCP/IP (pro Ethernet ) nebo specializovaných vysokorychlostních připojení, jako je Myrient a Supercomputer Interconnect. Sekvenční sekce (sekce) programů jsou realizovány stejnými výpočty na všech uzlech, a nikoli výpočtem výsledku na jednom uzlu a jeho odesláním do dalších.
V současné době je programátor izolován od detailů předávání zpráv přes standardní rozhraní, jako je PVM a MPI .
Distribuovaná paměť je styl programování používaný na paralelních superpočítačích, od domácích clusterů Beowulf až po největší clustery TeraGrid.
Na počítači se sdílenou pamětí (počítač s více procesory , které přistupují k jedné paměti) lze zprávy posílat tak, že se jejich obsah dočasně uloží do oblasti sdílené paměti. Tato metoda je často nejúčinnější pro stroje se sdílenou pamětí s velkým počtem procesorů, zejména pro stroje s nejednotným přístupem do paměti ( NUMA ), kde je paměť lokální pro procesor a přístup k paměti jiného procesoru trvá déle. SPMD sdílené paměti je obecně implementován prostřednictvím běžných procesů operačního systému .
Na rozdíl od SPMD poskytuje multiprocesing sdílené paměti , nazývaný také symetrický multiprocessing (SMP), schopnost paralelizovat provádění tím, že má na každém procesoru nezávislou cestu pro provádění aplikací využívající sdílenou paměť jako komunikační mechanismus. Program začne běžet na jednom procesoru a provádění je rozděleno do paralelních sekcí, které jsou specifikovány ve zdrojovém kódu pomocí paralelizačních direktiv (např. jedna z direktiv deklaruje začátek paralelní sekce v kódu programu). Uvnitř paralelní sekce provádějí procesory stejný program, ale s jinými daty. Typickým příkladem je paralelní smyčka DO, kde různé procesory zpracovávají samostatné části pole zapojené do smyčky. Na konci cyklu jsou prováděcí sekce synchronizovány, po kterých pokračuje v práci pouze jeden procesor, zatímco zbytek čeká. V současné době je standardním rozhraním pro víceprocesorový systém se sdílenou pamětí OpenMP . Obvykle se implementuje pomocí lehkých procesů nazývaných vlákna .
Moderní počítače umožňují používat několik paralelních režimů současně, abyste dosáhli maximálního celkového efektu. Programy sdílené paměti využívající MPI mohou běžet souběžně na sadě uzlů. Každý uzel může být počítač se sdílenou pamětí a provádět výpočty na více procesorech paralelně pomocí OpenMP. Pro dosažení maximální rychlosti s jedním procesorem se používají vektorové instrukce SIMD (obvykle generované automaticky kompilátorem) a superskalární provádění (obvykle transparentně zpracováváno samotným procesorem), jako je pipelining a použití několika paralelních funkčních bloků.
SPMD navrhl v roce 1984 Frederick Durham z IBM pro vysoce výkonné paralelní stroje [2] , jako je RP3 (IBM Research Parallel Processor Prototype) v nepublikovaném kancelářském dopise. [3] Koncem 80. let již existovalo mnoho distribuovaných počítačů s proprietárními knihovnami pro předávání zpráv. První standard SPMD byl PVM. V současnosti je de facto standardem MPI. Paralelní direktivy Cray byly přímým předchůdcem OpenMP.