Arch: new

Все теоритические билеты по Архитектуре ЭВМ в основном были написаны,
кроме: 8.4; 13.4; 14.4; 15.4. Задачи будут позже.
This commit is contained in:
Kirill
2024-12-20 12:10:10 +03:00
committed by Sweetbread
parent 2625f17247
commit 3a96c27c48
80 changed files with 1355 additions and 0 deletions

View File

@ -0,0 +1,4 @@
#### Классификация зависимостей между инструкциями (по данным, по именам, по управлению).
Зависимые инструкции не являются параллельными и не могут быть переупорядочены ни компилятором, ни аппаратурой.
Зависимости между инструкциями классифицируются как: зависимости по данным, зависимости по именам, зависимости по управлению.

View 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]
```
В графе можем переупорядочивать инструкции только если сохраняется порядок стрелок.

View File

@ -0,0 +1,17 @@
#### Зависимость по управлению.
Определяют порядок инструкции с учетом инструкций перехода.
Каждая инструкция в программе кроме тех, которые находятся в самом первом базовом блоке программы, зависима по управлению от некоторого множества переходов.
Инструкцию, зависимую по управлению от перехода нельзя переместить перед переходом так, что ее исполнение более не будет управляться переходом.
Инструкцию, не зависимую по управлению от перехода нельзя переместить так, что ее исполнение будет управляться переходом (в часть then).
В некоторых случаях возможно обойти эти ограничения и сохранить корректное исполнение.
**Пример зависимости:**
```c
if p1{
s1; s1 зависима по управлению от p1. s2 зависима по управлению от p2, но не от p1.
}
if p2{
s2;
}
```