EMZETT.
Увійти

Конвеєр процесора

Коротко: Конвеєр процесора ділить виконання команди на кілька стадій, які, як на складальній лінії, одночасно працюють над різними командами. Завдяки цьому в ідеалі за такт завершується одна команда, хоча кожній потрібно кілька тактів.

Докладніше: Замість того щоб повністю завершувати одну команду перед початком наступної, процесор перекриває кроки. Поки виконується команда 1, команда 2 уже декодується, а команда 3 вибирається. Це підвищує пропускну здатність і допускає вищі частоти, бо в кожної стадії менше роботи.

Подробиці

Класичні 5 стадій (RISC):

СтадіяЗавдання
IF (instruction fetch)Вибрати команду з пам’яті/кешу
ID (instruction decode)Декодувати команду, прочитати регістри
EX (execute)Обчислити в ALU
MEM (memory)Прочитати/записати пам’ять
WB (write back)Записати результат у регістр
Такт:      1   2   3   4   5   6   7
Команда 1: IF  ID  EX  MEM WB
Команда 2:     IF  ID  EX  MEM WB
Команда 3:         IF  ID  EX  MEM WB

Після розгону, починаючи з 5-го такту, кожен такт завершується одна команда.

Проблеми (hazards):

  • Залежність за даними: команді потрібен результат попередньої. Рішення: форвардинг (forwarding) або коротка пауза (stall).
  • Структурний hazard: дві стадії одночасно потребують того самого блоку.
  • Hazard керування (розгалуження): при розгалуженні невідомо, які команди будуть наступними. Передбачення розгалужень вгадує. У разі хибного здогаду неправильно завантажені команди відкидаються («pipeline flush», втрачається 10 – 20 тактів).

Розвиток:

  • Суперскалярність: кілька конвеєрів паралельно, кілька команд за такт.
  • Позачергове виконання (out-of-order): команди переупорядковуються, щойно дані готові.
  • Глибокі конвеєри: у Intel Pentium 4 було 31 стадія, що дало високі частоти, але дорогі помилки передбачення. У сучасних ядер близько 14 – 20.

Чому це важливо? Конвеєри пояснюють, чому код із безліччю непередбачуваних розгалужень повільніший і чому IPC (команд за такт) важливіший за просто ГГц.

Див. також: Позачергове виконання (out-of-order execution), Будова процесора: виконавчі блоки та кеш, x86-64 і ARM64