Открыть сервис

Параллельность в вычислительной технике

Параллельно (в вычислительной технике) — способ организации вычислений, при котором несколько операций или задач выполняются одновременно, а не последовательно одна за другой. Параллелизм противопоставляется последовательному (конвейерному в узком смысле) исполнению, при котором каждая следующая операция начинается только после завершения предыдущей. Понятие охватывает как аппаратные решения (многоядерные процессоры, векторные блоки, графические ускорители), так и программные модели (многопоточность, параллельные алгоритмы, распределённые вычисления).

Основные понятия

Ключевыми характеристиками параллельных систем являются:

Теоретическим пределом ускорения служит закон Амдала: если доля последовательной части алгоритма равна 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, обзоры по архитектуре суперкомпьютеров.