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

редактировать
метод улучшения параллелизма на уровне инструкций

Базовый пятиступенчатый конвейер
Тактовый цикл Instr. №1234567
1IFIDEXMEMWB
2IFIDEXMEMWB
3IFIDEXMEMWB
4IFIDEXMEM
5IFIDEX
(IF = выборка инструкции, ID = декодирование инструкции, EX = выполнение, MEM = доступ к памяти, WB = обратная запись регистра).

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

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

Содержание
  • 1 Концепция и мотивация
    • 1.1 Количество шагов
  • 2 История
    • 2.1 Опасности
      • 2.1.1 Обходные пути
      • 2.1.2 Решения
    • 2.2 Филиалы
    • 2.3 Особые ситуации
  • 3 Соображения по дизайну
  • 4 Иллюстрированный пример
    • 4.1 Пузырьк конвейера
  • 5 См. Также
  • 6 Примечания
  • 7 Ссылки
  • 8 Внешние ссылки
Концепция и мотивация

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

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

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

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

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

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

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

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

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

  • В проекте 1956–1961 IBM Stretch были предложены термины «выборка, декодирование и выполнение», которые стали общепринятыми.
  • классический конвейер RISC включает :
    1. Выборка команд
    2. Декодирование команд и выборка из регистров
    3. Выполнить
    4. Доступ к памяти
    5. Обратная запись в регистр
  • Atmel AVR и микроконтроллер PIC имеют двухступенчатый конвейер.
  • Многие конструкции включают конвейеры длиной до 7, 10 и даже 20 ступеней (как в Intel Pentium 4 ).
  • Более поздние ядра Prescott и Cedar Mill Netburst от Intel, используемые в последних моделях Pentium 4 и их Pentium D и производные от Xeon имеют длинный 31-этапный конвейер.
  • Сетевой процессор Xelerated X10q имеет конвейер длиной более тысячи этапов, хотя в данном случае 200 из этих этапов представляют собой независимые Процессоры с индивидуально запрограммированными инструкциями. Остальные этапы используются для координации доступа к памяти и внутри кристалла.

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

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

История

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

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

Конвейерная обработка не ограничивалась суперкомпьютерами. В 1976 году универсальный мэйнфрейм компании Amdahl Corporation серии 470 имел 7-ступенчатый конвейер и запатентованную схему прогнозирования ветвлений.

Опасности

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

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

Если у процессора есть 5 шагов, перечисленных на начальном рисунке, инструкция 1 будет получен в момент времени t 1, и его выполнение будет завершено в t 5. Инструкция 2 будет выбрана в t 2 и будет завершена в t 6. Первая инструкция может внести увеличенное число в R5 в качестве своего пятого шага (обратная запись регистра) в t 5. Но вторая инструкция может получить номер от R5 (для копирования в R6) на своем втором этапе (декодирование инструкции и выборка регистра) в момент времени t 3. Кажется, что первая инструкция к тому времени не увеличила бы значение. Приведенный выше код вызывает опасность.

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

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

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

Решения

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

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

Ветви

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

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

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

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

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

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

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

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

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

Конвейерная пузырек

Пузырь в цикле 3 задерживает выполнение.

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

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

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

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

См. Также
Примечания
Ссылки
Внешние ссылки
На Викискладе есть медиафайлы, связанные с Конвейер (компьютерное оборудование).
В Викиучебнике есть книга по теме: Проектирование микропроцессоров / конвейерные процессоры
Последняя правка сделана 2021-05-24 03:39:40
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте