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