Все теоритические билеты по Архитектуре ЭВМ в основном были написаны, кроме: 8.4; 13.4; 14.4; 15.4. Задачи будут позже.
3.4 KiB
Истинная зависимость по данным, антизависимость, выходная зависимость. Граф зависимостей.
Пусть есть 2 инструкции i
, j
. где i
предшествует j
в программе.
- Инструкция
j
зависит по данным от инструкцииi
, если: i
выдает результат, используемыйj
(конфликт RAW), если порядок выполнения не сохраняется.j
зависит по данным отk
иk
зависит по данным отi
(цепочка конфликтов RAW).
Пример зависимости по данным:
Loop: LD [R1], F0
DADD F2, F0, F4
ST F4, [R1]
Зависимость по именам возникает, когда 2 инструкции используют один и тот же регистр или место в памяти, т.е. общее имя места. Между инструкциями, имеющими зависимость по именам, нет потока данных (нет отношения выдает/использует). Может существовать два типа зависимостей по именам:
- Антизависимость.
- Существует, когда
j
пишет в тот же регистр или место в памяти, котороеi
читает.
Нарушение антизависимости (относительный порядок чтения/записи изменен): приводит к конфликту WAR и потому относительный порядок чтения/записи и исполнения должен сохраняться.
i
считывает значение по имени, j
записывает значение по тому же имени. j
антизависима от i
.
Изменение относительного порядка исполнения i
, j
нарушает эту зависимость по именам и приводит к конфликту WAR и некорректному исполнению.
- Выходная зависимость (зависимость записи).
- Существует, когда
i
иj
пишут в один и тот же регистр или место в памяти.
Нарушение выходной зависимости (относительный порядок записи изменен): приводит к конфликту WAW и потому порядок записи и исполнения должен сохраняться.
i
, j
пишут по одинаковому имени. Тогда j
зависима по выходу от i
.
Изменение относительного порядка исполнения i
, j
нарушает эту зависимость по именам и приводит к конфликту WAW и некорректному исполнению.
Пример:
1 LD F0, [R1]
2 DADD F2, F0, F4
3 ST F4, [R1]
4 LD F0, [R1-8]
5 DADD F2, F0, F4
6 ST F4, [R1-8]
В графе можем переупорядочивать инструкции только если сохраняется порядок стрелок.