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

UptoLike

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

а) б)
D(i)
i к о м а н д а j к о м а н д а
R(j)
D(j) R(i
)
D(j)
j к о м а н д а
D(i) R(j)
i к о м а н д а
R(i)
в)
D( i )
i к о м а н д а
j к о м а н д а
D(j )
R(j) R(i )
Рис.5.15. Межкомандные зависимости:
а) помеха "чтение после записи"; б) помеха "запись после чтения"; в) помеха "запись после
записи"
Для примера рассмотрим следующий фрагмент программы:
STORE X;
ADD X;
STORE X;
STORE X.
Помеха RAW
. Если команда ADD читает из ячейки памяти с адресом Х раньше, чем
первая команда STORE успела обновить ее содержимое, то к соответствующему регистру
МП будет прибавлено неправильное значение. Команда ADD (команда i) получила значение,
которое является "слишком старым".
Помеха WAR
. Если вторая команда STORE перекрывается с командой ADD, то может
случиться, что модификация содержимого ячейки Х произойдет раньше, чем к ней
обратиться команда ADD. В этом случае команда ADD получит неправильное значение, и
это значение является теперьслишком новым”.
Помеха WAW
. Это может случиться между двумя последними командами STORE.
Если вторая STORE завершается после третьей, то содержимое ячейки Х не будет таким,
какое ожидается по логике выполнения программы.
Существуют два подхода к проблеме обнаружения этих помех.
Первый состоит в том, чтобы централизовать обнаружение помех на одной ступени,
обычно связываемой с фазой выборки команды, и сравнивать на этой ступени области
определения и значений команды с соответствующими областями определений и значений
для команд находящихся в конвейере.
Второй подход состоит в том, чтобы позволить команде продвигаться по конвейеру
до тех пор, пока она не достигнет ступени, в которой требуется тот или иной элемент, либо
из области определения, либо из множества значений. Тогда осуществляется проверка на
потенциальную помеху от другой команды, находящейся в конвейере. Второй подход более
гибкий, чем первый, однако, объем аппаратуры, необходимой для выполнения сравнения,
может расти как квадрат числа ступеней.
После обнаружения помехи существуют две возможности по устранению их. В
первой случае приостанавливают конвейер. Так , если обнаружена команда j, находящаяся в
состоянии помехи с ранее инициализированной командой i, то все последующие действия
                а)   D(i)        D(j) R(i)   R(j)          б)               D(j)


                     i команда         j команда                        j команда


                                                                D(i) R(j)          R(i)


                                                                        i команда

                            в)      D(i)      D(j)          R(j) R(i)

                                                    j команда



                                              i команда

                          Рис.5.15. Межкомандные зависимости:
 а) помеха "чтение после записи"; б) помеха "запись после чтения"; в) помеха "запись после
                                          записи"
       Для примера рассмотрим следующий фрагмент программы:
       STORE X;
       ADD X;
       STORE X;
       STORE X.
       Помеха RAW. Если команда ADD читает из ячейки памяти с адресом Х раньше, чем
первая команда STORE успела обновить ее содержимое, то к соответствующему регистру
МП будет прибавлено неправильное значение. Команда ADD (команда i) получила значение,
которое является "слишком старым".
       Помеха WAR. Если вторая команда STORE перекрывается с командой ADD, то может
случиться, что модификация содержимого ячейки Х произойдет раньше, чем к ней
обратиться команда ADD. В этом случае команда ADD получит неправильное значение, и
это значение является теперь “слишком новым”.
       Помеха WAW. Это может случиться между двумя последними командами STORE.
Если вторая STORE завершается после третьей, то содержимое ячейки Х не будет таким,
какое ожидается по логике выполнения программы.
       Существуют два подхода к проблеме обнаружения этих помех.
       Первый состоит в том, чтобы централизовать обнаружение помех на одной ступени,
обычно связываемой с фазой выборки команды, и сравнивать на этой ступени области
определения и значений команды с соответствующими областями определений и значений
для команд находящихся в конвейере.
        Второй подход состоит в том, чтобы позволить команде продвигаться по конвейеру
до тех пор, пока она не достигнет ступени, в которой требуется тот или иной элемент, либо
из области определения, либо из множества значений. Тогда осуществляется проверка на
потенциальную помеху от другой команды, находящейся в конвейере. Второй подход более
гибкий, чем первый, однако, объем аппаратуры, необходимой для выполнения сравнения,
может расти как квадрат числа ступеней.
       После обнаружения помехи существуют две возможности по устранению их. В
первой случае приостанавливают конвейер. Так , если обнаружена команда j, находящаяся в
состоянии помехи с ранее инициализированной командой i, то все последующие действия