Конвейерная обработка инструкций процессором или микроконтроллером

Лекция



Привет, Вы узнаете о том , что такое вычислительный конвейер, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое вычислительный конвейер, конвейерная обработка , настоятельно рекомендую прочитать все из категории Теория цифровых автоматов.

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

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

Базовый пятиэтапный конвейер
Тактовый цикл
Номер инстр.
1 2 3 +++4 5 6 7
1 IF ID EX +++МЕМ ---- WB
2 IF ID +++EX МЕМ WB
3 IF +++ID EX МЕМ WB
4 +++IF ID EX МЕМ
5 IF ID EX
(IF = Выборка инструкции, ID = Декодирование инструкции, EX = Выполнение, MEM = Доступ к памяти, WB = Обратная запись в регистр).

В четвертом тактовом цикле (зеленый столбец) самая ранняя инструкция находится на этапе MEM, а самая поздняя инструкция еще не вошла в конвейер.

Идея заключается в параллельном выполнении нескольких инструкций процессора. Сложные инструкции процессора представляются в виде последовательности более простых стадий. Вместо выполнения инструкций последовательно (ожидания завершения конца одной инструкции и перехода к следующей), следующая инструкция может выполняться через несколько стадий выполнения первой инструкции. Это позволяет управляющим цепям процессора получать инструкции со скоростью самой медленной стадии обработки, но при этом, намного быстрее, чем при выполнении эксклюзивной полной обработки каждой инструкции от начала до конца.

Конвейер можно частично сравнить с очередью, но считать его просто очередью — неправильно.

Главное отличие Очередь — это место, где данные ждут обработки.

задача 1
задача 2
задача 3
   ↓
Worker обрабатывает

Конвейер — это последовательность этапов обработки.

данные → шаг 1 → шаг 2 → шаг 3 → результат

То есть:

Очередь = хранит и упорядочивает задачи
Конвейер = обрабатывает данные по этапам

Концепция и мотивация

В конвейерном компьютере инструкции проходят через центральный процессор (ЦП) поэтапно. Например, для каждого шага цикла фон Неймана может быть отдельный этап : выборка инструкции, выборка операндов, выполнение инструкции, запись результатов. Конвейерный компьютер обычно имеет «конвейерные регистры» после каждого этапа. В них хранится информация об инструкции и вычислениях, чтобы логические элементы следующего этапа могли выполнить следующий шаг.

Такая схема позволяет процессору выполнять инструкцию за каждый тактовый цикл. Обычно четные каскады работают на одном фронте прямоугольного тактового сигнала, а нечетные — на другом. Это обеспечивает большую пропускную способность процессора , чем у многотактового компьютера при заданной тактовой частоте , но может увеличить задержку из-за дополнительных накладных расходов самого процесса конвейеризации. Кроме того, несмотря на то, что электронная логика имеет фиксированную максимальную скорость, скорость работы конвейерного компьютера можно увеличить или уменьшить, изменяя количество каскадов в конвейере. Чем больше каскадов, тем меньше работы выполняет каждый каскад, и, следовательно, тем меньше задержек от логических элементов , и тем выше может быть его тактовая частота.

Конвейерная модель компьютера часто оказывается наиболее экономичной, если стоимость измеряется количеством логических элементов на инструкцию в секунду. В каждый момент времени инструкция находится только на одном этапе конвейера, и в среднем этап конвейера обходится дешевле, чем многоцикловый компьютер. Кроме того, при качественной сборке большая часть логики конвейерного компьютера используется большую часть времени. В отличие от этого, компьютеры с внеочередным выполнением инструкций обычно имеют большое количество простаивающей логики в любой момент времени. Аналогичные расчеты обычно показывают, что конвейерный компьютер потребляет меньше энергии на инструкцию.

Однако конвейерный компьютер обычно сложнее и дороже, чем сопоставимый многоцикловый компьютер. Как правило, он имеет больше логических элементов, регистров и более сложный блок управления. Аналогичным образом, он может потреблять больше энергии в целом, но меньше энергии на одну инструкцию. Процессоры с внеочередным выполнением инструкций обычно могут выполнять больше инструкций в секунду, поскольку они могут выполнять несколько инструкций одновременно.

В конвейерном компьютере блок управления обеспечивает запуск, продолжение и остановку потока инструкций в соответствии с командами программы. Данные инструкций обычно передаются через конвейерные регистры от одного этапа к другому, при этом для каждого этапа используется несколько обособленный блок управляющей логики. Блок управления также гарантирует, что инструкция на каждом этапе не повлияет на работу инструкций на других этапах. Например, если двум этапам необходимо использовать одни и те же данные, управляющая логика гарантирует, что их использование будет выполнено в правильной последовательности.

