Помощь в написании студенческих работ
Антистрессовый сервис

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

КонтрольнаяПомощь в написанииУзнать стоимостьмоей работы

Бит UM. be в маске пользователя управляет тем, в каком порядке байты Itanium кода будут загружаться и сохраняться — по возрастанию (big-endian) или по убыванию (little-endian). Если бит UM. be равен 0, то загрузка и сохранение нескольких байтов выполняется по убыванию (байты с младшими адресами памяти соответствуют младшим байтам регистра). Если бит UM. be равен 1, то загрузка и сохранение… Читать ещё >

Микропроцессор 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.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

1.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.

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

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

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

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

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

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

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

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

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

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

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

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

else 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)

else 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 */

store (st_addr, data)

acheck (target, recovery_addr)

use (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)

if (pT) c = c + 1

if (pF) d = d * e + f

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

1.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. Исполнительная среда

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 (если иное не отмечено)

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

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

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

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

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

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

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

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

Набор из 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

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

14:5

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

loadrs

29:15

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

63:30

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

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

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

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

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

be

Возможность доступа к памяти по возрастанию (управляет загрузкой и восстановлением, но не доступом RSE памяти)

0: обращения делается по убыванию

1: обращения делается по возрастанию Этот бит игнорируется при доступе к памяти данных типа IA-32. Ссылки данных IA-32 всегда выполняются по убыванию.

up

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

0: мониторинг производительности не доступен пользователю

1: мониторинг производительности доступен пользователю

ac

Проверка выравнивания для обращений к памяти данных (включая IA-32)

0: не выравненность обращений к памяти данных может вызвать ошибку «Ссылка на не выровненные данные»

1: все, не выровненные обращения к данным памяти, вызывают ошибку «Ссылка на не выровненные данные»

mfl

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

mfh

Запись старших (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

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

reserv

63:1

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

2.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 дан список типов инструкций и типы исполнительных устройств, на которых они выполняется.

Показать весь текст
Заполнить форму текущей работой