Arch: new
Все теоритические билеты по Архитектуре ЭВМ в основном были написаны, кроме: 8.4; 13.4; 14.4; 15.4. Задачи будут позже.
This commit is contained in:
4
2 курс/1 семестр/Архитектура ЭВМ/Лекции/11 билет/1.md
Normal file
4
2 курс/1 семестр/Архитектура ЭВМ/Лекции/11 билет/1.md
Normal file
@ -0,0 +1,4 @@
|
||||
#### Классификация зависимостей между инструкциями (по данным, по именам, по управлению).
|
||||
|
||||
Зависимые инструкции не являются параллельными и не могут быть переупорядочены ни компилятором, ни аппаратурой.
|
||||
Зависимости между инструкциями классифицируются как: зависимости по данным, зависимости по именам, зависимости по управлению.
|
44
2 курс/1 семестр/Архитектура ЭВМ/Лекции/11 билет/2.md
Normal file
44
2 курс/1 семестр/Архитектура ЭВМ/Лекции/11 билет/2.md
Normal file
@ -0,0 +1,44 @@
|
||||
#### Истинная зависимость по данным, антизависимость, выходная зависимость. Граф зависимостей.
|
||||
|
||||
Пусть есть 2 инструкции $i$, $j$. где $i$ предшествует $j$ в программе.
|
||||
|
||||
- **Инструкция $j$ зависит по данным от инструкции $i$, если:**
|
||||
- $i$ выдает результат, используемый $j$ (конфликт RAW), если порядок выполнения не сохраняется.
|
||||
- $j$ зависит по данным от $k$ и $k$ зависит по данным от $i$ (цепочка конфликтов RAW).
|
||||
|
||||
**Пример зависимости по данным:**
|
||||
```assembly
|
||||
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 и некорректному исполнению.
|
||||
|
||||
**Пример:**
|
||||
```assembly
|
||||
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]
|
||||
```
|
||||
|
||||
В графе можем переупорядочивать инструкции только если сохраняется порядок стрелок.
|
17
2 курс/1 семестр/Архитектура ЭВМ/Лекции/11 билет/3.md
Normal file
17
2 курс/1 семестр/Архитектура ЭВМ/Лекции/11 билет/3.md
Normal file
@ -0,0 +1,17 @@
|
||||
#### Зависимость по управлению.
|
||||
|
||||
Определяют порядок инструкции с учетом инструкций перехода.
|
||||
Каждая инструкция в программе кроме тех, которые находятся в самом первом базовом блоке программы, зависима по управлению от некоторого множества переходов.
|
||||
Инструкцию, зависимую по управлению от перехода нельзя переместить перед переходом так, что ее исполнение более не будет управляться переходом.
|
||||
Инструкцию, не зависимую по управлению от перехода нельзя переместить так, что ее исполнение будет управляться переходом (в часть then).
|
||||
В некоторых случаях возможно обойти эти ограничения и сохранить корректное исполнение.
|
||||
|
||||
**Пример зависимости:**
|
||||
```c
|
||||
if p1{
|
||||
s1; s1 зависима по управлению от p1. s2 зависима по управлению от p2, но не от p1.
|
||||
}
|
||||
if p2{
|
||||
s2;
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user