Українська
Контрольні питання
Питання для самоперевірки та підготовки до іспиту, згруповані за темами курсу.
Тема 1. Основи паралельних обчислень
- Що таке паралельні та розподілені обчислення? Порівняйте паралелізм і конкурентність.
- Опишіть архітектури обчислювальних систем зі спільною та розподіленою пам’яттю. Що таке SMP і NUMA?
- Поясніть класифікацію Флінна: SISD, SIMD, MISD, MIMD. Наведіть приклади сучасних систем.
- Що таке прискорення та ефективність паралельного алгоритму? Як їх вимірювати?
- Поясніть закон Амдала. Як частка послідовного коду обмежує прискорення?
- Поясніть закон Густафсона та порівняйте його із законом Амдала. Що таке сильне і слабке масштабування?
Тема 2. Процеси та потоки
- Порівняйте процеси та потоки операційної системи. Що таке перемикання контексту?
- Як операційна система планує виконання потоків? Поясніть пріоритети та кванти часу.
- Що таке спорідненість процесорів (affinity) і як її налаштувати?
- Як створювати та запускати потоки за допомогою класу Thread у C#? Порівняйте фонові й основні потоки.
- Що таке пул потоків (ThreadPool)? Які переваги він дає порівняно зі створенням потоків?
- Що таке локальна пам’ять потоку (ThreadLocal, атрибут ThreadStatic)?
Тема 3. Синхронізація потоків
- Що таке стан гонитви (race condition)? Наведіть приклад і способи його усунення.
- Що таке критична секція? Поясніть оператор lock і клас Monitor.
- Поясніть атомарні операції класу Interlocked.
- Порівняйте засоби синхронізації Mutex, Semaphore, SemaphoreSlim та ReaderWriterLockSlim.
- Що таке взаємоблокування (deadlock), голодування (starvation) та активне блокування (livelock)? Які умови виникнення взаємоблокування та способи його запобігання?
- Поясніть сигнальні примітиви ManualResetEventSlim, AutoResetEvent і Barrier.
Тема 4. Потокобезпечні колекції
- Які потокобезпечні колекції надає простір імен System.Collections.Concurrent? Поясніть роботу ConcurrentDictionary та ConcurrentQueue.
- Що таке патерн «виробник–споживач»? Як реалізувати його за допомогою BlockingCollection?
- Що таке канали (System.Threading.Channels)? Порівняйте обмежені та необмежені канали.
- Що таке хибне розділення кешу (false sharing)? Як воно впливає на продуктивність?
- Як виявити та усунути хибне розділення кешу в паралельній програмі?
Тема 5. Задачі TPL і async/await
- Що таке бібліотека TPL? Порівняйте задачі (Task) та потоки.
- Як створювати та запускати задачі (Task.Run), очікувати їх завершення (Wait, WhenAll, WhenAny) та задавати продовження (ContinueWith)?
- Як скасувати задачу за допомогою CancellationToken?
- Як обробляти винятки в задачах? Що таке AggregateException?
- Порівняйте асинхронне програмування async/await та паралельні обчислення.
Тема 6. Паралелізм даних і PLINQ
- Що таке паралелізм даних? Поясніть методи Parallel.For і Parallel.ForEach.
- Як налаштувати ступінь паралелізму (ParallelOptions) та достроково завершити паралельний цикл?
- Що таке PLINQ? Поясніть методи AsParallel, AsOrdered та WithDegreeOfParallelism.
- Що таке розбиття даних (partitioning)? Порівняйте діапазонне та блочне розбиття.
- Поясніть паралельні алгоритми сортування (паралельне сортування злиттям, швидке сортування).
- Що таке редукція (reduction)? Як виконати паралельне підсумовування з локальними для потоку результатами?
Тема 7. Векторизація SIMD
- Що таке векторизація SIMD? Які набори інструкцій (SSE, AVX, AVX-512, NEON) ви знаєте?
- Як використовувати тип Vector<T> у .NET для векторних обчислень? Що таке апаратні внутрішні функції (System.Runtime.Intrinsics, Vector256)?
- Як поєднати векторизацію SIMD та багатопотоковість для прискорення обчислень?
- Поясніть паралельні алгоритми множення матриць. Як на швидкодію впливає порядок обходу та блокування кешу?
- Які паралельні алгоритми розв’язання систем лінійних рівнянь ви знаєте?
Тема 8. Паралельні алгоритми
- Які рівні паралелізму ви знаєте (бітовий, інструкцій, даних, потоків і задач, процесів, завдань)? Що таке зернистість паралелізму?
- Поясніть моделі паралельних обчислень PRAM і BSP та модель роботи й проміжку (work–span). Що стверджує теорема Брента?
- Що таке грід-система та віртуальна організація? Порівняйте кластер, грід і хмару; наведіть приклади грід-інфраструктур (EGI, WLCG, BOINC).
- Поясніть методологію Фостера PCAM. Які схеми декомпозиції векторів і матриць (блочна, циклічна, смуги, шахова) ви знаєте?
- Як розпаралелити чисельне інтегрування та пошук коренів нелінійного рівняння? Порівняйте статичне й динамічне балансування навантаження.
Тема 9. Багатопотоковість у C++
- Як створювати потоки в C++ за допомогою std::thread і std::jthread?
- Поясніть засоби синхронізації C++: std::mutex, std::lock_guard, std::scoped_lock, std::atomic.
- Що таке умовні змінні (std::condition_variable)? Як реалізувати чергу завдань?
- Поясніть std::async, std::future та std::promise.
- Що таке паралельні алгоритми стандартної бібліотеки C++ та політики виконання (std::execution::par, par_unseq)?
- Як зібрати проєкт C++ за допомогою CMake і Ninja в JetBrains CLion з компілятором GCC?
Тема 10. OpenMP
- Що таке OpenMP? Поясніть модель fork-join, директиви pragma omp parallel та omp parallel for.
- Поясніть області видимості змінних OpenMP: shared, private, firstprivate.
- Що таке редукція (reduction) в OpenMP? Наведіть приклад паралельного підсумовування.
- Поясніть стратегії розподілу ітерацій циклу: static, dynamic, guided.
- Що таке задачі OpenMP (task, taskwait)? Як розпаралелити рекурсивні алгоритми?
- Як прив’язувати потоки до ядер (OMP_PROC_BIND, OMP_PLACES) з урахуванням архітектури NUMA?
Тема 11. Обчислення на GPU
- Опишіть архітектуру графічного процесора. Порівняйте GPU та CPU для паралельних обчислень.
- Що таке CUDA? Поясніть поняття ядра (kernel), хоста й пристрою та ієрархію потоків, блоків і сіток.
- Поясніть ієрархію пам’яті GPU та передавання даних між хостом і пристроєм.
- Як написати та запустити просту програму CUDA C++ за допомогою NVIDIA CUDA Toolkit?
- Що таке бібліотека ILGPU? Як виконувати обчислення на GPU з програми мовою C#?
- Які задачі ефективно розв’язувати на GPU і які фактори обмежують прискорення?
Тема 12. Передавання повідомлень MPI
- Що таке стандарт MPI? Поясніть комунікатор, ранг процесу та запуск програми (mpirun).
- Поясніть двоточкові операції MPI_Send і MPI_Recv. Що таке блокувальні та неблокувальні операції?
- Що таке взаємоблокування в програмах MPI і як його уникнути?
- Поясніть колективні операції MPI_Bcast, MPI_Scatter, MPI_Gather та операції редукції MPI_Reduce і MPI_Allreduce.
- Що таке гібридні програми MPI + OpenMP? Які переваги вони дають на кластерах?
- Як виміряти час виконання та оцінити масштабованість програми MPI?
Тема 13. Кластер і планувальник Slurm
- Опишіть архітектуру обчислювального кластера: керувальний і обчислювальні вузли, мережа, спільна файлова система.
- Що таке планувальник завдань Slurm? Поясніть поняття розділу (partition), завдання та ресурсів і команди sbatch, srun, squeue та scancel.
- Як написати сценарій завдання Slurm для програми MPI?
- Як налаштувати операційну систему Linux для високопродуктивних обчислень?
- Як віддалено працювати з кластером через SSH та переносити файли?
Тема 14. Сокети, RPC і gRPC
- Опишіть моделі розподілених обчислень: клієнт-сервер, однорангова мережа, віддалений виклик процедур.
- Як реалізувати мережну взаємодію за допомогою сокетів TCP у .NET?
- Що таке віддалений виклик процедур (RPC)? Порівняйте WCF і CoreWCF.
- Що таке gRPC? Поясніть мову опису інтерфейсів Protocol Buffers (файл .proto) і види викликів: унарні, серверний, клієнтський і двонаправлений потоки.
- Порівняйте gRPC та REST за продуктивністю і сферами застосування.
Тема 15. Брокер RabbitMQ
- Що таке брокер повідомлень? Опишіть модель AMQP: обмінники, черги, прив’язки.
- Як реалізувати чергу завдань із кількома обробниками в RabbitMQ?
- Поясніть типи обмінників RabbitMQ: direct, fanout, topic, headers.
- Як реалізувати шаблон «публікація–підписка» за допомогою RabbitMQ?
- Поясніть гарантії доставки повідомлень: підтвердження, стійкі черги, повторна доставка.
- Як працювати з RabbitMQ з програми .NET за допомогою клієнтської бібліотеки RabbitMQ.Client?
Тема 16. Актори та Microsoft Orleans
- Що таке модель акторів? Які її переваги для розподілених систем?
- Що таке фреймворк Microsoft Orleans? Поясніть поняття віртуальних акторів (grains) і силосів (silos).
- Як зберігається та відновлюється стан grain в Orleans?
- Поясніть теорему CAP. Наведіть приклади систем CP та AP.
- Що таке відмовостійкість? Поясніть реплікацію, повторні спроби та шаблон «запобіжник» (circuit breaker).
- Що таке консенсус у розподілених системах? Поясніть загальну ідею алгоритму Raft.
Тема 17. Docker, Kubernetes, Aspire
- Що таке контейнеризація? Порівняйте контейнери та віртуальні машини.
- Як створити образ контейнера для застосунку .NET за допомогою Dockerfile і запустити кілька сервісів за допомогою Docker Compose?
- Що таке Kubernetes? Поясніть поняття Pod, Deployment, Service.
- Як масштабувати застосунок у Kubernetes та забезпечити його відмовостійкість?
- Що таке .NET Aspire? Як він спрощує розробку та оркестрацію розподілених застосунків?
Тема 18. Архітектура мікросервісів
- Порівняйте монолітну та мікросервісну архітектури. Як декомпонувати систему за обмеженими контекстами (bounded contexts)?
- Що таке API-шлюз і BFF? Які функції виконує YARP у мікросервісній системі?
- Чому в мікросервісах уникають розподілених транзакцій (2PC)? Поясніть патерн Saga: хореографія, оркестрація, компенсувальні дії.
- Поясніть патерни Transactional Outbox та Inbox. Як забезпечити ідемпотентність споживачів повідомлень?
- Що таке спостережуваність (observability)? Як OpenTelemetry і дашборд Aspire допомагають трасувати запити між сервісами?