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

View File

@ -0,0 +1,34 @@
#### Определение табло. Структура табло и контролируемые параметры.
**Табло** - централизованный аппаратный механизм, поддерживающий скорость выдачи инструкций на исполнение не более 1 за такт, за счет выдачи инструкции, как только ее операнды доступны и нет блокирующих ее конфликтов.
- Ступень ID заменяется на ID1, ID2.
- Однопортовый (1 инструкция - 1 такт) неупорядоченный конвейер без изменений на ступени выборки инструкции (IF).
- Смысл алгоритма Табло в том, что внутри ЦП есть отдельный блок, который хранит информацию о всех текущих выполняющихся инструкциях и текущем состоянии ресурсов.
- Реализация:
- ЦП имеет несколько функциональных устройств, которые сообщают табло информацию о своем состоянии.
- Каждая инструкция проходит сквозь табло, где строится запись о ее зависимостях по данным.
- Если табло определяет, что инструкция не может быть выдана на исполнение немедленно, ее исполнение откладывается.
- Табло отслеживает статус зависимостей и аппаратных блоков и решает, когда отложенная инструкция может быть направлена на исполнение.
- Табло выдает инструкции разрешение для записи результата в регистры.
**Контролируемые параметры:**
- **Статус инструкции:**
На каком из 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 после того, как операнды стали доступны для чтения, затем оба операнда считываются из регистров одновременно.
- **Статус регистра:**
Какое функциональное устройство собирается писать в регистр (если такое есть)
Пуст, когда никакие незаконченные инструкции не будут писать в указанный регистр.

View File

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

View File

@ -0,0 +1,2 @@
#### Пример обработки участка кода.
???