Знайомство з рівнями розпаралелювання

Розпаралелювання на рівні завдань

Розпаралелювання на рівні завдань демонструє операційна система, запускаючи на багатоядерній машині програми на різних ядрах. Якщо перша програма показує нам фільм, а друга є файлообмінним клієнтом, то операційна система спокійно зможе організувати їхню паралельну роботу.
Іншими прикладами розпаралелювання на цьому рівні абстракції є паралельна компіляція файлів у Visual Studio 2008, обробка даних у пакетних режимах.
Рівень паралелізму даних
Назва моделі «паралелізм даних» походить від того, що паралелізм полягає у застосуванні однієї і тієї ж операції до безлічі елементів даних. Паралелізм даних демонструє архіватор, який використовує для пакування кілька ядер процесора. Дані розбиваються на блоки, які однаково обробляються (упаковуються) на різних вузлах.

Хоча геометричний паралелізм може здатися схожим на розпаралелювання на рівні завдань, він є більш складним у реалізації. У разі задач моделювання необхідно передавати дані, що отримуються на межах геометричних областей іншим ядрам. Часто використовуються спеціальні методи підвищення швидкості розрахунку за рахунок балансування навантаження між обчислювальними вузлами.

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

Рівень розпаралелювання алгоритмів
Наступний рівень, це розпаралелювання окремих процедур та алгоритмів. Сюди можнавіднести алгоритми паралельного сортування, множення матриць, розв'язання системи лінійних рівнянь. На цьому рівні абстракцій зручно використовувати таку технологію паралельного програмування як OpenMP.

За рахунок ідеї «інкрементального розпаралелювання» OpenMP ідеально підходить для розробників, які бажають швидко розпаралелити свої обчислювальні програми з великими паралельними циклами. Розробник не створює нову паралельну програму, а просто послідовно додає текст послідовної програми OpenMP-директиви.
Завдання реалізації паралельних алгоритмів досить складна і тому існує досить велика кількість бібліотек паралельних алгоритмів, що дозволяють будувати програми як з кубиків, не вдаючись у влаштування реалізацій паралельної обробки даних.
Паралелізм на рівні інструкцій
Найбільш низький рівень паралелізму, що здійснюється нарівні паралельної обробки процесором кількох інструкцій На цьому рівні знаходиться пакетна обробка декількох елементів даних однією командою процесора. Йдеться про технології MMX, SSE, SSE2 тощо. Цей вид паралельності іноді виділяють ще більш глибокий рівень розпаралелювання - паралелізм на рівні бітів.
Програма є потік інструкцій виконуваних процесором. Можна змінити порядок цих інструкцій, розподілити їх за групами, які виконуватимуться паралельно, без зміни результату роботи всієї програми. Це називається паралелізмом лише на рівні інструкцій. Для реалізації цього виду паралелізму в процесорах використовується кілька конвеєрів команд, такі технології як передбачення команд, перейменування регістрів.
Програміст рідко заглядає цей рівень. Та й у цьому немає сенсу. Роботу розташування команд в найбільш зручній послідовності для процесора виконує компілятор. Інтерес цей рівень розпаралелювання може представляти тільки для вузької групи фахівців, що вичавлюють всі можливості з SSEx або розробників компіляторів.