Обзор микроархитектур современных десктопных процессоров. Часть 2
Страница 6. Intel Core (P8)


 

Intel Core (P8)

Общая организация подсистемы внеочередного исполнения операцийh2h2 и функциональных устройств в новом процессореh2 P8 напоминает организацию этой подсистемы в процессорах семействаh2 P6/P6+ (P-III, P-M, P-M2) и представляет собой её дальнейшее развитие. Главное отличие от последних представителей старого семейства (P-M и P-M2) состоит в расширении всех трактов обработки МОПов с трёхh2 до четырёх, удлинении очередей и буферов, увеличении числа портов запуска и функциональных устройств и в существенном повышении скорости работы функциональных устройств плавающей арифметики SSE, а такжеh2 в реализации 64-битного режима EM64T (x86-64) для целочисленной и адресной арифметики.

На данный момент пока что нет достаточно полной информацииh2h2h2 о микроархитектуре процессораh2P8, поэтому рассмотрим работу подсистемы внеочередного исполнения кратко, делая основной упор на её отличия от старой архитектуры.

После выхода из декодера сформированные группы по четыре МОПа помещаются в буфер переупорядочения ROB, длина которого составляет (по некоторым данным) 96 элементов. Новая группа МОПов также копируется в очередь планировщика RS, из которой операции будут запускаться на исполнение. В процессоре P8 используется единая очередь планировщика размером в 32 элемента, общая для всех типов операций. МОПы выбираются на исполнение из этой очереди во внеочередном порядке, по мере готовности аргументов операций (Рис. 9).



Рис. 9

МОПы отправляются на исполнение через порты запуска. Всего имеется три порта для арифметико-логических операций, и три — для операций вычисления адресовh2h2 и для загрузки/выгрузки. Каждый из портов обслуживает соответствующие функциональные устройства и может запускать по одной операции за такт.

К каждому из трёх первых портов подсоединены устройства, выполняющие операцииh2 целочисленной арифметики и логики, а также некоторые операции MMX и SSE. Самые простые операции могут исполняться в устройствах на всех трёх портах, а операции сдвига и операции целочисленногоh2 сложения MMX и SSE — на двух портах. К указанным портам подсоединеныh2 также специфические функциональные устройства. На одном из портов находится устройство для выполнения операций перехода (включая объединённыеh2 операции сравнения и условного перехода), а также так называемое устройство пересылок для арифметики с плавающей точкой, на другом — устройство сложения с плавающей точкой, и на третьем — устройствоh2 умножения и деления с плавающей точкой. Некоторые менее частые арифметические и логические операции также исполняются в специализированных функциональных устройствах на соответствующих портах.

Увеличение числа универсальных устройств с двух до трёх (вместе с увеличением количества портов запуска) позволяет значительно повысить производительность процессора на целочисленных и логических операциях. В сочетании с выносом устройства для выполнения переходов на отдельный порт это позволяет выполнять операции SSE в полном темпе, по две упакованные арифметические операции за такт. При отсутствии дополнительного порта и устройств ALU функциональные устройства SSE простаивали бы в моменты запуска вспомогательных операций и операций перехода, и не достигался бы полный темп.

В новом процессоре активно используется механизм «слияния микроопераций» (micro-ops fusion), когда для инструкций загрузки из памяти с последующим исполнением (Load-Op) порождается единый МОП, содержащий два элементарных действия. Разделение на эти элементарные действия происходит при их запуске на исполнение (диспетчеризации) из очереди планировщика. Аналогичный механизм реализован и для инструкций выгрузки в память, когда порождается единый МОП для операции вычисления адреса и осуществления записи. Данный механизм был введён в процессоре P-M и похож на аналогичный механизм в процессорах AMD K7/K8.

Использование механизма слияния микроопераций снижает количество МОПов, порождаемых декодером. Если бы все обращения в память происходили в рамках инструкцийh2 загрузки с исполнением (Load-Op), то тогда пропускная способностьh2h2h2процессора ограничивалась бы числом портов запуска арифметико-логических операций и соответствующих функциональных устройств — то есть тремя, и темп обработки МОПов, определяемыйh2 остальными трактами процессора и равный четырём, не достигался бы. Однако на практике в силу ограниченности системы команд x86 очень часто используются отдельные инструкции загрузкиh2h2 либо выгрузки, благодаря чему могут быть эффективно загружены все четыре канала обработки. Наличие четвёртого канала особенно важно для эффективного исполнения плотных кодов арифметики с плавающей точкой. Например, при реализации алгоритма перемножения матрицh2 необходимо в каждом такте запускать одну операцию умножения, одну операцию сложения, одну операцию загрузки из памяти и ещё одну операцию (не в каждом такте) для работы с индексами, счётчиками и для организацииh2цикла. Настоящая реализация позволяет организовать такой цикл и обеспечиваетh2h2 возможности для запуска дополнительных вспомогательных операций (например, предвыборки из памяти) без снижения полного темпа работы устройств арифметики с плавающей точкой.

В процессоре P8 имеется только одно устройство для операций перехода, что ограничивает средний темп выполнения переходов одной операцией за такт. По существу это ограничение относится только к несовершённым условным переходам, так как на выполнение одного совершённого перехода требуется в среднем 2 такта (в связи с необходимостью считывания из кэша нового блока инструкций по целевому адресу). Если на каком-то отрезке кода операции перехода встречаются с большей частотой, эти операции будут буферизоваться в очереди планировщика и могут выполняться с некоторой задержкой (по одной за такт). В случае правильного предсказания направления перехода такая задержка не повлияет на время выполнения программы. Это связано с тем, что решение не совершать переход было принято и отработано в момент предсказания, а последующее выполнение операции перехода в функциональном устройстве должно лишь подтвердить его правильность.

