Микропроцессор Intel Itanium 9300

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информатика, ВТ, телекоммуникации
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    265,92 Кб
  • Опубликовано:
    2015-05-13
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Микропроцессор Intel Itanium 9300

Введение

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

Серия процессоров Intel Itanium 9300 с кодовым именем Tukwila была представлена 8 февраля 2010 года.

Процессор производился по 65 нм технологии, содержит четыре ядра, до 24 мегабайт кэша на кристалле процессора, поддерживает технологию Hyper-Threating и снабжен интегрированным контроллером памяти. Реализована поддержка процессорной шины QPI. Пиковая межпроцессорная производительность достигла 96 ГБ/с, пиковая производительность подсистемы памяти - 34 ГБ/с.

QuickPath применяется также в процессорах Nehalem, что делает возможным использование одного чипсета. Tukwila объединяет четыре диспетчера памяти, каждый из которых через отдельные контроллеры памяти поддерживает множество модулей памяти DDR3 DIMM, как и Intel Xeon с кодовым именем Beckton, основанному на ядре Nehalem.

Intel Itanium 9300 является первым в мире микропроцессором, который содержит 2 миллиарда транзисторов.

Серия микропроцессоров ориентирована на серверный сегмент рынка IT.

1. Архитектура Intel Itanium

.1 Введение в архитектуру Intel Itanium

Процессоры Intel Itanium 9300 серии (рисунок 1.1) имеют четырехъядерную архитектуру и поддерживают сокет LG1248. Каждое из ядер имеет кэш L1 (L1I 16 Кб, L1D 16 Кб), L2 (L2I 512 Кб, L2D 256 Кб) и L3 (6 Мбайт на ядро - до 24 Мбайт) уровней и работает на тактовой частоте до 1.86 ГГц. Всего устройство содержит 2 миллиарда транзисторов. Поддерживаемый тип оперативной памяти - DDR3-800.

Intel Itanium 9300 серии поддерживает технологии:

·   Intel QPI Hot-plug.

·        Intel QPI Link self-healing.

·        Intel QPI Clock fail-safe.

·        Intel QPI Data scrambling.

·        Intel SMI Hot-plug.

·        Intel Virtualization Technology.

·        «Горячая» установка CPU.

·        «Горячая» установка модулей памяти.

·        Зеркалирование памяти.

·        Очистка (scrubbing) памяти.

·        Мониторинг (patroling) памяти.

Потребление электроэнергии составляет 130/155/185 Ватт в зависимости от конкретной модели. Абсолютная температура работы устройства составляет -55пC/+125 пC. Температура для стабильной работы от -5 пC до 40 пC.


Рисунок 1.1 - Intel Itanium 9300

Устройство процессора представлено на рисунке 1.1:

Рисунок 1.1 - Устройство процессора Intel Itanium 9300

CPE0-CPE3 - агенты кэширования (Caching Agent, CPE). Интерфейсы CPE располагаются между ядрами процессора и последовательной кэш-когерентной шины типа точка-точка (Intel QuickPath Interconnect, QPI), предназначенной для соединения между процессором и чипсетом. Интерфейсы Bbox располагаются между контроллером памяти и QPI и взаимодействует с кэшем каталога. Каждый Bbox-интерфейс оснащен контроллером памяти Zbox. Контроллеры памяти поддерживают прерывание системного управления (System Management Interrupt, SMI). Процессор имеет 6 QPI-шин, 4 с полной полосой пропускания и 2 с половиной полосы.

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

Рисунок 1.2 - Последовательность импульсов напряжения для включения процессора

Рисунок 1.3 - Последовательность импульсов напряжения для выключения процессора

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

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

1.2 Работа вычислительной среды

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

·   работа в 32-битной системе IA-32.

·        работа в системе типа Itanium.

Архитектурная модель также поддерживает смешивание приложений IA-32 и Itanium внутри одной операционной системы типа Itanium. В табл. 1.1 описаны основные поддерживаемые операционные среды.

Таблица 1.1 - Основные операционные среды

Среда системы

Среда приложения

Как выполняется

IA-32

Набор инструкций IA-32

Приложения IA-32 в режимах R, P, V86 и операционная система. Совместимость с IA-32 Intel-процессорами Pentium, Pentium Pro, Pentium II и Pentium III.


Набор инструкций Itanium

Не поддерживается, приложения типа Itanium не могут выполняться в среде IA-32.

Itanium

P-режим IA-32

IA-32 P-режим в среде Intel Itanium


R-режим IA-32

IA-32 R-режим в среде Intel Itanium


V-режим IA-32

IA-32 V-режим в среде Intel Itanium


Набор инструкций Itanium

Выполняется как Itanium-приложение в операционной системе Intel Itanium

.3 Набор инструкций переходов

Внутри системной среды Itanium процессор может в любое время выполнять любые инструкции IA-32 или Itanium. Три специальные инструкции и прерывания задаются для переключения процессора между наборами инструкций Itanium и IA-32.

·        jmpe (IA-32 инструкция) переход к инструкции типа Itanium и переключение на набор инструкций типа Itanium.

·        br.ia (Itanium инструкция) переход к инструкции типа IA-32 и переключение на набор инструкций типа IA-32.

·        rfi (Itanium инструкция) “Return from interruption” задает возврат к IA-32 или Itanium инструкции.

·        Прерывания переводят процессор в набор инструкций типа Itanium не зависимо от условий прерывания.

Инструкции jmpe и br.ia обеспечивают малозатратный механизм для передачи управления между различными наборами инструкций. Эти инструкции обычно включены в “thunks” или “stubs” (“заглушки”) осуществляющие требуемое редактирование связей и вызовов условий для динамически и статически подключаемых библиотек.

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

·   Явный параллелизм

o      Механизмы взаимодействия компилятора и процессора

o   Массив ресурсов, дающий преимущество параллельным инструкциям.

o   128 регистров для целых и действительных чисел

o   Поддержка множества исполнительных устройств и портов памяти.

·   Свойства, которые увеличивают параллелизм уровня инструкций

o      Спекулятивность (которая минимизирует воздействие время ожидания)

o   Предикативность (которая устраняет переходы)

o   Программный конвейер циклов с уменьшением потерь

o   Предсказание переходов для уменьшения затрат на переходы

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

o      Специальная поддержка модульности программного обеспечения

o   Высокопроизводительная архитектура с плавающей точкой

o   Специальные мультимедиа-инструкции

Следующие разделы выдвигают на первый план эти важные особенности архитектуры Itanium.

 

.4 Параллелизм уровня инструкций


Параллелизм уровня инструкций (ILP) - это возможность выполнять несколько инструкций одновременно.

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

