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

редактировать

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

Содержание
  • 1 Слоты задержки перехода
  • 2 Слот задержки загрузки
  • 3 См. Также
  • 4 Внешние ссылки
Слоты задержки перехода

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

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

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

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

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

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

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

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

lw v0,4 (v1) # загрузить слово из адреса v1 + 4 в v0 nop # впустую слот задержки загрузки jr v0 # перейти к адресу, указанному v0 nop # потраченный впустую слот задержки перехода
См. Также
Внешние ссылки
Последняя правка сделана 2021-05-17 12:01:36
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте