Архитектура компьютера

Суперскалярность: Несколько инструкций за такт

Цели урока

  • Понимать принцип суперскалярности и IPC > 1
  • Знать роль множественных execution units
  • Понимать Out-of-Order execution и Reorder Buffer
  • Знать Register Renaming для устранения ложных зависимостей
  • Понимать Speculative Execution

Предварительные знания

  • Конвейеризация
  • Hazards
  • Branch Prediction
  • Конвейеризация

Современные процессоры выполняют инструкции не в том порядке, как написано в программе. Они переупорядочивают, спекулируют, параллелят - всё ради скорости.

  • Понимание производительности многопоточного кода
  • Memory barriers в concurrent programming
  • Уязвимости Spectre/Meltdown
  • Оптимизация под конкретную микроархитектуру

От IPC=1 к IPC>1

**Суперскалярный процессор** - выполняет несколько инструкций за такт, используя несколько исполнительных блоков.

ПроцессорIssue WidthГод
Intel Pentium21993
PowerPC 97042002
Intel Core42006
Apple M1 (P-core)82020
Apple M2 (P-core)82022

**Issue Width** - сколько инструкций CPU может запустить за такт. M1 имеет issue width = 8, но реальный IPC ~3-4 из-за зависимостей.

Что означает суперскалярность?

Execution Units

Для выполнения 4 инструкций нужно 4 исполнительных блока:

Execution UnitОперацииКол-во
Integer ALUADD, SUB, AND, OR, XOR2-4
Load UnitЧтение из памяти2
Store UnitЗапись в память1-2
FPUFloating-point операции2
Branch UnitПереходы1-2
SIMD/VectorAVX/SSE операции2

**Ограничение:** Даже с 8 ALU, если все инструкции зависят друг от друга, IPC = 1. Параллелизм нужен в самом коде!

Что ограничивает реальный IPC суперскалярного процессора?

Out-of-Order Execution

**Проблема:** Инструкции в программе зависимы. Но в очереди могут быть независимые инструкции дальше!

**Out-of-Order (OoO):** Переупорядочить и выполнить MUL, пока ADD ещё считает!

**Reorder Buffer (ROB):** Хранит инструкции в исходном порядке. Результаты записываются в архитектурные регистры в правильном порядке, даже если выполнение было OoO.

Зачем нужен Reorder Buffer (ROB)?

Register Renaming

**Ложные зависимости:** Иногда зависимость только по имени регистра, не по данным.

**Register Renaming:** Переименовать R1 в разные физические регистры!

ЗависимостьТипРешение
RAW (Read After Write)ИстиннаяForwarding, OoO
WAW (Write After Write)ЛожнаяRegister Renaming
WAR (Write After Read)ЛожнаяRegister Renaming

**Физические регистры:** x86-64 имеет 16 архитектурных регистров, но ~200 физических для renaming!

Register Renaming устраняет:

Speculative Execution

**Speculation:** Выполнять инструкции «вперёд», не зная, понадобятся ли они.

**Если предсказание верное:** Результаты commit'ятся, всё ок.

**Если предсказание неверное:** Flush спекулятивных результатов, откат.

**Spectre/Meltdown:** Уязвимости основаны на том, что speculation оставляет следы в кэше даже после отката! Это позволяет читать защищённую память.

Суперскалярный CPU всегда быстрее скалярного в N раз

Реальное ускорение ограничено зависимостями в коде. Типичный IPC = 2-4, не 8.

Даже с 8 исполнительными блоками, если код последовательный, параллелизма нет.

Что происходит при неверной спекуляции?

Ключевые идеи

  • Суперскалярность: несколько инструкций за такт (IPC > 1)
  • Execution Units: несколько ALU, Load, Store, FPU
  • Out-of-Order: переупорядочивание для максимального параллелизма
  • Register Renaming: устранение WAW/WAR зависимостей
  • Speculation: выполнение по предсказанному пути
  • Реальный IPC ограничен зависимостями в коде

Связанные темы

Суперскалярность - вершина эволюции CPU.

  • RISC vs CISC — RISC легче суперскаляризовать
  • Кэш-память — Данные должны быть в кэше для IPC

Вопросы для размышления

  • Почему суперскалярность даёт меньший прирост производительности на коде с большим количеством зависимостей?
  • Как out-of-order execution помогает скрыть латентность обращений к памяти в суперскалярных процессорах?
  • Каков предел параллелизма на уровне инструкций и почему он ограничивает масштабирование через суперскалярность?

Связанные уроки

  • os-01-intro
Суперскалярность: Несколько инструкций за такт

0

1

Войти