Архитектура Itanium включает механизмы, обеспечивающие преимущества ILP. Компиляторы для традиционных архитектур часто ограничены в своих возможностях по применению спекулятивной информации, поскольку они не могут гарантировать, что она всегда корректна. Архитектура Itanium позволяет компилятору использовать спекулятивную информацию без ущерба для корректности выполнения приложения. В традиционной архитектуре вызовы процедур ограничивают производительность, из-за сливания (spill) и заливания (fill) регистров. Архитектура Itanium позволяет процедурам передавать применение регистров процессору. Это позволяет процессору планировать процедурные регистровые операции даже при низкой степени ILP.

Архитектура Itanium обеспечивает такие механизмы как шаблоны инструкций, подсказки (hint) переходов и кэш-подсказки позволяющие компилятору передавать процессору информацию из процесса компиляции. Дополнительно, это позволяет компилировать код для руководства устройствами процессора, использующими информацию в процессе выполнения. Эти коммуникационные механизмы необходимы для минимизации потерь производительности связанных с переходами и кэш-промахами.

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

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

 

.5 Спекулятивность


Существует два типа спекулятивности: по управлению и по данным. В обоих спекулятивностях компилятор, используя ILP, запускает действие заранее и устраняя время ожидания этого действия для критического пути. Компилятор запустит действие спекулятивно, если он будет резонно уверен, что спекуляция будет выгодна. Чтобы было выгодно должны выполняться два условия: (1) это должно быть статистически достаточно часто, чтобы вероятность того, что потребуется восстановление, была мала и (2) запуск операции заранее, должен дать дополнительную ILP-повышенную оптимизацию. Спекулятивность - это один из первичных механизмов для компилятора, чтобы использовать статистический ILP, путем совмещения, и поэтому допустимости задержек операций.

Спекулятивность по управлению

Спекулятивность по управлению - это выполнение операции до перехода на ветвь программы, содержащую эту команду. Рассмотрим следующую последовательность кода:

if (a>b)       load (ld_addr1,target1)           load (ld_addr2,target2)

Если операция load (ld_addr1,target1) была выполнена предварительно, до завершения проверки (a>b), то операция будет спекулятивной по управлению по отношению к управляющему условию (a>b). При нормальном выполнении операция load (ld_addr1,target1) может быть выполнится, а может быть и нет. Если новая спекулятивная загрузка по управлению явится причиной исключения, то исключение будет обслуживаться, только если (a>b). Когда компилятор использует спекуляцию по управлению, он оставляет операцию проверки на своем месте. Проверка проверяет, произошло ли исключение и если да, то переходит к восстанавливающему (recovery) коду. Теперь последовательность кодов преобразуется примерно так:

/* до критического пути */

sload (ld_addr1,target1)

sload (ld_addr2,target2)

/* кроме операторов использующих target1/target2 */

if (a>b) scheck (target1, recovery_addr1)scheck (target2, recovery_addr2)

 

Спекулятивность по данным

Спекулятивность по данным - это выполнение загрузки из памяти до сохранения, которое предшествовало ему, и которое может потенциально изменить ее. Спекулятивная загрузка данных также упоминается как «предварительная загрузка» (“advanced load”). Рассмотрим следующую последовательность кода:

store(st_addr,data)

load (ld_addr,target)

use (target)

Процесс определения времени вычисления взаимоотношения между обращениями к памяти называется снятием неопределенности (disambiguated). Если в приведенном примере не может быть снята неопределенность между st_addr и ld_addr, и если загрузка была выполнена ранее сохранения, то это будет спекулятивная загрузка по данным относительно сохранения. Если адреса памяти накладываются друг на друга, то спекулятивная загрузка данных запущенная раньше сохранения, вернет значение, отличающееся от того, которое было бы при нормальном запуске загрузки после сохранения. Поэтому, по аналогии со спекулятивностью по управлению, когда компилятор спекулятивно делает загрузку данных, то на первоначальное место загрузки вставляется инструкции проверки. Проверка проверяет, произошло ли наложение и если это так, то обращается к восстанавливающему коду. Теперь последовательность кодов преобразуется примерно так:

/* до критического пути */

aload (ld_addr,target)

/* кроме операторов использующих target */(st_addr,data)(target,recovery_addr) (target)

 

Предикация

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

Рассмотрим инструкцию без предикатов

r1 = r2 + r3

если ее предикатировать, то она примет вид

if (p5) r1 = r2 + r3

В этом примере р5 является условием (предикатом) управления, который решает - будет или не будет эта инструкция выполняться и изменять состояние. Если значение условия - истина, то инструкция обновит состояние. В противном случае она эквивалента NOP. Предикаты - это значения назначенные командами сравнения.

Предикативное выполнение устраняет переходы и упрощает компилятору оптимизацию путем превращения зависимости по управлению в зависимость по данным. Пусть есть исходный код:

if (a>b) c = c + 1

else d = d * e + f

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

pT, pF = compare(a>b)(pT) c = c + 1(pF) d = d * e + f

Если условие будет истинным, то предикат рТ будет установлен в 1, иначе - в 0. Предикат pF является обратным по отношению к рТ. Зависимость по управлению в инструкциях c = c + 1 и d = d * e + f выраженная в переходе по условию (a>b) теперь, преобразуется в зависимость по данным рТ и pF, которые получаются в результате операции compare(a>b), а переход ликвидируется. Дополнительный выигрыш состоит в том, что компилятор может планировать инструкции с рТ и pF для параллельного выполнения. Стоит также отметить, что имеется несколько различных типов инструкций сравнения, которые записывают предикаты в различной манере включая безусловное сравнение и параллельное сравнение.

 

.6 Стек регистров


Архитектура Itanium избегает, если это не необходимо заполнения и очистки регистров при вызове процедур и обеспечивает интерфейс возврата через переименование управляемое компилятором. В узле вызова новое окно регистров оказывается доступным для вызванной процедуры без необходимости сливания (spill) и заливания (fill) регистров (как вызывающей, так и вызываемой процедурами). Доступ к регистрам осуществляется путем переименования идентификаторов виртуальных регистров в инструкциях, используя набор регистров в физические регистры. Вызванная процедура может свободно использовать доступные регистры, не заботясь о сохранении и восстановлении регистров вызывающей процедуры. Вызванная процедура выполняет инструкцию alloc, задавая количество регистров, которое она собирается использовать, для того чтобы гарантировать, что доступно достаточно регистров. Если достаточное количество регистров недоступно (overflow - выход за верхнюю границу стека), то alloc останавливает процессор и сливает регистры вызвавшей программы до тех пор, пока не будет доступно необходимое количество регистров.

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

