Files
2025-06-20 12:48:16 +03:00

46 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#### Истинная зависимость по данным, антизависимость, выходная зависимость. Граф зависимостей.
Пусть есть 2 инструкции $i$, $j$. где $i$ предшествует $j$ в программе.
- **Инструкция $j$ зависит по данным от инструкции $i$, если:**
- $i$ выдает результат, используемый $j$ (конфликт RAW), если порядок выполнения не сохраняется.
- $j$ зависит по данным от $k$ и $k$ зависит по данным от $i$ (цепочка конфликтов RAW).
**Пример зависимости по данным:**
```armasm
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 и некорректному исполнению.
**Пример:**
```armasm
LD F0, [R1] ; 1
DADD F2, F0, F4 ; 2
ST F4, [R1] ; 3
LD F0, [R1-8] ; 4
DADD F2, F0, F4 ; 5
ST F4, [R1-8] ; 6
```
В графе можем переупорядочивать инструкции только если сохраняется порядок стрелок.