Реферат: Архитектура IA-32

Введение

В этой работепроводитьсяобзор основныхмоментов необходимыхдля оптимизациипрограммногообеспечениядля текущегопоколенияпроцессоровоснованныхна технологииIA-32, такихкак Intel Pentium4, Intel Xeon иIntel Pentium M.Работа даетбазу для пониманияправильногоподхода к кодированиюдля технологииIA-32.

Ключевые моменты, повышающиепроизводительностьпроцессоровтекущего поколенияна базе IA-32:

Расширение инструкций SIMD поддерживающих технологию MMX, потоковые расширения инструкций SIMD (SSE), потоковые расширения инструкций SIMD второй редакции (SSE2) и потоковые расширения инструкций SIMD третьей редакции (SSE3)

Микроархитектуры позволяющие выполнение большего количества инструкций на высоких тактовых частотах, иерархия высокоскоростных КЭШей и возможность получать данные по высокоскоростной системной шине

Поддержка технологии Hyper Threading

ПроцессорыIntel Pentium 4 иIntel Xeonпостроены намикроархитектуреNetBurst. МикроархитектурапроцессораIntel Pentium Mосновываетсяна балансепроизводительностии низкогоэнергопотребления.

ТехнологияSIMD

Один из путейк увеличениюпроизводительностипроцессора– это использованиетехнологиивычисленийоснованнойна том, что однакоманда оперируетмногими данными(single-instruction,multiple data(SIMD)).

Вычисленияс помощью SIMD(рисунок 1) представленыв архитектуреIA-32 технологиейMMX.ТехнологияMMX позволяетвычислениямSIMD производитьсянад упакованнымицелыми числамив виде байтов, слов и двойныхслов. Эти целыесодержатьсяв наборе извосьми 64-битныхрегистрахназываемыхMMX регистрами(рисунок 2).

В процессореIntel Pentium IIIтехнологияSIMD была расширенас помощью потоковыхрасширенийSIMD (SSE). SSEпозволяетпроизводитьвычисленияSIMD над операндами, содержащимичетыре упакованныхэлемента сплавающейточкой одинарнойточности. Этиоперанды могутхраниться какв памяти, таки в одном из128-битных регистровназываемыхXMM регистрами(рисунок 2). SSE такжерасширяетвычислительныеспособностиSIMD, путем добавлениядополнительных64-битных MMXкоманд.

Рисунок 1 показываеттипичную схемувычисленийSIMD. Два блокапо четыре упакованныхэлемента данных(X1, X2,X3, X4и Y1, Y2,Y3,Y4), обрабатываемыхпараллельнос помощью однойоперацией надкаждой паройэлементовданных (X1и Y1, X2и Y2, X3и Y3 и X4и Y4). Результатычетырех параллельныхвычисленийсортируютсяв набор из четырехэлементовданных.

/>

Рисунок 1. СхемавычисленийSIMD


В процессорахPentium 4 и IntelXeon модельвычисленийSIMD была далеерасширена спомощью SSE2и SSE3.

SSE2 работает соперандами, хранящимисяв памяти илив XMM регистрах.ТехнологияSSE2 расширяетвычисленияSIMD для работыс упакованнымиэлементамиданных с плавающейточкой двойнойточности и128-битными упакованнымицелыми числами.В SSE2 введены144 дополнительныекоманды дляработы с двумяэлементамиданных с плавающейточкой двойнойточности илинад упакованнымицелыми числамив виде шестнадцати байтов, восьмислов, четырехдвойных слови двух четверныхслов.

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

Полный набортехнологийSIMD (MMX, SSE,SSE2, SSE3) втехнологииIA-32 даетвозможностьпрограммистуразрабатыватьалгоритмы, совмещающиеоперации надупакованными64-битными и128-битными целыми, и операндамис плавающейточкой одинарнойи двойной точности.

/>

Рисунок 2. РегистрыSIMD


SIMD улучшаетвыполнение3D графики, распознаваниеречи, обработкиизображений, научных приложенийи приложенийудовлетворяющихследующимхарактеристикам:

Внутренняя параллельность

Рекурсивный доступ к областям памяти

Локальные рекурсивные операции над данными

Контроль над потоком независимых данных

ИнструкцииSIMD для работыс числами сплавающейточкой полностьюподдерживаютстандарт IEEE754 «для бинарнойарифметикичисел с плавающейточкой». Онидоступны вовсех режимахработы процессора.

