Конвейерная обработка инструкций
Эта статья нуждается в дополнительных цитатах для проверки . ( май 2016 г. ) |
Тактовый цикл Инстр. Нет.
|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
1 | ЕСЛИ | ИДЕНТИФИКАТОР | БЫВШИЙ | МЕМ | ВБ | ||
2 | ЕСЛИ | ИДЕНТИФИКАТОР | БЫВШИЙ | МЕМ | ВБ | ||
3 | ЕСЛИ | ИДЕНТИФИКАТОР | БЫВШИЙ | МЕМ | ВБ | ||
4 | ЕСЛИ | ИДЕНТИФИКАТОР | БЫВШИЙ | МЕМ | |||
5 | ЕСЛИ | ИДЕНТИФИКАТОР | БЫВШИЙ | ||||
(IF = выборка инструкции, ID = декодирование инструкции, EX = выполнение, MEM = доступ к памяти, WB = обратная запись в регистр).
В четвертом такте (зеленый столбец) самая ранняя инструкция находится на стадии MEM, а последняя инструкция еще не поступила в конвейер. |
В компьютерной инженерии конвейеризация инструкций — это метод реализации параллелизма на уровне команд в одном процессоре. Конвейеризация пытается заставить каждую часть процессора быть занятой какой-либо инструкцией, разделяя входящие инструкции на серию последовательных шагов (одноименный « конвейер »), выполняемых разными процессорными модулями , при этом разные части инструкций обрабатываются параллельно.
и мотивация Концепция
В конвейерном компьютере инструкции проходят через центральный процессор (ЦП) поэтапно. Например, он может иметь один этап для каждого шага цикла фон Неймана : выборка инструкции, выборка операндов, выполнение инструкции, запись результатов. Конвейерный компьютер обычно имеет «конвейерные регистры» после каждого этапа. Они хранят информацию из инструкций и вычислений, чтобы логические элементы следующего этапа могли выполнить следующий шаг.
Такое расположение позволяет ЦП выполнять инструкцию в каждом такте. Обычно каскады с четными номерами работают на одном фронте прямоугольных импульсов, а каскады с нечетными номерами — на другом фронте. Это обеспечивает большую ЦП пропускную способность , чем многоцикловый компьютер при заданной тактовой частоте , но может увеличить задержку из-за дополнительных затрат на сам процесс конвейерной обработки. Кроме того, хотя электронная логика имеет фиксированную максимальную скорость, конвейерный компьютер можно сделать быстрее или медленнее, изменяя количество этапов в конвейере. При большем количестве каскадов каждый каскад выполняет меньше работы, поэтому каскад имеет меньше задержек от логических вентилей и может работать с более высокой тактовой частотой.
Конвейерная модель компьютера часто является наиболее экономичной, когда стоимость измеряется как логические элементы на инструкцию в секунду. В каждый момент времени инструкция находится только на одном этапе конвейера, и в среднем один этап конвейера обходится дешевле, чем многотактный компьютер. Кроме того, если все сделано правильно, большая часть конвейерной логики компьютера используется большую часть времени. Напротив, вышедшие из строя компьютеры обычно в любой момент времени имеют большое количество простаивающей логики. Подобные расчеты обычно показывают, что конвейерный компьютер использует меньше энергии на одну команду.
Однако конвейерный компьютер обычно сложнее и дороже, чем сопоставимый многоцикловый компьютер. Обычно он имеет больше логических элементов, регистров и более сложный блок управления. Подобным образом он может использовать больше общей энергии, но при этом использовать меньше энергии на команду. Неисправные процессоры обычно могут выполнять больше инструкций в секунду, поскольку они могут выполнять несколько инструкций одновременно.
В конвейерном компьютере блок управления обеспечивает запуск, продолжение и остановку потока по команде программы. Данные команд обычно передаются в регистрах конвейера от одного этапа к другому с несколько отдельной частью управляющей логики для каждого этапа. Блок управления также гарантирует, что инструкции на каждом этапе не вредят работе инструкций на других этапах. Например, если два этапа должны использовать один и тот же фрагмент данных, логика управления гарантирует, что использование выполняется в правильной последовательности.
При эффективной работе конвейерный компьютер будет иметь инструкцию на каждом этапе. Затем он работает над всеми этими инструкциями одновременно. Он может выполнить примерно одну инструкцию за каждый такт своего такта. Но когда программа переключается на другую последовательность инструкций, конвейер иногда должен отбросить обрабатываемые данные и перезапуститься. Это называется «стойло».
Большая часть конструкции конвейерного компьютера предотвращает помехи между этапами и уменьшает задержки.
Количество шагов [ править ]
Количество зависимых шагов зависит от архитектуры машины. Например:
- 1956–61 годов В проекте IBM Stretch были предложены термины «Выборка», «Декодирование» и «Выполнение», которые стали общепринятыми.
- Классический конвейер RISC включает в себя:
- Получение инструкции
- Декодирование инструкций и выборка регистров
- Выполнять
- Доступ к памяти
- Зарегистрируйтесь, отпишитесь
- Atmel AVR и микроконтроллер PIC имеют двухступенчатый конвейер.
- Многие конструкции включают конвейеры длиной до 7, 10 и даже 20 этапов (как в Intel Pentium 4 ).
- Более поздние ядра NetBurst «Prescott» и «Cedar Mill» от Intel, используемые в последних моделях Pentium 4 и их производных от Pentium D и Xeon , имеют длинный 31-ступенчатый конвейер.
- Сетевой процессор Xelerated X10q имеет конвейер длиной более тысячи этапов, хотя в данном случае 200 из этих этапов представляют собой независимые ЦП с индивидуально запрограммированными инструкциями. Остальные этапы используются для координации доступа к памяти и встроенным функциональным блокам. [1] [2] Эта статья нуждается в дополнительных цитатах для проверки . ( октябрь 2020 г. )
Поскольку конвейер делается «более глубоким» (с большим количеством зависимых шагов), данный шаг может быть реализован с помощью более простой схемы, что может позволить тактовой частоте процессора работать быстрее. [3] Такие трубопроводы можно назвать супертрубопроводами. [4]
Процессор называется полностью конвейерным , если он может получать инструкции в каждом цикле. Таким образом, если некоторые инструкции или условия требуют задержек, которые препятствуют выборке новых инструкций, процессор не является полностью конвейерным.
История [ править ]
Этот раздел нуждается в дополнительных цитатах для проверки . ( Март 2019 г. ) |
Основополагающее использование конвейерной обработки было в проекте 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: add 1 to R5 2: copy R5 to R6
Если процессор имеет 5 шагов, перечисленных на исходной иллюстрации («Базовый пятиэтапный конвейер» в начале статьи), инструкция 1 будет выбрана в момент времени t 1 и ее выполнение будет завершено в момент t 5 . Инструкция 2 будет получена в момент времени 2 и будет завершена в момент времени 6 . Первая инструкция может поместить увеличенное число в R5 на пятом этапе (обратная запись регистра) в момент t 5 . Но вторая инструкция может получить номер из R5 (для копирования в R6) на втором этапе (декодирование инструкции и выборка регистра) в момент времени t 3 . Кажется, что к тому времени первая инструкция не увеличила бы значение. Приведенный выше код вызывает опасность.
Написание компьютерных программ на компилируемом языке может не вызывать этих проблем, поскольку компилятор может быть спроектирован так, чтобы генерировать машинный код, избегающий опасностей.
Обходные пути [ править ]
В некоторых ранних процессорах DSP и RISC документация советует программистам избегать таких зависимостей в соседних и почти соседних инструкциях (называемых слотами задержки ) или заявляет, что вторая инструкция использует старое значение, а не желаемое значение (в приведенном выше примере процессор может нелогично скопировать неувеличенное значение) или объявляет, что используемое им значение не определено. У программиста может быть несвязанная работа, которую в это время может выполнять процессор; или, чтобы гарантировать правильные результаты, программист может вставлять NOP в код, частично сводя на нет преимущества конвейерной обработки.
Решения [ править ]
Конвейерные процессоры обычно используют три метода для правильной работы, когда программист предполагает, что каждая инструкция завершается до начала следующей:
- Конвейер может остановиться или прекратить планирование новых инструкций до тех пор, пока не станут доступны необходимые значения. Это приводит к появлению пустых слотов в конвейере или «пузырей» , в которых не выполняется никакая работа.
- Можно добавить дополнительный путь данных, который направляет вычисленное значение в будущую инструкцию в другом месте конвейера до того, как инструкция, создавшая его, будет полностью удалена, - этот процесс называется пересылкой операндов . [6] [7]
- Процессор может найти другие инструкции, которые не зависят от текущих и которые могут быть немедленно выполнены без каких-либо опасностей; такая оптимизация известна как выполнение вне очереди .
Филиалы [ править ]
Ответвление от обычной последовательности команд часто сопряжено с опасностью. Если процессор не сможет выполнить ветвь за один временной цикл, конвейер продолжит последовательную выборку инструкций. Таким инструкциям нельзя позволить вступить в силу, поскольку программист переключил управление на другую часть программы.
Условное ветвление еще более проблематично. Процессор может разветвляться, а может и не разветвляться, в зависимости от еще не выполненных вычислений. Различные процессоры могут остановиться, попытаться предсказать ветвление и начать выполнять две разные программные последовательности ( активное выполнение ), каждая из которых предполагает, что ветвь выбрана или нет, отбрасывая всю работу, связанную с неправильным предположением. [а]
Процессор с реализацией прогнозирования ветвления, который обычно делает правильные прогнозы, может минимизировать снижение производительности из-за ветвления. Однако если ветки прогнозируются плохо, это может создать дополнительную работу для процессора, например, сбросить из конвейера неправильный путь кода, выполнение которого началось, прежде чем возобновить выполнение в правильном месте.
Программы, написанные для конвейерного процессора, намеренно избегают ветвления, чтобы минимизировать возможную потерю скорости. Например, программист может обрабатывать обычный случай последовательным выполнением и переходить только при обнаружении необычных случаев. Использование таких программ, как gcov, для анализа покрытия кода позволяет программисту измерить, как часто фактически выполняются отдельные ветки, и получить представление о том, как оптимизировать код. В некоторых случаях программист может обрабатывать как обычный случай, так и необычный случай с кодом без ветвей .
Особые ситуации [ править ]
- Самомодифицирующиеся программы
- Техника самомодифицирующегося кода может быть проблематичной на конвейерном процессоре. В этом методе одним из эффектов программы является изменение собственных последующих инструкций. Если процессор имеет кэш инструкций , исходная инструкция, возможно, уже была скопирована в очередь ввода предварительной выборки , и модификация не вступит в силу. Некоторые процессоры, такие как Zilog Z280, могут настраивать свою встроенную кэш-память для выборки только данных или как часть обычного адресного пространства памяти и избегать таких трудностей с помощью самомодифицирующихся инструкций.
- Бесперебойные инструкции
- Инструкция может быть бесперебойной, чтобы гарантировать ее атомарность , например, когда она меняет местами два элемента. Последовательный процессор допускает прерывания между инструкциями, но конвейерный процессор перекрывает инструкции, поэтому выполнение непрерываемой инструкции делает части обычных инструкций также бесперебойными. Ошибка Cyrix coma приводила к зависанию одноядерной системы с использованием бесконечного цикла, в котором в конвейере всегда находилась непрерываемая инструкция.
Аспекты дизайна [ править ]
- Скорость
- Конвейерная обработка сохраняет все части процессора занятыми и увеличивает объем полезной работы, которую процессор может выполнить за заданное время. Конвейерная обработка обычно сокращает время цикла процессора и увеличивает пропускную способность инструкций. Преимущество в скорости уменьшается до такой степени, что выполнение сталкивается с опасностями , которые требуют замедления выполнения ниже идеальной скорости. Неконвейерный процессор одновременно выполняет только одну инструкцию. Начало следующей инструкции задерживается не из-за опасностей, а безоговорочно.
- Необходимость конвейерного процессора организовать всю свою работу на модульные этапы может потребовать дублирования регистров, что увеличивает задержку некоторых инструкций.
- Экономика
- Упрощая каждый зависимый шаг, конвейерная обработка может выполнять сложные операции более экономично, чем добавление сложных схем, например, для численных расчетов. Однако процессор, который отказывается добиваться увеличения скорости с помощью конвейерной обработки, может быть проще и дешевле в производстве.
- Предсказуемость
- По сравнению со средами, где программисту необходимо избегать опасностей или обходить их, использование неконвейерного процессора может облегчить программирование и обучение программистов. Неконвейерный процессор также упрощает прогнозирование точного времени выполнения заданной последовательности инструкций.
Иллюстрированный пример [ править ]
Справа показан общий конвейер с четырьмя этапами: выборка, декодирование, выполнение и обратная запись. Верхнее серое поле — это список инструкций, ожидающих выполнения, нижнее серое поле — это список инструкций, выполнение которых завершено, а среднее белое поле — это конвейер.
Исполнение следующее:
Часы | Исполнение |
---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
Трубопроводный пузырь [ править ]
Конвейерный процессор может бороться с опасностями, останавливаясь и создавая пузыри в конвейере, что приводит к одному или нескольким циклам, в которых ничего полезного не происходит.
На иллюстрации справа в цикле 3 процессор не может декодировать фиолетовую инструкцию, возможно, потому, что процессор определяет, что декодирование зависит от результатов, полученных в результате выполнения зеленой инструкции. Зеленая инструкция может перейти к этапу выполнения, а затем к этапу обратной записи, как запланировано, но фиолетовая инструкция приостанавливается на один цикл на этапе выборки. Синяя инструкция, которая должна была быть получена во время цикла 3, остановлена на один такт, как и красная инструкция после нее.
Из-за пузырька (синие овалы на рисунке) схема декодирования процессора простаивает во время цикла 3. Его схема выполнения простаивает во время цикла 4, а схема обратной записи простаивает во время цикла 5.
Когда пузырь выходит из конвейера (в цикле 6), возобновляется нормальное выполнение. Но сейчас все происходит с опозданием на один цикл. Для полного выполнения четырех инструкций, показанных цветом, потребуется 8 циклов (циклы с 1 по 8), а не 7. [б]
См. также [ править ]
Примечания [ править ]
- ^ Ранние конвейерные процессоры без какой-либо из этих эвристик, такие как процессор PA-RISC компании Hewlett-Packard , справлялись с опасностями, просто предупреждая программиста; в этом случае одна или несколько инструкций, следующих за ветвью, будут выполнены независимо от того, была ли ветвь выбрана. Это может быть полезно; например, после вычисления числа в регистре за условным переходом может последовать загрузка в регистр значения, более полезного для последующих вычислений как в случае ветвления, так и в случае отсутствия ветвления.
- ^ Однако обратите внимание, что даже с пузырьком процессор по-прежнему способен - по крайней мере, в этом случае - выполнять последовательность инструкций намного быстрее, чем неконвейерный процессор.
Ссылки [ править ]
- ^ Глазковски, Питер (18 августа 2003 г.). «Xtraordinary NPU от Xelerated — первый в мире пакетный процессор со скоростью 40 Гбит/с, имеющий 200 процессоров» . Отчет микропроцессора . 18 (8): 12–14 . Проверено 20 марта 2017 г.
- ^ «Xelerated внедряет программируемую технологию 40 Гбит/с в основной Ethernet» . 31 мая 2003 г.
- ^ Джон Пол Шен, Микко Х. Липасти (2004). Современный дизайн процессора . МакГроу-Хилл Профессионал . ISBN 9780070570641 .
- ^ Сунгу Ли (2000). Проектирование компьютеров и других сложных цифровых устройств . Прентис Холл . ISBN 9780130402677 .
- ^ Рохас, Рауль (апрель – июнь 1997 г.). «Наследие Конрада Цузе: архитектура Z1 и Z3» (PDF) . IEEE Анналы истории вычислений . 19 (2): 5–16. дои : 10.1109/85.586067 . Архивировано (PDF) из оригинала 3 июля 2022 г. Проверено 3 июля 2022 г. (12 страниц)
- ^ «CMSC 411, лекция 19, Конвейерная пересылка данных» . Факультет компьютерных наук и электротехники округа Балтимор Университета Мэриленда . Проверено 22 января 2020 г.
- ^ «Высокопроизводительные вычисления. Конспект 11 класса» . hpc.serc.iisc.ernet.in. Сентябрь 2000 г. Архивировано из оригинала 27 декабря 2013 г. Проверено 8 февраля 2014 г.