22. Классификация конвейерных конфликтов. Методы преодоления конфликтов по данным и структурных конфликтов.
Конфликты конвейера (Hazards)
Конфликт (hazard) – любая причина, вызывающая приостановку конвейера (stall). В ходе приостановки, инструкции, предшествовавшие конфликтной продолжают выполнение, а последующие – нет, образуя «пузырь» (bubble).
Классы конфликтов:
- Структурные конфликты;
- Конфликты по данным;
- Конфликты по управлению.
Структурные конфликты
- Структурные конфликты – конфликты, возникающие когда несколько инструкций пытаются использовать один и тот же ресурс одновременно.
- Источники: недостаточная конвейеризация модулей, недостаточное дублирование.
Решения
- Дублирование ресурсов. Недостаток – цена.
- Ожидание. Недостаток – ухудшение производительности.
- Планирование. Аппаратное (цена) или программное (сложность компилятора).
- Динамическая реконфигурация.
Конфликты по данным
Конфликты по данным – конфликты, возникающие, если инструкция зависит от данных, используемых более ранними инструкциями в конвейере.
Разновидности
- Read after write (RAW);
- Write after read (WAR);
- Write after write (WAW);
Read after write (RAW)
Ситуация, возникающая при попытке чтения значения, котороеещё не было записано в ходе предыдущей инструкции.
Write after read (WAR)
Конфликт, в котором инструкция пытается записать значение в регистр, который читается предыдущей инструкцией конвейера.
Write after write (WAW)
Конфликт представляет собой нарушение порядка записи; возникает, когда инструкция пытается записать регистр, записываемый предыдущей инструкцией (например, при записи в течение нескольких тактов процессора, при неравномерной продолжительности инструкций)
Преодоление конфликтов по данным
- Пересылка данных (Data Forwarding).
- Ожидание (Stall) – приостановка конвейера.
- Переупорядочивание инструкций (производится компилятором или динамически).
Переименование регистров
Переименование регистров (register renaming) – техника оптимизации, направленная на предотвращение конфликтов WAR и WAW (RAW – остаются в силе).
Идея: рассматривать регистры, как имена, а не позиции.
Следствия:
- Возможность иметь больше позиций, чем имен.
- Возможность динамического отображения имени на позицию.