1.7 Переходы


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

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

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

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

1.8 Ротация регистров


Модульное планирование цикла аналогично тому, как в аппаратном конвейере функциональное устройство начинает следующую итерацию с начала цикла до того, как закончится предыдущая итерация. Итерация раздроблена на стадии подобные стадиям, выполняемым на конвейере. Модульное планирование позволяет компилятору выполнить итерацию цикла скорее параллельно, чем последовательно. Параллельное выполнение множества итераций традиционно требует разворачивания циклов и программного переименования регистров. Архитектура Itanium допускает переименование регистров обеспечивающих каждую итерацию своим собственным набором регистров, тем самым, устраняя потребность в разворачивании. Такой тип переименования регистров называется ротацией регистров (register rotation). В результате программный конвейер может применяться для сокращения издержек для более широкой разновидности циклов, как для маленьких, так и для больших.

1.9 Архитектура работы с плавающей точкой


Архитектура Itanium задает работу с плавающей точкой в соответствии с полной IEEE поддержкой для одинарного, двойного и расширенного двойного (80-битного) типов данных. Кое-что добавлено, например объединенная операция умножения и сложения, функции минимума и максимума, формат файла регистров с диапазоном большим, чем формат памяти с двойной расширенной точностью. Задается 128 регистров с плавающей точкой. Из них 96 регистров являются ротируемыми (не стековыми) и могут быть использованы для модульного планирования циклов. Множество регистров состояния с плавающей точкой обеспечивает спекулятивность.

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

1.10 Поддержка мультимедиа


Архитектура Itanium имеет мультимедиа инструкции, которые обращаются к основным регистрам как к соединениям элементов: восьми 8-битным, четырем 16-битным и двум 32-битным. Эти инструкции оперируют с каждым элементом параллельно, независимо от других. Они полезны для создания высокоскоростных алгоритмов сжатия/распаковки, которые используются видео- и аудио-приложениями. Мультимедиа инструкции Itanium совместимы семантически с мультимедиа технологией MAX-2 фирмы НР, а также c инструкциями технологии ММХ и SSE фирмы Intel.

1.11 Поддержка в операционных системах модели множественного адресного пространства


Наиболее современные коммерческие операционные системы используют модель множественного адресного пространства (Multiple Address Space - MAS) со следующими характеристиками:

Защита между процессами поддерживается путем помещения каждого процесса в отдельное адресное пространство. Буфера трансляции адресов (Translation Look-aside Buffers - TLB), которые хранят соответствие виртуальных и физических адресов часто нужно сбрасывать при переключении контекста процесса.

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

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

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

Для проектирования 64-битных операционных систем, стиль архитектуры с единым адресным пространством (single address space - SAS) является основным. Поскольку операционные системы (и другие большие, сложные программы подобные базам данных) мигрируют от монолитных программ в сотрудничающие подсистемы, SAS архитектура становится важным дифференцированием производительности в будущих системах. SAS или гибридные (hybrid) окружающие среды позволяют более эффективно использовать ресурсы аппаратных средств.

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

Производительность и масштабируемость достигаются с помощью разнообразных свойств. Атрибуты памяти, блокирующие примитивы, когерентность кэша и модель упорядочивания памяти, все вместе работают для обеспечения эффективного разделения в мультипроцессорной среде. Кроме этого, архитектура Itanium позволяет уменьшить задержку программ обработки ловушек, ошибок и прерываний вместе с легкими доменными переходами (light-weight domain crossings). Анализу производительности помогает включение нескольких мониторов производительности и механизмов поддерживающих профилирование программ.

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


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

.1 Состав прикладных регистров

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

·        General Registers (GRs) - основные регистры представлены регистровым файлом GR0-GR127. При выполнении инструкций IA-32, целочисленные и сегментные регистры IA-32 содержатся в GR8-GR31.

·        Floating-point Registers (FRs) - регистры с плавающей точкой образуют файл FR0-FR127. При выполнении инструкций IA-32, регистры с плавающей точкой и регистры мультимедиа IA-32 содержатся в FR8-FR31.

·        Predicate Registers (PRs) - однобитные предикатные регистры PR0-PR63, используются в предикации и ветвлении.

·        Branch Registers (BRs) - регистры переходов используемые в ветвлении (branching), BR0-BR7.

·        Instruction Pointer (IP) - указатель инструкции - регистр, который содержит адрес связки текущей выполняемой инструкции, либо байтовый адрес для инструкции IA-32.

·        Current Frame Marker (CFM) - маркер текущего окна - описывает текущее окно стека основных регистров и FR/PR ротацию.

·        Application Registers (ARs) - прикладные регистры - набор регистров специального назначения.

·        Performance Monitor Data Registers (PMD) - Регистры данных для аппаратного мониторинга производительности.

·        User Mask (UM) - маска пользователя - устанавливает однобитные значения используемые для настройки ловушек, мониторов производительности и наблюдения за использованием регистров с плавающей точкой.

·        Processor Identifiers (CPUID) - идентификаторы процессора - регистры, которые описывают свойства зависящие от конкретной реализации процессора.

Состав прикладных регистров IA-32, в целом, содержится внутри большого набора прикладных регистров Itanium и доступен инструкциям Itanium. Но инструкции IA-32, не имеют доступа к набору регистрам Itanium.

Резервируемые и игнорируемые регистры и поля

Регистры, которые не определены, являются либо зарезервированными, либо игнорируемыми. При обращении к зарезервированному регистру вызывается ошибка «Запрещенная операция». Чтение игнорируемого регистра возвращает ноль. Программа может записывать любое значение в игнорируемый регистр, но аппаратура проигнорирует эту запись. В наборах регистров изменяемого размера, регистры, которых нет в конкретном процессоре, являются зарезервированными. Обращение к одному из таких отсутствующих регистров приведет к ошибке «Зарезервированный регистр/поле». Если внутри заданных регистров есть поля, которые не определены, то такие поля являются либо зарезервированными, либо игнорируемыми. При чтении зарезервированных полей аппаратура будет всегда возвращать ноль. Программа всегда должна записывать нули в эти поля. В противном случае, при записи в такое поле не нулевого значения будет вызвана ошибка «Зарезервированный регистр/поле». Зарезервированные поля могут быть использованы в будущем.

При чтении игнорируемых полей аппаратура всегда возвращает 0 (если не отмечено иное). Программа может записывать в такое поле любое значение - аппаратура проигнорирует эту запись. В качестве исключения отметим, что некоторые игнорируемые поля IA-32, могут быть использованы в дальнейшем.

Таблица 2.1. обобщает, как процессор реагирует на обращение к зарезервированным и игнорируемым полям.

Таблица 2.1 - Реакция зарезервированных и игнорированных регистров и полей

Тип

Чтение

Запись

Резервирован.

Регистр

Вызов ошибки «Запрещенная операция»


Поле

0

При ненулевой записи вызывается ошибка «Зарезервированный регистр/поле»

Игнорируем.

Регистр

0

Запись игнорируется


Поле

0 (если иное не отмечено)

Запись игнорируется


Если регистр имеет неопределенное значение, то его поля являются зарезервированными. Программа всегда должна записывать только указанные значения в такие поля. В противном случае, запись резервированного значения вызовет ошибку «Зарезервированный регистр/поле». Некоторые регистры являются только читаемыми. Запись в такой регистр вызовет ошибку «Запрещенная операция».

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

·        Не зависеть от состояния любых резервированных полей. Маскировать все резервированные поля перед проверкой содержимого.

·        Не зависеть от состояния любых резервированных полей при сохранении в память или регистр.

·        Не зависеть от способности сохранения информации записанной в резервированные и игнорируемые поля.

·        Где возможно, загружайте резервируемые и игнорируемые поля значениями, предварительно считанными из того же регистра, либо загрузите их нулями.

Основные регистры

Набор из 128 (64-битных) регистров обеспечивает главный ресурс для всех целочисленных и мультимедиа- целочисленных вычислений. Они пронумерованы от GR0 до GR127 и доступны для всех программ на всех уровнях привилегий. Каждый основной регистр имеет 64 бита для хранения нормальных данных плюс дополнительный бит NaT (Not a Thing), который используется для отслеживания отложенных спекулятивных исключений.

Основные регистры разделены на два подмножества. Регистры от 0 до 31 называются статическими основными регистрами. Причем, GR0 сделан так, что если он является исходным операндом, то всегда читается как ноль, а попытка записи в GR0 вызовет ошибку «Запрещенная операция». Основные регистры с 32 по 127 называются стековыми основными регистрами. Стековые регистры делаются доступными для программ при выделении окна регистрового стека содержащего программируемое количество локальных и выходных регистров. Части регистрового стека могут быть программно переименованы для ускорения циклов. См. раздел 4.5.1 «Поддержка модульно планируемых циклов».

Основные регистры от 8 до 32 содержат регистры IA-32 - целочисленные, селекторы и дескрипторы сегментов.

Регистры с плавающей точкой

Набор из 128 (82-битных) регистров с плавающей точкой используется для всех вычислений с плавающей точкой. Они пронумерованы от FR0 до FR127 и доступны для всех программ на всех уровнях привилегий. Регистры с плавающей точкой разделены на два подмножества. Регистры от 0 до 31 называются статические регистры с плавающей точкой. Причем, FR0 и FR1 являются специальными. При использовании в качестве исходного операнда, FR0 всегда читается как +0.0, а FR1 всегда читается как +1.0. Если любой из них использовать в качестве приемника, то вызывается ошибка. Отложенные спекулятивные исключения записываются в виде специального регистрового значения, которое называется NaTVal (Not a Thing Value).

Регистры с плавающей точкой от 32 до 127 называются ротируемыми регистрами с плавающей точкой. Эти регистры могут быть программно переименованы для ускорения циклов.

Регистры с плавающей точкой от 8 до 32 содержат регистры IA-32 - с плавающей точкой и мультимедиа.

Предикатные регистры

Набор из 64 (1-битных) предикатных регистров используется для хранения результатов инструкций сравнения. Эти регистры пронумерованы от PR0 до PR63 и доступны для всех программ на всех уровнях привилегий. Эти регистры используются для условного выполнения инструкций.

Предикатные регистры разделены на два подмножества. Предикатные регистры от 0 до 15 называются статические предикатные регистры. Причем, при использовании в качестве исходного операнда PR0 всегда читается как 1, а при использовании в качестве приемника результат игнорируется. Статические предикатные регистры также используются в условном ветвлении.

Предикатные регистры с 16 по 63 называются ротируемые предикатные регистры. Эти регистры могут быть программно переименованы для ускорения циклов.

Регистры переходов

Набор из 8 (64-битных) регистров переходов используется для хранения информации о ветвлении. Они пронумерованы от BR0 до BR7 и доступны для всех программ на всех уровнях привилегий. Эти регистры используются для создания целевых адресов переходов при непрямых переходах.

Указатель инструкций

Указатель инструкций (IP) хранит адрес связки содержащей текущую исполняемую инструкцию. Этот регистр может быть прочитан прямо с помощью инструкции mov ip. Прямая запись в IP невозможна, но он увеличивается после выполнения инструкций и может быть установлен в новое значение при переходе. Поскольку связки инструкций являются 16-байтовыми и выровнены по 16-байтовой границе, то в младших четырех битах IP всегда содержатся нули. См. раздел 3.3 «Обзор кодирования инструкций». При выполнении набора инструкций IA-32, IP содержит 32-битный виртуальный линейный адрес текущей выполняемой инструкции IA-32, который дополнен нулями до 64 бит. Инструкции IA-32 выровнены на границу байта, поэтому младшие четыре бита IP предназначены для выполнения инструкций IA-32.

Прикладные регистры

Файл прикладных регистров включает в себя регистры данных специального назначения и управляющие регистры для видимых приложениями процессорных функций для наборов инструкций обоих архитектур, и для IA-32, и для Itanium. Эти инструкции могут быть доступны Itanium-приложениям (кроме отмеченных здесь случаев). Таблица 3.3. содержит список прикладных регистров.

Таблица 2.2 - Прикладные регистры

Регистр

Имя

Описание

ТИУ

AR0-7

KR0-7*

Регистры ядра (Kernel) 0-7

M

AR8-15


Зарезервировано

M

AR16

RSC

Регистр конфигурации стека регистров

M

AR17

BSP

Указатель вспомогательной памяти (только для чтения)

M

AR18

BSPSTORE

Указатель вспомогательной памяти для сохранений памяти

M

AR19

RNAT

Сборный регистр NaT механизма RSE

M

AR20


Зарезервировано

M

AR21

FCR

Регистр управления с плавающей точкой для IA-32

M

AR22, 23


Зарезервировано

M

AR24

EFLAG**

Регистр флагов для IA-32

M

AR25

CSD

Дескриптор сегмента кода для IA-32

M

AR26

SSD

Дескриптор сегмента стека для IA-32

M

AR27

CFLG*

Регистр, объединяющий CR0 и CR4 для IA-32

M

AR28

FSR

Регистр состояния с плавающей точкой для IA-32

M

AR29

FIR

Регистр инструкций с плавающей точкой для IA-32

M

AR30

FDR

