Arch: chore

This commit is contained in:
2025-06-20 12:48:16 +03:00
parent 537c87bc48
commit 970aa9b9e2
27 changed files with 735 additions and 55252 deletions

View File

@ -1,29 +1,25 @@
#### Определение динамического планирования. Принципы реализации динамического планирования.
**Динамическое планирование** (неупорядоченное исполнение, out-of-order execution) - аппаратный механизм переупорядочивания (изменения порядка исполнения инструкций) во время исполнения.
Не может преодолеть истинные зависимости данных, но пытается сократить или даже предотвратить простои.
Позволяет обрабатывать случаи, когда зависимости между инструкциями неизвестны во время компиляции.
- Не может преодолеть истинные зависимости данных, но пытается сократить или даже предотвратить простои.
- Позволяет обрабатывать случаи, когда зависимости между инструкциями неизвестны во время компиляции.
**Концепции:**
- Инструкциям разрешается исполняться неупорядоченно, как только становятся доступны их операнды.
- Разрешение инструкциям неупорядоченно завершаться.
**Реализация динамического планирования:**
- Ступень декодирования инструкций ID делится на 2 ступени:
1. **Выдача** - декодирование инструкций, проверка структурных конфликтов. Всегда выполняется в порядке, указанном в программе.
Зависимости под данными записываются по мере того, как инструкции выдаются (динамически создается эквивалент графа зависимостей для множества инструкций, которые находятся в ЦП)
2. **Чтение операндов** - ожидание разрешения конфликтов данных, если они есть, и последующее чтение операндов по мере их доступности. Может происходить в порядке, отличном от указанного в программе.
1. **Выдача** - декодирование инструкций, проверка структурных конфликтов. Всегда выполняется в порядке, указанном в программе.
Зависимости под данными записываются по мере того, как инструкции выдаются (динамически создается эквивалент графа зависимостей для множества инструкций, которые находятся в ЦП)
1. **Чтение операндов** - ожидание разрешения конфликтов данных, если они есть, и последующее чтение операндов по мере их доступности. Может происходить в порядке, отличном от указанного в программе.
- На ступени выборки инструкции IF производится выборка дополнительной инструкции в специальный регистр или нескольких инструкций в очередь в каждом такте.
- Увеличивается число функциональных устройств для исполнения большего числа инструкций на ступени EX без структурных конфликтов.
- Два подхода к реализации:
1) **Табло (Scoreboard)**, 1963.
2) **Алгоритм Томасуло**, 1966.
1) **Табло (Scoreboard)**, 1963.
2) **Алгоритм Томасуло**, 1966.
Будем считать, что стадия выборки выполняется на соответствующем для нее такте, что конфликтов управления у нас не возникает, что выборка всегда успевает поставить нам очередную инструкцию.
Предполагаем, что может быть реализовано несколько исполняющих блоков на стадии исполнения.

View File

@ -12,23 +12,19 @@
- Табло отслеживает статус зависимостей и аппаратных блоков и решает, когда отложенная инструкция может быть направлена на исполнение.
- Табло выдает инструкции разрешение для записи результата в регистры.
**Контролируемые параметры:**
- **Статус инструкции:**
На каком из 4 этапов находится.
##### Контролируемые параметры:
- **Статус инструкции**:
На каком из 4 этапов находится.
- **Статус функционального устройства (9 полей):**
**Busy** - занято устройство или нет
**Op** - Операция, выполняемая на устройстве
$F_i$ - регистр назначения
$F_j,F_k$ - регистры - источники операндов
$Q_j,Q_k$ - функциональные устройства, заполняющие регистры - источники операндов $F_j,F_k$
$R_j,R_k$ - флаги, показывающие готовность $F_j,F_k$ :
Устанавливаются в True после того, как операнды стали доступны для чтения, затем оба операнда считываются из регистров одновременно.
**Busy** - занято устройство или нет
**Op** - Операция, выполняемая на устройстве
$F_i$ - регистр назначения
$F_j,F_k$ - регистры - источники операндов
$Q_j,Q_k$ - функциональные устройства, заполняющие регистры - источники операндов $F_j,F_k$
$R_j,R_k$ - флаги, показывающие готовность $F_j,F_k$ :
Устанавливаются в True после того, как операнды стали доступны для чтения, затем оба операнда считываются из регистров одновременно.
- **Статус регистра:**
Какое функциональное устройство собирается писать в регистр (если такое есть)
Пуст, когда никакие незаконченные инструкции не будут писать в указанный регистр.
Какое функциональное устройство собирается писать в регистр (если такое есть)
Пуст, когда никакие незаконченные инструкции не будут писать в указанный регистр.

View File

@ -2,18 +2,16 @@
- **Выборка инструкции (IF)** - последовательна.
- **Выдача (ID1).** Инструкция выдается, если:
- Функциональное устройство для инструкции доступно (нет структурного конфликта).
- Регистр назначения для результата инструкции не помечен для записи другой раннее запущенной инструкцией (нет конфликта WAW).
- Функциональное устройство для инструкции доступно (нет структурного конфликта).
- Регистр назначения для результата инструкции не помечен для записи другой раннее запущенной инструкцией (нет конфликта WAW).
- **Чтение операндов (ID2)**
- Табло отслеживает доступность операндов.
- Когда все операнды доступны, табло указывает функциональному устройству считать все операнды из регистров (пересылка не поддерживается) и начать исполнение.
- Таким образом, конфликты RAW разрешаются динамически.
Между стадией ID2 и EX не может быть простоев. В табло хранится информация кто от кого зависит, и как только необходимые регистры появились, мы их сразу забираем.
- Табло отслеживает доступность операндов.
- Когда все операнды доступны, табло указывает функциональному устройству считать все операнды из регистров (пересылка не поддерживается) и начать исполнение.
- Таким образом, конфликты RAW разрешаются динамически.
Между стадией ID2 и EX не может быть простоев. В табло хранится информация кто от кого зависит, и как только необходимые регистры появились, мы их сразу забираем.
- **Исполнение (EX).** Заменяет EX+MEM в MIPS.
- Функциональное устройство начинает исполнение, как только получит операнды.
- Когда результаты готовы, оно уведомляет табло.
- Функциональное устройство начинает исполнение, как только получит операнды.
- Когда результаты готовы, оно уведомляет табло.
- **Запись результата (WB)**
- Когда табло уведомляется о том, что функциональный блок завершил исполнение, оно выполняет проверку на конфликты WAR и приостанавливает запись результата, если необходимо.
- Функциональное устройство помечается как доступное для других инструкций после того, как ступень WB завершена.
- Когда табло уведомляется о том, что функциональный блок завершил исполнение, оно выполняет проверку на конфликты WAR и приостанавливает запись результата, если необходимо.
- Функциональное устройство помечается как доступное для других инструкций после того, как ступень WB завершена.