Архитектурные способы повышения производительности процессоров. Конвейеризация вычислительных процессов

Страницы работы

Фрагмент текста работы

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

Конфликты по ресурсам могут возникать при выполнении команд, между которыми нет зависимостей по данным, из-за ограниченного числа программно доступных регистров. Для разрешения подобных конфликтов в современных процессорах используют расширенный блок внутренних регистров, с помощью которого осуществляется «размножение» и переименование ограниченного числа архитектурных регистров. Благодаря наличию расширенного блока регистров, одновременно могут выполняться несколько команд, ссылающихся на одно и то же имя регистра. Особенности реализации блока переименования регистров рассматривается ниже

Конфликты по данным – это ситуации, когда или исходный операнд, или результат операции не доступны в положенное время. Например, конфликт по данным возникает при выполнении 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 могут возникнуть, если в конвейере происходит приостановка исполнения одной из команд и продолжается выполнение последующих команд, т.е., если нарушается естественный порядок исполнения команд программы

Похожие материалы

Информация о работе