Вычислительные машины и системы. Ремонтов А.П - 62 стр.

UptoLike

62
г) неупорядоченное выполнение команд в процессоре (динамическая оптимиза-
ция);
Статическое планирование позволяет еще на этапе компиляции переупорядочивать
команды таким образом, чтобы они по возможности не конфликтовали друг с другом. На-
пример, рассмотрим 2 оператора языка:
A:=B + C; D:=E + F.
Неоптимизированный код, реализующий эти операции, представлен в первой
колонке таблицы 3.1. В данном потоке команд возникают конфликты типа RAW после
второй и седьмой команд, а также после 4-ой и восьмой. Конфликты при записи в память
могут быть устранены с помощью механизма обходов, а конфликты при чтении памяти - с
помощью переупорядочения потока команд, как показано во второй колонке таблицы 4.3.
При динамической оптимизации команды, вызвавшие конфликт, могут задерживаться
на конвейере, а следующие за ними команды, не вызывающие конфликтов и не зависящие
от конфликтных команд, пускаются в обход них. Анализ конфликтных ситуаций и выбор
команд для переупорядочивания возлагается на логику управления конвейером в самом
процессоре.
Таблица 4.3.
Исходная последовательность команд Переупорядоченная последователь-
ность
LW Rb,B LW Rc, C +---
--- ADDRa, Rb, Rc ----- SW
A,Ra * LW Re,E
<«------1 LW Rf,F
ADDRd,Re,Rf *~ SW D,Rd
LW Rb,B LW Rc, C LW Re,E ADD Ra,
Rb, Rc LW Rf,F SW A,Ra ADD Rd, Re, Rf
SW D,Rd
При переименовании регистров логические имена регистров, присутствующие в ко-
мандах, динамически отображаются на физические регистры процессора, которых, как
правило, больше (если речь идет о RISC-подобной архитектуре). В результате различные
данные, относящиеся к одному и тому же логическому регистру, помещаются в разные
физические регистры. Соответствие между регистрами задается таблицей отображения,
которая динамически обновляется после декодирования каждой команды. Это облегчает
процессору планирование загрузки конвейера.
Конфликты по управлению возникают при конвейеризации команд условных перехо-
дов. По статистике до 15%-20% всех команд в программе - это команды условных перехо-
   г) неупорядоченное выполнение команд в процессоре (динамическая оптимиза-
ция);
   Статическое планирование позволяет еще на этапе компиляции переупорядочивать
команды таким образом, чтобы они по возможности не конфликтовали друг с другом. На-
пример, рассмотрим 2 оператора языка:
                                  A:=B + C; D:=E + F.
   Неоптимизированный код, реализующий эти операции, представлен        в    первой
колонке таблицы 3.1. В данном потоке команд возникают конфликты типа RAW после
второй и седьмой команд, а также после 4-ой и восьмой. Конфликты при записи в память
могут быть устранены с помощью механизма обходов, а конфликты при чтении памяти - с
помощью переупорядочения потока команд, как показано во второй колонке таблицы 4.3.
   При динамической оптимизации команды, вызвавшие конфликт, могут задерживаться
на конвейере, а следующие за ними команды, не вызывающие конфликтов и не зависящие
от конфликтных команд, пускаются в обход них. Анализ конфликтных ситуаций и выбор
команд для переупорядочивания возлагается на логику управления конвейером в самом
процессоре.
                                                                        Таблица 4.3.
   Исходная последовательность команд         Переупорядоченная   последователь-
                                        ность
   LW Rb,B LW Rc, C        +---               LW Rb,B LW Rc, C LW Re,E ADD Ra,
--- ADDRa, Rb, Rc      ----- SW         Rb, Rc LW Rf,F SW A,Ra ADD Rd, Re, Rf
A,Ra               *— LW Re,E           SW D,Rd
<«------1     LW           Rf,F
ADDRd,Re,Rf *~ SW D,Rd




   При переименовании регистров логические имена регистров, присутствующие в ко-
мандах, динамически отображаются на физические регистры процессора, которых, как
правило, больше (если речь идет о RISC-подобной архитектуре). В результате различные
данные, относящиеся к одному и тому же логическому регистру, помещаются в разные
физические регистры. Соответствие между регистрами задается таблицей отображения,
которая динамически обновляется после декодирования каждой команды. Это облегчает
процессору планирование загрузки конвейера.
   Конфликты по управлению возникают при конвейеризации команд условных перехо-
дов. По статистике до 15%-20% всех команд в программе - это команды условных перехо-


                                  62