Конвейер команд
Конвейер — способ ускорить процессор: пока одна команда исполняется, следующая уже выбирается из памяти и декодируется. Благодаря ему большинство команд микроконтроллера выполняются за один такт.
Обновлено Редакция GAW
Конвейер команд (instruction pipeline) — организация процессора, при которой обработка команды разбита на ступени — выборку из памяти, декодирование, исполнение, — и разные команды одновременно находятся на разных ступенях. Пока одна команда исполняется, следующая уже декодируется или выбирается. Каждая отдельная команда проходит все ступени, но в среднем процессор завершает по команде за такт.
Конвейер в микроконтроллерах
| Ядро | Ступеней | Что даёт |
|---|---|---|
| AVR (ATmega328P) | 2: выборка и исполнение | большинство команд за такт, до 1 MIPS на 1 МГц |
| ARM Cortex-M3 | 3: выборка, декодирование, исполнение | переход стоит 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 МГц.
Источники
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — гл. 7 — одноуровневый конвейер: пока выполняется одна команда, следующая выбирается из памяти программ; до 1 MIPS на МГц
- Arm. Cortex-M3 Processor Technical Reference Manual, revision r2p1 (ARM 100165), 2016 — конвейер из трёх ступеней; разд. 3.3 — такты команд, перезаполнение конвейера P = 1–3 такта
Нашли ошибку?