Перейти к основному содержимому

О разделе

Параллельные вычисления — отдельная инженерная дисциплина. В ней одновременно важны модель вычислений, архитектура железа и математическая оценка результата.

В этом разделе разбираем —

  • где параллелизм реально возможен и где его ограничивают зависимости;
  • почему одна и та же задача на 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.

Если вы новичок в теме — это нормально. Раздел построен по нарастающей — от интуиции и псевдокода к строгому анализу и справочным записям на реальных языках.


Что вы получите после прохождения

К концу раздела вы сможете —

  1. Формально описывать параллельный алгоритм через зависимости и граф.
  2. Оценивать нижние границы времени и требуемый минимум ресурсов.
  3. Различать memory-bound и compute-bound режимы на уровне модели Roofline.
  4. Применять законы Амдаля и Густафсона к реальным инженерным решениям.
  5. Осознанно выбирать между OpenMP, MPI и GPU-подходом.

Рекомендуемый порядок —

ШагМатериалЗачем
1Введение и проблемы HPCЗачем параллелизм, типичные узкие места
2Классификация архитектурФлинн, SIMD, конвейер, степень параллелизма
3Память, кластеры, GRIDShared 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" (уже с разбором синтаксиса для тех, кто идёт к языкам).

Если C++ ещё впереди

Статьи 1–10 и опциональная Параллельное решение СЛАУ — метод Гаусса — на псевдокоде и схемах.

Статья Практика — OpenMP, MPI и профилирование и фрагменты в Инженерия параллельных алгоритмов, Параллельное умножение матриц содержат блоки "Справочно на C/C++" — их удобно читать как иллюстрацию идей, не заучивая синтаксис.

Полноценная работа с потоками — в разделе C++ и Fortran HPC.

С чего начать, если вы уже знаете потоки — прочитайте Параллельные вычислительные процессы — введение (проблемы HPC, Roofline) и Законы производительности параллельных систем — там формулы и "почему 16 ядер ≠ ×16 скорости". Затем Граф алгоритма и матрица следованияВременной анализ параллельных алгоритмов, если нужен академический разбор алгоритма по графу.

Смежные материалы —


Перед тем как идти дальше

Критичный тезис раздела — параллелизм управляемый компромисс между выигрышем в скорости, стоимостью коммуникаций, сложностью отладки и ценой инфраструктуры.

Если этот тезис принят, материалы ниже складываются в единую картину с понятными связями между главами.


Интерактивные лаборатории раздела

Демо ускорения (Амдаль, Густафсон), Roofline Explorer и численные примеры — в главе 7 — законы производительности. Там же таблица kernel'ов и разбор «иллюзии параллелизма» на маленьких данных.