Files
Kirill 3a96c27c48 Arch: new
Все теоритические билеты по Архитектуре ЭВМ в основном были написаны,
кроме: 8.4; 13.4; 14.4; 15.4. Задачи будут позже.
2025-01-14 19:40:01 +03:00

5.9 KiB
Raw Blame History

Принципы работы алгоритма Томасуло. "Станции резервации"(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.