Слот задержки


Из Википедии, бесплатной энциклопедии
  (Перенаправлен из слота задержки ответвления )
Перейти к навигации Перейти к поиску

В компьютерной архитектуре , A слот задержки представляет собой слот команд выполняются без эффектов предыдущей инструкции. Наиболее распространенной формой является одиночная произвольная инструкция, расположенная сразу после инструкции перехода в архитектуре RISC или DSP ; эта инструкция будет выполняться, даже если будет предпринята предыдущая ветвь. Таким образом, по замыслу инструкции выполняются в нелогичном или неправильном порядке. Ассемблеры обычно автоматически меняют порядок инструкций по умолчанию, скрывая неудобства от разработчиков сборки и компиляторов. [ необходима цитата ]

Слоты задержки ответвления

Когда задействована инструкция ветвления, местоположение следующей инструкции слота задержки в конвейере может называться слотом задержки ветвления . Слоты задержки переходов встречаются в основном в архитектурах DSP и более старых архитектурах RISC . MIPS , PA-RISC , ETRAX CRIS , SuperH и SPARC - это архитектуры RISC, каждая из которых имеет один слот задержки перехода; PowerPC , ARM , Alpha и RISC-V их не имеют. Архитектуры DSP , каждая из которых имеет один слот задержки ветвления, включают VS DSP, μPD77230 и TMS320C3x . SHARC DSP и MIPS-X использовать двойной слот задержки ветви; такой процессор выполнит пару инструкций, следующих за инструкцией перехода, прежде чем переход вступит в силу. TMS320C4x использует тройной слот задержки ветви.

В следующем примере показаны отложенные переходы на языке ассемблера для SHARC DSP, включая пару после инструкции RTS. Регистры с R0 по R9 очищаются до нуля по порядку номера (регистр, очищаемый после R6, становится R7, а не R9). Ни одна инструкция не выполняется более одного раза.

 R0 = 0; ВЫЗОВ fn (DB); / * вызываем функцию под меткой "fn" * / R1 = 0; / * первый слот задержки * / R2 = 0; / * второй слот задержки * / / ***** здесь разрыв (ЗВОНОК вступает в силу) ***** / R6 = 0; / * CALL / RTS возвращается сюда, а не на "R1 = 0" * / Конец прыжка (DB); R7 = 0; / * первый слот задержки * / R8 = 0; / * второй слот задержки * / / ***** здесь разрыв (Прыжок вступает в силу) ***** / / * следующие 4 инструкции вызываются сверху, как функция "fn" * /
fn: R3 = 0; РТС (БД); / * возврат к вызывающему, минуя интервалы задержки вызывающего * / R4 = 0; / * первый слот задержки * / R5 = 0; / * второй слот задержки * / / ***** здесь разрыв (RTS вступает в силу) ***** /
конец: R9 = 0;

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

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

Слот задержки загрузки

Слот задержки загрузки - это инструкция, которая выполняется сразу после загрузки (регистра из памяти), но не видит и не требует ожидания результата загрузки. Слоты задержки загрузки очень редки, потому что задержки загрузки очень непредсказуемы на современном оборудовании. Нагрузка может выполняться из ОЗУ или из кеша и может замедляться из-за нехватки ресурсов. Задержки загрузки наблюдались на очень ранних процессорах RISC. MIPS I ISA (реализованный в R2000 и R3000 микропроцессоров) страдает от этой проблемы.

Следующий пример - это ассемблерный код MIPS I, показывающий как слот задержки загрузки, так и слот задержки ветвления.

 lw  v0 , 4 ( v1 )  # загрузить слово из адреса v1 + 4 в v0  nop  # впустую слот задержки загрузки  jr  v0  # перейти на адрес, указанный в v0  nop  # потраченный впустую слот задержки перехода

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

  • Поток управления
  • Пузырь (вычисления)
  • Предикация ветвления

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

  • Схемы прогнозирования ветвлений
Источник « https://en.wikipedia.org/w/index.php?title=Delay_slot&oldid=1027372266 »