Регистр данных с плавающей точкой для IA-32

M

AR31


Зарезервировано

M

AR32

CCV

Регистр значения сравнения и обмена

M

AR33-35


Зарезервировано

M

AR36

UNAT

Сборный регистр NaT пользователя

M

AR37-39


Зарезервировано

M

AR40

FPSR

Регистр состояния с плавающей точкой

M

AR41-43


Зарезервировано

M

AR44

ITC

Счетчик интервала времени

M

AR45-47


Зарезервировано

M

AR48-63


Игнорируются

M / I

AR64

PFS

Предыдущее функциональное состояние

I

AR65

LC

Регистр счетчика циклов

I

AR66

EC

Регистр счетчика эпилогов

I

AR67-111


Зарезервировано

I

AR112-127


Игнорируются

M / I


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

Kernel Registers. Восемь видимых пользователю 64-битных регистров обеспечивающих передачу информации от операционной системы в приложение. Эти регистры могут быть прочитаны на любом уровне привилегий, но запись возможна только на привилегированном уровне. Кроме того, если выполняется набор инструкция IA-32, то KR0-KR2 используются для хранения дополнительных регистров состояния IA-32.

Register Stack Configuration Register. Регистр конфигурации - это 64-битный регистр, используемый для управления работой механизма стека регистров (Register Stack Engine - RSE). Формат RSC представлен на рис. 2.3, а описание полей входящих в его состав дано в табл. 2.4. Инструкции, которые модифицируют RSC, не могут изменить поле уровня привилегий так, чтобы он стал более привилегированным, чем текущий выполняемый процесс.

Таблица 2.3 - Описание полей RSC

Поле

Биты

Описание

mode

1:0

Режим RSE - задает, насколько агрессивно RSE сохраняет и восстанавливает окна регистров. Задает активность и интенсивность установок.



Набор битов

Режим RSE

Бит0: активность загрузки

Бит1: активность запоминания



0 0

Ленивое слежение

Запрещена

Запрещена



1 0

Интенсивная загрузка

Разрешена

Запрещена



0 1

Интенсивное запоминание

Запрещена

Разрешена



1 1

Активность

Разрешена

Разрешена

pr

2:3

Уровень привилегий RSE. Загрузки и восстановления, выдаваемые RSE, делаются на этом уровне привилегий

bl

4

Режим упорядочивания (endian). Загрузки и восстановления, выдаваемые RSE, использует его для упорядочивания байт (0: по убыванию; 1: по возрастанию)


14:5

Зарезервировано

loadrs

29:15

Дистанция загрузки RSE до точки разрыва. Значение используется в инструкции loadrs для синхронизации RSE и точки разрыва


63:30

Зарезервировано

RSE Backing Store Pointer. Является 64-битным только читаемым регистром. Он содержит адрес места в памяти, где находится место хранения для GR32 в текущем стековом окне.

RSE NaT Collection Register. Является 64 битным регистром, который используется RSE для временного хранения NaT битов, когда он освобождает основные регистры. Бит 63 всегда читается как 0 и игнорируется при записи.

Compare and Exchange Value Register. Является 64 битным регистром, содержащим значение сравнения, которое используется как третий исходный операнд в Itanium инструкции cmpxchg.

Floating-point Status Register. Этот регистр управляет ловушками, режимами округления, точностью, флагами и другими управляющими битами для инструкций Itanium с плавающей точкой. Регистр FPSR не управляет и не отражает состояние инструкций IA-32 с плавающей точкой. Детальнее см. раздел «Регистр состояния с плавающей точкой».

Interval Time Counter. Это 64-битный регистр, который подсчитывает количество «тиков» частоты процессора. Приложения могут прямо считывать ITC для вычислений связанных со временем и для измерения производительности. Системные программы могут закрыть не привилегированный доступ к подсчету интервала времени. В случае такого закрытия, чтение ITC с уровнем привилегий ниже, чем был у закрывшей программы, вызовет ошибку «Привилегированный регистр». Регистр ITC может быть изменен только при большем уровне привилегий. Имеющийся в IA-32 регистр TSC (Time Stamp Counter), является эквивалентом ITC. Регистр ITC может быть прямо прочитан с помощью IA-32 инструкции rdtsc (read time stamp counter). Системные программы могут закрыть ITC для непривилегированного IA-32 доступа. В этом случае, IA-32 чтение ITC с уровнем привилегий ниже, чем был у закрывшей программы, вызовет IA-32 ошибку GP (General Protection).

Previous Function State. Регистр PFS содержит несколько полей: маркер предыдущего окна (previous frame marker - pfm), счетчик предыдущего эпилога (previous epilog count - pec), предыдущий уровень привилегий (previous privilege level - ppl). Для ускорения процедурного вызова, при вызове, эти значения копируются автоматически из регистра CFM, из регистра EC, а также из поля PSR.cpl (Current Privilege Level in the Processor Status Register).

Если выполняются br.call или brl.call, то CFM, EC и PSR.cpl копируются в PFS, а старое содержимое PFS пропадает. Если выполняется br.ret, то PFS копируется в CFM и EC. Значение PFS.ppl копируется в PSR.cpl только в том случае, если при этом увеличится уровень привилегий. Поле PFS.pfm имеет точно такую же структуру, как у CFM, а поле PFS.pec имеет точно такую же структуру, как у EC.

Таблица 2.4 - Описание полей регистра PFS

Поле

Биты

Описание

pfm

37:0

Маркер предыдущего окна (previous frame marker)


51:38

Резервировано

pec

57:52

Счетчик предыдущего эпилога (previous epilog count)


61:58

Резервировано

ppl

63:62

Предыдущий уровень привилегий (previous privilege level)

Loop Counter Register. LC - это 64-битный регистр используемый в счетных циклах. Значение LC уменьшается при переходах типа счетный цикл.

Epilog Counter Register. EC - это 6-битный регистр используемый для подсчета финальных стадий (эпилогов) в модульно- планируемых циклах.

Регистры данных мониторинга производительности (PMD)

Performance Monitor Data Registers. Набор регистров данных мониторинга производительности может быть конфигурирован привилегированной программой так, чтобы стать доступным на всех уровнях привилегий. Данные мониторинга производительности могут быть получены прямо внутри приложения. Операционной системе разрешается защитить созданную пользователем конфигурацию мониторинга производительности. При чтении, защищенные счетчики производительности возвращают ноль, несмотря на текущий уровень привилегий. Мониторы производительности могут быть записаны только при большем уровне привилегий. Мониторы производительности могут использоваться для сбора информации о производительности при выполнении любого набора инструкций и Itanium, и IA-32.

Маска пользователя (UM)

