stringtranslate.com

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

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

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

Фон

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

Типы

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

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

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

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

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

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

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

Пример

Например:

я1. R2 <- R5 + R8я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. R5 <- R4 + R7я2. R5 <- R1 + R3

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

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

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

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

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

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

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

Общий

Барботирование трубопровода

Вскрытие трубопровода , также называемое разрывом трубопровода или остановкой трубопровода , представляет собой метод предотвращения угроз данных, структур и ветвей. По мере получения инструкций логика управления определяет, может ли возникнуть опасность. Если это правда, то логика управления не вставляет в конвейер никаких операций ( 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 . 6 апреля 2001 г. Проверено 19 июля 2014 г.
  4. ^ «Опасности данных и контроля». classs.soe.ucsc.edu . 23 февраля 2004 г. Проверено 19 июля 2014 г.
  5. ^ Ченг, Чинг-Хва (27 декабря 2012 г.). «Пример проектирования полезной задержки памяти для разработки высокопроизводительного встроенного микропроцессора конвейера предотвращения опасностей». Проектирование СБИС . 2013 : 1–10. дои : 10.1155/2013/425105 .

Общий

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