Введение
Компьютерная архитектура, аппаратный алгоритм
Алгоритм Томасуло — это аппаратный алгоритм компьютерной архитектуры, предназначенный для динамического планирования инструкций, обеспечивающий внеочередное исполнение и более эффективное использование нескольких исполнительных устройств. Он был разработан Робертом Томасуло в IBM в 1967 году и впервые реализован в блоке операций с плавающей точкой IBM System/360 Model 91.
Tomasulo's algorithm is a computer architecture hardware algorithm for dynamic scheduling of instructions that allows out of order execution and enables more efficient use of multiple execution units. It was developed by Robert Tomasulo at IBM in 1967 and was first implemented in the IBM System/360 Model 91’s floating point unit.
Общая шина данных
Общая шина данных (CDB) соединяет станции резервирования непосредственно с функциональными блоками. По словам Томасуло, она "сохраняет порядок выполнения операций, способствуя параллелизму". Это имеет два важных следствия:
Функциональные блоки могут получить доступ к результату любой операции, минуя регистр с плавающей точкой, что позволяет нескольким блокам, ожидающим результат, продолжить работу, не дожидаясь разрешения конфликта доступа к портам чтения регистрового файла. Обнаружение опасностей и управление выполнением распределены. Станции резервирования контролируют, когда инструкция может быть выполнена, а не отдельный специализированный блок обнаружения опасностей.
Functional units can access the result of any operation without involving a floating point register, allowing multiple units waiting on a result to proceed without waiting to resolve contention for access to register file read ports. Hazard Detection and control execution are distributed. The reservation stations control when an instruction can execute, rather than a single dedicated hazard unit.
Инструкция
Инструкции выдаются последовательно, чтобы эффекты последовательности инструкций, включая исключения, генерируемые этими инструкциями, возникали в том же порядке, что и при последовательном выполнении, несмотря на то, что сами инструкции выполняются вне порядка (то есть не последовательно).
Переименование реестра
Алгоритм Томасуло использует переименование регистров для корректного выполнения инструкций вне порядка. Все регистры общего назначения и резервирующие станции содержат либо реальное значение, либо значение-заполнитель. Если реальное значение недоступно для регистра назначения на этапе выдачи, первоначально используется значение-заполнитель. Значение-заполнитель – это метка, указывающая, какая резервирующая станция произведет реальное значение. Когда устройство завершает работу и передает результат по шине CDB, значение-заполнитель заменяется реальным значением. Каждый функциональный блок имеет одну резервирующую станцию. Резервирующие станции содержат информацию, необходимую для выполнения одной инструкции, включая операцию и операнды. Функциональный блок начинает обработку, когда он свободен и когда все исходные операнды, необходимые для инструкции, являются реальными.
Исключения
На практике могут возникать исключения, для которых недостаточно информации о состоянии исключения, в этом случае процессор может сгенерировать специальное исключение, называемое неточным исключением. Неточные исключения не могут возникать в реализациях с упорядоченным выполнением, поскольку состояние процессора изменяется только в порядке программы (см.). Программы, сталкивающиеся с точными исключениями, при которых можно определить конкретную инструкцию, вызвавшую исключение, могут быть перезапущены или повторно выполнены с точки исключения. Однако программы, сталкивающиеся с неточными исключениями, как правило, не могут быть перезапущены или повторно выполнены, поскольку система не может определить конкретную инструкцию, вызвавшую исключение.
Жизненный цикл инструкции
Три этапа, перечисленные ниже, представляют собой последовательность, которую проходит каждая инструкция от момента выдачи до завершения её выполнения.