Українська
Навіщо паралельні обчислення
Навіщо потрібні паралельні обчислення
Протягом кількох десятиліть програми прискорювалися «самі собою»: кожне нове покоління процесорів мало вищу тактову частоту, і та сама послідовна програма виконувалася швидше. Приблизно з 2005 року це скінчилося. Потужність, яку розсіює процесор, зростає разом із частотою та напругою живлення, а відвести більше ніж 100–150 Вт тепла від кристала площею кілька квадратних сантиметрів складно й дорого. Це обмеження називають «стіною потужності» (power wall). Тактова частота настільних процесорів зупинилася на рівні 3–5 ГГц.
Кількість транзисторів на кристалі при цьому продовжує зростати (закон Мура), тому виробники використовують їх інакше: розміщують на одному кристалі кілька ядер (cores). Наприклад, процесор Intel Core i9-11900KF лабораторних комп’ютерів має 8 ядер і 16 логічних процесорів. Проте кілька ядер не прискорюють звичайну програму: послідовний код виконується лише на одному з них. Щоб отримати виграш, програму потрібно розпаралелити – розділити роботу на частини, які виконуються одночасно.
Паралельні обчислення використовуються на всіх рівнях:
- багатоядерні процесори (multicore CPU) у комп’ютерах, смартфонах і серверах;
- графічні процесори (GPU) з тисячами простих ядер для графіки, наукових розрахунків і навчання нейромереж;
- обчислювальні кластери (clusters) – сотні й тисячі комп’ютерів, з’єднаних швидкою мережею;
- хмари (cloud) – обчислювальні ресурси, які орендують на потрібний час.
Курс проходить шлях від потоків на одному комп’ютері (модуль 1, мова C#) через високопродуктивні обчислення мовою C++ з OpenMP, CUDA і MPI на кластері (модуль 2) до розподілених застосунків у контейнерах (модуль 3).
Основні поняття
Паралельні обчислення (parallel computing) – одночасне виконання частин однієї задачі на кількох обчислювальних пристроях з метою скоротити час розв’язання. Конкурентні обчислення (concurrency) – організація програми як кількох незалежних потоків керування, що виконуються в перекритті в часі. Конкурентна програма може працювати й на одному ядрі, якщо операційна система перемикає потоки (наприклад, сервер обслуговує багато клієнтів). Паралелізм – це фізично одночасне виконання, конкурентність – спосіб структурування програми. Розподілені обчислення (distributed computing) – обчислення на кількох комп’ютерах, які не мають спільної пам’яті й взаємодіють через мережу.
Основні терміни курсу:
- процес (process) – програма, що виконується, з власним адресним простором (тема 2);
- потік (thread) – послідовність виконання всередині процесу; потоки одного процесу мають спільну пам’ять;
- вузол (node) – окремий комп’ютер кластера зі своєю пам’яттю й операційною системою;
- зернистість (granularity) – обсяг обчислень в одній паралельній частині порівняно з обсягом взаємодії між частинами: крупнозерниста (coarse-grained) задача рідко обмінюється даними, дрібнозерниста (fine-grained) – часто;
- накладні витрати (overhead) – час, який паралельна програма витрачає не на корисну роботу: створення потоків, розподіл даних, синхронізація, передавання повідомлень.
Порада
Чим дрібніші паралельні частини, тим більша частка накладних витрат. Розпаралелювати варто роботу, яка триває хоча б мілісекунди; розпаралелений цикл із кількох операцій зазвичай працює повільніше за послідовний.