Организация процессоров
Допустим, имеются две команды – команда Ai и команда Aj, причем команда Ai предшествует команде Aj. Конфликт RAW возникает, если команда Aj использует результаты работы команды Ai, то есть должна прочитать регистр, либо память после записи туда результата командой Ai, но к моменту чтения данные еще не записаны, поскольку команды следуют друг за другом на конвейере и сдвинуты всего на один этап. Например: ADD R1, R2, R3
SUB R4, R5, R1 IF ID MEM EX WB
IF ID MEM EX WB Рис. 3.6. На рисунке 3.6. обведены этапы, на которых будет записан результат в первой команде и потребуется считать результат для второй команды. Очевидно, что нужный результат еще не будет находиться по месту, адресуемому второй командой, и произойдет конфликт.
2) Конфликт типа «запись после чтения» (WAR). Происходит, если команда Aj записывает результат до того, как он считывается командой Ai (предшествующей Aj). Такой тип конфликта может возникать только в случае, если команда Aj обгоняет команду Ai на конвейере в конвейерах с неупорядоченной обработкой, выдачей или завершением команд (out-of-order execution, out-of-order completition).
3) Конфликт типа «запись после записи» (WAR). Возникает, если последующая команда Aj записывает результат до того, как запишет его команда Ai, что может привести к нарушению логики программы, если, например, между этими командами стоит еще какая-нибудь команда, проверяющая этот адрес (регистр) (пример). Такой конфликт также может происходить в случае неупорядоченного выполнения команд.
Методы борьбы с конфликтами по данным:
а) остановка конвейера;
б) реализация механизмов обхода и продвижения данных (data bypassing & forwarding);
в) планирование загрузки конвейера компилятором (статическая оптимизация);
г) неупорядоченное выполнение команд в процессоре (динамическая оптимизация);
д) переименование регистров.
Рассмотрим перечисленные способы б) – д).
Механизмы обхода и продвижения данных основаны на идее непосредственной передачи результата с выхода одного функционального блока на вход другого, которое в нем нуждается.
|