Параллельность в вычислительной технике¶
Параллельно (в вычислительной технике) — способ организации вычислений, при котором несколько операций или задач выполняются одновременно, а не последовательно одна за другой. Параллелизм противопоставляется последовательному (конвейерному в узком смысле) исполнению, при котором каждая следующая операция начинается только после завершения предыдущей. Понятие охватывает как аппаратные решения (многоядерные процессоры, векторные блоки, графические ускорители), так и программные модели (многопоточность, параллельные алгоритмы, распределённые вычисления).
¶Основные понятия
Ключевыми характеристиками параллельных систем являются:
- Степень параллелизма — число операций, выполняемых одновременно.
- Ускорение — отношение времени последовательного решения к времени параллельного.
- Масштабируемость — способность системы эффективно использовать рост числа исполнителей.
- Накладные расходы — затраты на синхронизацию, обмен данными и распределение работы.
Теоретическим пределом ускорения служит закон Амдала: если доля последовательной части алгоритма равна s, то максимальное ускорение не превышает 1/s независимо от числа процессоров. Закон Густафсона, напротив, показывает, что при росте объёма задачи масштабируемость может быть почти линейной.
¶Классификация
По способу организации выделяют несколько форм параллелизма.
¶По уровню
- Битовая — одновременная обработка разрядов машинного слова.
- Командная (ILP) — параллельное исполнение нескольких инструкций в суперскалярных процессорах.
- Потоковая — одновременная работа нескольких потоков в рамках одного процесса.
- Процессная — параллельное выполнение независимых процессов.
- Распределённая — вычисления на множестве машин, объединённых сетью.
¶По модели памяти
- С общей памятью (multiprocessor) — все исполнители имеют доступ к единому адресному пространству; синхронизация через блокировки и атомарные операции.
- С распределённой памятью — каждый узел имеет собственную память, обмен идёт сообщениями (модель передачи сообщений, MPI).
- Гибридные — сочетание обоих подходов, типичное для современных кластеров.
¶По типу задач
- Параллелизм данных — одна и та же операция применяется к разным элементам массива (векторизация, SIMD).
- Параллелизм задач — разные операции выполняются над разными данными одновременно (MIMD).
¶Аппаратная реализация
Исторически первыми формами были конвейеры и векторные машины (например, Cray-1, 1976). В 1980-х развивались транспьютеры и многопроцессорные комплексы. С середины 2000-х основным направлением стало многоядерное исполнение: производители перешли от наращивания тактовой частоты к увеличению числа ядер на кристалле. Графические процессоры (GPU) содержат тысячи простых вычислительных блоков и эффективны для массово-параллельных задач. Специализированные ускорители (TPU, FPGA) применяются для задач машинного обучения и обработки сигналов.
В России параллельные вычисления развивались в рамках суперкомпьютерных программ; к значимым системам относят семейство «Ломоносов» (МГУ) и кластеры в научных центрах. В 2020-х ведутся работы по созданию отечественных многоядерных процессоров.
¶Программные модели
Распространённые средства разработки параллельных программ:
| Модель | Назначение |
|---|---|
| Потоки (pthreads, std::thread) | Многопоточность с общей памятью |
| OpenMP | Директивы для параллелизации циклов |
| MPI | Обмен сообщениями между процессами |
| CUDA, OpenCL | Вычисления на GPU |
| MapReduce | Обработка больших данных |
Сложности программирования связаны с гонками данных, взаимными блокировками (deadlock) и недетерминизмом. Для их устранения применяют синхронизацию, атомарные операции и модели без блокировок (lock-free).
¶Применение
Параллельные вычисления используются в:
- научном моделировании (климат, физика плазмы, молекулярная динамика);
- машинном обучении и нейросетях;
- обработке изображений и видео;
- криптографии и анализе данных;
- базах данных и веб-серверах, обслуживающих множество запросов.
¶Ограничения и критика
Рост числа исполнителей не даёт пропорционального ускорения из-за закона Амдала, накладных расходов на синхронизацию и ограничений памяти. Энергопотребление и тепловыделение ограничивают дальнейшее наращивание тактовой частоты. Программирование параллельных систем сложнее последовательного, что повышает риск ошибок. Часть задач принципиально плохо распараллеливается.
¶Интересные факты
- Термин «параллелизм» применительно к вычислениям обсуждался ещё в 1950-х годах.
- Первый векторный суперкомпьютер Cray-1 развивал около 160 млн операций в секунду.
- Современные GPU содержат более десяти тысяч вычислительных ядер.
- Закон Мура замедлился, что усилило интерес к специализированным ускорителям.
Источники: учебные курсы по параллельным вычислениям, работы Дж. Амдала и Дж. Густафсона, документация OpenMP и MPI, обзоры по архитектуре суперкомпьютеров.