Перейти к содержанию

Конвейер команд

Конвейер — способ ускорить процессор: пока одна команда исполняется, следующая уже выбирается из памяти и декодируется. Благодаря ему большинство команд микроконтроллера выполняются за один такт.

Обновлено Редакция GAW

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

Конвейер в микроконтроллерах

ЯдроСтупенейЧто даёт
AVR (ATmega328P)2: выборка и исполнениебольшинство команд за такт, до 1 MIPS на 1 МГц
ARM Cortex-M33: выборка, декодирование, исполнениепереход стоит 1 + P тактов, P = 1–3

У AVR одноуровневый конвейер работает благодаря гарвардской архитектуре: следующая команда выбирается из флеш-памяти по своей шине, пока текущая работает с данными (DS40002061B, глава 7). Подробнее — в статье об архитектуре AVR.

Цена переходов

Конвейер заранее выбирает команды, которые лежат следом в памяти. При переходе — условном или безусловном, вызове функции, возврате — уже выбранные команды не нужны, и конвейер заполняется заново. У Cortex-M3 это 1–3 лишних такта на переход; ядро начинает выбирать команды по адресу перехода заранее, чтобы сократить потери. Такты команд, шины и конвейер Cortex-M3 разобраны в статье об архитектуре Cortex-M3. На время реакции на событие конвейер влияет вместе с сохранением регистров — см. задержку прерывания.

Частые вопросы

Сколько ступеней в конвейере Cortex-M3?

Три — выборка, декодирование и исполнение: пока одна команда исполняется, следующая декодируется, а третья выбирается из памяти. Команды по адресу перехода ядро начинает выбирать заранее, поэтому перезаполнение конвейера после перехода стоит 1–3 такта — в таблицах TRM эта величина обозначена буквой P.

Почему переход занимает больше тактов, чем обычная команда?

Конвейер заранее выбирает команды, которые идут следом в памяти. Если программа переходит в другое место, уже выбранные команды не нужны, и конвейер заполняется заново с нового адреса. У Cortex-M3 команды перехода B, BL, BX, BLX выполняются за 1 + P тактов, где P — 1–3 такта перезаполнения.

Какой конвейер у AVR?

Одноуровневый: пока выполняется одна команда, следующая выбирается из флеш-памяти. Это возможно благодаря гарвардской архитектуре с раздельными шинами для программы и данных и позволяет выполнять большинство команд за такт — до 1 MIPS на 1 МГц.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — гл. 7 — одноуровневый конвейер: пока выполняется одна команда, следующая выбирается из памяти программ; до 1 MIPS на МГц
  2. Arm. Cortex-M3 Processor Technical Reference Manual, revision r2p1 (ARM 100165), 2016 — конвейер из трёх ступеней; разд. 3.3 — такты команд, перезаполнение конвейера P = 1–3 такта

Нашли ошибку?