Transcript
Page 1: IA64 .  Архитектура и обзор системы команд

1

Optimization of applications for Intel* platforms

IA64. Архитектура и обзор системы команд

Юрий Долгов, Дмитрий Шкурко

Page 2: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

План

Обзор IA-64 архитектуры

Обзор системы команд

Page 3: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

IA-64 архитектура

Регистры

Порты

Бандл

Кэши, ALAT и исполнительные устройства

Page 4: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Регистры. Целочисленные регистры

128 регистров общего назначения (General Registers)

• 1 регистр = 64 бита

• 32 статических регистра (Static registers)

• 96 стековых вращающихся регистров (Rotating registers). Количество реально вращающихся определяется программно, но должно быть кратно 8

• GR0 == 0

• Каждому регистру соответствует NaT бит

Все регистры доступны программисту

Page 5: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

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

128 регистров данных с плавающей точкой (Float-point Registers)

• 1 регистр = 82 бита

• 32 статических регистра (Static registers)

• 96 вращающихся регистров (Rotating registers). Вращаются все 96 регистров

• FPR0 == 0.0f

• FPR1 == 1.0f

• Зарезервировано специальное NaTVal значение

Все регистры доступны программисту

significandexponentsign

063648081

Page 6: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Регистры. Регистры предикатов

64 регистра предикатов (Predicate Registers)

• 1 регистр = 1 бит

• 16 статических регистров

• 48 вращающихся регистров. Вращаются все 48 регистров

• PR0 == 1

Page 7: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Регистры. Регистры переходов. Регистры приложений

8 регистров перехода (Branch Registers)

128 регистров приложений (Application Registers)

• Счетчик циклов ar.lc (Loop Count Register)

• Счетчик эпилога ar.ec (Epilog Count Register)

• Регистр состояния устройства обработки данных с плавающей точкой (Float-point Status Register)

• Другие

Page 8: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Регистры

Branch Registers63 0

BR7

BR0GR1

GR31

GR127

GR32

GR0

NaT

Stacked, Rotating

Static

0

Integer Registers63 0

Predicate Registers

Rotating

Static

1

PR1

PR63

PR0

PR15PR16

bit 0

+0.0+1.0

FR0FR1FR2

FR31FR32

FR127

81 0FP Registers

Page 9: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Регистровый стек

32

Outputs

Local

48

56

32(Inputs)Outputs

Local

46

32(Inputs)

Outputs Outputs

Local

(Inputs)

PROC B PROC BPROC A PROC ACall Alloc Ret

Virtual52

46

32

52

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

Кадр предоставляемых регистров делится на три Кадр предоставляемых регистров делится на три частичасти: Inputs, Local, Outputs: Inputs, Local, Outputs

Outputs Outputs является является Inputs Inputs для вызываемой для вызываемой процедурыпроцедуры

Page 10: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Порты и исполнительные устройства

Порт – устройство, через которое инструкция достигает исполняющего устройства

M-порт – для команд обмена данными с кэш, арифметических и логических операций

Itanium2 – M0, M1, M2, M3

I-порт – для команд арифметических и логических операций, операций сдвига

I0, I1

B-порт - для команд переходовB0, B1, B2

F-порт – для команд с операндами - числами с плавающей точкойF0, F1

Исполнительные устройства• 1 устройство взаимодействия с кэшами• 3 устройства переходов• 4 устройства обработки чисел с плавающей запятой• 17 устройств работы с целочисленными данными

Page 11: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Бандл (bundle)

Бандл (16 байт) – единица двоичного исполняемого кода, содержит группу из трех команд и поле шаблона (template)• 1 бандл = 128 бит• 3 инструкции в бандле по 41 биту (слоты)• типы слотов соответствуют типам портов (M, I, F, B) и определяются шаблоном

Граница группы инструкций определяется “stop” битом или шаблоном

Instruction 2 Instruction 1 Instruction 0 dispersal

template4 bits

stop

128 bits (bundle)

41 bits 41 bits 41 bits

Page 12: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Кэш

L1D Кэш данных первого уровня

• 16 KB, 4-way set associative with 64-byte lines• Write through, no write allocate

L1I Кэш инструкций первого уровня

• 16 KB, 4-way set associative with 64-byte lines

L2 Кэш второго уровня

• 256 KB, 8-way set associative with 128-byte lines• Write back, write allocate • Команды загрузки данных с плавающей точкой обращаются сразу в

кэш второго уровня

L3 Кэш третьего уровня

• 3 MB, 12-way set associative with 128-byte lines, on chip

ALAT Таблица ранних загрузок

Page 13: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Обзор системы команд

Команда alloc

Команды обмена данными

Арифметические и логические команды

Команды сравнения

Команды сдвига

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

Команды параллельной обработки

Команды переходов

Влияние предикатов на команду

Page 14: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Формат инструкций

(pn) instr_name.prf1.prf2… dst1, dst2 = op1, op2, … (;;)

• pn – предикатный регистр

• instr_name – мнемоника инструкции

• prf1, prf2… – указывают на опцию инструкции

• dst1, dst2 – приемники результата

• op1, op2… – операнды

Пример:

(p6) fma f32 = f33, f34, f35 ( f32 = f33 * f34 + f35 )

Page 15: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Обзор системы команд. Команда alloc

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

Формат alloc R1 = i, l, o, r

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

• i – количество передаваемых в функцию целочисленных и адресных параметров

• l – количество локальных переменных (нестатических стековых регистров), которые будут использоваться в функции

• o – количество передаваемых целочисленных и адресных параметров для функции, которая будет вызываться из данной функции

• r – количество нестатических стековых целочисленных регистров, которые будут вращаться, r – кратно 8

• общее количество задействованных нестатических стековых регистров s = i + l + o; r <= s;

