Ноу Інти, лекція, введення в паралельне програмування
Анотація: У рамках даної лекції будуть розглянуті наступні питання: визначення, призначення паралельного програмування; багатоядерні обчислення; множинні потоки команд / даних; прискорення; закон Амадал; закон Густафсона-Барсіса.
Визначення, призначення паралельного програмування
Існують різні способи написання програм, які умовно можна розділити на три групи:
- Послідовне програмування з подальшим автоматичним розпаралелюванням.
- Безпосереднє формування потоків паралельного управління, з урахуванням особливостей архітектур паралельних обчислювальних систем або операційних систем.
- Опис паралелізму без використання явного управління забезпечується завданням тільки інформаційних зв'язків. Передбачається, що програма буде виконуватися на обчислювальних системах з нескінченними ресурсами, оператори будуть запускатися негайно по готовності їх вихідних даних.
Кожен з перерахованих підходів має свої достоїнства і недоліками паралельне програмування.
Паралельні обчислення - спосіб організації комп'ютерних обчислень, при якому програми розробляються, як набір взаємодіючих обчислювальних процесів, що працюють асинхронно і при цьому одночасно.
Паралельне програмування - це техніка програмування, яка використовує переваги багатоядерних або багатопроцесорних комп'ютерів і є підмножиною ширшого поняття многопоточности (multithreading).
багатоядерні обчислення
Використання паралельного програмування стає найбільш необхідним, оскільки дозволяє максимально ефективно використовувати можливості багатоядерних процесорів і багатопроцесорних систем. По ряду причин, включаючи підвищення споживання енергії та обмеження пропускної здатності пам'яті, збільшувати тактову частоту сучасних процесорів стало неможливо. Замість цього виробники процесорів стали збільшувати їх продуктивність за рахунок розміщення в одному чіпі кількох обчислювальних ядер, не змінюючи або навіть знижуючи тактову частоту. Тому для збільшення швидкості роботи додатків тепер слід по-новому підходити до організації коду, а саме - оптимізувати програми під багатоядерні системи.
Множинні потоки команд / даних (Класифікація М.Флінна)
Найбільш ранній і найбільш відомою є класифікація архітектур обчислювальних систем, запропонована в 1966 році М.Флінном. Класифікація базується на понятті потоку, під яким розуміється послідовність елементів, команд або даних, обробляється процесором. На основі числа потоків команд і потоків даних Флінн виділяє чотири класи архітектур: SISD. MISD. SIMD. MIMD. Опис класів приведено в Табл. 1.1.
Таблиця 1.1. Опис класів архітектур
SISD (single instructiоn Streаm / single dаtа Streаm) або ОКОД (Одиночний потік Команд, Одиночний потік Даних)
Одиночний потік команд і одиночний потік даних (виконання одним процесором одного потоку команд, що обробляє дані, що зберігаються в одній пам'яті). До цього класу належать, класичні послідовні машини, або інакше, машини фон-неймановского типу (PDP-11 або VАX 11/780).
SIMD (single instructiоn Streаm / multiple dаtа Streаm) або ОКМД (одиночний потік команд, множинний потік даних)
Одиночний потік команд і множинний потік даних. В архітектурі подібного роду зберігається один потік команд, що включає, на відміну від попереднього класу (SISD), векторні команди, що дозволяє виконувати одну арифметичну операцію відразу над багатьма даними - елементами вектора.
MISD (multiple instructiоn Streаm / single dаtа Streаm) або МКОД (Множинний потік Команд, Одиночний потік Даних)
Множинний потік команд і одиночний потік даних. Визначення має на увазі наявність в архітектурі багатьох процесорів, що обробляють один і той же потік даних.
MIMD (multiple instructiоn Streаm / multiple dаtа Streаm) або МКМД (Множинний потік Команд, Множинний потік Даних)
Множинний потік команд і множинний потік даних. Цей клас припускає, що в обчислювальній системі є кілька пристроїв обробки команд, об'єднаних в єдиний комплекс і працюючих кожне зі своїм потоком команд і даних.
На підставі Табл. 1.1 можна проранжувати архітектури на однопоточні / багатопоточність (Табл. 1.2).