Download as pdf or txt
Download as pdf or txt
You are on page 1of 36

Паралельне

програмування
ЛЕКЦІЯ №10
Шаблони паралельного програмування
Етапи розробки
• Визначити місце розпаралелювання (finding
concurrency)
• Вибір алгоритму / шаблону(algorithm
structure)
• Відбір відповідних паралельних
структур(supporting structures)
• Вибір механізму реалізації (implementation
mechanisms)

доц. каф. ПІ Кравець Н. С. 3


Базові ідеї design space
Вибір декомпозиції:
• За даними
• По управлінню (завданням)

Аналіз залежностей:
• групування завдань
• Порядок виконання завдань
• Визначення поділюваних даних

доц. каф. ПІ Кравець Н. С. 4


Принципи проектування
• Ефективність
• Простота
• Переносимість
• Масштабованість

доц. каф. ПІ Кравець Н. С. 5


Організація обчислень
Види організації

Розподілення за Розподілення за Керовані потоком


даними завданнями даних

Рекурси Рекурси Постійн Випадко


Лінійно вно
Лінійно вно ий вий

Геометрична Рекурси || на Розділяй і Координаці


декомпозиці
володарюй Pipeline я на подіях
я вні дані задачах

доц. каф. ПІ Кравець Н. С. 6


Структури даних
• Лінійні (рядок)
• Рекурсивні (список, дерево)

доц. каф. ПІ Кравець Н. С. 7


Геометрична декомпозиція
Приклади:
• моделювання клімату,
• фрактали
Особливості :
• Розділення структур даних :
• масиви - беремо послідовні частини
• списки - псевдоелементи або підсписки
• графи - підграфи

доц. каф. ПІ Кравець Н. С. 8


Моделювання клімату

доц. каф. ПІ Кравець Н. С. 9


Підходить «parallel loops»
• Open MP
#pragma omp parallel for schedule(static, 500)
for(int i=0; i<n; i++)
invariant_amount_of_work(i);
• Intel TBB
parallel_for(blocked_range<int>(0, nElements,
100),
ArraySummer( p_A, p_B, p_SUM_TBB ) );
А ще є : blocked_range2d и blocked_range3d

доц. каф. ПІ Кравець Н. С. 10


Підходить «parallel loops»

• ParMETIS паралельна версія бібліотеки


METIS, що включає ряд алгоритмів над
графами (parallel graph partitioning).
Реалізована за допомогою MPI.

• Задати: гранулярность паралелізму - яку


мінімальну кількість даних буде оброблено
одним завданням в одному потоці; статику
або динаміку.

доц. каф. ПІ Кравець Н. С. 11


Ще підходить SPMD
• Single program multiply data один код над
різними даними, одна програма, що керує
обчисленнями (процесами, потоками)
• Кроки:
•Ініціалізуватися
•Роздати ідентифікатори ниткам /
процесам
•розділити дані
•завершитися

доц. каф. ПІ Кравець Н. С. 12


Parallel boost graph library
• MPI: розподілені графи
• Генератори графів
• Алгоритми:
•Пошук
•Найкоротший шлях
•Мінімальне остовне дерево
•розфарбування графа

доц. каф. ПІ Кравець Н. С. 13


Бібліотека ParMETIS
Разделение графа
Computes high quality partitionings of very large graphs quickly.
• Takes advantage of geometry information (when available) to reduce the
partitioning time without loss in quality.
• Can partition graphs for multi-phase and multi-physics computations.
Mesh Partitioning
• Computes high quality partitionings of very large meshes directly, without
requiring the application to create the underlying graph.
• Provides highly efficient parallel routines for generating the dual graph of a
mesh.
Graph Repartitioning
• Computes high quality repartitions of adaptively refined meshes quickly.
• Optimizes both the number of vertices that are moved as well as the edge-
cut of the resulting partitioning.
Partitioning Refinement
• Improves the quality of partitions produced by other partitioning algorithms.

доц. каф. ПІ Кравець Н. С. 14


Recursive data
Задача:
• Як зробити || операції над рекурсивними
структурами (списки, графи, дерева)
Приклад:
• Знайти в лісі коріння дерев
Рішення :
• Послідовне O (N) операцій / часу
• || O (N * logN) Операцій / O (logN) часу
• (Складність за операціями зросла, але зменшився
час відповіді користувачу - це і є мета)

доц. каф. ПІ Кравець Н. С. 15


Організація обчислень
Види організації

Розподілення за Розподілення за Керовані потоком


даними завданнями даних

Рекурси Рекурси Постійн Випадко


Лінійно вно
Лінійно вно ий вий

Геометрична Рекурси || на Розділяй і Координаці


декомпозиці
володарюй Pipeline я на подіях
я вні дані задачах

доц. каф. ПІ Кравець Н. С. 16


