Какова точка задержек? - программирование
Подтвердить что ты не робот

Какова точка задержек?

Итак, из моего понимания слотов задержки они возникают, когда вызывается команда ветвления, и следующая команда, следующая за веткой, также загружается из памяти. Какой в ​​этом смысл? Разве вы не ожидали, что код после того, как ветка не будет запущена, если ветка будет взята? Это экономить время, если ветвь не взята?

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

4b9b3361

Ответ 1

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

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

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

У ARM нет слота задержки, но он также создает иллюзию конвейера, заявляя, что счетчик программ - это две инструкции впереди. Любая операция, которая опирается на счетчик программ (pc-относительная адресация), должна вычислять смещение, используя компьютер, который состоит из двух инструкций, для команд ARM это 8 байт для оригинального большого пальца 4 байта, и когда вы добавляете в инструкции thumb2, он становится беспорядочным.

Это иллюзии на данный момент за пределами академических кругов, конвейеры глубже, имеют множество трюков и т.д., чтобы устаревший код продолжал работать и/или не должен был переопределять, как инструкции работают для каждой архитектуры, Представьте себе mips rev x, 1 слот задержки, rev y 2 слота задержки, rev z 3 слота, если условие a и 2 слота, если условие b и 1 слот, если условие c) процессор идет вперед и выполняет первую инструкцию после ветки и отбрасывает другая горстка или дюжина после того, как она повторно заполняет трубу. Насколько глубоко трубы действительно существуют, часто не передаются публике.

Я видел комментарий об этом как о RISC, возможно, он начался там, но процессоры CISC используют те же самые точные трюки, просто давая иллюзию устаревшего набора инструкций, временами процессор CISC - это не более чем RISC или Ядро VLIW с оболочкой для эмуляции устаревшего набора команд CISC (микрокод).

Следите за тем, как это было сделано. Визуализируйте конвейерную линию, каждый шаг в строке имеет задачу. Что делать, если один шаг в строке закончился из-за синего цвета, и для получения синего и желтого продукта вам понадобится синий цвет. И вы не можете получить новую синюю тоску за неделю, потому что кто-то прищурился. Таким образом, вам нужно остановить линию, сменить расходные материалы на каждый этап и сделать красно-зеленый продукт на некоторое время, что обычно можно было бы поэтапно выполнить без сброса линии. Это похоже на то, что происходит с веткой, где-то глубоко в конвейере, что-то заставляет строку менять, сбрасывать линию. временной интервал задержки - способ восстановить один продукт из-за необходимости отбрасывать в строке. Вместо N продуктов, выходящих до остановки линии, в течение производственного цикла выходили продукты N + 1. Выполнение кода похоже на всплески производственных прогонов, вы часто получаете короткие, иногда длинные линейные пути выполнения, прежде чем ударить ветку, чтобы перейти на другой короткий путь выполнения, разветките еще один короткий путь выполнения...

Ответ 2

Вы не ожидали, что код после того, как ветка не будет запущена, если ветка будет взята?

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

В чем смысл этого?

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

Ответ 3

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

Ответ 4

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

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

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

Эта функция не стала основной, в первую очередь потому, что мир стандартизован на существующих проектах ISA 1 т.е. x86 и x86-64, но также по другой причине.

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


1. ISA: архитектура набора инструкций

Ответ 5

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

Когда в машинный код есть последовательность:

      sub r0, #1
      bne loop
      xxx

Процессор может возвращать информацию с этапа записи sub r0, #1 для выполнения этапа bne loop, но в то же время xxx уже находится на этапе выборки. Чтобы упростить необходимость разворачивания конвейера, разработчики процессоров предпочитают использовать слот задержки. После выбора команды в слоте задержки блок выборки имеет правильный адрес цели ветвления. Оптимизирующему компилятору редко приходится помещать NOP в слот задержки, но вставляет там инструкцию, которая обязательно необходима для обеих возможных целей цепочки.