26. Динамическое изменение машинных команд: неупорядоченное выполнение, алгоритм Томасуло.
Был разработан в 1966 году для машины IBM 360/91.
Цель: обеспечение высокой производительности без специализированных компиляторов.
Идеи этого алгоритма были положены в основу большинства современных высокопроизводительных процессоров: Pentium Pro, Power PC 604, Core i7 и других. Концепции прочно вошли в терминологию разработчиков процессоров: станции резервирования, переименование регистров, общая шина данных.
Функциональные элементы
Станции резервирования хранят команды, которые выданы (диспетчеризированы) и ожидают выполнения, а также дополнительную информацию.
Буферы загрузки и буферы записи хранят данные, поступающие из памяти и записываемые в память. Данные записываются в порядке программы, устраняя WAR и WAW конфликты.
Буферы и станции имеют поля тегов для разрешения конфликтов.
Общая шина данных (Common Data Bus, CDB) – по ней результаты посылаются всем ожидающим устройствам. Т.е. в отличие от обычных шин, по которым передается адрес назначения (куда), по CDB подается адрес источника (откуда), а все ожидающие считывают этот результат.
Функционирование
- Выдача – из очереди команда передается на станцию резервирования или в буфер (при отсутствии свободных возникает структурный конфликт).
- Выполнение – если один или более операндов недоступны, то отслеживается состояние CDB до получения операндов. После разрешения RAW конфликтов операция выполняется.
- Запись – как только результат готов, он транслируется по CDB на все ожидающие устройства, в том числе регистры.
Станции резервирования и регистровый файл
Содержат следующие поля:
- Op – операция, которая выполняется над операндами S1 и S2.
- Qj и Qk – теги станций резервирования, от которых ожидаются операнды
для данной операции. - Vj, Vk – значения операндов.
- А – поле адреса памяти, сначала содержит виртуальный адрес, а после
трансляции – физический. - Busy – статус, указывает, что станция и функциональный модуль заняты.
В свою очередь в регистровом файле есть поле Qi, указывающее номер станции резервирования, содержащей операнд, который будет сохранен в этом регистре.