ВУЗ:
Составители:
Конфликты предотвращены путем вставки логически независи-
мых команд: а) MOV R
T
,
T между командами MOV R
C
, C и ADD;
б) MOV R
F
, F между командами ADD и MOV A, R
A
, в) MOV R
1
, R
2
после команды SUB. В результате удлиняется время между вычисле-
нием данных в одной команде и запросом их из памяти другой ко-
мандой.
В простом алгоритме планирования команд компилятор пере-
ставляет команды внутри одного и того же базового блока. Базовый
блок — линейный участок программы без команд перехода. При этом
строится граф зависимостей команд по данным внутри базового бло-
ка и производится перестановка команд, уменьшающая остановки
конвейера.
Типы конфликтов по данным.
Пусть команда C
i
предшествует в программе команде C
j
. Возмож-
ны следующие ситуации.
1. RAW – чтение после записи (ЧПЗ). Команда C
j
пытается
прочитать операнд прежде, чем команда C
i
запишет его в
память.
2. WAR – запись после чтения (ЗПЧ). Команда C
j
пытается за-
писать результат в память прежде, чем команда C
i
считает
оттуда прежнее значение.
3. WAW – запись после записи (ЗПЗ). Команда C
j
пытается за-
писать результат в память прежде, чем туда будет записан
результат выполнения команды C
i
.
Последовательность типа RAR не приводит к конфликту, так как
при чтении не меняются значения данных. Наибольшие проблемы со-
здает RAW. Признаком возникновения конфликта между двумя ко-
мандами C
i
и C
j
служит невыполнение хотя бы одного из трех усло-
вий Бернстайна:
для RAW:
∅=∩
)()(
jRiW
,
для WAR:
∅=∩
)()(
jWiR
,
для WAW:
∅=∩
)()(
jWiW
,
73
Страницы
- « первая
- ‹ предыдущая
- …
- 69
- 70
- 71
- 72
- 73
- …
- следующая ›
- последняя »