stringtranslate.com

Опасность (архитектура компьютера)

В области проектирования центрального процессора (ЦП) опасности представляют собой проблемы с конвейером инструкций в микроархитектуре ЦП , когда следующая инструкция не может быть выполнена в следующем такте, [1] и может потенциально привести к неверным результатам вычислений. Три распространенных типа опасностей — это опасности данных, структурные опасности и опасности управления (опасности ветвления). [2]

Существует несколько методов, используемых для борьбы с опасностями, включая остановку конвейера /всплытие конвейера, пересылку операндов, а в случае неупорядоченного выполнения — метод табло и алгоритм Томасуло .

Фон

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

Типы

Опасности данных

Опасности данных возникают, когда инструкции, демонстрирующие зависимость данных, изменяют данные на разных этапах конвейера. Игнорирование потенциальных опасностей данных может привести к условиям гонки (также называемым опасностями гонки). Существует три ситуации, в которых может возникнуть опасность данных:

  1. чтение после записи (RAW), настоящая зависимость
  2. писать после прочтения (WAR), антизависимость
  3. запись после записи (WAW), выходная зависимость
  4. чтение после чтения (RAR), ложная зависимость

Чтение после прочтения (RAR) не является опасным случаем.

Рассмотрим две инструкции i1 и i2 , причем i1 встречается перед i2 в программном порядке.

Чтение после записи (RAW)

( i2 пытается прочитать источник до того, как i1 записывает в него) Опасность чтения после записи (RAW) данных относится к ситуации, когда инструкция ссылается на результат, который еще не был вычислен или извлечен. Это может произойти, поскольку, даже если инструкция выполняется после предыдущей инструкции, предыдущая инструкция была обработана конвейером только частично.

Пример

Например:

я1. Р2 <- Р5 + Р8я2.R4 <- R2 + R8

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

Зависимость данных возникает с инструкцией i2 , поскольку она зависит от завершения инструкции i1 .

Написать после прочтения (ВОЙНА)

( i2 пытается записать данные в пункт назначения до того, как их прочитает i1 ) Опасность записи после чтения (WAR) данных представляет собой проблему с параллельным выполнением.

Пример

Например:

я1. R4 <- R1 + R5
i2. R5 <- R1 + R2

В любой ситуации, когда существует вероятность того, что i2 завершится раньше i1 (т. е. при параллельном выполнении), необходимо гарантировать, что результат регистра R5 не будет сохранен до того, как i1 получит возможность извлечь операнды.

Пишите после записи (WAW)

( i2 пытается записать операнд до того, как он будет записан i1 ) В среде параллельного выполнения может возникнуть опасность записи данных после записи (WAW) .

Пример

Например:

я1. Р5 <- Р4 + Р7я2.R5 < - R1 + R3

Обратная запись (WB) i2 должна быть отложена до тех пор, пока i1 не завершит выполнение.

Структурные опасности

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

Пример: ситуация, в которой несколько инструкций готовы войти в фазу выполнения инструкций, и есть одно АЛУ (арифметико-логическое устройство). Одним из решений такой ресурсной опасности является увеличение доступных ресурсов, например, наличие нескольких портов в основной памяти и нескольких блоков АЛУ (арифметико-логическое устройство).

Опасности управления (опасности ветвления или опасности инструкций)

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

Устранение опасностей

Общий

Трубопровод бурлит

Всплеск конвейера , также называемый разрывом конвейера или остановкой конвейера , является методом предотвращения опасностей данных, структуры и ветвей. По мере извлечения инструкций управляющая логика определяет, может ли/произойдет ли опасность. Если это так, то управляющая логика не вставляет в конвейер никаких операций ( NOP ). Таким образом, до того, как следующая инструкция (которая может вызвать опасность) будет выполнена, предыдущая будет иметь достаточно времени, чтобы завершиться и предотвратить опасность. Если количество NOP равно количеству этапов в конвейере, процессор очищен от всех инструкций и может продолжить работу без опасностей. Все формы остановок вносят задержку, прежде чем процессор сможет возобновить выполнение.

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

Опасности данных

Существует несколько основных решений и алгоритмов, используемых для устранения угроз безопасности данных:

В случае нестандартного выполнения может использоваться следующий алгоритм:

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

Пересылка операнда

Примеры

В следующих примерах вычисленные значения выделены жирным шрифтом , а номера регистров — нет.

Например, чтобы записать значение 3 в регистр 1 (который уже содержит 6), а затем добавить 7 к регистру 1 и сохранить результат в регистре 2, то есть:

i0: R1 = 6
i1: R1 = 3
i2: R2 = R1 + 7 = 10

После выполнения регистр 2 должен содержать значение 10. Однако если i1 (запись 3 в регистр 1) не полностью выходит из конвейера до начала выполнения i2, это означает, что R1 не содержит значение 3, когда i2 выполняет его сложение. В таком случае i2 добавляет 7 к старому значению регистра 1 ( 6 ), и поэтому регистр 2 вместо этого содержит 13 , т. е.:

i0: R1 = 6
i2: R2 = R1 + 7 = 13
i1: R1 = 3

Эта ошибка возникает из-за того, что i2 считывает регистр 1 до того, как i1 зафиксировал/сохранил результат своей операции записи в регистр 1. Таким образом, когда i2 считывает содержимое регистра 1, регистр 1 по-прежнему содержит 6 , а не 3 .

Пересылка (описанная ниже) помогает исправить такие ошибки, поскольку вывод i1 (равный 3 ) может быть использован последующими инструкциями до того, как значение 3 будет зафиксировано/сохранено в регистре 1.

Пересылка, примененная к примеру, означает, что нет ожидания для фиксации/сохранения вывода i1 в регистре 1 (в этом примере вывод равен 3 ) перед тем, как сделать этот вывод доступным для последующей инструкции (в этом случае i2). Эффект заключается в том, что i2 использует правильное (более позднее) значение регистра 1: фиксация/сохранение были сделаны немедленно и не конвейеризированы.

При включенной пересылке этап декодирования/выполнения инструкций (ID/EX) конвейера теперь имеет два входа: значение, считанное из указанного регистра (в этом примере значение 6 из регистра 1), и новое значение регистра 1 (в этом примере это значение равно 3 ), которое отправляется со следующего этапа выполнения инструкций/доступа к памяти (EX/MEM). Добавленная логика управления используется для определения того, какой вход использовать.

Контроль опасностей (опасности филиалов)

Чтобы избежать рисков при управлении, микроархитектуры могут:

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

Другие методы

Задержка памяти — еще один фактор, на который должны обращать внимание проектировщики, поскольку задержка может снизить производительность. Различные типы памяти имеют разное время доступа к памяти. Таким образом, выбрав подходящий тип памяти, проектировщики могут улучшить производительность конвейерного пути данных. [5]

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

Ссылки

  1. ^ Паттерсон и Хеннесси 2009, стр. 335.
  2. ^ Паттерсон и Хеннесси 2009, стр. 335–343.
  3. ^ "Схемы прогнозирования ветвлений". cs.iastate.edu . 2001-04-06 . Получено 2014-07-19 .
  4. ^ "Опасности данных и контроля". classes.soe.ucsc.edu . 2004-02-23 . Получено 2014-07-19 .
  5. ^ Ченг, Чинг-Хва (27.12.2012). «Пример проектирования полезной задержки памяти для разработки высокопроизводительного встроенного микропроцессора для предотвращения опасностей на конвейере». VLSI Design . 2013 : 1–10. doi : 10.1155/2013/425105 .

Общий

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