MIMD

Класифікація за Флинну
Одиночний потік команд
(Single Instruction)
Безліч потоків команд
(Multiple Instruction)
Одиночний потік даних
(Single Data)
SISD
(ОКОД)
MISD
(МКОД)
Безліч потоків даних
(Multiple Data)
SIMD
(ОКМД)
MIMD
(МКМД)
MIMD.svg

MIMD ( англ. Multiple Instruction stream, Multiple Data stream - Множинний потік Команд, Множинний потік Даних, скорочено МКМД) - концепція архітектури комп'ютера, використовувана для досягнення паралелізму обчислень. Машини мають кілька процесорів, які функціонують асинхронно і незалежно. У будь-який момент, різні процесори можуть виконувати різні команди над різними частинами даних. MIMD-архітектури можуть бути використані в цілому ряді областей, таких як системи автоматизованого проектування / автоматизоване виробництво, моделювання, а також комунікатор зв'язків (communication switches). MIMD-машини можуть бути або із загальною пам'яттю, або з розподіленою пам'яттю. Ця класифікація заснована на тому, як MIMD-процесори дістають доступ до пам'яті. Цей клас припускає, що в обчислювальній системі є кілька пристроїв обробки команд, об'єднаних в єдиний комплекс і працюючих кожне зі своїм потоком команд і даних.

Обробка розділена на кілька потоків, кожен з власним апаратним станом процесора, в рамках єдиного певного програмним забезпеченням процесу або в межах множинних процесів. Оскільки система має кілька потоків, які очікують виконання (системні або користувальницькі потоки), ця архітектура ефективно використовує апаратні ресурси.

У MIMD можуть виникнути проблеми взаємного блокування і змагання за володіння ресурсами, так як потоки, намагаючись отримати доступ до ресурсів, можуть зіткнутися непередбачуваним способом. MIMD вимагає спеціального кодування в операційній системі комп'ютера, але не вимагає змін в прикладних програмах, окрім випадків коли програми самі використовують множинні потоки (MIMD прозорий для однопоточних програм під управлінням більшості операційних систем, якщо програми самі не відмовляються від управління з боку ОС). І системне і користувальницьке програмне забезпечення, можливо, повинні використовувати програмні конструкції, такі як семафори, щоб перешкоджати тому, щоб один потік втрутився в інший, в разі якщо вони містять посилання на одні й ті ж дані. Така дія збільшує складність коду, знижує продуктивність і значно збільшують кількість необхідного тестування, хоча зазвичай не настільки щоб звести нанівець переваги багатопроцесорної обробки.

Подібні конфлікти можуть виникнути на апаратному рівні між процесорами, і повинен зазвичай вирішуватися апаратними засобами, або з комбінацією програмного забезпечення і устаткування.