Рубрики

Компьютерная организация и архитектура | Трубопроводы | Набор 2 (Зависимости и опасность для данных)

См. Набор 1 для выполнения, этапов и производительности (пропускная способность) и Набор 3 для типов конвейера и останова.

Зависимости в конвейерном процессоре

В конвейерном процессоре возможны в основном три типа зависимостей. Эти :
1) Структурная зависимость
2) Зависимость управления
3) Зависимость данных

Эти зависимости могут привести к остановке в конвейере.

Задержка: Задержка — это цикл в конвейере без нового ввода.

Структурная зависимость

Эта зависимость возникает из-за конфликта ресурсов в конвейере. Конфликт ресурса — это ситуация, когда более чем одна инструкция пытается получить доступ к одному и тому же ресурсу в одном и том же цикле. Ресурс может быть регистром, памятью или ALU.

Пример:

Instruction / Cycle12345
I1IF(Mem)IDEXMem
I2IF(Mem)IDEX
I3IF(Mem)IDEX
I4IF(Mem)ID

В приведенном выше сценарии в цикле 4 инструкции I 1 и I 4 пытаются получить доступ к одному и тому же ресурсу (памяти), что приводит к конфликту ресурсов.
Чтобы избежать этой проблемы, мы должны держать инструкцию в ожидании, пока требуемый ресурс (память в нашем случае) не станет доступным. Это ожидание приведет к остановке в конвейере, как показано ниже:

Cycle12345678
I1IF(Mem)IDEXMemWB
I2IF(Mem)IDEXMemWB
I3IF(Mem)IDEXMemWB
I4IF(Mem)

Решение для структурной зависимости
Чтобы минимизировать задержки структурных зависимостей в конвейере, мы используем аппаратный механизм, называемый переименованием.
Переименование: в соответствии с переименованием мы разделяем память на два независимых модуля, используемых для хранения инструкций и данных, отдельно называемых Память кода (CM) и Память данных (DM) соответственно. CM будет содержать все инструкции, а DM будет содержать все операнды, необходимые для инструкций.

Instruction/ Cycle1234567
I1IF(CM)IDEXDMWB
I2IF(CM)IDEXDMWB
I3IF(CM)IDEXDMWB
I4IF(CM)IDEXDM
I5IF(CM)IDEX
I6IF(CM)ID
I7IF(CM)

Зависимость управления (опасности филиала)
Этот тип зависимости возникает во время передачи команд управления, таких как BRANCH, CALL, JMP и т. Д. Во многих архитектурах команд процессор не будет знать целевой адрес этих команд, когда ему нужно будет вставить новую команду в конвейер. Из-за этого на конвейер поступают нежелательные инструкции.

Рассмотрим следующую последовательность инструкций в программе:
100: я 1
101: I 2 (JMP 250)
102: I 3
,
,
250: BI 1

Ожидаемый результат: I 1 -> I 2 -> BI 1

ПРИМЕЧАНИЕ. Как правило, целевой адрес инструкции JMP известен только после этапа ID.

Instruction/ Cycle123456
I1IFIDEXMEMWB
I2IFID (PC:250)EXMemWB
I3IFIDEXMem
BI1IFIDEX

Выходная последовательность: I 1 -> I 2 -> I 3 -> BI 1

Таким образом, последовательность вывода не равна ожидаемому результату, это означает, что конвейер не реализован правильно.

Чтобы исправить вышеуказанную проблему, нам нужно остановить выборку Инструкции, пока мы не получим целевой адрес инструкции перехода. Это может быть реализовано путем введения интервала задержки, пока мы не получим целевой адрес.

Instruction/ Cycle123456
I1IFIDEXMEMWB
I2IFID (PC:250)EXMemWB
Delay
BI1IFIDEX

Выходная последовательность: I 1 -> I 2 -> Delay (Stall) -> BI 1

