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

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

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

Когда задействована инструкция ветвления, расположение следующей инструкции слота задержки в трубопровод можно назвать слот задержки перехода. Слоты задержки ветвления находятся в основном в DSP архитектуры и старше RISC архитектуры. MIPS, PA-RISC, ETRAX CRIS, SuperH, и SPARC являются RISC-архитектурами, каждая из которых имеет один слот задержки перехода; PowerPC, РУКА, Альфа, и RISC-V нет ни одного. DSP архитектуры, каждая из которых имеет один слот задержки ветвления, включают VS DSP, мкПД77230 и 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   нет             # потраченный впустую слот задержки загрузки   младший   v0         # переход по адресу, указанному v0   нет             # потраченный впустую слот задержки перехода

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

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