целом, влияние конфликтов по ресурсам на производительность конвейера по сравнению с другими конфликтами других типов невелико.
Конфликты по ресурсам могут возникать при выполнении команд, между которыми нет зависимостей по данным, из-за ограниченного числа программно доступных регистров. Для разрешения подобных конфликтов в современных процессорах используют расширенный блок внутренних регистров, с помощью которого осуществляется «размножение» и переименование ограниченного числа архитектурных регистров. Благодаря наличию расширенного блока регистров, одновременно могут выполняться несколько команд, ссылающихся на одно и то же имя регистра. Особенности реализации блока переименования регистров рассматривается ниже
Конфликты по данным – это ситуации, когда или исходный операнд, или результат операции не доступны в положенное время. Например, конфликт по данным возникает при выполнении i+1 команды, этап исполнения ЕХ которой требует не один, а большее число тактов. Работу конвейера при наличии конфликта указанного типа иллюстрирует рис.4.11.
Такты работы процессора
1 2 3 4 5 6 7 8 9 10 11
Команда i IF ID RD EX WB
Команда i+1 IF ID RD EX EX EX WB
Команда i+2 IF ID RD - - EX WB
Команда i+3 IF ID - - RD EX WB
Команда i+4 IF - - ID RD EX WB
Рис.4.11. Работа конвейера при выполнении операции длительностью более одного такта
В рассматриваемом примере этап исполнения ЕХ команды i+1 реализуется за три такта. Соответственно пока не завершена операция ЕХ этой команды содержимое буфера блока RD (рис.4.10,а) должно оставаться постоянным. Это значит, что ступень 3 конвейера, а вместе с ней и ступени 1 и 2, блокируются до конца операции и не могут принимать новые команды, поскольку информацию в буферах блоков IF и ID нельзя обновлять прежде, чем ранее записанная в них информация будет использована. Нормальное функционирование конвейера возобновляется только после завершения этапа исполнения ЕХ i+1 команды, т.е. после устранения конфликта по данным.
Другим примером конфликта по данным является ситуация, когда последовательно выполняются команды, зависящие друг от друга по данным. В частности, если результат i-й команды используется в качестве операнда (i+1)-ой команды, то нельзя выполнять этап RD чтение операнда (i+1)-ой команды до завершения записи результата i-й команды. Рассмотренный тип зависимости по данным называют «чтение после записи» RAW (read after write). При наличии RAW-зависимости (i+1)-я команда ошибочно получит старое значение операнда вместо нового.
Зависимости по данным, характерные для рассмотренных примеров, достаточно очевидны и сравнительно легко выявляются. Сложнее обнаруживать зависимости, определяемые командами, при выполнении которых изменяется не только содержимое приемника результата, но и некоторого другого ресурса, не явно задаваемого в команде, например адресного регистра в командах с автоинкрементной или автодекрементной адресацией. Для таких команд все действия, которые производятся при обнаружении зависимости от результирующих данных, должны выполняться и по отношению к адресным регистрам, обеспечивающим автоинкрементацию или автодекрементацию.
RAW - «чтение после записи» - команда j читает значение переменной x до того, как команда i записывает новое (истинное) значение x;
WAR- «запись после чтения» - команда j записывает новое значение x до того, как команда i успела прочитать старое (истинное) значение x;
WAW - «запись после записи» - команда j записывает новое значение x до того, как команда i записывает свое значение x (x ошибочно содержит i-е значение вместо j-го);
RAR - «чтение после чтения»
Зависимость между командами типа RAR к конфликту не приводит, так как последовательные чтения одного и того же операнда всегда дают правильный результат, и порядок выполнения команд значения не имеет.
Оставшиеся три зависимости не равнозначны, и не все являются источниками конфликтов по данным. Действительной взаимозависимостью команд по данным является только зависимость типа RAW (чтение после записи), возникающая в случае, если выполняется чтение еще не обновленных данных.. Она определена структурой конвейера, и поскольку ступень конвейера RD (чтение операнда) в типовом конвейере всегда предшествует ступени WB (запись результата), устранить действительные взаимозависимости команд невозможно.
По этой же причине (из-за структуры конвейера) зависимости типа WAR (запись после чтения) и WAW (запись после записи) в обычном конвейере при упорядоченном выполнении команд фактически являются «ложными» взаимозависимостями, так как они не приводят к конфликтным ситуациям. Проблемы появляются, если структура конвейера допускает выполнение операции запись перед операцией чтение или в конвейере осуществляется выполнение команд в порядке, отличном от определенного программой. В частности, конфликты WAR или WAW могут возникнуть, если в конвейере происходит приостановка исполнения одной из команд и продолжается выполнение последующих команд, т.е., если нарушается естественный порядок исполнения команд программы
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.