Multiprocessing ( Multiprocessing , Multiprocessing , anglicky Multiprocessing ) - použití dvojice nebo více fyzických procesorů v jednom počítačovém systému.
Zařízení se nazývá multiprocesorové , pokud má dva nebo více fyzických procesorů .
Operační systém nebo program se nazývá multiprocesorový, pokud je schopen distribuovat úlohy mezi procesory (viz multithreading ).
Existuje mnoho variant tohoto konceptu a definice multiprocessingu se může lišit v závislosti na kontextu, zejména v závislosti na tom, jak jsou definovány procesory ( mnoho jader v jednom čipu , mnoho čipů v jednom balíčku, mnoho balíčků v jednom systémovém modulu atd. ).
Multiprocessing je někdy označován jako provádění více paralelních softwarových procesů v systému, na rozdíl od provádění jednoho procesu v jakémkoli daném okamžiku. Pojmy multitasking nebo multiprogramování jsou však vhodnější pro popis tohoto konceptu, který je implementován většinou v softwaru , zatímco multiprocessing je vhodnější pro popis použití více hardwarových procesorů. Systém nemůže být současně multiprocesorový a multiprogramový, pouze jeden z těchto dvou, nebo žádný.
Ve víceprocesorovém systému mohou být všechny CPU stejné nebo některé mohou být vyhrazeny pro speciální účely. Kombinace aspektů návrhu hardwaru a softwaru operačního systému určuje symetrii (nebo její nedostatek) v daném systému. Hardwarové nebo softwarové aspekty mohou například vyžadovat, aby pouze jeden centrální procesor reagoval na všechna hardwarová přerušení, zatímco veškerá ostatní práce v systému může být rovnoměrně rozdělena mezi procesory; nebo, provádění kódu privilegovaného režimu může být omezeno pouze na jeden procesor (nebo konkrétní procesor, nebo pouze jeden procesor současně), zatímco kód neprivilegovaného režimu může být vykonáván na jakékoli kombinaci procesorů. Často je snazší navrhnout víceprocesorové systémy, pokud jsou taková omezení uložena , ale bývají méně efektivní než systémy, které využívají všechny CPU.
Systémy, které zacházejí se všemi CPU stejným způsobem, se nazývají symetrické multiprocesní systémy (SMP). Na systémech, kde si všechny CPU nejsou rovny, mohou být systémové prostředky sdíleny mnoha způsoby, včetně asymetrického multiprocesingu ( ASMP ), nejednotného multiprocesingu s přístupem k paměti (NUMA) a clusterového multiprocesingu (qq.v.).
V multiprocessingu lze procesory použít k provedení jedné sekvence instrukcí ve více kontextech (jedna strojová instrukce , více dat nebo SIMD , často používané ve vektorovém zpracování), více sekvencí instrukcí v jediném kontextu („vícenásobný tok instrukcí, jeden datový tok "nebo architektura MISD , používaná pro redundanci v systémech odolných proti chybám a někdy se používá k popisu zřetězených procesorů nebo hyperthreadingu ) nebo vícenásobných instrukčních sekvencí ve více kontextech ("vícenásobný tok instrukcí, vícenásobný datový tok" nebo MIMD ).
Pevně propojené víceprocesorové systémy obsahují více procesorů, které jsou propojeny na úrovni sběrnice . Tyto procesory mohou mít přístup k centrální sdílené paměti (SMP nebo UMA) nebo se mohou podílet na hierarchii paměti s lokální i sdílenou pamětí (NUMA). IBM p690 Regatta je příkladem výkonného SMP systému. Procesor Intel Xeon dominoval na trhu s více procesory pro podnikové počítače a byl jedinou možností x86 až do uvedení řady procesorů AMD Opteron v roce 2004. Obě řady procesorů měly vlastní mezipaměť na čipu , ale poskytují přístup ke sdílené paměti různými způsoby: procesory Xeon prostřednictvím společného kanálu a procesory Opteron prostřednictvím nezávislých dálnic k systémové paměti RAM.
Víceprocesorové (vícejádrové) čipy zahrnují více než jeden procesor umístěný na jednom čipu a lze je považovat za nejextrémnější formu těsně propojeného multiprocesingu. Systémy sálových počítačů s více procesory jsou často vysoce propojené systémy.
Volně propojené multiprocesorové systémy , často označované jako clustery , jsou založeny na více samostatných jednoduchých nebo dvou počítačích propojených pomocí vysokorychlostního komunikačního systému (jako je Gigabit Ethernet ) . Příkladem flexibilně propojeného systému je cluster Beowulf se systémem Linux .
Pevně propojené systémy fungují lépe a jsou fyzicky menší než flexibilně propojené systémy, ale historicky vyžadovaly velké počáteční investice a mohou se rychle znehodnotit ; uzly ve flexibilně propojeném systému jsou obvykle levné počítače a po odebrání z clusteru mohou být použity jako nezávislé stroje.
Pevně propojené systémy bývají mnohem energeticky účinnější než klastry. Významné energetické účinnosti je dosaženo tím, že komponenty v takových systémech jsou předem navrženy tak, aby fungovaly v konkrétním systému, zatímco flexibilně propojené systémy často používají komponenty navržené pro práci v širší třídě systémů.
V počítači s jedním tokem instrukcí a jedním tokem dat jeden procesor zpracovává instrukce sekvenčně; každá strojová instrukce zpracovává jeden datový prvek. Příkladem je von Neumannova architektura .
V počítači s jedním instrukčním tokem a více datovými toky zpracovává jeden procesor tok instrukcí, z nichž každý může provádět paralelní výpočty na sadě dat.
SIMD multiprocessing se dobře hodí pro paralelní nebo vektorové zpracování, při kterém lze rozdělit velký soubor dat na části, které jsou zpracovávány identickými, ale nezávislými operacemi. Jediný tok instrukcí řídí činnost multiprogramovacích modulů k provádění podobných manipulací současně s potenciálně velkým množstvím dat.
U určitých typů počítačových aplikací může tento typ architektury poskytnout významné zvýšení výkonu z hlediska vynaloženého času. Nevýhodou této architektury je však to, že většina systému zahálí při provádění programů nebo systémových úloh, které nelze rozdělit do modulů (dílčích úloh), které lze zpracovávat paralelně.
Kromě toho musí být programy pečlivě a konkrétně napsány, aby byly schopny plně využít možnosti architektury. Často existují speciální optimalizační kompilátory navržené tak, aby produkovaly kód speciálně pro použití v tomto prostředí. Některé kompilátory v této kategorii poskytují speciální konstrukce nebo rozšíření umožňující programátorům přímo definovat operace, které mají být prováděny paralelně (například příkazy DO FOR ALL ve Fortranu , používané na ILLIAC IV , což byl superpočítač s víceprocesorovou architekturou SIMD).
SIMD multiprocessing má široké uplatnění v některých oblastech, jako jsou počítačové simulace , ale má jen malé využití ve všeobecných desktopových a obchodních aplikacích.
Multiprocessing s vícenásobným instrukčním tokem a jedním datovým tokem nabízí především výhodu redundance, protože multiprogramovací moduly provádějí stejné úkoly na stejných datech, čímž se snižuje možnost nesprávných výsledků, pokud jeden z modulů selže. Architektura MISD umožňuje porovnávat výsledky výpočtů za účelem odhalování poruch. Kromě redundance a odolnosti proti chybám má tento typ multiprocesingu několik výhod. Navíc je to velmi drahé. Nezvyšuje výkon.
Architektura MIMD multiprocessing je vhodná pro širokou škálu úloh, které implementují zcela nezávislé a paralelní provádění instrukcí týkajících se různých datových sad. Z tohoto důvodu a protože je jednoduchý na implementaci, MIMD dominuje multiprocesingu.
Zpracování je rozděleno do několika vláken, z nichž každé má svůj vlastní stav hardwaru procesoru, v rámci jednoho softwarově definovaného procesu nebo napříč více procesy. Protože systém má více vláken čekajících na spuštění (systémová nebo uživatelská vlákna), tato architektura efektivně využívá hardwarové prostředky.
V MIMD mohou nastat problémy se zablokováním a spory o zdroje, protože vlákna pokoušející se o přístup ke zdrojům mohou nepředvídatelným způsobem kolidovat. MIMD vyžaduje speciální kódování v operačním systému počítače, ale nevyžaduje změny v aplikačních programech, pokud samotné programy nepoužívají více vláken (MIMD je transparentní pro jednovláknové programy ve většině operačních systémů, pokud samotné programy neodmítají řízení z OS). Systémový i uživatelský software mohou potřebovat použít programovací konstrukce, jako jsou semafory , aby se zabránilo rušení jednoho vlákna s jiným, pokud obsahují odkaz na stejná data. Tím se zvyšuje složitost kódu, snižuje výkon a výrazně se zvyšuje množství potřebného testování, i když obvykle nestačí k tomu, aby se vyvrátily výhody multiprocesingu.
Takové konflikty mohou vznikat na hardwarové úrovni mezi procesory a obvykle by měly být vyřešeny hardwarově nebo kombinací softwaru a hardwaru.