ТехнологииSSE, SSE2 иMMX – этоархитектурныедополненияархитектурыIA-32. SSE иSSE2 также включаютинструкциикэшированияи организациипамяти, которыемогут улучшитьиспользованиеКЭШа и производительностьприложений.

Краткое обозрениетехнологийSIMDТехнологияMMX

ТехнологияMMX основываетсяна:

64-битных MMX-регистрах

поддержке операций SIMD над упакованными целыми в виде байтов, слов и двойных слов

ИнструкцииMMX полезныв мультимедийныхи коммуникационныхприложениях

SSE

SSE основываетсяна:

128-битных XMM-регистрах

128-битных типах данных, содержащих четыре упакованных операнда с плавающей точкой одинарной точности

инструкциях предвыборки данных

инструкциях хранения в течение неопределенного срока и других инструкций кэширования и упорядочивания памяти

дополнительной поддержке 64-битных целых SIMD

ИнструкцииSSE полезныпри обработкетрехмернойгеометрии,3D-рендеринга, распознаванияречи, а такжедля кодированияи декодированиявидео.

SSE2

SSE2 добавляютследующее:

128-битный тип данных с двумя упакованными операндами с плавающей точкой двойной точности

128-битные типы данных для целочисленных операций SIMD над целыми в виде шестнадцати байт, восьми слов, четырех двойных слов или двух четверных слов.

Поддержку арифметики SIMD над 64-битными целочисленными операндами

Инструкции для конвертирования между новыми и существующими типами данных

Дополнительная поддержка перемешивания данных

Дополнительная поддержка операций кэширования и упорядочивания памяти

ИнструкцииSSE2 полезныдля обработки3D графики, кодированияи декодированиявидео и шифрования.

SSE3

SSE3 добавляетследующее:

SIMD операции с плавающей точкой для ассиметричных и горизонтальных вычислений

Специальную 128-битную загрузочную инструкцию для избежания разделения нити КЭШа

x87 FPU – инструкцию для конвертирования в целое независимо от FCW (floating-point control word)

инструкции для поддержки синхронизации потоков

ИнструкцииSSE3 могутприменятьсяв научных, видеои многопоточныхприложениях.

МикроархитектураIntel NetBurst

В этом разделеописываютсяосновные моментымикроархитектурыIntel NetBurst.Он дает техническуюбазу необходимуюдля пониманияоптимизационныхрекомендацийи правил кодированияпроцессоровIntel Pentium 4 иIntel Xeon.

МикроархитектураIntel NetBurstона спроектированадля достижениявысокой производительностипри целочисленныхвычисленияхи вычисленияхоперандов сплавающейточкой на высокихчастотах. Онаосновываетсяна следующихмоментах:

гиперковейерная технология позволяющая работать на высоких частотах (до 10 ГГц)

высокопроизводительный, четырехкратный шинный интерфейс для системной шины микроархитектуры Intel NetBurst

скоростной движок для снижения задержек исполнения целочисленных инструкций

спекулятивное разупорядоченное исполнение для поддержки параллелизма

суперскалярная выдача для поддержки параллелизма

поддержка аппаратного переименования регистров для исключения ограничений пространства имен

64-байтные нити КЭШа

аппаратная предвыборка

Цели, для которыхбыла разработанаМикроархитектураIntel NetBurst

Цели, для которыхбыла разработанаМикроархитектураIntel NetBurst:

для обеспечения наследственности приложений IA-32 и приложений основанных на SIMD на высокопроизводительных системах

для оперирования на высоких тактовых частотах и для масштабирования высокой производительности и высоких тактовых частот в будущем

ПреимуществамикроархитектурыIntel NetBurst:

многоконвейерный дизайн позволяющий работать на высоких тактовых частотах (различные части кристалла работают с различными тактовыми частотами)

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

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

Обзор конвейерамикроархитектурыIntel NetBurst

КонвейермикроархитектурыIntel NetBurstсостоит из:

блока начальной загрузки упорядоченных команд

беспорядочного суперскалярного исполнительного ядра

блок изъятия упорядоченных команд

Блок начальнойзагрузки поставляетинструкциюв программномпорядке вбеспорядочноеядро. Оно выбираети декодируетинструкцииIA-32. Декодированныеинструкциипереводятсяв микрокоманды.Основная задачаблока начальнойзагрузки состоитв доставлениинепрекращающегосяпотока микрокомандв исполнительноеядро в программномпорядке.

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

