Вычислительные системы. Классификация по потокам. Классификация по способу обработки потоков. Оценка производительности вычислительных систем
Фундаментальный теоретический конспект по архитектуре многопроцессорных и распределенных вычислительных комплексов, таксономии Майкла Флинна, топологиям памяти SMP/NUMA, векторным расширениям SIMD, методикам бенчмаркинга и законам параллельного масштабирования (Амдала и Густафсона-Барсиса).
1. Таксономия Майкла Флинна (Flynn's Taxonomy)
В 1966 году американский ученый Майкл Дж. Флинн предложил базовую классификацию архитектур вычислительных систем, основанную на понятии двух ортогональных потоков: потока команд (Instruction Stream, IS) и потока данных (Data Stream, DS). Под потоком понимается последовательность команд или данных, обрабатываемых процессором во времени.
| Класс |
Поток команд (IS) |
Поток данных (DS) |
Архитектурная сущность |
Аппаратные примеры |
| SISD (Single Instruction, Single Data) |
Одиночный |
Одиночный |
Классическая фон-неймановская машина: один процессор последовательно выбирает одну инструкцию и оперирует одним элементом данных. Включает суперскалярные конвейерные процессоры. |
Исторические ЭВМ (PDP-11, IBM PC/XT, Intel 8086), современные однопоточные ядра x86/ARM без использования векторных блоков. |
| SIMD (Single Instruction, Multiple Data) |
Одиночный |
Множественный |
Векторный или матричный параллелизм: один блок управления декодирует одну команду и одновременно передает её на множество параллельных АЛУ, обрабатывающих независимые элементы данных (Lockstep). |
Векторные суперкомпьютеры (Cray-1), векторные инструкции ЦП (Intel AVX-512, ARM SVE, RISC-V Vector), шейдерные и тензорные ядра GPU (NVIDIA CUDA, AMD RDNA). |
| MISD (Multiple Instruction, Single Data) |
Множественный |
Одиночный |
Конвейерная или избыточная обработка: несколько независимых процессоров или блоков управления параллельно выполняют различные программы/инструкции над одним и тем же потоком входных данных. |
Отказоустойчивые системы аэрокосмического и критического назначения с мажоритарным голосованием (бортовой комплекс Space Shuttle, самолетные системы fly-by-wire), систолические массивы. |
| MIMD (Multiple Instruction, Multiple Data) |
Множественный |
Множественный |
Многозадачный и многопроцессорный параллелизм: множество независимых процессоров одновременно выполняют различные потоки инструкций над различными потоками данных. Доминирующий класс современных высокопроизводительных систем. |
Многоядерные CPU (Intel Xeon, AMD EPYC, Apple Silicon), симметричные мультипроцессоры (SMP), NUMA-серверы, кластерные суперкомпьютеры (ТОП-500, Frontier, Fugaku). |
Глубокий анализ классов таксономии:
- Суперскалярность в рамках SISD: Конвейеризация (Pipelining) и суперскалярная архитектура (выборка нескольких скалярных инструкций за такт) формально остаются в рамках SISD, так как работают с одним программным счетчиком (PC) и одним логическим потоком данных.
- Векторно-конвейерные vs массивные SIMD: Ранние SIMD (Cray-1) использовали глубоко конвейеризованные векторные регистры. Современные GPU реализуют модель SIMT (Single Instruction, Multiple Threads), являющуюся аппаратной эволюцией SIMD, где нити объединяются в группы (Warps в NVIDIA, Wavefronts в AMD) по 32 или 64 нити, синхронно исполняющие одну инструкцию.
- Феномен класса MISD: Долгое время класс MISD считался чисто теоретической категорией. На практике он воплощен в системах жесткого реального времени: троированные или четверированные вычислительные каналы (TMR/QMR) получают один и тот же поток показаний с датчиков гироскопов и ускорений, выполняют различные независимые алгоритмы фильтрации (например, фильтр Калмана и прямое интегрирование), а мажоритарный арбитр (Voter) выбирает достоверный результат.
2. Организация памяти в многопроцессорных системах (SMP vs NUMA vs Clusters)
Ключевым критерием классификации систем класса MIMD является способ организации адресного пространства оперативной памяти и топология межсоединений.
2.1. Симметричные мультипроцессоры (SMP) и архитектура UMA
SMP (Symmetric Multiprocessing) — архитектура, в которой два или более идентичных процессора подключены к общему пулу оперативной памяти через единую разделяемую системную шину или центральный коммутатор.
- Реализует модель UMA (Uniform Memory Access): время доступа (латентность) к любому адресу физической памяти строго одинаково для любого ядра процессора.
- Физическое ограничение: При увеличении числа ядер общая шина памяти становится узким местом (эффект насыщения шины). Практический предел SMP на общей шине обычно составляет от 4 до 8 сокетов.
2.2. Архитектура NUMA (Non-Uniform Memory Access)
Для преодоления барьера масштабируемости SMP была разработана архитектура NUMA (неоднородный доступ к памяти), ставшая стандартом для современных многосокетных серверов x86-64 и ARM Neoverse.
2.3. Кластерные системы с распределенной памятью (MPP / Clusters)
Кластеры (Massively Parallel Processing, MPP) представляют собой комплекс независимых вычислительных узлов (серверов), объединенных высокоскоростной локальной сетью (InfiniBand, RoCE, Slingshot, Omni-Path).
- Каждый узел работает под управлением собственного экземпляра ОС и имеет изолированное физическое адресное пространство памяти.
- Обмен данными между узлами осуществляется явно посредством передачи сообщений через программные интерфейсы (MPI — Message Passing Interface).
- Латентность межмашинного обмена составляет единицы микросекунд (1–3 мкс в InfiniBand HDR/NDR), что на порядки выше задержек внутрисокетной памяти (десятки наносекунд).
3. Векторные расширения процессоров: AVX-512 и ARM SVE
Для ускорения обработки мультимедиа, криптографии, научных расчетов и алгоритмов искусственного интеллекта современные микропроцессоры общего назначения оснащаются мощными векторными блоками SIMD.
3.1. Архитектура Intel AVX-512
3.2. Архитектура ARM SVE / SVE2 (Scalable Vector Extension)
- Агностицизм к длине вектора (Vector Length Agnostic, VLA): В отличие от x86, где ширина регистров жестко зафиксирована в архитектуре (128 бит в SSE, 256 в AVX2, 512 в AVX-512), в ARM SVE один и тот же бинарный машинный код выполняется на оборудовании с любой шириной регистров от 128 до 2048 бит (с шагом 128 бит).
- Длина вектора определяется производителем микрочипа (например, 512 бит в процессоре Fujitsu A64FX суперкомпьютера Fugaku; 128/256 бит в мобильных ядрах).
- Автовекторизация и предикаты: Предикатные регистры позволяют гибко обрабатывать «хвосты» циклов без необходимости генерировать скалярный код эпилога.
4. Метрики и методики оценки производительности ЭВМ
Корректное сопоставление вычислительных систем требует применения стандартизированных метрик и синтетических тестовых пакетов (бенчмарков).
4.1. Метрика MIPS и её фундаментальные дефекты
MIPS (Million Instructions Per Second) — миллионы выполненных процессором инструкций в секунду:
MIPS = (Число инструкций / Время выполнения) / 10^6 = Тактовая частота (МГц) / CPI
где
CPI (Cycles Per Instruction) — среднее число тактов на инструкцию.
Почему MIPS — «Meaningless Information on Processor Speed»:
- Несопоставимость архитектур: В архитектуре RISC для выполнения сложной логической операции требуется 4–6 простых инструкций с CPI ≈ 1. В архитектуре CISC аналогичное действие выполняется одной сложной инструкцией, но за 5 тактов. Процессор RISC покажет высокий MIPS, хотя обе системы решат прикладную задачу за одинаковое время.
- Различная трудоемкость команд: Команда целочисленного сложения
ADD выполняется за 1 такт, а деление с плавающей запятой FDIV — за 15–20 тактов. Замена деления на сложения резко увеличит показатель MIPS при полной потере прикладного смысла.
4.2. Метрики FLOPS: Rpeak и Rmax
FLOPS (Floating-Point Operations Per Second) — количество арифметических операций с плавающей запятой в секунду. Основная метрика для научно-технических и графических расчетов.
4.3. Пакет SPEC CPU
Стандарт де-факто для оценки универсальных процессоров — пакет тестов некоммерческой организации Standard Performance Evaluation Corporation (SPEC CPU 2017). Он включает реальные прикладные компилируемые программы (компиляторы gcc, симуляторы квантовой химии, рендеринг POV-Ray, сжатие xz), делящиеся на целочисленный подпакет (SPECspeed/SPECrate Integer) и подпакет с плавающей запятой (Floating Point).
5. Законы параллельного масштабирования: Амдал vs Густафсон-Барсис
При переходе от однопроцессорных систем к многопроцессорным возникает фундаментальный вопрос: какой прирост производительности (ускорение, Speedup) мы получим при увеличении числа вычислителей?
5.1. Закон Джина Амдала (Amdahl's Law, 1967)
Закон Амдала формулирует предел ускорения алгоритма на многопроцессорной системе при условии фиксированного объема решаемой задачи (модель сильного масштабирования — Strong Scaling).
Пусть всё время выполнения задачи на одном процессоре нормировано на 1 ($s + p = 1$), где $s$ — доля строго последовательного кода (который в принципе невозможно распараллелить: инициализация, чтение файла, синхронизация потоков), а $p$ — параллельная доля. Тогда при использовании $n$ параллельных процессоров время выполнения составит $T(n) = s + \frac{p}{n}$.
S_Amdahl = T(1) / T(n) = 1 / (s + p / n) = 1 / (s + (1 - s) / n)
Асимптотический предел закона Амдала:
При неограниченном росте числа процессоров ($n \to \infty$) параллельная компонента $\frac{p}{n} \to 0$. Ускорение стремится к константе:
lim_{n → ∞} S_Amdahl = 1 / s
Пример: Если в программе всего 5% последовательного кода ($s = 0.05$), то даже на суперкомпьютере из 1 000 000 ядер теоретическое ускорение никогда не превысит:
$$S_{max} = \frac{1}{0.05} = 20 \text{ раз}.$$
5.2. Закон Джона Густафсона и Эдвина Барсиса (Gustafson-Barsis's Law, 1988)
Густафсон и Барсис указали, что на практике при покупке мощного суперкомпьютера исследователи не решают ту же самую маленькую задачу быстрее, а увеличивают детализацию задачи пропорционально мощности системы (увеличивают размер сетки, количество моделируемых частиц, разрешение климатической модели). Это модель слабого масштабирования (Weak Scaling).
Если параллельная часть задачи растет линейно вместе с числом процессоров $n$, а последовательная часть остается константой по времени, то ускорение масштабируется линейно:
S_Gustafson = s + p × n = s + (1 - s) × n = 1 + (n - 1) × p
Сравнение Амдала и Густафсона:
Для тех же $s = 0.05$ и $n = 64$:
- По закону Амдала (фиксированный размер задачи): $S_A = \frac{1}{0.05 + 0.95 / 64} \approx \mathbf{15.42}$ раз (эффективность $24.1\%$).
- По закону Густафсона (масштабируемый размер задачи): $S_G = 0.05 + 0.95 \times 64 = \mathbf{60.85}$ раз (эффективность $95.1\%$).
Закон Густафсона доказал экономическую и техническую целесообразность создания суперкомпьютеров с сотнями тысяч ядер.
6. Вопросы для самопроверки
- Назовите четыре класса таксономии Флинна и приведите современный аппаратный пример для каждого из них.
- Почему суперскалярный конвейерный микропроцессор относится к классу SISD, а не SIMD или MIMD?
- В чем заключается архитектурная разница между UMA и NUMA? Каковы физические причины возникновения NUMA-штрафа?
- Как концепция Vector Length Agnostic в ARM SVE решает проблему совместимости бинарного кода по сравнению с x86 AVX-512?
- В чем состоит ключевой недостаток метрики MIPS при сопоставлении процессоров различной микроархитектуры?
- Какая математическая задача лежит в основе бенчмарка Linpack (HPL) и почему именно она выбрана для рейтинга TOP500?
- Сформулируйте принципиальное отличие модели Strong Scaling (закон Амдала) от Weak Scaling (закон Густафсона-Барсиса).
- Каков теоретический предел ускорения по закону Амдала для программы, содержащей 2% последовательного кода, при бесконечном числе процессоров?