При эффективной работе конвейерный компьютер обрабатывает одну инструкцию на каждом этапе. В этом случае он обрабатывает все инструкции одновременно. За каждый тактовый цикл он может завершить примерно одну инструкцию. Но когда программа переключается на другую последовательность инструкций, конвейеру иногда приходится отбрасывать обрабатываемые данные и перезапускать процесс. Это называется «задержкой».

Значительная часть конструкции конвейерного компьютера предотвращает интерференцию между этапами и уменьшает задержки.

Количество шагов

Количество зависимых шагов зависит от архитектуры машины. Например:

  • В рамках проекта IBM Stretch 1956–1961 годов были предложены термины Fetch, Decode и Execute, которые стали общепринятыми.
  • Классический RISC-конвейер включает в себя:
    1. Получение инструкции
    2. Декодирование инструкции и выборка регистра
    3. Выполнять
    4. Доступ к памяти
    5. Зарегистрировать обратную запись
  • Микроконтроллеры Atmel AVR и PIC имеют двухступенчатый конвейер обработки данных.
  • Во многих конструкциях используются конвейеры длиной в 7, 10 и даже 20 ступеней (как, например, в процессоре Intel Pentium 4 ).
  • Более поздние ядра NetBurst "Prescott" и "Cedar Mill" от Intel, используемые в последних моделях Pentium 4 и их производных Pentium D и Xeon , имеют длинный 31-ступенчатый конвейер.
  • Ускоренный сетевой процессор X10q имеет конвейер длиной более тысячи этапов, хотя в данном случае 200 из этих этапов представляют собой независимые ЦП с индивидуально запрограммированными инструкциями. Об этом говорит сайт https://intellect.icu . Остальные этапы используются для координации доступа к памяти и встроенным функциональным блокам. [ 1 ] [ 2 ]

По мере того, как конвейер становится «глубже» (с большим количеством зависимых шагов), данный шаг может быть реализован с помощью более простой схемы, что может позволить процессору работать быстрее. [ 3 ] Такие конвейеры могут называться суперконвейерами. [ 4 ]

Процессор считается полностью конвейерным , если он может считывать инструкцию на каждом такте. Таким образом, если некоторые инструкции или условия требуют задержек, препятствующих считыванию новых инструкций, процессор не является полностью конвейерным.

История

Первые примеры применения конвейерной обработки данных были в проекте ILLIAC II и проекте IBM Stretch , хотя упрощенная версия использовалась ранее в Z1 в 1939 году и Z3 в 1941 году . [ 5 ]

Конвейерная обработка данных всерьез началась в конце 1970-х годов в суперкомпьютерах , таких как векторные процессоры и матричные процессоры. Одним из первых суперкомпьютеров была серия Cyber, созданная компанией Control Data Corporation. Ее главный архитект, Сеймур Крей , позже возглавил Cray Research. Крей разработал линейку суперкомпьютеров XMP, используя конвейерную обработку как для функций умножения, так и для функций сложения/вычитания. Позже компания Star Technologies добавила параллелизм (несколько конвейерных функций, работающих параллельно), разработанный Роджером Ченом. В 1984 году Star Technologies добавила конвейерную схему деления, разработанную Джеймсом Брэдли.

Конвейерная обработка не ограничивалась суперкомпьютерами. В 1976 году мэйнфрейм общего назначения серии 470 корпорации Amdahl имел 7-шаговый конвейер и запатентованную схему предсказания ветвлений. Конвейерная обработка, являющаяся центральным элементом философии проектирования RISC [ 6 ] , к середине 1980-х годов также внедрялась разработчиками в традиционные архитектуры CISC. [ 7 ]

Hazard Опасности (Конфликты конвейера)

Модель последовательного выполнения предполагает, что каждая инструкция завершается до начала следующей; это предположение неверно для конвейерного процессора. Ситуация, когда ожидаемый результат является проблематичным, называется конфликтом . Представьте себе следующие две инструкции для регистров, предназначенные для гипотетического процессора:

1: добавить 1 к R5
2: скопировать R5 в R6

Если процессор имеет 5 шагов, перечисленных в исходной иллюстрации («Базовый пятиступенчатый конвейер» в начале статьи), инструкция 1 будет выбрана в момент времени t1 , и ее выполнение завершится в момент времени t5 . Инструкция 2 будет выбрана в момент времени t2 и завершится в момент времени t6 . Первая инструкция может записать увеличенное число в регистр R5 на пятом шаге (обратная запись в регистр) в момент времени t5 . Но вторая инструкция может получить число из R5 (для копирования в R6) на втором шаге (декодирование инструкции и выборка из регистра) в момент времени t3 . По-видимому, первая инструкция к этому моменту не успеет увеличить значение. Приведенный выше код создает конфликтную ситуацию.

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

