Методы устранения негативных влияний конфликтов

Для устранения негативных последствий конфликтов применяются как программные, так и аппаратные методы.

Программные методы нацелены на устранение самой возможности конфликтов еще на стадии компиляции программ. Оптимизирующий компилятор пытается создать такой объектный код, чтобы между конфликтующими командами находилось достаточное количество нейтральных в плане конфликтов команд. Если также не удается, то между конфликтующими командами компилятор вставляет необходимое количество пустых команд типа “Нет операции”, что ведет, естественно, к замедлению работы процессора. Поэтому наряду с программными используют также и аппаратные методы устранения конфликтов. Естественным методом устранения конфликтов является приостановка выполнения команды j на несколько тактов для того, чтобы предшествующая команда i успела миновать этап конвейера, вызвавший конфликт. Очевидно такая приостановка ведет к задержке выполнения команд, следующих в конвейере за j-ой командой. Такую ситуацию называют “пузырьком” в конвейере. За счет усложнения конвейера можно сделать так, чтобы задержать выполнение только j-ой команды, не задерживая остальных, следующих за ней. Это более эффективное решение проблемы устранения конфликтов, которое достигается ценой определенных аппаратных затрат. Например, для борьбы с ЧПЗ наибольшее распространение получил прием ускоренного продвижения информации (forwarding). Обычно между двумя соседними ступенями конвейера располагается буферный регистр, через который предшествующая ступень передает результат своей работы на последующую ступень, то есть передача информации возможна лишь между соседними ступенями конвейера. При ускоренном продвижении, когда для выполнения команды требуется операнд, уже вычисленный предыдущей командой, этот операнд может быть получен непосредственно из соответствующего буферного регистра, минуя все промежуточные ступени конвейера. С данной целью в конвейере предусматриваются дополнительные тракты пересылки информации, такие как тракты опережения, тракты обхода, снабженные средствами мультиплексирования:

ИК – этап исполнения команды.

Таким образом, при forwardingоперанд читается не из ячейки памяти, а выбирается из буферного регистра АЛУ при выполнении команды j.