Организация микропроцессорных систем. Учебное пособие. Могнонов П.Б. - 137 стр.

UptoLike

Составители: 

Рис. 6.10. Конвейер процессора Pentium
Основной конвейер U может выполнять все команды над целыми числами и команды
с плавающей точкой, а конвейер V простые целые команды и несколько команд с плавающей
точкой. Каждый конвейер может выполнять наиболее часто встречающиеся команды за один
такт, а вместе оба конвейера могут исполнять до двух команд за такт (рис. 6.9) или одну
операцию с плавающей точкой (в некоторых случаяхдо двух). При параллельном
исполнении команд V-конвейер всегда выполняет команду кода, следующую за командой,
выполняемой U-конвейером.
С введением второго конвейера возникает ряд проблем. Одна из них проблема
«зависимости данных», когда выполнение очередной команды зависит от результата
предыдущей. В этом случае выполнение такой команды останавливается до тех пор, пока не
будет получен требуемый результат, что снижает общую производительность.
Различают два типа зависимостей:
-
запись после чтения (зависимость типа WAR). Первая команда читает данные из
регистра или памяти, вторая пишет в этот регистр или ячейку памяти. В этом случае, прежде
чем производить запись, необходимо дождаться, пока будет выполнено чтение;
-
чтение после записи (зависимость типа RAW). Обратная ситуация, когда до
операции чтения необходимо дождаться выполнения записи.
Существует несколько методов уменьшения влияния зависимости данных на
производительность конвейеров. Это переименование регистров (register renaming),
одновременное использование одних данных в обоих конвейерах (data forwarding).
Переименование регистров позволяет обойти архитектурное ограничение
(предусмотрено всего 16 регистров общего назначения) на возможность параллельного
исполнения команд. Процессоры с переименованием регистров фактически имеют более 16
РОН, и при записи промежуточных результатов устанавливается соответствие логических
имен и физических регистров. Такой подход позволяет снять зависимость первого типа.
Например:
MOV AX,BX ; запись содержимого регистра ВХ в АХ;
MOV BX,CX ; запись содержимого регистра СХ в ВХ.
В данном примере запись в регистр ВХ должна быть выполнена после завершения
первой команды. Переименование регистров позволяет для регистра ВХ использовать два
внутренних регистра –Reg0 и Reg1. После такого дублирования можно одновременно и
читать из ВХ и записывать в него, так как физически работают два разных регистра. Но этот
подход не снимает зависимости второго типа. Полное снятие зависимости второго типа
невозможно, можно только уменьшить время ожидания работы второго конвейера. Метод,
позволяющий уменьшить влияние зависимости второго типа, состоит в одновременном
использовании данных. При этом выполняются все возможные действия, и декодированная
PF
D1
D2
(
U
)
D2(V)
E
(
U
)
E
(
V
)
WB
(
U
)
WB
(
V
)
                                           PF

                                           D1


                              D2(U)                   D2(V)


                               E(U)                   E(V)

                             WB(U)                   WB(V)


                            Рис. 6.10. Конвейер процессора Pentium

       Основной конвейер U может выполнять все команды над целыми числами и команды
с плавающей точкой, а конвейер V простые целые команды и несколько команд с плавающей
точкой. Каждый конвейер может выполнять наиболее часто встречающиеся команды за один
такт, а вместе оба конвейера могут исполнять до двух команд за такт (рис. 6.9) или одну
операцию с плавающей точкой (в некоторых случаях – до двух). При параллельном
исполнении команд V-конвейер всегда выполняет команду кода, следующую за командой,
выполняемой U-конвейером.
       С введением второго конвейера возникает ряд проблем. Одна из них проблема
«зависимости данных», когда выполнение очередной команды зависит от результата
предыдущей. В этом случае выполнение такой команды останавливается до тех пор, пока не
будет получен требуемый результат, что снижает общую производительность.
       Различают два типа зависимостей:
       - запись после чтения (зависимость типа WAR). Первая команда читает данные из
регистра или памяти, вторая пишет в этот регистр или ячейку памяти. В этом случае, прежде
чем производить запись, необходимо дождаться, пока будет выполнено чтение;
       - чтение после записи (зависимость типа RAW). Обратная ситуация, когда до
операции чтения необходимо дождаться выполнения записи.
       Существует несколько методов уменьшения влияния зависимости данных на
производительность конвейеров. Это переименование регистров (register renaming),
одновременное использование одних данных в обоих конвейерах (data forwarding).
       Переименование регистров позволяет обойти архитектурное ограничение
(предусмотрено всего 16 регистров общего назначения) на возможность параллельного
исполнения команд. Процессоры с переименованием регистров фактически имеют более 16
РОН, и при записи промежуточных результатов устанавливается соответствие логических
имен и физических регистров. Такой подход позволяет снять зависимость первого типа.
Например:
       MOV AX,BX ; запись содержимого регистра ВХ в АХ;
       MOV BX,CX ; запись содержимого регистра СХ в ВХ.
       В данном примере запись в регистр ВХ должна быть выполнена после завершения
первой команды. Переименование регистров позволяет для регистра ВХ использовать два
внутренних регистра –Reg0 и Reg1. После такого дублирования можно одновременно и
читать из ВХ и записывать в него, так как физически работают два разных регистра. Но этот
подход не снимает зависимости второго типа. Полное снятие зависимости второго типа
невозможно, можно только уменьшить время ожидания работы второго конвейера. Метод,
позволяющий уменьшить влияние зависимости второго типа, состоит в одновременном
использовании данных. При этом выполняются все возможные действия, и декодированная