stringtranslate.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

История

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

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

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

Опасности

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

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

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

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

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

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

Решения

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

Ветви

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

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

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

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

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

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

Рекомендации по проектированию

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

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

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

Исполнение следующее:

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

Трубопроводный пузырь

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

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

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

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

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

Смотрите также

Примечания

  1. ^ Ранние конвейерные процессоры без какой-либо из этих эвристик, такие как процессор PA-RISC компании Hewlett-Packard , справлялись с опасностями, просто предупреждая программиста; в этом случае одна или несколько инструкций, следующих за ветвью, будут выполнены независимо от того, была ли ветвь выбрана. Это может быть полезно; например, после вычисления числа в регистре за условным переходом может последовать загрузка в регистр значения, более полезного для последующих вычислений как в случае ветвления, так и в случае отсутствия ветвления.
  2. ^ Однако обратите внимание, что даже с пузырьком процессор по-прежнему способен - по крайней мере, в этом случае - выполнять последовательность инструкций намного быстрее, чем неконвейерный процессор.

Рекомендации

  1. ^ Глазковски, Питер (18 августа 2003 г.). «Xtraordinary NPU от Xelerated — первый в мире пакетный процессор со скоростью 40 Гбит/с, имеющий 200 процессоров». Отчет микропроцессора . 18 (8): 12–14 . Проверено 20 марта 2017 г.
  2. ^ «Xelerated привносит программируемую технологию 40 Гбит / с в основной Ethernet» . 31 мая 2003 г.
  3. ^ Джон Пол Шен, Микко Х. Липасти (2004). Современный дизайн процессора. МакГроу-Хилл Профессионал . ISBN 9780070570641.
  4. ^ Сунгу Ли (2000). Проектирование компьютеров и других сложных цифровых устройств. Прентис Холл . ISBN 9780130402677.
  5. ^ Рохас, Рауль (апрель – июнь 1997 г.). «Наследие Конрада Цузе: архитектура Z1 и Z3» (PDF) . IEEE Анналы истории вычислений . 19 (2): 5–16. дои : 10.1109/85.586067. Архивировано (PDF) из оригинала 3 июля 2022 г. Проверено 3 июля 2022 г.(12 страниц)
  6. ^ «CMSC 411, лекция 19, Конвейерная пересылка данных» . Факультет компьютерных наук и электротехники округа Балтимор Университета Мэриленда . Проверено 22 января 2020 г.
  7. ^ «Высокопроизводительные вычисления, Заметки 11 класса». hpc.serc.iisc.ernet.in. Сентябрь 2000 г. Архивировано из оригинала 27 декабря 2013 г. Проверено 8 февраля 2014 г.

Внешние ссылки