logo
Методичка

10.5.8 Выполнение микроопераций

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

Блок операций с целыми числами состоит из трех распараллеленных частей. По мере готовности данных планировщик может запускать на исполнение из каждой очереди одну целочисленную операцию в устройство ALU и одну адресную операцию в устройство AGU. Количество одновременных обращений к памяти ограничено двумя. Таким образом, за каждый такт могут запускаться на исполнение три целочисленные операции, обрабатываемые в устройствах ALU, и две операции с памятью, обрабатываемые в устройствах AGU.

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

В архитектуре К10 такого ограничения не существует, то есть имеется возможность выполнения команды обращения к памяти вне очереди.

Как уже отмечалось, для работы с вещественными числами реализованы три функциональных устройства FPU: FADD – для вещественного сложения, FMUL – для вещественного умножения и FMISC (он же FSTORE) – для команд сохранения в памяти и вспомогательных операций преобразования.

В архитектурах К8 и К10 планировщик для работы с вещественными числами каждый такт может запускать на исполнение по одной операции в каждое функциональное устройство FPU. Подобная реализация блока FPU теоретически позволяет выполнять до трех вещественных операций за такт.

В архитектуре К8 устройства FPU являются 64-битными. Векторные 128-битные SSE-команды разбиваются на этапе декодирования на две микрооперации, которые производят операции над 64-битными половинами 128-битного операнда и запускаются на исполнение последовательно в разных тактах.

В архитектуре К10 устройства FPU являются 128-битными. Соответственно 128-битные SSE-команды обрабатываются с помощью одной микрооперации, что теоретически увеличивает темп выполнения векторных SSE-команд в два раза по сравнению с архитектурой К8.