О разделе
Параллельные вычисления — отдельная инженерная дисциплина. В ней одновременно важны модель вычислений, архитектура железа и математическая оценка результата.
В этом разделе разбираем —
- где параллелизм реально возможен и где его ограничивают зависимости;
- почему одна и та же задача на 32 ядрах ускоряется в 25 раз или только в 3 раза;
- как заранее определить узкое место — память, сеть, синхронизация или чистые FLOPS.
Это другой уровень, чем асинхронность (неблокирующий I/O) и чем "масштабирование веб-сервисов". Здесь предмет — именно вычислительное ядро задачи — математика, граф зависимостей, декомпозиция и измеримая эффективность.
Длинные справочные листинги C/C++/MPI/OpenMP (от ~8 строк) вынесены в каталог code.spirzen.ru и подгружаются через ExternalCodeEmbed; алгоритмический псевдокод на русском, короткие фрагменты CUDA и однострочные команды профилирования остаются в статье. Интерактивные лаборатории — на play.spirzen.ru, встроены в главу 7.
Не пытайтесь "проглотить" все формулы за один заход. Нормальная траектория — сначала общая картина (1–4), затем формальные инструменты (5–7), потом инженерная практика (8–11).
Возвращаться к главам повторно — правильно и полезно.
Для кого этот раздел
- Для читателей до углублённого изучения языков программирования — сначала модели, графы зависимостей, законы ускорения и алгоритмический псевдокод на русском; фрагменты C/C++/CUDA в конце раздела даны как справочные эталоны с построчным разбором, а не как обязательный вход.
- Для разработчиков, которые уже пишут код и хотят понимать, когда распараллеливание окупается и когда снижает эффективность.
- Для архитекторов и техлидов, которым нужно обосновывать решения по CPU/GPU/кластеру через модели и метрики.
- Для инженеров и исследователей, работающих с heavy workloads — численные методы, ML, обработка больших массивов, simulation.
Если вы новичок в теме — это нормально. Раздел построен по нарастающей — от интуиции и псевдокода к строгому анализу и справочным записям на реальных языках.
Что вы получите после прохождения
К концу раздела вы сможете —
- Формально описывать параллельный алгоритм через зависимости и граф.
- Оценивать нижние границы времени и требуемый минимум ресурсов.
- Различать memory-bound и compute-bound режимы на уровне модели Roofline.
- Применять законы Амдаля и Густафсона к реальным инженерным решениям.
- Осознанно выбирать между OpenMP, MPI и GPU-подходом.
Рекомендуемый порядок —
| Шаг | Материал | Зачем |
|---|---|---|
| 1 | Введение и проблемы HPC | Зачем параллелизм, типичные узкие места |
| 2 | Классификация архитектур | Флинн, SIMD, конвейер, степень параллелизма |
| 3 | Память, кластеры, GRID | Shared vs distributed, NUMA, метакомпьютинг |
| 4 | Модели и топологии | PRAM, message passing, SPMD, сети процессоров |
| 5 | Граф алгоритма | Матрица следования, несовместимые операторы |
| 6 | Временной анализ | Ранние/поздние сроки, минимум процессоров |
| 7 | Законы производительности | Амдаль, Густафсон-Барсис, масштабируемость |
| 8 | Инженерия алгоритмов | Декомпозиция, data/task parallelism |
| 9 | Умножение матриц | Классический практический пример |
| 10 | Петри и расписания | Формальные модели процессов |
| 11 | Практика OpenMP/MPI | Псевдокод, эталонный C/C++, профилирование |
| 12 | Параллельный метод Гаусса | СЛАУ, зависимости по этапам, обмены на кластере |
Идея маршрута простая — сначала вы понимаете "что именно нужно распараллеливать", затем "как это доказать и посчитать", потом "как записать на псевдокоде", и в конце — "как это выглядит в OpenMP/MPI" (уже с разбором синтаксиса для тех, кто идёт к языкам).
Статьи 1–10 и опциональная Параллельное решение СЛАУ — метод Гаусса — на псевдокоде и схемах.
Статья Практика — OpenMP, MPI и профилирование и фрагменты в Инженерия параллельных алгоритмов, Параллельное умножение матриц содержат блоки "Справочно на C/C++" — их удобно читать как иллюстрацию идей, не заучивая синтаксис.
Полноценная работа с потоками — в разделе C++ и Fortran HPC.
С чего начать, если вы уже знаете потоки — прочитайте Параллельные вычислительные процессы — введение (проблемы HPC, Roofline) и Законы производительности параллельных систем — там формулы и "почему 16 ядер ≠ ×16 скорости". Затем Граф алгоритма и матрица следования–Временной анализ параллельных алгоритмов, если нужен академический разбор алгоритма по графу.
Смежные материалы —
- Программа, процесс, поток — вводная схема, процессы и потоки в ОС
- Железо — как работает компьютер, GPU
- Практика — Fortran OpenMP/MPI, потоки C++
- IPC — разделяемая память
Перед тем как идти дальше
Критичный тезис раздела — параллелизм управляемый компромисс между выигрышем в скорости, стоимостью коммуникаций, сложностью отладки и ценой инфраструктуры.
Если этот тезис принят, материалы ниже складываются в единую картину с понятными связями между главами.
Интерактивные лаборатории раздела
Демо ускорения (Амдаль, Густафсон), Roofline Explorer и численные примеры — в главе 7 — законы производительности. Там же таблица kernel'ов и разбор «иллюзии параллелизма» на маленьких данных.
Параллельные вычислительные процессы — введение
Введение в параллельные вычисления — зачем они нужны, чем отличаются от асинхронности, основные проблемы высокопроизводительных вычислений (HPC).
Сети Петри и формальные расписания
Сети Петри для моделирования параллельных процессов, диаграммы расписания, связь с графом алгоритма.
Практика — OpenMP, MPI и профилирование
Практика параллельных вычислений — псевдокод на русском, эталонные фрагменты OpenMP и MPI с построчным разбором, профилирование и отладка.
Параллельное решение СЛАУ — метод Гаусса
Параллельный метод Гаусса для систем линейных уравнений — этапы, зависимости, псевдокод, обмены MPI и ограничения масштабирования.
Классификация параллельных архитектур
Классификация параллельных архитектур — таксономия Флинна, SIMD и MIMD, векторно-конвейерные системы, степень достижимого параллелизма.
Память, мультипроцессоры, кластеры и GRID
Модели памяти в параллельных системах — общая и распределённая память, мультипроцессоры и мультикомпьютеры, кластеры, GRID и метакомпьютинг.
Модели параллельных вычислений и топологии
Модели параллельных вычислений — PRAM, message passing, SPMD; сети передачи данных между процессорами; диаграммы расписания.
Граф алгоритма и матрица следования
Граф алгоритма — построение, свойства, матрица следования, выявление логически несовместимых операторов и параллелизма.
Временной анализ параллельных алгоритмов
Временные характеристики параллельных алгоритмов — информационный граф, ранние и поздние сроки, критический путь, минимальное число процессоров.
Законы производительности параллельных систем
Оценка производительности параллельных компьютеров — закон Амдала, закон Густафсона-Барсиса, эффективность, масштабируемость, конвейер.
Инженерия параллельных алгоритмов
Построение параллельных алгоритмов — инженерный подход, псевдокод, классификация параллелизма, декомпозиция данных, эталоны OpenMP и MPI.
Параллельное умножение матриц
Параллельные алгоритмы умножения матриц — псевдокод, блочная декомпозиция, Cannon, SUMMA, разбор эталонов OpenMP и GPU.
Параллельные вычисления — итоги
Итоги раздела «Параллельные вычисления» — FAQ и краткие ответы по теме.
Параллельные вычисления — чек-лист
Вопросы для самопроверки по разделу "Параллельные вычисления".
Параллельные вычисления — о разделе
Подборка материалов раздела "Параллельные вычисления" в энциклопедии Вселенная IT — архитектуры, модели, графы алгоритмов и инженерия HPC.