Все теоритические билеты по Архитектуре ЭВМ в основном были написаны, кроме: 8.4; 13.4; 14.4; 15.4. Задачи будут позже.
5.9 KiB
Принципы работы алгоритма Томасуло. "Станции резервации"(reservation stations), переименование регистров, общая шина данных (Common Data Bus, CDB). Поля станций резервации.
Управление распределено по функциональным устройствам (в Табло - централизовано).
-
FU имеют специальные буферы - «станции резервации» (Reservation Station), которые содержат:
-
Незавершенные инструкции.
-
Операнды незавершенных инструкций.
-
Информацию о статусе инструкций (включая зависимости данных).
-
Станции резервации иногда называют «физическими регистрами» или «переименованными регистрами» в противоположность регистрам архитектуры, заданным в ISA. Регистры ISA в инструкциях заменяются либо их значениями (если доступны), либо указателями на станции резервации, которые предоставят значение позже.
-
Этот процесс называется переименованием регистров.
-
Переименование регистров исключает конфликты WAR, WAW (зависимости по именам).
-
Позволяет использовать аппаратное разворачивание циклов.
-
Станций резервации может быть больше, чем регистров ISA, что ведет к аппаратной оптимизации, которая невозможна для компиляторов, а также предотвращает узкое место из-за количества регистров ISA.
Недостатки:
- Сложность реализации.
- Требуется большое число высокоскоростных ассоциативных портов чтения результатов с CDB.
- Производительность может ограничиваться одной CDB.
Возможное решение - несколько CDBs.
Принцип работы:
- Стадия выдачи
Проверяем ожидает ли регистр какое-то значение от RS. Если ожидает - делаем пометку, что мы тоже ожидаем значение от той же RS, что и регистр. Иначе просто копируем значение регистра в аргумент. По итогу у нас либо есть все аргументы, либо мы знаем, от какой RS мы ожидаем аргументы. Потом помечаем, что наша станция busy. В конце помечаем выходной регистр, что он ожидает значения от нашей станции резервации.
- Исполнение
Если готовы оба аргумента - начинаем исполнение.
- Запись результата
- Если какой-то регистр ожидает ответа от нашей станции резервации, то записываем результат и помечаем, что регистр больше не ожидает - свободен.
- Всем станциям, которые в качестве параметра ожидали значение от нашей станции - записываем это значение.
- Если ожидала станция сохранения, то записываем
- Помечаем текущую станцию незанятой.
Общая шина данных (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.