22. Классификация конвейерных конфликтов. Методы преодоления конфликтов по данным и структурных конфликтов.

Конфликты конвейера (Hazards)

Конфликт (hazard) – любая причина, вызывающая приостановку конвейера (stall). В ходе приостановки, инструкции, предшествовавшие конфликтной продолжают выполнение, а последующие – нет, образуя «пузырь» (bubble).

Классы конфликтов:

  1. Структурные конфликты;
  2. Конфликты по данным;
  3. Конфликты по управлению.

Структурные конфликты

Решения
  1. Дублирование ресурсов. Недостаток – цена.
  2. Ожидание. Недостаток – ухудшение производительности.
  3. Планирование. Аппаратное (цена) или программное (сложность компилятора).
  4. Динамическая реконфигурация.

Конфликты по данным

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

Разновидности
  1. Read after write (RAW);
  2. Write after read (WAR);
  3. Write after write (WAW);

Read after write (RAW)

Ситуация, возникающая при попытке чтения значения, котороеещё не было записано в ходе предыдущей инструкции.

Write after read (WAR)

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

Write after write (WAW)

Конфликт представляет собой нарушение порядка записи; возникает, когда инструкция пытается записать регистр, записываемый предыдущей инструкцией (например, при записи в течение нескольких тактов процессора, при неравномерной продолжительности инструкций)

Преодоление конфликтов по данным

  1. Пересылка данных (Data Forwarding).
  2. Ожидание (Stall) – приостановка конвейера.
  3. Переупорядочивание инструкций (производится компилятором или динамически).

Переименование регистров

Переименование регистров (register renaming) – техника оптимизации, направленная на предотвращение конфликтов WAR и WAW (RAW – остаются в силе).

Идея: рассматривать регистры, как имена, а не позиции.

Следствия:

  1. Возможность иметь больше позиций, чем имен.
  2. Возможность динамического отображения имени на позицию.