Опасность (компьютерная архитектура)
Эта статья нуждается в дополнительных цитатах для проверки . ( январь 2014 г. ) |
В области центрального процессора (ЦП) проектирования представляют собой опасности проблемы с конвейером команд в микроархитектуре ЦП , когда следующая инструкция не может быть выполнена в следующем тактовом цикле. [1] и потенциально может привести к неверным результатам вычислений. Тремя распространенными типами опасностей являются опасности данных, структурные опасности и опасности управления (опасности разветвления). [2]
Существует несколько методов, используемых для борьбы с опасностями, включая остановку конвейера /всплеск конвейера, пересылку операндов , а в случае внеочередного выполнения — метод табло и алгоритм Томасуло .
Фон
[ редактировать ]Инструкции в конвейерном процессоре выполняются в несколько этапов, так что в любой момент времени на различных этапах конвейера обрабатываются несколько инструкций, например выборка и выполнение. Существует множество различных микроархитектур конвейеров команд , и инструкции могут выполняться вне очереди . Опасность возникает, когда две или более из этих одновременных (возможно, не по порядку) инструкций конфликтуют.
Типы
[ редактировать ]Опасности данных
[ редактировать ]Опасности для данных возникают, когда инструкции, демонстрирующие зависимость от данных, изменяют данные на разных этапах конвейера. Игнорирование потенциальных опасностей данных может привести к состояниям гонки (также называемым угрозами гонки). Существует три ситуации, в которых может возникнуть опасность данных:
- чтение после записи (RAW), настоящая зависимость
- писать после чтения (WAR), антизависимость
- запись после записи (WAW), зависимость вывода
Чтение за чтением (RAR) не представляет опасности.
Рассмотрим две инструкции я1 и я2 , с i1 происходит раньше i2 в программном порядке.
Чтение после записи (RAW)
[ редактировать ]( i2 пытается прочитать источник раньше я1 ему пишет) Опасность чтения после записи (RAW) относится к ситуации, когда инструкция ссылается на результат, который еще не был вычислен или получен. Это может произойти потому, что, хотя инструкция выполняется после предыдущей инструкции, предыдущая инструкция была обработана в конвейере лишь частично.
Пример
[ редактировать ]Например:
i1. R2 <- R5 + R8 i2. R4 <- R2 + R8
Первая инструкция вычисляет значение, которое будет сохранено в регистре. R2 , а второй будет использовать это значение для вычисления результата для регистра. Р4 . Однако в конвейере , когда операнды выбираются для второй операции, результаты первой еще не сохранены, и, следовательно, возникает зависимость данных.
Зависимость данных возникает с инструкцией i2 , так как это зависит от завершения инструкции я1 .
Пиши после прочтения (ВОЙНА)
[ редактировать ]( i2 пытается записать пункт назначения до того, как он будет прочитан я1 ) Опасность записи после чтения (WAR) представляет собой проблему с параллельным выполнением.
Пример
[ редактировать ]Например:
i1. R4 <- R1 + R5 i2. R5 <- R1 + R2
В любой ситуации, где есть шанс, что i2 может закончиться раньше i1 (т.е. при одновременном выполнении) необходимо гарантировать, что результат регистра R5 не сохраняется раньше i1 имел возможность получить операнды.
Пишу за записью (WAW)
[ редактировать ]( i2 пытается записать операнд до того, как он будет записан я1 ) Опасность записи после записи (WAW) может возникнуть в среде параллельного выполнения .
Пример
[ редактировать ]Например:
i1. R5 <- R4 + R7 i2. R5 <- R1 + R3
Обратная запись (WB) i2 должен быть отложен до тех пор, пока i1 завершает выполнение.
Структурные опасности
[ редактировать ]Структурная опасность возникает, когда двум (или более) инструкциям, уже находящимся в конвейере, требуется один и тот же ресурс. В результате инструкции должны выполняться последовательно, а не параллельно для части конвейера. Структурные опасности иногда называют ресурсными опасностями.
Пример: Ситуация, в которой несколько инструкций готовы перейти к фазе выполнения инструкций и имеется одно АЛУ (арифметико-логическое устройство). Одним из решений такой ресурсной опасности является увеличение доступных ресурсов, например, наличие нескольких портов в основной памяти и нескольких блоков АЛУ (арифметико-логических устройств).
Опасности контроля (опасности ответвлений или опасности инструкций)
[ редактировать ]Опасность управления возникает, когда конвейер принимает неправильные решения при прогнозировании перехода и, следовательно, вносит в конвейер инструкции, которые впоследствии должны быть отброшены. Термин «опасность отрасли» также относится к опасности контроля.
Устранение опасностей
[ редактировать ]Общий
[ редактировать ]Барботирование трубопровода
[ редактировать ]Вскрытие трубопровода , также называемое разрывом трубопровода или остановкой трубопровода , представляет собой метод предотвращения угроз данных, структур и ветвей. По мере получения инструкций логика управления определяет, может ли возникнуть опасность. Если это правда, то логика управления вставляет нет операции ( NOP s) в конвейер. Таким образом, прежде чем будет выполнена следующая инструкция (которая может вызвать опасность), у предыдущей будет достаточно времени для завершения и предотвращения опасности. Если количество NOP соответствует количеству стадий в конвейере, процессор очищен от всех инструкций и может работать без опасностей. Все формы остановки приводят к задержке, прежде чем процессор сможет возобновить выполнение.
Очистка конвейера происходит, когда инструкция перехода переходит в новую ячейку памяти, делая недействительными все предыдущие этапы конвейера. Эти предыдущие этапы очищаются, позволяя конвейеру продолжить работу с новой инструкцией, указанной ветвью. [3] [4]
Опасности данных
[ редактировать ]Существует несколько основных решений и алгоритмов, используемых для устранения угроз данным:
- вставлять пузырь конвейера всякий раз, когда встречается зависимость чтения после записи (RAW), что гарантированно увеличивает задержку или
- используйте выполнение вне очереди , чтобы потенциально предотвратить необходимость в пузырьках конвейера
- используйте пересылку операндов , чтобы использовать данные с более поздних этапов конвейера
В случае внеочередного исполнения используемый алгоритм может быть следующим:
- табло , в этом случае пузырь конвейера необходим только тогда, когда нет доступного функционального блока
- алгоритм Томасуло , использующий переименование регистров , позволяющий непрерывную выдачу инструкций
Задачу удаления зависимостей данных можно делегировать компилятору, который может заполнить соответствующее количество 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]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Паттерсон и Хеннесси 2009 , с. 335.
- ^ Паттерсон и Хеннесси, 2009 , стр. 335–343.
- ^ «Схемы отраслевого прогнозирования» . cs.iastate.edu . 6 апреля 2001 г. Проверено 19 июля 2014 г.
- ^ «Опасности данных и контроля» . classs.soe.ucsc.edu . 23 февраля 2004 г. Проверено 19 июля 2014 г.
- ^ Ченг, Чинг-Хва (27 декабря 2012 г.). «Пример проектирования полезной задержки памяти для разработки высокопроизводительного встроенного микропроцессора конвейера предотвращения опасностей» . Проектирование СБИС . 2013 : 1–10. дои : 10.1155/2013/425105 .
Общий
[ редактировать ]- Паттерсон, Дэвид ; Хеннесси, Джон (2009). Компьютерная организация и дизайн (4-е изд.). Морган Кауфманн . ISBN 978-0-12-374493-7 .
- Паттерсон, Дэвид; Хеннесси, Джон (2011). Компьютерная архитектура: количественный подход (5-е изд.). Морган Кауфманн . ISBN 978-0-12-383872-8 .
- Шен, Джон П.; Липасти, Микко Х. (2013) [2004]. «2.2.3.2 Идентификация опасностей трубопровода» . Проектирование современных процессоров: основы суперскалярных процессоров . стр. 73–78. ISBN 9781478610762 .
Внешние ссылки
[ редактировать ]- «Автоматическая конвейеризация на основе спецификаций транзакционных путей данных» (PDF) . Проверено 23 июля 2014 г. .
- Талсен, Дин (18 января 2005 г.). «Опасности трубопровода» (PDF) .