Класифікация паралельних обчислювальних систем
Майкл Флінн запропонував 1966 році наступну класифікацію обчислювальних систем, яка базується на кількості потоків вхідних даних та кількості потоків команд, які обробляють ці дані:
Таблиця 1. Класифікація Флінна
|
Один потік інструкцій |
Декілька потоків інструкцій |
Один п потік данних |
SISD |
MISD |
Декілька потоків даних |
SIMD |
MIMD |
SISD (Single Instruction Single Data):
це звичайні послідовні комп'ютери. Програма приймає один потік даних і виконує один потік інструкцій по обробці цих даних . Іншими словами, інструкції виконуються послідовно, і кожна інструкція оперує мінімальною кількістю даних ( н-д, додавання двох чисел)
MISD (Multiple Instruction Single Data):
різні потоки інструкций виконуються з одними і тими ж даними. Звичайно такі системи не приводять до прискорення обчислень, так як різні інструкції оперують одними і тими ж даними, в результаті на виході системи отримуємо один потік даних. До таких систем відносять різні системи дублювання і захисту від збоїв, коли, наприклад, декілька процессорів дублюють обчислення один одного для надійності. Деколи до цієї категорії відносять конвеєрні архітектури. Серед процесорів виробництва Intel, конвеєр присутній, починаючи з процесора Pentium.
SIMD (Single Instruction Multiple Data):
Один потік інструкцій виконує обчислення одночасно з декількома даними. Наприклад, виконується додавання одночасно восьми пар чисел. Такі комп’ютери називаються векторними, так як подібні операції виконуються аналогічно операціям з векторами ( коли, н-д, додавання двох векторів означає одночасне додавання всіх їхніх компонент). Часто векторні інструкції присутні як доповнення до звичайних «скалярних» інструкцій, і називаються (або векторним розширенням). Приклади популярних SIMD-розширень: MMX, 3DNow!, SSE и др.
MIMD (Multiple Instruction Multiple Data): різні потоки інструкцій оперують різними даними. Це системи найбільш широкого виду, тому їх найпростіше застосовувати для рішення паралельних задач.
MIMD-системи, в свою чергу, прийнято поділяти (класифікація Джонсона) на системи з загальною пам’яттю (декілька обчислювачів мають загальну пам’ять) и системи з розподіленою пам’яттю (кожний обчислювач має свою пам’ять; обчислювачі можуть обмінюватися даними). Крім того, існують системи з неоднорідним доступом до пам’яті (NUMA), в яких доступ до пам’ті других обчислювачів існує, проте він значно повільніший, ніж доступ до «своєї» пам’яті.
Системи з загальною пам’яттю
Системами з загальною пам’яттю називають системи, в яких декілька процесорів мають загальну оперативну пам’ять. Наприклад, комп’ютери з багатоядерними процесорами (multi-core).
Преваги:
Не потрібний обмін даними: дані, які розмістив в пам’ять один процесор, автоматично стають доступні другим процесорам. Відповідно, система не повинна витрачати час на пересилання даних.
Для таких систем просто писати програми: можна, наприклад, створити декілька обчислювальних потоків, або ж використати в програмі спеціальні директиви ( н-д, технологія OpenMP), які підкажуть компілятору, як розпаралелити програму. Крім того, можливе повністю автоматичне розпаралелювання програми компілятором.
Компактність систем: може бути реалізована в вигляді декількох процесорів на одній материнській платі, і/або в вигляді декількох ядер всередині процесора.