Введение

Компьютерная архитектура, аппаратный алгоритм
Алгоритм Томасуло — это аппаратный алгоритм компьютерной архитектуры, предназначенный для динамического планирования инструкций, обеспечивающий внеочередное исполнение и более эффективное использование нескольких исполнительных устройств. Он был разработан Робертом Томасуло в IBM в 1967 году и впервые реализован в блоке операций с плавающей точкой IBM System/360 Model 91.

Общая шина данных

Общая шина данных (CDB) соединяет станции резервирования непосредственно с функциональными блоками. По словам Томасуло, она "сохраняет порядок выполнения операций, способствуя параллелизму". Это имеет два важных следствия:
Функциональные блоки могут получить доступ к результату любой операции, минуя регистр с плавающей точкой, что позволяет нескольким блокам, ожидающим результат, продолжить работу, не дожидаясь разрешения конфликта доступа к портам чтения регистрового файла. Обнаружение опасностей и управление выполнением распределены. Станции резервирования контролируют, когда инструкция может быть выполнена, а не отдельный специализированный блок обнаружения опасностей.

Инструкция

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

Переименование реестра

Алгоритм Томасуло использует переименование регистров для корректного выполнения инструкций вне порядка. Все регистры общего назначения и резервирующие станции содержат либо реальное значение, либо значение-заполнитель. Если реальное значение недоступно для регистра назначения на этапе выдачи, первоначально используется значение-заполнитель. Значение-заполнитель – это метка, указывающая, какая резервирующая станция произведет реальное значение. Когда устройство завершает работу и передает результат по шине CDB, значение-заполнитель заменяется реальным значением. Каждый функциональный блок имеет одну резервирующую станцию. Резервирующие станции содержат информацию, необходимую для выполнения одной инструкции, включая операцию и операнды. Функциональный блок начинает обработку, когда он свободен и когда все исходные операнды, необходимые для инструкции, являются реальными.

Исключения

На практике могут возникать исключения, для которых недостаточно информации о состоянии исключения, в этом случае процессор может сгенерировать специальное исключение, называемое неточным исключением. Неточные исключения не могут возникать в реализациях с упорядоченным выполнением, поскольку состояние процессора изменяется только в порядке программы (см.). Программы, сталкивающиеся с точными исключениями, при которых можно определить конкретную инструкцию, вызвавшую исключение, могут быть перезапущены или повторно выполнены с точки исключения. Однако программы, сталкивающиеся с неточными исключениями, как правило, не могут быть перезапущены или повторно выполнены, поскольку система не может определить конкретную инструкцию, вызвавшую исключение.

Жизненный цикл инструкции

Три этапа, перечисленные ниже, представляют собой последовательность, которую проходит каждая инструкция от момента выдачи до завершения её выполнения.