User Mask. Маска пользователя - это доступное для всех прикладных программ подмножество регистра состояния процессора (Processor Status Register). Маска пользователя управляет выравниванием доступной памяти, байтовым упорядочиванием и пользовательской конфигурацией мониторов производительности. Здесь также записывается модификация состояний регистров с плавающей точкой.

Таблица 2.5 - Описание полей маски пользователя

Поле

Бит

Описание

reserv

0

Резервировано

be

1

Возможность доступа к памяти по возрастанию (управляет загрузкой и восстановлением, но не доступом RSE памяти) 0: обращения делается по убыванию 1: обращения делается по возрастанию Этот бит игнорируется при доступе к памяти данных типа IA-32. Ссылки данных IA-32 всегда выполняются по убыванию.

up

2

Доступ пользователя к мониторингу производительности (включая IA-32) 0: мониторинг производительности не доступен пользователю 1: мониторинг производительности доступен пользователю

ac

3

Проверка выравнивания для обращений к памяти данных (включая IA-32) 0: не выравненность обращений к памяти данных может вызвать ошибку «Ссылка на не выровненные данные» 1: все, не выровненные обращения к данным памяти, вызывают ошибку «Ссылка на не выровненные данные»

mfl

4

Запись младших (f2…f31) регистров с плавающей точкой. Этот бит устанавливается в 1, если завершена Itanium инструкция, которая использует регистр f2…f31 в качестве приемника. Этот бит замещается и просто очищается при явной записи маски пользователя. Об условиях, при которых этот бит устанавливается инструкциями IA-32, см. раздел 3.3.2 второго тома.

mfh

5

Запись старших (f32…f127) регистров с плавающей точкой. Этот бит устанавливается в 1, если Itanium инструкция, которая использует регистр f32…f127 в качестве приемника, завершена. Этот бит замещается и просто очищается при явной записи маски пользователя. Об условиях, при которых этот бит устанавливается инструкциями IA-32, см. раздел 3.3.2 второго тома.

 

Регистры идентификации процессора

Processor Identification Registers. Информация, идентифицирующая процессор на уровне приложения доступна в файле регистров называемом CPUID. Этот файл делится на фиксированную область (регистры от 0 до 4) и изменяемую область (регистры с 5 и далее). Поле CPUID[3].number показывает максимальный номер 8-байтного регистра содержащего информацию, специфицирующую процессор.

Регистры CPUID являются не привилегированными и доступны косвенно, с помощью инструкции mov. Все регистры, следующие за регистром указанным в поле CPUID[3].number, являются резервированными, и обращение к ним вызывает ошибку «Резервированный регистр/поле». Запись запрещена и не существует инструкций для такого действия.

Информация о поставщике находится в CPUID регистрах 0 и 1, она задает имя поставщика в коде ASCII для реализованного процессора. Все байты после конца строки и до 16-го байта содержат нули. Первые ASCII-символы размещаются в регистре с меньшим номером и в байтах с меньшим номером.

Регистр CPUID[2] - это игнорируемый регистр (чтение из него возвращает 0).

Регистр CPUID[3] содержит несколько полей показывающих информацию о версии семейства для реализованного процессора.

Таблица 2.6 - Описание полей CPUID регистра 3

Поле

Биты

Описание

number

7:0

Индекс наибольшего реализованного CPUID регистра (на 1 меньше, чем количество реализованных CPUID регистров). Это значение должно быть не меньше 4.

revision

15:8

Номер версии процессора. 8-битное число, которое описывает версию (revision) или модификацию (stepping) реализованного процессора, но не модель процессора.

model

23:16

Номер модели процессора. Уникальное 8-битное число представляющее модель процессора, но не семейство процессора.

family

31:24

Номер семейства процессора. Уникальное 8-битное число показывающее семейство процессора.

archrev

39:32

Версия архитектуры. 8-битное число, которое описывает номер версии архитектуры, в которой реализован процессор.

reserv

63:40

Зарезервировано


Регистр CPUID[4] обеспечивает основную информацию прикладного уровня о свойствах процессора. Как показано на рис. 2.12 это обеспечивается установкой флагов в битах, чтобы показать, что конкретное свойство поддерживается в этой модели процессора. Если бит в 1, то свойство поддерживается, если же бит в 0, то свойство не поддерживается. Описание свойств битов текущей архитектуры дано в табл. 2.7. Если новые свойства будут добавлены (или удалены) модель свойств процессора, то будут добавлены, изменены или удалены описания битов соответствующих этим свойствам.

Таблица 2.7 - Поля CPUID регистра 4

Поле

Биты

Описание

lb

0

Процессор реализует инструкции длинных переходов (brl).

reserv

63:1

Зарезервировано

 

.2 Память


В этом разделе описывается, как прикладные Itanium программы просматривают память. Это включает в себя то, как обращаются к памяти и 32-битные, и 64-битные приложения. Вместе с размером и выравниванием адресуемых блоков памяти дается также описание, как байты упорядочены в пакете.

Модель адресации прикладной памяти

Память адресуется байтами и доступна через 64-битовые указатели. Модель 32-битного указателя без аппаратного режима поддерживается архитектурно. Указатель, который имеет 32 бита, загружается и помещается в 64-битный регистр. Перед использованием, программа должна явно преобразовать 32-битовый указатель в 64-битовый.

Адресация блоков и выравнивание

Память может быть доступна в виде блоков в 1, 2, 4, 8, 10 16 байтов.

Рекомендуется, чтобы все адресуемые блоки выравнивались по своим естественным границам. Аппаратура и / или программное обеспечение операционной системы могут поддерживать и не выровненные блоки, но при этом возможна некоторая потеря производительности. Значения 10-байтных чисел с плавающей точкой должны запоминаться с выравниванием по 16-байтным границам.

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

Связки инструкций (по 3 инструкции в связке) являются 16-байтовыми блоками, которые всегда выровнены по 16-байтовым границам.

Упорядочивание байтов

Бит UM.be в маске пользователя управляет тем, в каком порядке байты Itanium кода будут загружаться и сохраняться - по возрастанию (big-endian) или по убыванию (little-endian). Если бит UM.be равен 0, то загрузка и сохранение нескольких байтов выполняется по убыванию (байты с младшими адресами памяти соответствуют младшим байтам регистра). Если бит UM.be равен 1, то загрузка и сохранение нескольких байтов выполняется по возрастанию (байты с младшими адресами памяти соответствуют более старшим байтам регистра). Загрузка и сохранение только одного байта не связана с битом UM.be. Бит UM.be не связан с выборкой инструкций, обращениями IA-32 или с RSE. Инструкции всегда доступны процессору в виде элементов выстроенных по убыванию. Когда к инструкциям обращаются как к данным, выстроенным по возрастанию, инструкции будут казаться зарезервированными в регистре.

