Что такое конвейеризация?

В отличие от рисунка выше, на котором показан канальный конвейер, сегодня мы собираемся обсудить конвейер команд в микроконтроллере 8086. Формальное определение конвейера инструкций выглядит примерно так:

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

Основы

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

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

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

Опасности при прокладке трубопроводов

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

Почему возникают опасности?

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

Давайте возьмем пример для лучшего понимания. Допустим, вы и ваш друг стоите на двух концах здания. Вы оба создаете конвейер. Теперь схема такова: вы называете имя своего друга, после того, как он услышит свое имя, он выкрикивает ваше имя, и процесс продолжается. Теперь человек, живущий на среднем этаже, кричит в то же самое время, когда кричит ваш друг (это может быть еще одна инструкция дальше по конвейеру), так что вы просто слышите «ЗАТКНИСЬ!» но не ваше имя, теперь и вы, и ваш друг пытаетесь слушать ваши соответствующие имена, но ничего не происходит, и парень на среднем этаже счастлив, это опасность в конвейерной обработке

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

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

Типы опасностей

Есть в основном 3 типа опасностей, которые беспокоят компьютерных инженеров уже много лет.

  1. Опасности данных
  2. Опасности отделения
  3. Структурные опасности

Опасности данных

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

  1. Чтение после записи (RAW) — истинная зависимость
    Опасность данных RAW возникает, когда инструкция ссылается на вычисленный или полученный результат, который еще не был рассчитан или получен. Это может произойти из-за того, что предыдущая инструкция была обработана конвейером лишь частично.
  2. Запись после чтения (WAR) — защита от зависимостей
    Угроза данных, вызванная записью после чтения (WAR), указывает на трудности с параллельным выполнением.
  3. Запись после записи (WAW) — зависимость вывода
    В среде с параллельным выполнением может возникнуть опасность записи после записи (WAW).

Опасности отделения

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

Структурные опасности

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

Обращение с опасностями

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

Обработка опасностей данных

  1. Переадресация: модифицирует конвейер с помощью определенной схемы. Этот метод работает, потому что для прохождения требуемых значений по проводу требуется меньше времени, чем для вычисления результата сегментом конвейера.
  2. Переупорядочение кода. Чтобы реорганизовать код, нам потребуется специальное программное обеспечение. Этот тип программного обеспечения известен как аппаратно-зависимый компилятор.
  3. Вставка задержки.Приостановка — это цикл в конвейере без новых входных данных. Он добавляет в конвейер одну или несколько установок (инструкций без операции), задерживая выполнение текущего инструкция до тех пор, пока требуемый операнд не будет записан в регистровый файл; однако эта стратегия снижает эффективность и пропускную способность конвейера.

Устранение опасностей филиала

  1. Заморозить/сбросить: самый простой способ справиться с ветвями — заморозить или сбросить конвейер, удерживая или удаляя все инструкции, следующие за ветвью, до тех пор, пока не будет определен пункт назначения.
  2. Метод Not Taken: Обработка каждой ветки как невыполненной и простое разрешение аппаратному обеспечению продолжать работу, как если бы ветвь не была выполнена, является более производительным и чуть более сложным методом. Сложность этого метода связана с необходимостью понять, когда инструкция может повлиять на состояние и как «откатить» такое изменение.
  3. Метод "уже занято":другой вариант — рассматривать каждую ветвь так, как если бы она уже была занята. Мы предполагаем, что ветвь принята, и начинаем выборку и выполнение по целевому адресу, как только ветвь декодируется и целевой адрес вычисляется.
  4. Прогнозирование ветвления.Мы можем использовать прогнозирование ветвления, чтобы делать разумные прогнозы о том, какие инструкции следует вставлять, а всплывающее окно конвейера потребуется только в том случае, если прогноз ошибочен.

Устранение структурных опасностей

  1. Вставка останова.Как упоминалось ранее, наиболее эффективный способ избавиться от структурных опасностей — это вставить цикл останова или конвейерный пузырь.
  2. Конвейеризация ресурсов: использование отдельной кэш-памяти, разделение операций чтения и записи в регистр в тактовом цикле и т. д.

Заключение

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

Если мои статьи интересны, вы можете найти другие мои статьи здесь.