Секция изъятияубеждается, что результатыобработкипроизвелисьв правильномпорядке и чтоправильныеархитектурныережимы обновлены.

Рисунок 3 отображаетсхему основныхфункциональныхблоков конвейерамикроархитектурыIntel NetBurst.Ниже перечисленныеразделы проводятобзор каждогоиз блоков.

/>

Рисунок 3. МикроархитектураIntel NetBurst


Блок начальнойзагрузки

Блок начальнойзагрузкимикроархитектурыIntel NetBurstсостоит из двухчастей:

Блок выборки/декодирования

Исполнительный кэш трасс

Он выполняетследующиефункции:

Предвыборка инструкций IA-32 предпочтительных для исполнения

Выборка требуемых инструкций, которые не были предвыбраны

Декодировка инструкций в микрокоманды

Генерация кода сложных инструкций и кода специального назначения

Доставка декодированных инструкций из исполнительного КЭШа трасс

Предсказание ветвлений на основе улучшенного алгоритма

Блок начальнойзагрузки разработандля избежаниядвух проблемявляющихсяисточникамизадержек:

Уменьшение времени необходимого для декодирования инструкций полученных из источника

Уменьшения бесполезного кода связанного с ветвлениями или точками ветвления внутри нити КЭШа

Инструкциидекодируютсяи выбираются«переводящим»движком. «Переводящий»движок затемпреобразуетдекодированныеинструкциив последовательностимикрокомандназываемыетрассами. Далеетрассы помещаютсяв исполнительныйкэш трасс.

Исполнительныйкэш трасс сохраняетмикрокомандына пути исполненияпотока программы, где результатыветвлений вкоде уже интегрированыв ту же нитьКЭШа. Это увеличиваетпоток инструкцийиз КЭШа и позволяетиспользоватьобъем КЭШаболее эффективно, так как нетнеобходимостихранить в неминструкции, которые ответвилисьи никогда небудут обработаны.

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

Беспорядочноеядро

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

Ядро спроектированотак, чтобыорганизоватьпараллельноевыполнение.Оно может отправлятьдо шести микрокомандв порты выводаза цикл (рисунок4). Заметим, чтошесть микрокомандпревосходятмощность КЭШатрасс и блокаизъятия. Большаямощность ядрасделана, чтобы не обращатьвнимание нанагрузки болеетрех микрокоманди для достижениябольшей производительностивыдачи с помощьюгибкости привыдаче микрокомандв различныеисполнительныепорты.

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

Секция изъятий

Секция изъятийполучает результатывыполненныхмикрокомандиз исполнительногоядра и выстраиваетих в соответствиис оригинальнымпорядком впрограмме. Длясемантическиправильногоисполнения, результатыинструкцийIA-32 должныбыть восстановленыв оригинальномпорядке передих извлечением.

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

Секция изъятиятак же наблюдаетза ветвлениямии отсылаетобновленнуюинформациюо точках ветвленияв буфер точекветвлений(BTB). Это позволяетобновлятьисторию ветвлений.Рисунок 3 отображаетпути часто гоисполнениявнутри микроархитектурыIntel NetBurst, такие какисполнительныециклы, взаимодействующиес иерархиейуровней КЭШаи системнойшиной.

Следующиеразделы даютболее детальноеописание операцийблока начальнойзагрузки иисполнительногоядра.

Обзор блоканачальнойзагрузки конвейера

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

Предвыборка

МикроархитектураIntel NetBurstиспользуетследующиемеханизмыпредвыборки:

Аппаратный выборщик инструкций, автоматически предвыбирающий инструкции

Аппаратный механизм, который автоматически выбирает данные и инструкции и помещает их в унифицированный кэш второго уровня

Механизм выборки только данных состоящий из двух частей:

аппаратный механизм для выборки смежных нитей КЭШа в 128-байтном секторе, содержащем данные необходимые в случае сбоя нити, или необходимы для предвыборки нитей КЭШа

программно контролируемый механизм, выбирающий данные и помещающий их в кэш, использующий инструкции предвыборки

Аппаратныйвыборщик инструкцийчитает инструкциипо пути, предсказанномув буфере точекветвления(BTB), в потоковыебуферы инструкций.Данные считываютсяв 32-байтные блоки, начиная с адресаточки. Второйи третий механизмбудут рассмотреныпозднее.

