Arch: chore
This commit is contained in:
@ -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.
|
||||
|
||||
Будем считать, что стадия выборки выполняется на соответствующем для нее такте, что конфликтов управления у нас не возникает, что выборка всегда успевает поставить нам очередную инструкцию.
|
||||
Предполагаем, что может быть реализовано несколько исполняющих блоков на стадии исполнения.
|
||||
|
@ -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 после того, как операнды стали доступны для чтения, затем оба операнда считываются из регистров одновременно.
|
||||
|
||||
- **Статус регистра:**
|
||||
|
||||
Какое функциональное устройство собирается писать в регистр (если такое есть)
|
||||
Пуст, когда никакие незаконченные инструкции не будут писать в указанный регистр.
|
||||
Какое функциональное устройство собирается писать в регистр (если такое есть)
|
||||
Пуст, когда никакие незаконченные инструкции не будут писать в указанный регистр.
|
||||
|
@ -2,18 +2,16 @@
|
||||
|
||||
- **Выборка инструкции (IF)** - последовательна.
|
||||
- **Выдача (ID1).** Инструкция выдается, если:
|
||||
- Функциональное устройство для инструкции доступно (нет структурного конфликта).
|
||||
- Регистр назначения для результата инструкции не помечен для записи другой раннее запущенной инструкцией (нет конфликта WAW).
|
||||
- Функциональное устройство для инструкции доступно (нет структурного конфликта).
|
||||
- Регистр назначения для результата инструкции не помечен для записи другой раннее запущенной инструкцией (нет конфликта WAW).
|
||||
- **Чтение операндов (ID2)**
|
||||
- Табло отслеживает доступность операндов.
|
||||
- Когда все операнды доступны, табло указывает функциональному устройству считать все операнды из регистров (пересылка не поддерживается) и начать исполнение.
|
||||
- Таким образом, конфликты RAW разрешаются динамически.
|
||||
|
||||
Между стадией ID2 и EX не может быть простоев. В табло хранится информация кто от кого зависит, и как только необходимые регистры появились, мы их сразу забираем.
|
||||
|
||||
- Табло отслеживает доступность операндов.
|
||||
- Когда все операнды доступны, табло указывает функциональному устройству считать все операнды из регистров (пересылка не поддерживается) и начать исполнение.
|
||||
- Таким образом, конфликты RAW разрешаются динамически.
|
||||
Между стадией ID2 и EX не может быть простоев. В табло хранится информация кто от кого зависит, и как только необходимые регистры появились, мы их сразу забираем.
|
||||
- **Исполнение (EX).** Заменяет EX+MEM в MIPS.
|
||||
- Функциональное устройство начинает исполнение, как только получит операнды.
|
||||
- Когда результаты готовы, оно уведомляет табло.
|
||||
- Функциональное устройство начинает исполнение, как только получит операнды.
|
||||
- Когда результаты готовы, оно уведомляет табло.
|
||||
- **Запись результата (WB)**
|
||||
- Когда табло уведомляется о том, что функциональный блок завершил исполнение, оно выполняет проверку на конфликты WAR и приостанавливает запись результата, если необходимо.
|
||||
- Функциональное устройство помечается как доступное для других инструкций после того, как ступень WB завершена.
|
||||
- Когда табло уведомляется о том, что функциональный блок завершил исполнение, оно выполняет проверку на конфликты WAR и приостанавливает запись результата, если необходимо.
|
||||
- Функциональное устройство помечается как доступное для других инструкций после того, как ступень WB завершена.
|
||||
|
Reference in New Issue
Block a user