Все теоритические билеты по Архитектуре ЭВМ в основном были написаны, кроме: 8.4; 13.4; 14.4; 15.4. Задачи будут позже.
68 lines
5.9 KiB
Markdown
68 lines
5.9 KiB
Markdown
#### Принципы работы алгоритма Томасуло. "Станции резервации"(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.
|