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,67 @@
#### Принципы работы алгоритма Томасуло. "Станции резервации"(reservation stations), переименование регистров, общая шина данных (Common Data Bus, CDB). Поля станций резервации.
**Управление распределено по функциональным устройствам (в Табло - централизовано).**
- **FU** имеют специальные буферы - **«станции резервации» (Reservation Station)**, которые содержат:
- Незавершенные инструкции.
- Операнды незавершенных инструкций.
- Информацию о статусе инструкций (включая зависимости данных).
- Станции резервации иногда называют «физическими регистрами» или «переименованными регистрами» в противоположность регистрам архитектуры, заданным в ISA.
Регистры ISA в инструкциях заменяются либо их значениями (если доступны), либо указателями на станции резервации, которые предоставят значение позже.
- Этот процесс называется **переименованием регистров**.
- Переименование регистров исключает конфликты WAR, WAW (зависимости по именам).
- Позволяет использовать аппаратное разворачивание циклов.
- Станций резервации может быть больше, чем регистров ISA, что ведет к аппаратной оптимизации, которая невозможна для компиляторов, а также предотвращает узкое место из-за количества регистров ISA.
**Недостатки:**
- Сложность реализации.
- Требуется большое число высокоскоростных ассоциативных портов чтения результатов с CDB.
- Производительность может ограничиваться одной CDB.
Возможное решение - несколько CDBs.
**Принцип работы:**
- **Стадия выдачи**
Проверяем ожидает ли регистр какое-то значение от RS. Если ожидает - делаем пометку, что мы тоже ожидаем значение от той же RS, что и регистр. Иначе просто копируем значение регистра в аргумент. По итогу у нас либо есть все аргументы, либо мы знаем, от какой RS мы ожидаем аргументы. Потом помечаем, что наша станция busy. В конце помечаем выходной регистр, что он ожидает значения от нашей станции резервации.
- **Исполнение**
Если готовы оба аргумента - начинаем исполнение.
- **Запись результата**
1) Если какой-то регистр ожидает ответа от нашей станции резервации, то записываем результат и помечаем, что регистр больше не ожидает - свободен.
2) Всем станциям, которые в качестве параметра ожидали значение от нашей станции - записываем это значение.
3) Если ожидала станция сохранения, то записываем
4) Помечаем текущую станцию незанятой.
**Общая шина данных (CDB):** данные + адрес назначения (шина «куда)
- 64 бит для данных + 4 бита для адреса функционального устройства - источника.
- данные записываются в ждущую RS, если адрес источника совпадает с адресом RS, которая производит операнд источник.
- передача результата происходит через рассылку ждущим RS, включая регистровый файл.
**Поля станции резервации:**
- **Busy** - RS занята.
- **Op** - операция, выполняемая в устройстве.
- $V_j,V_k$ - значения операндов источников S1, S2.
Буферы записи имеют одно V поле, показывающее результат, который надо сохранить.
- $Q_j,Q_k$ - RS, производящие операнды - источники.
Нет флагов готовности, как в Табло: $Q_j,Q_k=0=>$ операнды готовы.
Буферы сохранения имеют только Q, для RS, производящей результат.
- **A** - информация об адресах для операций load/store.
Сначала поле прямого адреса инструкции, потом реальный адрес, когда он вычислен.
- $Q_i$ - показывает, какая RS будет записывать в регистр, если такая есть.
Пустой (или 0), когда нет незаконченных инструкций (где-то в RS), которые будут записывать в тот регистр.
Регистровый файл ведет себя как RS.

View File

@ -0,0 +1,18 @@
#### Ступени конвейера, использующего алгоритм Томасуло. Обработка инструкции на различных ступенях.
- **Выборка (IF)** - обрабатывается последовательно.
- **Выдача (ID)** - обрабатывается последовательно.
- Получить инструкцию из очереди выбранных инструкций (IQ).
- Выдать инструкцию в свободную RS, если нет структурного конфликта.
- Пометить выбранную RS как занятую.
- Переслать доступные значения операндов инструкции (из регистров ISA) в выбранную RS.
- Переименовать еще не доступные операнды в указатели на RS, которые их произведут (переименование регистров, динамическое построение графа зависимостей данных).
- Указать для выходного регистра, что он ожидает значение от используемой RS.
- **Исполнение (EX)**
- если оба операнда готовы, начинается исполнение на назначенном FU.
- если не все операнды готовы, следим за CDB в ожидании требуемого результата (через CDB происходит пересылка).
т.е. предотвращаем RAW и соблюдаем зависимости по данным.
- **Запись результата (WB)**
- результат выдается на CDB для всех ожидающих RS, т.е результат рассылается по CDB.
- станция резервации помечается как свободная.

View File

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