26. Динамическое изменение машинных команд: неупорядоченное выполнение, алгоритм Томасуло.

Был разработан в 1966 году для машины IBM 360/91.

Цель: обеспечение высокой производительности без специализированных компиляторов.

Идеи этого алгоритма были положены в основу большинства современных высокопроизводительных процессоров: Pentium Pro, Power PC 604, Core i7 и других. Концепции прочно вошли в терминологию разработчиков процессоров: станции резервирования, переименование регистров, общая шина данных.

Функциональные элементы

Станции резервирования хранят команды, которые выданы (диспетчеризированы) и ожидают выполнения, а также дополнительную информацию.

Буферы загрузки и буферы записи хранят данные, поступающие из памяти и записываемые в память. Данные записываются в порядке программы, устраняя WAR и WAW конфликты.

Буферы и станции имеют поля тегов для разрешения конфликтов.

Общая шина данных (Common Data Bus, CDB) – по ней результаты посылаются всем ожидающим устройствам. Т.е. в отличие от обычных шин, по которым передается адрес назначения (куда), по CDB подается адрес источника (откуда), а все ожидающие считывают этот результат.

Функционирование

  1. Выдача – из очереди команда передается на станцию резервирования или в буфер (при отсутствии свободных возникает структурный конфликт).
  2. Выполнение – если один или более операндов недоступны, то отслеживается состояние CDB до получения операндов. После разрешения RAW конфликтов операция выполняется.
  3. Запись – как только результат готов, он транслируется по CDB на все ожидающие устройства, в том числе регистры.

Станции резервирования и регистровый файл

Содержат следующие поля:

  1. Op – операция, которая выполняется над операндами S1 и S2.
  2. Qj и Qk – теги станций резервирования, от которых ожидаются операнды
    для данной операции.
  3. Vj, Vk – значения операндов.
  4. А – поле адреса памяти, сначала содержит виртуальный адрес, а после
    трансляции – физический.
  5. Busy – статус, указывает, что станция и функциональный модуль заняты.
    В свою очередь в регистровом файле есть поле Qi, указывающее номер станции резервирования, содержащей операнд, который будет сохранен в этом регистре.