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

Базовый пятиступенчатый конвейер
Цикл часов
Instr. Нет.
1234567
1ЕСЛИЯ БЫБЫВШИЙMEMВБ
2ЕСЛИЯ БЫБЫВШИЙMEMВБ
3ЕСЛИЯ БЫБЫВШИЙMEMВБ
4ЕСЛИЯ БЫБЫВШИЙMEM
5ЕСЛИЯ БЫБЫВШИЙ
(IF = выборка инструкции, ID = декодирование инструкции, EX = выполнение, MEM = доступ к памяти, WB = обратная запись в регистр).

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

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

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

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

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

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

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

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

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

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

Кол-во ступеней

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

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

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

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

История

Основное использование конвейерной обработки было в ИЛЛИАК II проект и IBM Stretch проект, хотя простая версия использовалась ранее в Z1 в 1939 г. и Z3 в 1941 г.[5]

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

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

Опасности

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

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

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

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

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

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

Решения

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

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

ветви

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

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

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

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

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

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

Соображения по дизайну

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

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

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

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

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

Пузырь трубопровода

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

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

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

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

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

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

Примечания

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

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

  1. ^ Гласковский, Питер (18 августа 2003 г.). «Экстраординарный NPU Xelerated - первый в мире пакетный процессор 40 Гбит / с с 200 процессорами». Отчет микропроцессора. 18 (8): 12–14. Получено 20 марта 2017.
  2. ^ https://www.eetimes.com/xelerated-brings-programmable-40-gbits-s-technology-to-the-mainstream-ethernet/#
  3. ^ Джон Пол Шен, Микко Х. Липасти (2004). Современный дизайн процессора. McGraw-Hill Professional. ISBN  9780070570641.
  4. ^ Сунгу Ли (2000). Дизайн компьютеров и других сложных цифровых устройств. Prentice Hall. ISBN  9780130402677.
  5. ^ Рауль Рохас (1997). «Наследие Конрада Цузе: Архитектура Z1 и Z3». IEEE Annals of the History of Computing. 19 (2).
  6. ^ «CMSC 411, лекция 19, Конвейерная передача данных». Университет Мэриленда, факультет информатики и электротехники округа Балтимор. Получено 2020-01-22.
  7. ^ «Высокопроизводительные вычисления, Примечания класса 11». hpc.serc.iisc.ernet.in. Сентябрь 2000 г. Архивировано с оригинал на 2013-12-27. Получено 2014-02-08.

внешняя ссылка