MIMD

Flynnova klasifikace
  Jediný instrukční proud
Vícenásobné toky
instrukcí
Jeden datový tok
(jediná data)
SISD
(OKOD)
MISD
(MISD)
Více datových toků
SIMD
(JMD)
MIMD
(MKMD)

MIMD ( anglicky  Multiple Instruction stream, Multiple Data stream  - Multiple Command Stream, Multiple Data Stream , zkráceně MKMD ) je koncept počítačové architektury používaný k dosažení paralelních výpočtů. Jedna z tříd výpočetních systémů ve Flynnově klasifikaci .

Stroje mají více procesorů , které pracují asynchronně a nezávisle. V každém daném okamžiku mohou různé procesory provádět různé instrukce na různých kusech dat. Architektury MIMD lze použít v řadě oblastí, jako je počítačově podporovaný návrh/výroba podporovaná počítačem, simulace a komunikační přepínače .  MIMD stroje mohou být buď sdílená paměť, nebo sdílená paměť. Tato klasifikace je založena na tom, jak procesory MIMD přistupují k paměti. Tato třída předpokládá, že ve výpočetním systému existuje několik zařízení pro zpracování příkazů, sjednocených do jednoho komplexu a každé pracující s vlastním příkazem a datovým tokem.

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 programy s jedním vláknem ve většině operačních systémů, pokud samotné programy neodmítají kontrolu 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 musí být obvykle vyřešeny hardwarem nebo kombinací softwaru a hardwaru.