Поскольку интервал задержки не выполняет никаких операций, эта выходная последовательность равна ожидаемой выходной последовательности. Но этот слот вводит срыв в конвейере.

Решение для управляющей зависимости Предсказание ветвлений — это метод, с помощью которого можно устранить задержки из-за управляющей зависимости. В этом на 1-м этапе делается прогноз, какая ветвь будет принята. Для прогнозирования ветви штраф за ветвь равен нулю.

Штраф ветвления: количество остановок, введенных во время операций ветвления в конвейерном процессоре, называется штрафом ветвления.

ПРИМЕЧАНИЕ. Поскольку мы видим, что целевой адрес доступен после этапа ID, поэтому число остановок, введенных в конвейер, составляет 1. Предположим, что целевой адрес ответвления присутствовал бы после этапа ALU, было бы 2 останова. Как правило, если целевой адрес присутствует после k- го этапа, то в конвейере будут (k — 1) задержки.

Общее количество остановок, введенных в конвейер благодаря инструкциям ветвления = частота ветвления * Штраф ветки

Зависимость данных (Data Hazard)
Давайте рассмотрим ADD инструкцию S, такую что
S: ADD R1, R2, R3
Адреса читаются как S = I (S) = {R2, R3}
Адреса, написанные как S = O (S) = {R1}

Теперь мы говорим, что инструкция S2 зависит от инструкции S1, когда

Это условие называется условием Бернштейна.

Существует три случая:

  • Зависимость потока (данных): O (S1) ∩ I (S2), S1 → S2 и S1 записывает после того, как что-то прочитано S2
  • Анти-зависимость: I (S1) ∩ O (S2), S1 → S2 и S1 читает что-то, прежде чем S2 перезаписывает это
  • Выходная зависимость: O (S1) ∩ O (S2), S1 → S2 и оба записывают одну и ту же ячейку памяти.

Пример: пусть будет две инструкции I1 и I2, такие что:
I1: ДОБАВИТЬ R1, R2, R3
I2: SUB R4, R1, R2

Когда вышеприведенные инструкции выполняются в конвейерном процессоре, возникает условие зависимости данных, что означает, что I 2 пытается прочитать данные, прежде чем I 1 записывает их, поэтому I 2 неправильно получает старое значение из I 1 .

Instruction / Cycle1234
I1IFIDEXDM
I2IFID(Old value)EX

Чтобы минимизировать задержки данных в конвейере, используется пересылка операнда .

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

Рассматривая тот же пример:
I1: ДОБАВИТЬ R1, R2, R3
I2: SUB R4, R1, R2

Instruction / Cycle1234
I1IFIDEXDM
I2IFIDEX

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

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

1) RAW (чтение после записи) [зависимость потока / истинных данных]
2) WAR (запись после чтения) [зависимость от данных]
3) WAW (запись после записи) [зависимость выходных данных]

Пусть будет две инструкции I и J, так что J следует за I. Тогда

  • Опасность RAW возникает, когда инструкция J пытается прочитать данные до того, как инструкция I их записывает.
    Например:
    I: R2 <- R1 + R3
    J: R4 <- R2 + R3
  • Опасность WAR возникает, когда инструкция J пытается записать данные до того, как инструкция I прочитает их.
    Например:
    I: R2 <- R1 + R3
    J: R3 <- R4 + R5
  • Опасность WAW возникает, когда инструкция J пытается записать вывод до того, как инструкция I запишет его.
    Например:
    I: R2 <- R1 + R3
    J: R2 <- R4 + R5

Опасности WAR и WAW возникают во время неправильного выполнения инструкций.

Источники: goo.gl/J9KVNt
https://en.wikipedia.org/wiki/Hazard_(computer_architecture)
https://en.wikipedia.org/wiki/Data_dependency

Эта статья предоставлена Саурабх Шармой.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Компьютерная организация и архитектура | Трубопроводы | Набор 2 (Зависимости и опасность для данных)

0.00 (0%) 0 votes