Обходные пути

В некоторых ранних процессорах DSP и RISC документация советовала программистам избегать подобных зависимостей в смежных и почти смежных инструкциях (так называемых слотах задержки ), или указывала, что вторая инструкция использует старое значение, а не желаемое (в приведенном выше примере процессор мог, вопреки интуиции, скопировать неинкрементированное значение), или указывала, что используемое значение не определено. У программиста может быть несвязанная работа, которую процессор может выполнить тем временем; или, чтобы обеспечить правильные результаты, программист может вставлять в код NOP-операции , частично сводя на нет преимущества конвейерной обработки.

Решения

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

  • Конвейер может остановиться или прекратить планирование новых инструкций до тех пор, пока не будут доступны необходимые значения. Это приводит к появлению пустых слотов в конвейере, или «пузырей» , в которых работа не выполняется.
  • Дополнительный путь передачи данных может быть добавлен, чтобы направлять вычисленное значение к будущей инструкции в другом месте конвейера до того, как инструкция, которая его произвела, будет полностью выведена из эксплуатации; этот процесс называется пересылкой операндов . [ 8 ] [ 9 ]
  • Процессор может находить другие инструкции, которые не зависят от текущих и могут быть немедленно выполнены без конфликтов; эта оптимизация известна как внеочередное выполнение инструкций .

Ветви

Выход за рамки обычной последовательности инструкций часто сопряжен с конфликтом. Если процессор не может осуществить переход за один цикл времени, конвейер будет продолжать последовательное получение инструкций. Такие инструкции не могут быть реализованы, поскольку программист перенаправил управление на другую часть программы.

Условный переход еще более проблематичен. Процессор может перейти или не перейти в другую очередь в зависимости от еще не выполненного вычисления. Различные процессоры могут застревать, пытаться предсказать переход и могут начать выполнение двух разных последовательностей программ ( немедленное выполнение ), каждая из которых предполагает, что переход выполнен или нет, отбрасывая всю работу, относящуюся к неверному предположению. [ a ]

Процессор с реализацией предсказания ветвлений, которая обычно делает правильные предсказания, может минимизировать потери производительности из-за ветвлений. Однако, если предсказания ветвлений неверны, это может создать дополнительную нагрузку на процессор, например, привести к удалению из конвейера неправильного пути выполнения кода, который начал выполнение, прежде чем возобновить его в правильном месте.

Программы, написанные для конвейерного процессора, намеренно избегают ветвлений, чтобы минимизировать возможную потерю скорости. Например, программист может обрабатывать обычный случай с помощью последовательного выполнения и переходить к ветвлениям только при обнаружении необычных случаев. Использование таких программ, как gcov , для анализа покрытия кода позволяет программисту измерить, как часто фактически выполняются определенные ветви, и получить информацию для оптимизации кода. В некоторых случаях программист может обрабатывать как обычный, так и необычный случай с помощью кода без ветвлений .

Особые ситуации

Самомодулирующиеся программы
Техника самомодифицирующегося кода может быть проблематичной на конвейерном процессоре. В этой технике одним из эффектов программы является изменение собственных последующих инструкций. Если процессор имеет кэш инструкций , исходная инструкция может быть уже скопирована в очередь предварительной выборки , и изменение не вступит в силу. Некоторые процессоры, такие как Zilog Z280, могут настраивать свою кэш-память на кристалле для выборки только данных или как часть своего обычного адресного пространства памяти, и таким образом избегать подобных трудностей с самомодифицирующимися инструкциями.
Непрерываемые инструкции
Инструкция может быть непрерываемой для обеспечения своей атомарности , например, когда она меняет местами два элемента. Последовательный процессор допускает прерывания между инструкциями, но конвейерный процессор перекрывает инструкции, поэтому выполнение непрерываемой инструкции делает непрерываемыми и части обычных инструкций. Ошибка Cyrix, вызывающая кому , приводила к зависанию одноядерной системы, использующей бесконечный цикл, в котором непрерываемая инструкция всегда находилась в конвейере.

Вопросы проектирования