Декодер

Блок начальнойзагрузкимикроархитектурыIntel NetBurstимеет одиндекодер, которыйдекодируетинструкциис максимальнойчастотой в однуинструкциюза такт. Некоторыесложные инструкциидолжны поддерживатьсяс помощьюROM-микрокода.Операции декодерасвязанны сКЭШем трасс.

Исполнительныйкэш трасс

Исполнительныйкэш трасс (TC)– это основнойкэш инструкцийв микроархитектуреIntel NetBurst.Кэш трасс хранитдекодированныеинструкции(микрокоманды)IA-32.

В реализациипроцессоровIntel Pentium 4 иIntel Xeon, кэштрасс можетхранить до 12тысяч микрокоманди выдавать дотрех микрокомандза цикл. Кэштрасс не хранитвсе микрокомандынеобходимыедля обработкив исполнительномядре. В некоторыхситуациях, исполнительномуядру необходимовыполнить потокмикрокода, вместо трассмикрокоманд, хранящихсяв КЭШе трасс.

ПроцессорыIntel Pentium 4 иIntel Xeonоптимизированыдля выполнениячасто-используемыхIA-32 инструкций, в то время кактолько некоторыеинструкциивовлекают впроцесс декодированияROM-микрокода.

Предсказаниеветвей

Предсказаниеветвей оченьважно дляпроизводительностипроцессоровс большим конвейером.Это позволяетпроцессоруначать работузадолго до тогокак будет дотошноизвестен результатветвления.Задержка приветвлении –это расплатаза неправильноепредсказаниеветвление. ДляпроцессоровIntel Pentium 4 иIntel Xeonзадержка приправильномпредсказанииможет бытьнулевой. Задержкаже при неправильномпредсказанииможет бытьмножествоциклов, обычноона равна глубинеконвейера.

Предсказаниеветвей в микроархитектуреIntel NetBurstзатрагиваетвсе ближниеветвления(условные вызовы, безусловныевызовы, возвратыи тупиковыеветви). Но незатрагиваетдальние переходы(дальние вызовы, неопределенныевозвраты, программныепрерывания).


--PAGE_BREAK--

Механизмывнедренныедля более точногопредсказанияветвей и затратна их обработку:

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

Если нет возможности динамического предсказания или оно не правильное, то существует возможность статического предсказания результата основанного на замене цели: задняя ветвь берется за основную, а основная не берется.

Возможность предсказания адресов возвратов, с помощью 16-разрядного стека адресов возвратов

Возможность строить трассы инструкций по всей взятой ветви для избежания расплаты за неправильно предсказание

Статическийпредсказатель.Как толькоинструкцияветвлениядекодирована, направлениеветви (впередили назад)становитьсяизвестным. ЕслиBTB нет упоминанийоб этом ветвлении, статическийпредсказательделает предсказание, основываясьна направленииветви. Механизмстатическихпредсказанийпредсказываетзадние условныецели (например, с отрицательнымперемещением, такие как ветвиоканчивающиесяциклом) какосновные. Впереднаправленныеветви предсказываютсякак не основные.

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

Буфер точекветвлений.Если доступнаистория ветвлений, процессор можетпредсказатьитог ветвлениядаже раньше, чем инструкцияветвления будетдекодирована.Процессориспользуеттаблицу историйветвлений иBTB для предсказаниянаправленияветвлений, основываясьна линейномадресе инструкции.Как тольковетвь изъята,BTB обновляетадреса точек.

Стек возврата.Возвраты происходятвсегда. Но стех пор какпроцедура можетбыть вызванаиз несколькихмест, технологияпредсказанияодной точкине удовлетворяетпотребностям.ПроцессорыIntel Pentium 4 иIntel Xeon стеквозвратов, который можетпредсказыватьадрес возврата, для несколькихмест вызовапроцедуры. Этоувеличиваетвыгоду отиспользованияразвернутыхциклов содержащихвызовы функции.Это так же ослабляетнеобходимостьиспользованияближних процедур, так как уменьшенарасплата завозврат издальних процедур.

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

Обзор исполнительногоядра

