Arch: edit

This commit is contained in:
2025-01-15 15:19:34 +03:00
parent 3a96c27c48
commit 0825ac9659
16 changed files with 129 additions and 144 deletions

View File

@ -3,7 +3,8 @@
**Конфликты управления** возникают, когда неизвестен вовремя адрес след. исполняемой инструкции. Конфликт имеет место при выполнении любой управляющей инструкции.
- При выполнении условного перехода может измениться Instruction Pointer.
> [!NOTE]
> При выполнении условного перехода может измениться Instruction Pointer.
Для корректной обработки требуется остановить конвейер на много тактов, пока не будет вычислено условие перехода и определится направление перехода, иначе IP может неверным, когда потребуется на ступени IF.

View File

@ -1,16 +1,12 @@
#### Аппаратные способы сокращения числа тактов простоя (+пример).
1) Как можно раньше выяснить, выполняется ли переход
2) Как можно раньше вычислить адрес следующей исполняемой инструкции.
**Пример.** В рассматриваемом примере (MIPS):
1. Инструкции условного перехода проверяют значение регистра на равенство 0.
Это действие можно завершить в такте ID, перемещая проверку на этот такт.
- Инструкции условного перехода проверяют значение регистра на равенство 0.
Это действие можно завершить в такте ID, перемещая проверку на этот такт.
- Оба IP (выбранный и невыбранный) должны быть вычислены заранее.
Требуется доп. сумматор, тк имеющееся ALU не может использовано до такта EX
В таком случае будет только 1 такт простоя при переходах.
2. Оба IP (выбранный и невыбранный) должны быть вычислены заранее.
Требуется доп. сумматор, тк имеющееся ALU не может использовано до такта EX
В таком случае будет только 1 такт простоя при переходах.

View File

@ -3,31 +3,32 @@
**Задержанный/отложенный переход** - инструкция, след. после перехода (из слота задержки перехода) исполняется независимо от того, произошел переход или нет (введена частью ISA).
- **Предположение, что переход никогда не происходит.**
##### Предположение, что переход никогда не происходит.
Продолжается выполнение инструкций, начиная с инструкции, след. за инструкцией перехода, но состояние машины не меняется до тех пор, пока рез-тат перехода точно не определен. Если переход не произошел - состояние сохраняется, если произошел - рез-таты отбрасываются, фактически произошел простой.
- **Предположение, что переход всегда происходит.**
Продолжается выполнение инструкций, начиная с места перехода, ...
Труднее реализовать, чем предыдущий вариант.
**Пример: схема предсказания «переход не произойдет»:**
**Переход не произошел, нет простоя:**
###### Пример
Переход не произошел, нет простоя:
| Program | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| :-- | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
| I (untaken branch instruction) | IF | ID | EX | MEM | WB | | | | |
| :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- |
| I+1 | | IF | ID | EX | MEM | WB | | | |
| I+2 | | | IF | ID | EX | MEM | WB | | |
| I+3 | | | | IF | ID | EX | MEM | WB | |
| I+4 | | | | | IF | ID | EX | MEM | WB |
**Переход произошел, простой:**
Переход произошел, простой:
| Program | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| :--------------------------- | :-: | :-: | :--: | :--: | :--: | :--: | :-: | :-: | :-: |
| I (taken branch instruction) | IF | ID | EX | MEM | WB | | | | |
| I+1 | | IF | - | - | - | - | | | |
| Branch target | | | IF | ID | EX | MEM | WB | | |
| Branch target +1 | | | | IF | ID | EX | MEM | WB | |
| Branch target +2 | | | | | IF | ID | EX | MEM | WB |
##### Предположение, что переход всегда происходит.
Продолжается выполнение инструкций, начиная с места перехода, ...
Труднее реализовать, чем предыдущий вариант.
| I (taken branch instruction) | IF | ID | EX | MEM | WB | | | | |
| :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- |
| I+1 | | IF | Idle | Idle | Idle | idle | | | |
| Branch target | | | IF | ID | EX | MEM | WB | | |
| Branch target +1 | | | | IF | ID | EX | MEM | WB | |
| Branch target +2 | | | | | IF | ID | EX | MEM | WB |

View File

@ -1,16 +1,11 @@
#### Статическое предсказание переходов.
- Выполняется компилятором.
- Кодируется в инструкциях условного перехода, используя один бит предсказания.
Например: 0 - переход обычно не происходит, 1 - происходит.
Например: 0 - переход обычно не происходит, 1 - происходит.
- Требует поддержки на уровне ISA.
**Два основных метода статич. предсказания переходов на этапе компиляции:**
- **Сбор информации о поведении программы при ее запусках и ее использование при перекомпиляции (профилирование).**
Например: профиль программы может показать, что большинство условных переходов вперед и назад (часто вызвано циклами) происходят. В данном случае нужно всегда предсказывать, что переход происходит.
- **Эвристическое предсказания переходов на основе направления перехода.**
Например: помечая переходы назад как происходящие и переходы вперед как не происходящие.
**Два основных метода статического предсказания переходов на этапе компиляции:**
- Сбор информации о поведении программы при её запусках и её использование при перекомпиляции (**профилирование**).
*Например*: профиль программы может показать, что большинство условных переходов вперед и назад (часто вызвано циклами) происходят. В данном случае нужно всегда предсказывать, что переход происходит.
- Эвристическое предсказание переходов на основе направления перехода.
*Например*: помечая переходы назад как происходящие и переходы вперед как не происходящие.