Українська
Паралельні та розподілені обчислення
Сучасні програми виконуються на багатоядерних процесорах, графічних прискорювачах, обчислювальних кластерах і в хмарі. Дисципліна вчить використовувати цю потужність: здобувачі проходять шлях від потоків на одному комп’ютері до розподілених застосунків, розгорнутих у кластері, і навчаються обирати модель паралелізму під конкретну задачу.
Курс присвячено паралельним та розподіленим обчисленням – від багатопотокового програмування для систем зі спільною пам’яттю мовою C# на платформі .NET 10 (синхронізація, TPL, PLINQ, векторизація SIMD) і проєктування паралельних алгоритмів чисельних методів до високопродуктивних обчислень мовою C++ з використанням OpenMP, CUDA та MPI на обчислювальному кластері під керуванням Linux і Slurm. На завершальному етапі здобувачі створюють розподілені застосунки на основі gRPC, RabbitMQ та Microsoft Orleans і розгортають їх у контейнерах Docker та кластерах Kubernetes, а завершують курс проєктуванням мікросервісної архітектури. Кожна тема курсу поєднує лекцію з лабораторною роботою.
Програма курсу
Паралельне програмування мовою C#
- Основи паралельних і розподілених обчислень: архітектури систем, класифікація Флінна, закони Амдала й Густафсона; .NET 10 і JetBrains Rider
- Процеси та потоки операційної системи: планування, пріоритети, спорідненість процесорів; потоки та пул потоків у C#
- Стан гонитви, взаємоблокування та голодування; засоби синхронізації потоків у C#
- Потокобезпечні колекції, канали та патерн «виробник–споживач»; хибне розділення кешу
- Паралелізм задач: бібліотека TPL, скасування та обробка винятків; асинхронне програмування async/await
- Паралелізм даних: паралельні цикли, PLINQ, розбиття даних; паралельні алгоритми сортування та редукції
- Векторизація SIMD у .NET та паралельні алгоритми лінійної алгебри
- Моделі та рівні паралелізму, грід-системи; проєктування паралельних алгоритмів для векторів, матриць і чисельних методів
Високопродуктивні обчислення та кластери
- Багатопотокове програмування мовою C++ та паралельні алгоритми стандартної бібліотеки
- Технологія OpenMP: паралельні області та цикли, редукції, задачі; прив’язка потоків і NUMA
- Обчислення на графічних процесорах: архітектура GPU, мова CUDA C++ та бібліотека ILGPU для C#
- Розподілені обчислення з передаванням повідомлень MPI: двоточкові та колективні операції, гібридні програми MPI + OpenMP
- Побудова обчислювального кластера на Linux з планувальником завдань Slurm; налаштування високопродуктивних обчислень
Розподілені системи та хмарні технології
- Моделі розподілених обчислень: мережні сокети та віддалений виклик процедур (WCF, CoreWCF, gRPC)
- Обмін повідомленнями через брокер RabbitMQ: черги завдань, публікація–підписка, гарантії доставки
- Модель акторів і фреймворк Microsoft Orleans; теорема CAP та відмовостійкість розподілених систем
- Контейнеризація та оркестрація розподілених застосунків: Docker, Kubernetes, .NET Aspire
- Архітектура мікросервісів: декомпозиція системи, API-шлюз, узгодженість даних (Saga, Outbox) та спостережуваність
Програмне забезпечення
| Програма | Для чого | Тема |
|---|---|---|
| .NET 10 SDK | Програми мовою C# 14 | 1 |
| JetBrains Rider | Середовище розробки C# | 1 |
| WSL 2 з Ubuntu 26.04 LTS | Linux для модуля 2 | 1 |
GCC 15, CMake, Ninja, GDB і TBB (sudo apt install build-essential cmake ninja-build gdb libtbb-dev) | Інструменти C++ в Ubuntu | 9 |
| JetBrains CLion | Середовище розробки C++ (набір інструментів WSL) | 9 |
| Драйвер NVIDIA і CUDA Toolkit 13 у WSL | Програмування GPU; потрібна відеокарта NVIDIA з CC 7.5 або вище | 11 |
Open MPI 5 (openmpi-bin libopenmpi-dev) | Програми MPI | 12 |
| Hyper-V і Ubuntu Server 26.04 LTS, Slurm, MUNGE | Власний навчальний кластер | 13 |
| grpcurl | Перевірка сервісів gRPC | 14 |
| Docker Desktop | Контейнери (RabbitMQ, Redis, PostgreSQL) | 15 |
| kind, kubectl і Helm | Кластер Kubernetes | 17 |
| Aspire CLI | Оркестрування та панель моніторингу | 17 |
Діагностичні інструменти dotnet-counters і dotnet-dump (теми 2–3) встановлюються командою dotnet tool install, а бібліотеки (BenchmarkDotNet, ILGPU, gRPC, Orleans та інші) додаються до проєктів як пакети NuGet.
Як влаштовано курс
Курс поділено на теми. Кожна тема відповідає одній лекції та одній лабораторній роботі і має чотири частини:
- Лекція. Теорію подано розділами в порядку читання, з прикладами коду, схемами та результатами виконання.
- Практика. Розібрані приклади розв’язання задач із повним кодом, які показують, як виконувати лабораторну роботу.
- Завдання. 30 варіантів лабораторної роботи, у кожному три рівні складності: 1 – початковий, 2 – базовий, 3 – високий. Кожне завдання самодостатнє, тому можна одразу братися за обраний рівень.
- Підсумки. Висновки теми, питання для самоперевірки та корисні посилання.
Для підготовки до контролю кожен курс також має Контрольні питання, Контрольні завдання, Корисні посилання і Рекомендовану літературу.
Як навчатися
- Відкрийте свій курс і встановіть середовище розробки, назване на сторінці курсу. Як це зробити, пояснено в першій темі кожного курсу, крім «Об’єктно-орієнтоване програмування C# II», що використовує середовище з курсу «Об’єктно-орієнтоване програмування C# I».
- Читайте розділи лекції по черзі. Набирайте та запускайте приклади самостійно, а не лише читайте їх.
- На сторінці Практика спершу спробуйте розв’язати задачу самі, а потім порівняйте своє рішення з розібраним.
- На сторінці Завдання знайдіть свій варіант (номер повідомляє викладач) і оберіть рівень складності.
- Перевірте себе питаннями на сторінці Підсумки і лише після цього переходьте до наступної теми.
- Перед іспитом повторіть Контрольні питання та розв’яжіть кілька Контрольних завдань.
Навігація
Теми та їхні розділи перелічено в меню ліворуч (на телефоні воно відкривається кнопкою «Меню»). Кнопка «Наступна сторінка» внизу кожної сторінки веде далі за програмою курсу, а список «На цій сторінці» праворуч – до потрібного підрозділу.
Матеріали курсу
- Контрольні питання — 100 питань за темами курсу для самоперевірки та підготовки до іспиту
- Контрольні завдання — практичні завдання за темами
- Корисні посилання — документація та інформаційні ресурси
- Рекомендована література — підручники та посібники