Исполнительноеядро разработанодля оптимизацииобщей производительностипутем болееэффективногоуправленияисполнениемпростых ситуаций.Аппаратноеобеспечениеспроектированодля выполнениячастых операцийв простых случаяхкак можно быстрее, за счет нечастоисполняемыхопераций. Некоторыечасти ядрамогут предполагать, что текущеесостояниесохраняетсядля возможностибыстрого исполненияпохожих операций.Если бы этогоне было, машинабы стопорилась.Примером такойконструкцииможет служитьуправлениехранением-для-загрузки(store-to-load).Если загрузкапредсказаназависимой отхранения, онаполучает данныеиз этого хранилищаи предварительновыполняется.Если же загрузкане зависит отхранения, загрузказадерживаетсядо полученияреальных данныхиз памяти, затемона выполняется.

Задержка инструкцийи производительность

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

Выбор IA-32 инструкций так, чтобы они были декодированы меньше чем в четыре микрокоманды и/или имели меньшие задержки

Упорядочивание IA-32 инструкций для сохранения доступного параллелизма с помощью минимизирования цепочек длинной зависимости и перекрытия задержек длинных инструкций

Упорядочивание инструкций так, чтобы их операнды были готовы и их исполнительные блоки и выводные порты были свободны к моменту достижения ими диспетчера

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

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

Исполнительныеблоки и выводныепорты

На каждом циклеядро можетпосылать микрокомандыв один или несколькоиз четырехпортов вывода.На микроархитектурномуровне операциихранения делятсяна две группы:

операции хранения данных

операции хранения адресов

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

Порт 0. В первойполовине цикла, нулевой портможет вывестилибо одну сдвиговуюмикрокомандус плавающейточкой (сдвигстека для плавающейточки, обменмежду операндамис плавающейточкой илисохранениеданных с плавающейточкой), либоодну из микрокомандарифметико-логическогоустройства(арифметические, логические, ветвление илисохранениеданных). Во второйполовине циклапорт можетвывести схожуюмикрокомандуАЛУ.

Порт 1. В первойчасти циклипервый портможет вывестилибо одну изисполнительныхопераций сплавающейточкой (всеисключительныесдвиговыеоперации сплавающейточкой, всеоперации SIMD), либо однуарифметическуюАЛУ микрокоманду.Во второй частицикла портможет вывестиодну схожуюмикрокомандуАЛУ.

Порт 2. Этотпорт обеспечиваетвывод однойзагрузочнойоперации зацикл.

Порт 3. Этотпорт обеспечиваетвывод однойоперации сохраненияадреса за цикл.

Общая выводнаямощность можетварьироватьсяот нуля до шестимикрокомандза цикл. Каждыйконвейер состоитиз несколькихисполнительныхблоков. Микрокомандапомещаетсяв блок конвейера, отвечающийправильномутипу операций.Например, целочисленныйАЛУ и блок исполненияопераций сплавающейточкой (сумматор, множитель илиделитель) могутразделять одинконвейер.

/>

Рисунок 4. Исполнительныеблоки и портыбеспорядочногоядра

Кэши

МикроархитектураIntel NetBurstподдерживаетдо трех уровнейвстроенногоКЭШа. По крайнеймере, два уровняКЭШа встроеныв процессоры, основанныена микроархитектуреIntel NetBurst.ПроцессорыIntel Xeon MPмогут содержатькэш третьегоуровня.

Кэш первогоуровня (ближайшийк исполнительномуядру) состоитиз раздельныхКЭШей инструкцийи данных. Онивключают кэшданных первогоуровня и кэштрасс (улучшенныйкэш инструкцийпервого уровня).Все остальныекэши делятсямежду инструкциямии данными.

Уровни в иерархииКЭШа не взаимовключающие.Факт того, чтонить находитьсяна уровне Nне означает, что она так женаходитьсяна уровне N+1.Все кэши используюталгоритм заменпсевдо-НЧИ(наименее частоиспользуемые).

Таблица 1 приводитсравнительныепараметры КЭШейвсех уровнейпроцессоровPentium 4 и Xeon.

Таблица 1. Параметрыкэша процессоровPentium 4 и IntelXeon

/>


На процессорахбез КЭШа третьегоуровня, промахКЭШа второгоуровня инициируеттранзакциючерез интерфейссистемной шиныв подсистемупамяти. Напроцессорахс тремя уровнямиКЭШа, промахКЭШа третьегоуровня инициируеттранзакциючерез системнуюшину. Транзакциязаписи черезшину записывает64 байта в кэшируемуюпамять, илираздельныевосьми байтныеконтейнеры, если местоназначенияне кэшируется.Транзакциячтения черезшину из кэшируемойпамяти извлекаетдве нити данныхКЭШа.

