Page 33 - 4868
P. 33
31 Ошибка! Стиль не определен.
У даному алгоритмі один процес виконує послідовне поелементне
додавання двох векторів. При цьому, значення наступного елементу
кінцевого вектору отримується після того як було обчислено попереднє його
значення.
Поєднання SPMD із розбиттям в циклі дозволяє перемножити копії
програми виконуючи розрахунки над різними даними паралельно.В
представленому прикладі додавання векторів, кожен блок даних
обробляється у своєму незалежному потоці(рис. 1.10).
Рисунок 1.10 – SPMD додавання векторів
На сучасних CPU, накладні витрати на створення потоків настільки
значні, щопостоянно необхідно балансувати між кількістю потоків та
продуктивністю системи, тому блоки даних повинні бути досить
великимидля досягнення оптимальної продуктивності. Зазвичай, на практиці
це декілька потоків і кожному приходиться опрацьовувати великий об’єм
даних.
Тому стрімкого розвитку набуло використання графічних процесорів
(GPU – Graphic Processing Unit). При реалізації багатопоночностіза
допомогою GPU, накладні витрати на створення потоків незначні, тому
можна створювати один потік на кожну ітерацію в циклі.
У підтримці паралелізму на рівні CPU та GPU існують певні відмінності,
які полягають в наступному:
1. На рівні CPU для реалізації паралелізму використовується апаратна
підтримка атомарних операцій. Атомарні операції дозволяють зчитувати і
записувати дані без втручання зі сторони іншого потоку.
2. GPU у свою чергу розглядається як спеціалізований обчислювальний
пристрій, що є сопроцесором до CPU, володіє власною пам’яттю та володіє
можливістю паралельного виконання великої кількості окремих потоків.
Деякі GPU підтримують загальносистемні атомарні операції, але із втратою у
продуктивності. Зазвичай код, який вимагає глобальної синхронізації не дуже
добре підходить для обробки на GPU.
Порівняння затрат часу на операцію додавання векторів при
використанні різних підходів та архітектур проедставлено на рисунку 1.11.