Данное ограничение может снизить скорость работы программыh2h2 только в тех случаях, когда большое число операций перехода (составляющее более одной четверти от общего числа МОПов)h2 встречается в продолжительных циклических участках кода, выполняющихсяh2 в полном темпе (4 операции за такт). Следует отметить, что наличиеh2h2 в процессоре только одного функционального устройстваh2для операций перехода является осознанным решением разработчиков, а не принципиальным ограничением микроархитектуры.

Очередь планировщика в процессоре P8 представляет собой единый, полностью ассоциативный буфер с довольно сложной организацией. В каждом такте может производиться поиск и извлечение до шести элементов (МОПов) из этого буфера, и одновременно в него может быть помещено четыре новых МОПа. Для отправки на исполнение в буфере ищутся операции, аргументы которых уже вычислены либо вычисляются и будут готовы к моменту попадания в функциональное устройство. В процессорах P-III, P-M, P-M2 выбор среди нескольких готовых операций производился по упрощённому алгоритму, в связи с чем предпочтение не всегда отдавалось самым старым операциям. Из-за этого снижалась эффективность выполнения кода даже при оптимальном потактовом планировании машинных инструкций программистом или транслятором. Детали реализации единой очереди планировщика в новом процессоре пока неизвестны. Можно предположить, что алгоритм выборки операций для запуска на исполнения усовершенствован с учётом накопленного опыта.

Выбор организации очереди планировщика в виде единого буфера, общего для всех типов операций, несмотря на сложность реализации, обладает рядом важных преимуществ. Он позволяет обеспечить более сбалансированную загрузку функциональных устройств и избегать ситуаций, когда в одной очереди имеются готовые к исполнению операции, и нет свободных (на данный момент) функциональных устройств, а в другой — нет готовых операций, но есть свободные устройства того же типа. Возможным компромиссом могла бы стать реализация отдельных очередей для арифметико-логических и адресных операций, но в этом случае перед помещением в такие очереди пришлось бы разъединять МОПы операций типа Load-Op, объединяющие два элементарных действия. Это потребовало бы увеличения суммарного размера очередей планировщика без существенного упрощения их структуры.

Латентность большинства операций целочисленной арифметики составляет 1 такт, а их суммарный темп исполнения — 3 операции за такт, по одной в устройствах, подсоединённых к трём первым портам. Латентность операций арифметики с плавающей точкой такая же, как у процессоров семейства P6/P6+: 3 такта для сложения, 4 такта для умножения SSE, и 5 тактов для умножения SSE2 и x87.

Самой важной особенностью процессора P8 является реализация арифметики с плавающей точкой в 128-битных устройствах SSE, работающих в полном темпе. Теперь в каждом такте может бытьh2 выполнена одна упакованная операция умножения, одна упакованнаяh2 операция сложения и одна более простая упакованная операция.h2 Таким образом, предельный темп выполнения арифметическихh2операций FPU соответствует восьми 32-битным операциям за такт дляh2упакованного режима SSE, четырём 64-битным операциям за такт дляh2упакованного режима SSE2, и двум операциям за такт для скалярныхh2режимов SSE (при чередовании умножения и сложения). Для упакованныхh2 режимов это вдвое превышает быстродействие конкурирующихh2процессоров архитектуры x86 (P-4 и K8) в пересчёте на такт, а дляh2скалярных — соответствует процессору K8.

Единственным исключением является режим x87, в котором операции умножения исполняютсяh2 по-прежнему в половинном темпе (это связано с тем, что все операцииh2 x87 имеют повышенную точность и являются 80-битными). По этойh2причине предельный темп в режиме x87 составит от одной операции заh2такт (при чередовании умножения и сложения) до полутора (при соотношенииh2 одно умножение на два сложения), против двух операций за такт у процессора K8.

Помимо арифметики с плавающей точкой, в новом процессоре h2 очень эффективно реализованы упакованные операции целочисленной арифметики SSE2, также исполняемые в полном темпе. В каждом такте могут быть запущены две 128-битные операции сложенияh2 и одна 128-битная операция умножения; латентность этих операций составляет соответственно 1 и 3 такта. Также в каждом такте могут быть выполнены три 128-битные операции копирования регистров XMM с латентностью 1.

Для поддержки высокого темпа вычислений в упакованных режимах увеличена ширина доступа в память. Теперь в каждом такте может быть произведено одно 128-разрядное считывание из L1-кэша и одна 128-разрядная запись в L1-кэш. В целом одного считывания упакованного XMM-регистра за такт достаточно для обеспечения вычислений в режимах SSE/SSE2. Однако для целочисленных операций, а также для скалярных операций SSE темп в одно чтение из памяти за такт может ограничивать скорость выполнения кодов. При реализации плотных вычислительных циклов (например, в алгоритме перемножения матриц) такого темпа может оказаться недостаточно для достижения пиковой скорости работы FPU в упакованным режиме. Это связано с тем, что, помимо одной операции 128-битной загрузки на каждую пару операций умножения и сложения, раз в несколько тактов может потребоваться дополнительная операция загрузки. Данное требование может снизить предельно достижимый темп работы FPU до 85-90 процентов от пикового, либо может потребоваться более сложная схема раскрутки циклов для снижения числа обращений к памяти. Тем не менее, даже при неполной загрузке FPU процессор P8 становится лидером по пропускной способности в упакованных режимах SSE/SSE2 среди процессоров x86.

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

 
« Предыдущая статья   Следующая статья »