Интерфейссистемной шиныподдерживаетработу с масштабируемойчастотой шиныи достигаетэффективнойскорости вчетыре разапревышающейскорость шины.Маршрут отвхода в шинуи обратно занимаетдвенадцатьпроцессорныхциклов, и отшести до двенадцатициклов длядоступа к памяти, если шина неперегружена.Каждый циклшины соответствуетнесколькимциклам процессора.Отношениетактовой частотыпроцессорак масштабируемойтактовой частотесистемной шины, если один циклшины. Например, один цикл шиныс частотой 100МГц эквивалентенпятнадцатициклом процессорав 1,5 ГГц процессоре.

Предвыборкаданных

ПроцессорыIntel Xeon иPentium 4 имеютдва механизмапредвыборкиданных: программноуправляемаяпредвыборкаи автоматическаяаппаратнаяпредвыборка.

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

Программноуправляемаяпредвыборкаданных можетпринести выгодув следующихситуациях:

когда блок команд доступа к памяти в приложении позволяет программисту перекрыть задержки доступа к памяти

когда точный выбор может быть сделан, основываясь на знании количества нитей кэша к выбору в дальнейшем перед исполнением текущей нити

когда выбор может быть сделан, основываясь на знании того, какую предвыборку необходимо использовать

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

минимизирует нарушения временных данных в других уровнях кэша

предупреждает необходимость доступа к внекристальным КЭШам, что может увеличить реализованную мощность относительно неправильной загрузки, которая перегружает данные во все уровни кэша

Ситуации, вкоторых нежелательноиспользоватьпрограммноуправляемуюпредвыборку:

в случаях, когда запросы определены, предвыборка приводит к увеличению требований запросов

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

слишком близкая предвыборка может снизить возможность к перекрытию задержек доступа к памяти и выполнения

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

Автоматическаяаппаратнаяпредвыборка– механизм, реализованныйв процессорахIntel Xeon иIntel Pentium 4.Она заноситнити кэша вунифицированныйкэш второгоуровня, основанныйна ранних независимыхмоделях.

Плюсы и минусыпрограммнойи аппаратнойпредвыборки

Программнаяпредвыборкаимеет следующиехарактеристики:

обрабатывает необычные модели доступа, которые не перехватываются аппаратным предвыборщиком

обрабатывает предвыборку коротких массивов и не имеет аппаратной начальной задержки перед инициацией выборок

должна быть добавлена в каждый новый код, так что она не относится к уже запущенным приложениям

Аппаратнаяпредвыборкаимеет следующиехарактеристики:

работает с уже существующими приложениями

не требует хорошего знания инструкций предвыборки

требует постоянных моделей доступа

предупреждает перегрузку инструкций и выводных портов

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

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

Загрузка ихранение

В процессорахIntel Xeon иPentium 4 реализованыследующиемеханизмыувеличенияскорости обработкиопераций спамятью:

спекулятивное выполнение загрузок

реорганизация загрузок с учетом загрузок и хранений

буферизация записей

управление потоком данных из хранилищ в зависимые загрузки

производительностьможет бытьувеличена нес помощью шириныканала выводапамяти, а буферизациейресурсовпредоставляемыхпроцессором.По одной операциизагрузки ихранения можетбыть выданоиз станциирезервированияпортов памятиза цикл. Длятого, чтобыбыть помещеннойв станцию хранения, для каждойоперации спамятью долженбыть доступенбуферизированныйвход. Имеются48 загрузочныхи 24 хранящихбуфера. Этибуфера содержатмикрокомандыи адреснуюинформациюдо тех пор, покаоперация невыполнена, извлечена иперемещена.

ПроцессорыIntel Pentium 4 иIntel Xeonспроектированыдля исполненияопераций памятив беспорядочномрежиме относительнодругих инструкцийи относительнодруг друга.Загрузки могутвыполнятьсяспекулятивно, то есть до тогокак найденырезультатывсех ветвлений.Несмотря наэто, спекулятивныезагрузки немогут вызватьошибку страницы.

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

Промах кэшадля загрузкине предотвращаетдругие загрузкиот выдачи изавершения.ПроцессорыIntel Xeon иподдерживаютдо 4 (8 для IntelXeon и Pentium4 с сигнатуройCPUID относящихсяк семейству15, модели 3) исключительныхпромаха загрузки, произведенных, как кэшем вкристалле, таки памятью.

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

