IA64 . Архитектура и обзор системы команд
description
Transcript of IA64 . Архитектура и обзор системы команд
1
Optimization of applications for Intel* platforms
IA64. Архитектура и обзор системы команд
Юрий Долгов, Дмитрий Шкурко
Optimization of applications for Intel* platforms
План
Обзор IA-64 архитектуры
Обзор системы команд
Optimization of applications for Intel* platforms
IA-64 архитектура
Регистры
Порты
Бандл
Кэши, ALAT и исполнительные устройства
Optimization of applications for Intel* platforms
Регистры. Целочисленные регистры
128 регистров общего назначения (General Registers)
• 1 регистр = 64 бита
• 32 статических регистра (Static registers)
• 96 стековых вращающихся регистров (Rotating registers). Количество реально вращающихся определяется программно, но должно быть кратно 8
• GR0 == 0
• Каждому регистру соответствует NaT бит
Все регистры доступны программисту
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
Optimization of applications for Intel* platforms
Регистры. Регистры предикатов
64 регистра предикатов (Predicate Registers)
• 1 регистр = 1 бит
• 16 статических регистров
• 48 вращающихся регистров. Вращаются все 48 регистров
• PR0 == 1
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)
• Другие
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
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 для вызываемой для вызываемой процедурыпроцедуры
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 устройств работы с целочисленными данными
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
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 Таблица ранних загрузок
Optimization of applications for Intel* platforms
Обзор системы команд
Команда alloc
Команды обмена данными
Арифметические и логические команды
Команды сравнения
Команды сдвига
Команды обработки данных с плавающей точкой
Команды параллельной обработки
Команды переходов
Влияние предикатов на команду
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 )
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;
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 – выгружает из регистра данных с плавающей точкой в память в соответствующем формате
Optimization of applications for Intel* platforms
Обзор системы команд. Команды обмена данными
ldX.a ранняя загрузка
ldX.c спекулятивная загрузка
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 – позволяют передавать данные из регистров общего назначения в регистры данных с плавающей точкой и обратно
Optimization of applications for Intel* platforms
Обзор системы команд. Арифметические и логические команды
add, sub, and, or, xor и т.п. – естественно, присутствуют
shladd r1 = r2, n, r3 – операнд из r2 сдвигается влево на n разрядов (n=1-4), к результату прибавляется операнд из r3 и полученная сумма помещается в r1
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
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
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 – выполняет преобразование целочисленных данных в числа с плавающей точкой и в обратную сторону
Другие
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 – команды упаковки, изменения позиции в регистре
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 – тоже варианты последней команды цикла. Данные команды позволяют организовать цикл с программным конвейером.
Обзор системы команд. Команды переходов
Optimization of applications for Intel* platforms
Обзор системы команд. Влияние предикатов на команду
Почти все команды имеют поле для указания на предикатный регистр. По умолчанию команде соответствует регистр p0 (p0==1)
Команда выполняется только в том случае, если соответствующий ей предикатный регистр установлен в 1, иначе команда не исполняется
(p8) add r1 = r2, r3
Механизм предикатов позволяет избавляться от ветвлений, и как следствие, уменьшить число промахов при переходах. Также механизм предикатов позволяет реализовать программный конвейер.
Optimization of applications for Intel* platforms
Q&A
Optimization of applications for Intel* platforms
Thank you.