ВУЗ:
Составители:
а) б)
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, то все последующие действия
Страницы
- « первая
- ‹ предыдущая
- …
- 97
- 98
- 99
- 100
- 101
- …
- следующая ›
- последняя »