Параллелизм на завданнях
Приклади:
• Ray tracing (Трассировка шляху є
узагальненням традиційної трасування
променів (ray tracing), алгоритм якої
трассирує промені в напрямку від
віртуальної камери крізь простір; промінь
«відскакує» від предметів до тих пір, поки
повністю не поглинається або розсіється.
• Задачі молекулярної динаміки

доц. каф. ПІ Кравець Н. С. 17


Ray Tracing

доц. каф. ПІ Кравець Н. С. 18


Ray Tracing

доц. каф. ПІ Кравець Н. С. 19


NVIDIA RTX: включення Ray
Tracing у Vulkan

доц. каф. ПІ Кравець Н. С. 20


Будівельні блоки трасування
променів
• Структура прискорення
• Абстракція для геометрії сцени,
забезпечує ефективний обхід сцени
• Ray tracing shader domains
• Генерація та завершення променя,
перетину, затінювання матеріалу
• Таблиці зв'язків шейдеров
• Пов'язує шейдери і ресурси, які будуть
використовуватися під час перетину
• Ray tracing Pipeline object
доц. каф. ПІ Кравець Н. С. 21
Параллелизм на завданнях

Особливості :
• Динамічне створення завдань (методи гілок і
меж)
• Очікування завдань або його відсутність
(сортування або пошук)
• Розмір завдань

доц. каф. ПІ Кравець Н. С. 22


Принципи розподілу на
завдання
• Число завдань> = числу потоків (ядер) (N + 1 JAVA)
• Обсяг обчислень не перевищує витрати
• Боротьба з залежностями за даними (shared data
- останній рубіж)
• вітається дублювання даних (і можливо
обчислень) і редукція (зменшення
розмірності)
• прибирання індукованих змінних в циклах
• розділити залежно по результату через
редукцію за даними
Завдання повинно бути самодостатнім
доц. каф. ПІ Кравець Н. С. 23
Пули потоків
java.util.concurrent (методи)
Метод Опис
Повертає ExecutorService тільки з одним
ewSingleThreadExecutor
потоком.
Повертає ExecutorService з фіксованою
newFixedThreadPool
кількістю потоків.
Повертає ExecutorService з пулом потоків
newCachedThreadPool
різного розміру.
newSingleThreadScheduledEx Повертає ScheduledExecutorService з
ecutor одним потоком.
Повертає ScheduledExecutorService з
newScheduledThreadPool основним набором потоків.
Повертає ExecutorService, що краде
newWorkStealingPool
завдання.

доц. каф. ПІ Кравець Н. С. 24


Пули потоків
java.util.concurrent (реалізації
пулу потоків)
Реалізація Опис
Реалізація за замовчуванням з пулом
потоку, який змінює розмір, однієї
робочої черги та замовною політикою
ThreadPoolExecutor
для відхилених завдань (через
RejectedExecutionHandler) і створення
потоків (через ThreadFactory).
Розширення ThreadPoolExecutor, яке
ScheduledThreadPoolExecutor забезпечує можливість планування
періодичних завдань.
Краде завдання пул: все потоки в пулі
намагаються знайти і запустити або
ForkJoinPool поставлені завдання, або завдання,
створені іншими активними
завданнями.

доц. каф. ПІ Кравець Н. С. 25


java.util.concurrent
(Функціональні інтерфейси
завдань)
Інтерфейс Опис
Представляє завдання без значення, що
Runnable
повертається.
Являє обчислення з значенням, яке повертається.
Callable Він також викидає вихідний Exeption, тому не
потрібно обгортка для перевіреного виключення.

Future - це абстракція для асинхронного обчислення. Вона являє


результат обчислення, який може бути доступний в будь-який
момент: або обчислене значення, або виключення. Більшість методів
ExecutorService використовують Future як тип, що повертається.

доц. каф. ПІ Кравець Н. С. 26


Поради щодо використання
ExecutorService
• Називайте пули потоків
• Змінюйте імена в залежності від контексту
• Явне і безпечне завершення (або дозвольте відпрацювати всім завданням
в черзі (shutdown ()), або видаліть їх (shutdownNow ()))
• Обробляйте переривання потоку з обережністю
• Слідкуйте за довжиною черги і визначайте кордон (Пули потоків
неправильного розміру можуть привести до падіння продуктивності,
нестабільності і витокам пам'яті.)
• Пам'ятайте про обробку винятків
• Слідкуйте за часом очікування в черзі (час між постановкою завдання і
початком її виконання в ідеалі повинен наближатися до нуля (коли в пулі є
простоює потік))
• Зберігайте трасування стека клієнта
• Синхронні черги (SynchronousQueue - цікавий різновид BlockingQueue.
Кожна операція, що додається, повинна очікувати відповідної операції
видалення в іншому потоці, і навпаки. Синхронна черга не має ніякої
внутрішньої ємності, навіть одиничної.)

доц. каф. ПІ Кравець Н. С. 27


Призначення завдань на
потоки
Формування черги завдань: notify - отримуємо
класичні
• Producer/consumer – потік кладе завдання
• Master/worker – потік готує завдання
• Приходять пули потоків(важко розрахувати
час)
Вибір методу планування статичне /
динамічне :
• балансування навантаження: + до динаміки;
• мінуси динамічного призначення?
доц. каф. ПІ Кравець Н. С. 28
Розпаралелювання алгоритма
швидкого сортування (TBB)

доц. каф. ПІ Кравець Н. С. 29


Розпаралелювання алгоритма
швидкого сортування (TBB)

доц. каф. ПІ Кравець Н. С. 30


Розпаралелювання алгоритма
швидкого сортування (TBB)

доц. каф. ПІ Кравець Н. С. 31


Розпаралелювання алгоритма
швидкого сортування (TBB)

доц. каф. ПІ Кравець Н. С. 32


Розпаралелювання алгоритма
швидкого сортування (TBB)

доц. каф. ПІ Кравець Н. С. 33


Розпаралелювання алгоритма
швидкого сортування (TBB)

доц. каф. ПІ Кравець Н. С. 34


Розпаралелювання алгоритма
швидкого сортування (TBB)

доц. каф. ПІ Кравець Н. С. 35


Розпаралелювання алгоритма
швидкого сортування (TBB)

доц. каф. ПІ Кравець Н. С. 36

You might also like