Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка.doc
Скачиваний:
617
Добавлен:
22.05.2015
Размер:
2.56 Mб
Скачать

10.5.7 Диспетчеризация и переупорядочение микроопераций

После прохождения декодера микрооперации (по три за каждый такт) поступают в блок управления командами, называемый Instruction Control Unit (ICU). Главная задача ICU заключается в диспетчеризации трех микроопераций за такт по функциональным устройствам, то есть ICU распределяет инструкции в зависимости от их назначения. Для этого используется буфер переупорядочения (ReOrder Buffer, ROB), который рассчитан на хранение 72 микроопераций (24 линии по три микрооперации) (рис. 10.14).

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

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.