Page 16: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Обзор системы команд. Команды обмена данными

ld1, ld2, ld4, ld8 – загружают в целочисленный регистр из памяти соответствующее количество байт; результат расширяется нулем

st1, st2, st4, st8 – выгружают в память соответствующее количество байтов из целочисленного регистра, начиная с нулевого

ldfs, ldfd, ldfe – загружает из памяти число, представленное в формате IEEE754, в регистр данных с плавающей точкой, одновременно преобразует его во внутренний формат процессора

ldfps, ldfpd – то же самое, но загружает сразу 2 регистра

ldf8, ldf.fill – загружает из памяти данные без какого-либо преобразования

ldfp8 – то же самое, но загружает сразу 2 регистра

stfs, stfd, stfe, stf8, stf.fill – выгружает из регистра данных с плавающей точкой в память в соответствующем формате

Page 17: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Обзор системы команд. Команды обмена данными

ldX.a ранняя загрузка

ldX.c спекулятивная загрузка

Page 18: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Обзор системы команд. Команды обмена данными

Команда MOV – копирует данные из одного регистра в другой

• mov r1 = r2 – псевдокоманда; реально ассемблер превращает ее в команду add r1 = r0, r2, про это полезно помнить

• mov f1 = f2 – тоже псевдокоманда, которая реально превращается в fmerge f1 = f2, f2, что тоже полезно помнить, т.к. fmerge исполняется только в устройстве F0

Команды setf, getf – позволяют передавать данные из регистров общего назначения в регистры данных с плавающей точкой и обратно

Page 19: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Обзор системы команд. Арифметические и логические команды

add, sub, and, or, xor и т.п. – естественно, присутствуют

shladd r1 = r2, n, r3 – операнд из r2 сдвигается влево на n разрядов (n=1-4), к результату прибавляется операнд из r3 и полученная сумма помещается в r1

Page 20: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Обзор системы команд. Команды сравнения

cmp.crel p1, p2 = r1, r2 – если результат сравнения, который указан в crel (crel = lt, gt, le, etc), выполняется, то в регистр предикатов p1 помещается 1, иначе 0; в регистр предикатов p2 помещается инверсия p1

tbit.trel p1, p2 = r1, n – проверяет n-ый бит в регистре r1, если он удовлетворяет условию в trel (trel = nz – не нуль или z – нуль), то в регистр предикатов p1 помещается 1, иначе = 0; в регистр предикатов p2 помещается инверсия p1

Page 21: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Обзор системы команд. Команды сдвига

shr, shl r1 = r2, r3 – сдвигает содержимое регистра r2 в соответствующем направлении и помещает в регистр r1; на сколько – указано в регистре r3; может выполняться в I0 и I1 устройствах

shr, shl r1 = r2, n – сдвигает содержимое регистра r2 в соответствующем направлении на n разрядов и помещает в регистр r1; псевдокоманда – реализуется через команды extr, и как следствие, может выполняться только в I0

Page 22: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Обзор системы команд. Команды обработки данных с плавающей точкой

fma, fms, fnma f1 = f2, f3, f4 – основные команды вычислений; по порядку: умножает и складывает, умножает и вычитает, умножает и выполняет обратное вычитание

fmax, fmin – мнемоника все об’ясняет

frcpa, frsqrt – вычисляют обратную величину и обратный квадратный корень с относительной точностью 2**-8; первое приближение для итерационных вычислений

fmerge – собирает от разных операндов знак, порядок, мантиссу и формирует новое число; на fmerge опирается много псевдокоманд, например fabs

fand, for, fxor – выполняют побитовые логические операции над операндами из регистров данных с плавающей точкой

fcvt – выполняет преобразование целочисленных данных в числа с плавающей точкой и в обратную сторону

Другие

Page 23: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Обзор системы команд. Команды параллельной обработки

Параллельные команды для регистров общего назначения. Эти команды обращаются к регистрам общего назначения как к 2-ум двойным словам, 4-ем словам или 8-ми байтам, причем как к числам со знаком, так и без знака• padd, psub, pmpy, pmax, pmin, pcmp, pshl, pshr – мнемоника команд все

сообщает• pshladd, pshradd, pmpyshr – те же арифметические действия, но еще

присутствует сдвиг• pack, unpack, mix, mux – команды упаковки/распаковки данных и изменения

позиции в регистре

Параллельные команды для обработки данных с плавающей точкой. Рассматривают 64 бита регистра как два 32-разрядных числа с плавающей точкой.• fpmpa, fpms, - арифметические действия • fpack, fswap – команды упаковки, изменения позиции в регистре

Page 24: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

br label – переход на метку; на самом деле в коде указывается смещение относительно счетчика команд, оно должно укладываться в 25 двоичных разрядов

br bn – переход по адресу из регистра переходов bn

br.ret b0 – последняя команда в программе

br.cloоp start_loop – один из вариантов последней команды в цикле; если счетчик циклов не нуль, то он декрементируется и выполняется переход на начало цикла, иначе – выход из цикла

br.ctop start_loop, br.wtop start_loop,

br.cexit start_loop, br.wexit start_loop – тоже варианты последней команды цикла. Данные команды позволяют организовать цикл с программным конвейером.

Обзор системы команд. Команды переходов

Page 25: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Обзор системы команд. Влияние предикатов на команду

Почти все команды имеют поле для указания на предикатный регистр. По умолчанию команде соответствует регистр p0 (p0==1)

Команда выполняется только в том случае, если соответствующий ей предикатный регистр установлен в 1, иначе команда не исполняется

(p8) add r1 = r2, r3

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

Page 26: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Q&A

Page 27: IA64 .  Архитектура и обзор системы команд

Optimization of applications for Intel* platforms

Thank you.


Recommended