В области центрального процессора (CPU) дизайн , опасность проблема с конвейером команд в CPU микроархитектура , когда следующая команда не может выполнить в следующем цикле тактовой синхронизации, [1] и потенциально может привести к неправильным результатам вычислений. Три распространенных типа опасностей - это опасности для данных, структурные опасности и контрольные опасности (опасности разветвления). [2]
Есть несколько методов , используемых для борьбы с опасностями, в том числе трубопроводов киосков / трубопроводах барботажа, операнды экспедирования , и в случае испорченного исполнения , в scoreboarding методе и алгоритм Tomasulo .
Задний план
Команды в конвейерном процессоре выполняются в несколько этапов, так что в любой момент времени несколько инструкций обрабатываются на различных этапах конвейера, таких как выборка и выполнение. Существует множество различных микроархитектур конвейера команд , и команды могут выполняться не по порядку . Опасность возникает, когда две или более из этих одновременных (возможно, вышедших из строя) инструкций конфликтуют.
Типы
Опасности для данных
Опасности данных возникают, когда инструкции, которые демонстрируют зависимость от данных, изменяют данные на разных этапах конвейера. Игнорирование потенциальных опасностей данных может привести к состояниям гонки (также называемым опасностями гонки). Существует три ситуации, в которых может возникнуть опасность для данных:
- чтение после записи (RAW), истинная зависимость
- писать после чтения (WAR), анти-зависимость
- запись после записи (WAW), выходная зависимость
Прочитать после прочтения (RAR) не представляет опасности.
Рассмотрим две инструкции i1 и i2 , с i1 встречается до i2 в программном порядке.
Чтение после записи (RAW)
( i2 пытается прочитать источник перед i1 записывает в него) Опасность чтения после записи (RAW) данных относится к ситуации, когда инструкция ссылается на результат, который еще не был вычислен или получен. Это может произойти, потому что даже если инструкция выполняется после предыдущей инструкции, предыдущая инструкция была обработана только частично через конвейер.
Пример
Например:
i1. R2 <- R5 + R3i2. R4 <- R2 + R3
Первая инструкция вычисляет значение, которое будет сохранено в регистре. R2 , а второй будет использовать это значение для вычисления результата для регистра R4 . Однако в конвейере , когда операнды выбираются для второй операции, результаты первой еще не сохранены, и, следовательно, возникает зависимость данных.
Зависимость данных возникает с инструкцией i2 , так как это зависит от завершения инструкции i1 .
Запись после чтения (WAR)
( i2 пытается записать место назначения до того, как оно будет прочитано i1 ) Опасность записи после чтения (WAR) данных представляет собой проблему с одновременным выполнением.
Пример
Например:
i1. R4 <- R1 + R5 i2. R5 <- R1 + R2
В любой ситуации есть шанс, что i2 может закончиться раньше i1 (т. е. с одновременным выполнением), необходимо убедиться, что результат register R5 не хранится раньше У i1 была возможность получить операнды.
Запись после записи (WAW)
( i2 пытается записать операнд до того, как он будет записан i1 ) В среде параллельного выполнения может возникнуть опасность записи после записи (WAW) .
Пример
Например:
i1. R2 <- R4 + R7i2. R2 <- R1 + R3
Обратная запись (WB) i2 необходимо отложить до i1 завершает выполнение.
Структурные опасности
Структурная опасность возникает, когда две (или более) инструкции, которые уже находятся в конвейере, нуждаются в одном и том же ресурсе. В результате инструкция должна выполняться последовательно, а не параллельно для части конвейера. Структурные опасности иногда называют опасностями, связанными с ресурсами.
Пример: ситуация, в которой несколько инструкций готовы к переходу в фазу выполнения инструкций и имеется один ALU (арифметический логический блок). Одним из решений такой опасности ресурсов является увеличение доступных ресурсов, например наличие нескольких портов в основной памяти и нескольких блоков ALU (Arithmetic Logic Unit).
Управляйте опасностями (опасностями в филиалах или инструкциями)
Опасность управления возникает, когда конвейер принимает неправильные решения по предсказанию ветвления и, следовательно, вводит в конвейер инструкции, которые впоследствии необходимо отбросить. Термин "опасность ветвления" также относится к угрозе контроля.
Устранение опасностей
Общий
Барботирование трубопровода
Создание пузырей в трубопроводе , также называемое разрывом трубопровода или остановом трубопровода , является методом предотвращения опасностей, связанных с данными, структурой и ответвлением. По мере получения инструкций управляющая логика определяет, может ли / произойдет ли опасность. Если это правда, то управляющая логика вставляет нет операции s ( NOP s) в трубопровод. Таким образом, перед выполнением следующей инструкции (которая может вызвать опасность) у предыдущей будет достаточно времени, чтобы закончить и предотвратить опасность. Если количество NOP равно количеству стадий в конвейере, процессор очищен от всех инструкций и может работать без опасностей. Все формы остановки приводят к задержке, прежде чем процессор сможет возобновить выполнение.
Очистка конвейера происходит, когда инструкция ветвления переходит в новую ячейку памяти, делая недействительными все предыдущие этапы конвейера. Эти предыдущие этапы очищаются, позволяя конвейеру продолжить работу с новой инструкцией, указанной ветвью. [3] [4]
Опасности для данных
Существует несколько основных решений и алгоритмов, используемых для устранения опасностей, связанных с данными:
- вставлять пузырек конвейера всякий раз, когда встречается зависимость чтения после записи (RAW), что гарантированно увеличивает задержку, или
- использовать исполнение вне очереди, чтобы потенциально предотвратить потребность в пузырях трубопровода
- использовать пересылку операндов для использования данных с более поздних этапов конвейера
В случае исполнения вне очереди может использоваться следующий алгоритм:
- табло , и в этом случае пузырек конвейера нужен только тогда, когда нет доступного функционального блока
- Tomasulo алгоритм , который использует переименование регистров , позволяя непрерывную выдачу инструкций
Задача удаления зависимостей данных может быть делегирована компилятору, который может заполнить соответствующее количество Инструкции 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]
Смотрите также
Рекомендации
- Перейти ↑ Patterson & Hennessy 2009 , p. 335.
- ^ Patterson & Hennessy 2009 , стр. 335-343.
- ^ «Схемы прогнозирования ветвлений» . cs.iastate.edu . 2001-04-06 . Проверено 19 июля 2014 .
- ^ «Опасности, связанные с данными и контролем» . classes.soe.ucsc.edu . 2004-02-23 . Проверено 19 июля 2014 .
- ^ Ченг, Чинг-Хва (27 декабря 2012). «Пример проектирования полезной задержки памяти для разработки высокопроизводительного встроенного микропроцессора в конвейере предотвращения опасностей» . Проектирование СБИС . 2013 : 1–10. DOI : 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) .