Управлениехранением

Загрузка можетбыть сдвинутаотносительнохранения, еслине предсказанозагружать потому же линейномуадресу, что ихранение. Еслиони действительнопроизводятчтение по томуже линейномуадресу, онидолжны дождатьсяпока сохраненныеданные не станутдоступными.Несмотря наэто, им не требуетсяждать, покахранилищесделает записьв иерархиюпамяти и закончитработу. Данныеиз хранилищамогут бытьнаправленынапрямую, есливыполняютсяследующиеусловия:

Очередность: данные, направляемые в загрузку, сгенерированы программно ранее выполненным хранением

Размерность: загружаемые байты должны бать подмножеством (включая правильное подмножество, что одно и то же) байтов хранилища

Выравнивание: хранилище не может вращаться внутри границ нити кэша, и линейный адрес загрузки должен быть идентичен адресу хранилища

ТехнологияHyper-Threading

ТехнологияIntel Hyper-Threading (HT) поддерживаетсяспецифичнымичленамисемействIntel Xeon (Nocona) и Intel Pentium(Prescott). Технологияпозволяетприложениямпользоватьсяпреимуществамипараллелизма, представляемымина уровне заданийили потоковнесколькимилогическимипроцессорамивнутри одногофизического.В своей первойреализациив процессореIntel Xeon, НТпредставлялаодин физическийпроцессор какдва логических.Эти два логическихпроцессораимеют полныйнабор архитектурныхрегистров, разделяя ресурсыодного физическогопроцессора.Имея архитектурудвух процессоров, НТ встроеннаяв процессорвыглядит какдва процессорадля приложений, операционныхсистем и программногокода.

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

Рисунок 6 показываеттипичнуюшинно-основаннуюсимметричнуюмногопроцессорнуюсистему (SMP), основаннуюна процессорахподдерживающихтехнологиюНТ. Каждый логическийпроцессор можетвыполнятьпрограммныйпоток, позволяядвум потокамвыполнятьсяодновременнов одном физическомпроцессоре.

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

/>

Рисунок 5. ТехнологияHyper-Threadingна SMP

Производительныйпотенциал НТосновывается:

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

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

Ресурсы процессораи технологияHyper-Threading

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

Реплицированныересурсы

Архитектурнаямодель дублируютсядля каждогологическогопроцессора.Архитектурнаямодель состоитиз регистровиспользуемыхоперационнойсистемой ипрограммногокода контролирующеговзаимодействиепрограмм ихранение данныхдля вычислений.Эта модельвключает восемьрегистровспециальногоназначения, контролирующиерегистры, регистрыотладки и т.д.За исключениемMTRRs – регистров(memory typerange registers)и ресурсовмониторингаза производительностью

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

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

Разделенныересурсы

Несколькобуферов делятсяпополам междупроцессорами.Они относятсяк разделеннымресурсам. Причиныэтого деления:

Операционная равнодоступность

Возможность операций одного логического процессора не зависеть от зависших операций другого логического процессора

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

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

В случае буферовзагрузки ихранения, делениетак же производитьсяв легком варианте, для полученияреорганизациипамяти длякаждого логическогопроцессораи для определенияошибок организациипамяти.

Разделяемыересурсы

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

Микроархитектураконвейера итехнологияНТ

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

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

Блок начальнойзагрузки конвейера

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

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

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

Исполнительноеядро

Ядро можетвыдавать дошести микрокомандза цикл, готовыхк исполнению.Как толькомикрокомандапомещена вочередь, ожидаявыполнения, нет разницымежду тем изкакого процессорапришла этаинструкция.Исполнительномуядру и иерархиипамяти так жебезразлично, к какому процессорупринадлежатинструкции.

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

Извлечение

Логика извлеченийследит, когдаинструкциииз двух логическихпроцессоровготовы к извлечению.Она извлекаетинструкциив программномпорядке длякаждого логическогопроцессорапо очереди.Если один излогическихпроцессоровне готов к извлечениюлюбой инструкции, все изъятыеинструкциинаправляютсяв другой процессор.

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

Список использованнойлитературы

IA-32 Intel® Architecture OptimizationReference Manual

www.intel.com

www.iXTB.com

www.allintel.ru



еще рефераты
Еще работы по информатике