Скорость
Конвейерная обработка обеспечивает занятость всех частей процессора и увеличивает объем полезной работы, которую процессор может выполнить за заданное время. Конвейерная обработка обычно сокращает время цикла процессора и увеличивает пропускную способность инструкций. Преимущество в скорости уменьшается в той степени, в которой выполнение сталкивается с опасностями , требующими замедления выполнения ниже оптимальной скорости. Неконвейерный процессор выполняет только одну инструкцию за раз. Начало следующей инструкции задерживается не из-за опасностей, а безусловно.
Необходимость организации всей работы конвейерным процессором в модульные этапы может потребовать дублирования регистров, что увеличивает задержку некоторых инструкций.
Экономика
Упрощение каждого зависимого шага позволяет конвейерной обработке выполнять сложные операции более экономично, чем добавление сложных схем, например, для численных вычислений. Однако процессор, который не стремится к увеличению скорости за счет конвейерной обработки, может быть проще и дешевле в производстве.
Предсказуемость
По сравнению с средами, где программисту необходимо избегать или обходить опасности, использование неконвейерного процессора может упростить программирование и обучение программистов. Неконвейерный процессор также упрощает прогнозирование точного времени выполнения заданной последовательности инструкций.

Иллюстрированный пример

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

Выполнение выглядит следующим образом:

Конвейерная обработка инструкций процессором или микроконтроллером
Типовой 4-этапный конвейер; цветные прямоугольники представляют собой инструкции, независимые друг от друга.
Clock Исполнение
0
  • Четыре инструкции ожидают выполнения.
1
  • Зеленая инструкция извлекается из памяти.
2
  • Зеленая инструкция расшифрована
  • Инструкция, выделенная фиолетовым цветом, извлекается из памяти.
3
  • Зеленая инструкция выполняется (фактическая операция выполняется)
  • Фиолетовая инструкция расшифрована.
  • Инструкция синего цвета получена.
4
  • Результаты выполнения зеленой инструкции записываются обратно в регистровый файл или память.
  • Фиолетовая инструкция выполняется.
  • Синяя инструкция расшифрована.
  • Красная инструкция получена.
5
  • Выполнение экологических инструкций завершено.
  • Фиолетовая инструкция возвращается.
  • Синяя инструкция выполняется.
  • Красная инструкция расшифрована.
6
  • Выполнение фиолетовой инструкции завершено.
  • Синяя инструкция возвращается обратно.
  • Красная инструкция выполнена.
7
  • Выполнение синей инструкции завершено.
  • Красная инструкция возвращается.
8
  • Выполнение красной инструкции завершено.
9
  • Выполнение всех четырех инструкций завершено.

Конвейерный пузырь

Конвейерная обработка инструкций процессором или микроконтроллером
В третьем цикле возникает задержка выполнения.

Конвейерный процессор может справляться с конфликтами, останавливаясь и создавая «пузырь» в конвейере, в результате чего происходит один или несколько циклов, в течение которых ничего полезного не происходит.

На иллюстрации справа, в цикле 3, процессор не может декодировать фиолетовую инструкцию, возможно, потому что он определяет, что декодирование зависит от результатов, полученных при выполнении зеленой инструкции. Зеленая инструкция может перейти к этапу выполнения, а затем к этапу обратной записи в соответствии с расписанием, но фиолетовая инструкция задерживается на один цикл на этапе выборки. Синяя инструкция, которая должна была быть выбрана во время цикла 3, задерживается на один цикл, как и следующая за ней красная инструкция.

Из-за пузырька (синие овалы на иллюстрации) схема декодирования процессора простаивает во время 3-го цикла. Схема выполнения простаивает во время 4-го цикла, а схема обратной записи простаивает во время 5-го цикла.

Когда пузырь выходит из конвейера (на 6-м цикле), нормальное выполнение возобновляется. Но теперь все отстает на один цикл. Для полного выполнения четырех инструкций, показанных цветами, потребуется 8 циклов (с 1-го по 8-й). [ b ]

Вау!! 😲 Ты еще не читал? Это зря!

  • штат ожидания
  • Классический RISC-конвейер
  • Конвейерный пузырь
  • Hazard (Конфликты конвейера)

Исследование, описанное в статье про вычислительный конвейер, подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое вычислительный конвейер, конвейерная обработка и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Теория цифровых автоматов

Ответы на вопросы для самопроверки пишите в комментариях, мы проверим, или же задавайте свой вопрос по данной теме.

создано: 2026-05-04
обновлено: 2026-05-11
1



Помог ли вам этот ответ?
Нажмите оценку и напишите коротко почему. Так мы сможем сделать следующие ответы точнее и полезнее.
Насколько вы довольны ответом?
Ваш отзыв напрямую влияет на качество следующих подсказок и ответов.


Поделиться:
Пожаловаться

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Теория цифровых автоматов

Термины: Теория цифровых автоматов