2.3 Обзор кодирования инструкций


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

Таблица 2.8 - Взаимосвязь между типом инструкции и типом исполнительного модуля

Тип инструкции

Описание

Тип исполнительного устройства

A

Целочисленная, АЛУ

I-unit или M-unit

I

Целочисленная, не АЛУ

I-unit

M

Память

M-unit

F

С плавающей точкой

F-unit

B

Ветвление (Branch)

B-unit

L+X

Расширенная (extended)

I-unit или B-unit


Инструкции объединяются по три в 128-битные, выровненные контейнеры называемые связками (bundle). Каждая связка содержит три 41-битных слота (slot) и 5-битное поле шаблона.

В процессе выполнения, архитектурные остановки (stops - стопы) в программе показывают, что одна или несколько инструкций перед стопом могут иметь определенные типы ресурсных зависимостей с одной или несколькими инструкциями после стопа. В табл. 2.9, стоп показан в виде двойной линии справа от слота, после которого делается стоп. Например, шаблон 00 не имеет стопов, а шаблон 03 имеет стоп после первого слота и перед вторым слотом.

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

Расширенные инструкции, использующиеся для длинных целочисленных инструкций и инструкций дальних переходов, занимают два слота инструкций. В зависимости от основного кода операции, расширенные инструкции выполняются в устройстве B (длинные branch/call) или в устройстве I (все другие L+X инструкции).

2.4 Рассмотрение последовательности инструкций


Код Itanium состоит из последовательности инструкций и остановок упакованных в связки. Исполнение инструкций упорядочено так:

·        Связки упорядочены от меньших адресов памяти к большим. Инструкции в связках с меньшими адресами памяти рассматриваются как предшествующие инструкциям в связках с большими адресами. Байты каждой связки упорядочены в памяти по убыванию (поле шаблона содержится в нулевом байте связки).

·        Внутри связки (как это видно на рис. 2.11), инструкции упорядочены от слота инструкции 0 к слоту инструкции 2.

Выполнение инструкций состоит из четырех фаз:

1.  Чтение инструкций из памяти (фаза fetch - выборка)

2.      Чтение архитектурного состояния, если необходимо (фаза read)

.        Исполнение заданной операции (фаза execute)

.        Обновление архитектурного состояния, если необходимо (фаза update)

Группа инструкций - это последовательность инструкций начинающаяся от заданного адреса связки и номера слота и включающая все инструкции с последовательно увеличением номеров слотов и адресов связок до первой остановки, сделанного перехода, ошибки “Break Instruction” происшедшей при break.b или ошибки «Запрещенная операция» происшедшей при резервировании, либо если в коде операции типа «B» закодировано PR[qp]=1. Для инструкций в группе инструкций имеется ясно определенное правило: они должны встречаться в порядке и в зависимости от требований описанных далее.

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

·        Инструкциями перехода отличными от break.b (break.f, break.i, break.m, break.x)

·        Инструкциями проверки (chk.s, chk.a, fchkf)

·        Инструкциями rfi не следующими за остановкой

·        Инструкциями brl не следующими за остановкой

·        Прерываниями отличными от ошибки “Break Instruction” происшедшей при break.b или ошибки “Illegal Operation” происшедшей при резервировании, либо если PR[qp]=1 закодировано в коде операции типа «B».

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

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

·        Нет никаких приоритетных отношений между фазой fetch (выборки инструкции) и фазами read, execute, update относящимися к любой предшествующей инструкции. Инструкции sync.i и srlz.i могут быть использованы для принудительных последовательных отношений между фазой выборки всех динамически завершенных инструкций и фазой обновления всех динамически предшествующих инструкций.

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

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

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

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

·        Зависимости по регистрам. В группах инструкций, регистровые зависимости типа RAW (чтение после записи) и WAW. Регистровые зависимости WAR (запись после чтения) разрешены.

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

Некоторые обновления системных состояний требуют более строгих требований, чем описано здесь. Зависимости по памяти. В группах инструкций, разрешены зависимости по памяти RAW, WAW, WAR, а также зависимости ALAT. Загрузка будет наблюдать результаты самого последнего сохранения по тому же адресу памяти. Если многократные сохранения присутствуют в одной и той же группе инструкций, то память будет содержать результат самого последнего запоминания после выполнения группы инструкций. Сохранение после загрузки по тому же самому адресу не будет затрагивать данные, загруженные загрузкой. Инструкции предварительной загрузки, проверки загрузки, проверки предварительной загрузки, запоминания и семафор памяти неявно обращаются к ALAT. Зависимости RAW, WAW, WAR и ALAT разрешены в пределах группы инструкций и ведут себя точно также, как это было описано для зависимостей по памяти.

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

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

Последовательность инструкций, вытекающая из правил заявленных выше называется последовательным выполнением (“sequential execution”).

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

IP - это специальный ресурс. Чтение и запись в IP выполняется последовательно, а не параллельно. Для IP разрешены зависимости RAW, а чтение получит IP связки, который его (чтение) содержит. Так, каждая связка, выполняемая параллельно, логически читает IP, увеличивает его и записывает обратно. Кроме того, разрешена зависимость WAW.

Игнорируемые прикладные регистры не является исключением для целей проверки зависимости. Зависимости RAW и WAW не разрешены для игнорируемых прикладных регистров.

Специальные случаи зависимости RAW

Есть четыре разрешенных специальных случая зависимости RAW по регистрам в пределах группы инструкций. Это такие специальные случаи: инструкция alloc, инструкции проверки загрузки, инструкции затрагивающие ветвления и инструкции id8.fill и st8.spill.

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

Примечание. Некоторые инструкции имеют RAW или WAW зависимости от ресурсов не похожие на то как alloc влияет на CFM, и таким образом, не позволеные в той же самой группе инструкций после alloc: flusrs, loadrs, пересылки из AR[BSPSTORE], пересылки из AR[RNAT], br.cexit, br.ctop, br.wtop, br.call, brl.call, br.ia, br.ret, clrrrb, cover, rfi. См. главу 5 «Ресурсы и семантики зависимости» в третьем томе. Также заметим, что alloc требуется для первой инструкции в группе инструкций.

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

Переход может читать регистры переходов и может неявно читать предикатные регистры, прикладные регистры LC, EC и PFS, а также CFM. Кроме регистров LC, EC и предикатных регистров, запись в любой из этих регистров с помощью инструкции не являющейся переходом, будет видна для последующего перехода в той же самой группе инструкций. Запись в предикатные регистры с помощью любой инструкции, не являющейся инструкцией с плавающей точкой, будет видна для последующего перехода в той же самой группе инструкций. Регистровая зависимость RAW не разрешена в той же самой группе инструкций для LC и EC. Динамические RAW зависимости, где предикат пишется инструкцией с плавающей точкой, а читается переходом, тоже не разрешены в той же самой группе инструкций. С точки зрения регистровой зависимости, переходы br.cond, br.call, brl.cond, brl.call, br.ret и br.ia работают как другие инструкции, то есть, если их квалификационный предикат есть 0, то они не рассматриваются считывателями или записывателями других ресурсов. Переходы br.cloop, br.cexit, br.ctop, br.wexit и br.wtop являются исключениями из этого правила - они всегда читают и пишут свои ресурсы не зависимо от значения своего квалификационного предиката. Косвенный переход brp считается считывателем указанного регистра BR.

Инструкции id8.fill и st8.spill неявно обращаются к прикладному регистру UNAT (коллекции NaT пользователя). Для этих инструкций ограничение на динамические регистровые зависимости типа RAW по отношению к UNAT применяется на уровне битов. Эти инструкции могут появляться в той же самой группе инструкций, если они не обращаются к одному и тому же биту UNAT. Зависимости UNAT типа RAW между инструкциями id8.fill или st8.spill и инструкциями mov ar= или mov =ar обращающимися к UNAT не должны происходить в пределах одной и той же группы инструкций.

Для целей ресурсных зависимостей CFM обрабатывается как отдельный ресурс.

Специальные случаи зависимости WAW

Есть три разрешенных специальных случая зависимости WAW по регистрам в пределах группы инструкций. Это такие специальные случаи: инструкции типа сравнения, инструкции с плавающей точкой и инструкция st8.spill.

Набор инструкций типа сравнения включает: cmp, cmp4, tbit, tnat, fcmp, frsqrta, frcpa и fclass. Инструкции типа сравнения в одной группе инструкций, могут иметь адресатом один и тот же предикатный регистр:

·        Инструкциями типа сравнения являются и все сравнения типа И, и все сравнения типа ИЛИ (сравнения типа И связаны с окончаниями.and и.andcm; сравнения типа ИЛИ связаны с окончаниями.or и.orcm), либо это

·        Все инструкции типа сравнения указывают на PR0. Все зависимости типа WAW разрешены для PR0; сравнения могут быть некоторого типа, и могут быть различных типов.

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

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

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

Инструкция st8.spill неявно записывает регистр UNAT. Для этой инструкции ограничение на регистровую зависимость типа WAW относительно UNAT, применяется на уровне битов. В той же самой группе инструкций могут появляться несколько инструкций st8.spill если они не записывают один и тот же бит UNAT. Регистровые зависимости типа WAW между инструкциями st8.spill и инструкций mov ar= нацеленные на UNAT не должны встречаться в пределах одной и той же группы инструкций.

Специальные случаи зависимости WAR

Зависимость типа WAR между чтением 63-х предикатных регистров с помощью любой инструкции типа B и частичной записью 63-х предикатных регистров с помощью перехода типа модульно планируемого цикла (br.ctop, br.cexit, br.wtop, br.wexit) без вмешательства остановок, является запрещенной. Иные зависимости типа WAR, разрешены в группе инструкций.

Поведение процессора при нарушениях зависимости

Если программа нарушает правила ресурсных зависимостей типа RAW, WAW или WAR внутри группы инструкций, то поведение процессора не предсказуемо. Для помощи в отладке кода, который нарушает правила зависимости архитектурных ресурсов, некоторыми процессорами обеспечиваются аппаратные средства обнаружения нарушений зависимости при выполнении. Это может явиться причиной того, что группа инструкций, которая содержит нелегальную зависимость, вызовет ошибку «Нелегальная зависимость». Однако, даже в реализациях, которые обеспечивают такую проверку, программное обеспечение не может надеяться, что процессор перехватит все нарушения зависимости или даже перехватит то же самое нарушение каждый раз, когда оно будет происходить.

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

·        Все обнаруженные нарушения зависимости должны быть сообщены как ошибки типа «Нелегальная зависимость» (описанные в главе 5 «Прерывания» во втором томе). Когда вызвана ошибка «Нелегальная зависимость», значение субъекта для нарушения зависимости - не определено. Необнаруженные нарушения зависимости являются причиной неопределенного поведения программы, как это описано в разделе 3.5 «Неопределенное поведение».

·        Все обнаруженные нарушения зависимости типа RAW и WAW должны быть переданы как ошибки типа «Нелегальная зависимость» на вторую операцию, т.е. в случае RAW - на чтение, а в случае WAW - на запись второго ресурса.

·        Все обнаруженные нарушения зависимости типа WAR (в 63-х предикатных регистрах) должны быть переданы как ошибки типа «Нелегальная зависимость» на вторую операцию - запись предиката.

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

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

 

.5 Неопределенное поведение


Архитектурно неопределенное поведение, которое применяется к одной или более инструкций перечислено ниже:

·        Регистровые зависимости RAW и WAW внутри одной и той же группы инструкций отвергаются, кроме тех, что были отмечены в разделе 2.4. Их поведение в группе инструкций не определено. Неопределенное поведение включает возможность ошибки «Неопределенная операция».

·        Чтение регистра вне заданных границ стекового окна основных регистров (которое заданно последним alloc, return или call) вернет неопределенный результат. В этой ситуации все процессоры не будут вызывать прерывание.

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

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


Заключение

Микропроцессоры серии Itanium применяются в серверном сегменте рынка IT.

Архитектура Itanium поддерживается мировыми лидерами в производстве серверов: Fujitsu, Hitachi, HP, NEC. Разработчики программного обеспечения вместе работали над созданием Itanium Solution Alliance с целью продвижения архитектуры и ускорения темпов развития ПО.

IBM и Dell прекратили поддержку Itanium, сконцентрировав внимание на платформах SPARC и AMD64 Sun.

На текущий момент Itanium поддерживается 10 операционными системами, включая Windows, различные дистрибутивы Linux и UNIX.


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

1. Intel Itanium Processor 9300 Series Datasheet: Intel, 2012. - 172 с.

2.      Intel Itanium Architecture Software Developers Manual Revision 2.3 Volume 1-4: Intel, 2010. - 1898 с.

3. Intel Corp. Intel Itanium 9300 Series [Электронный ресурс]. - Электрон. текстовые дан. - 2012. - Режим доступа: http://ark.intel.com/ru/products/series/42794/Intel-Itanium-Processor-9300-Series, свободный.

Похожие работы на - Микропроцессор Intel Itanium 9300

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!