Download presentation
Presentation is loading. Please wait.
1
Optimization of applications for Intel* platforms 1 IA64. Архитектура и обзор системы команд Юрий Долгов, Дмитрий Шкурко
2
Optimization of applications for Intel* platforms План Обзор IA-64 архитектуры Обзор системы команд
3
Optimization of applications for Intel* platforms IA-64 архитектура Регистры Порты Бандл Кэши, ALAT и исполнительные устройства
4
Optimization of applications for Intel* platforms Регистры. Целочисленные регистры 128 регистров общего назначения (General Registers) 1 регистр = 64 бита 32 статических регистра (Static registers) 96 стековых вращающихся регистров (Rotating registers). Количество реально вращающихся определяется программно, но должно быть кратно 8 GR0 == 0 Каждому регистру соответствует NaT бит Все регистры доступны программисту
5
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
6
Optimization of applications for Intel* platforms Регистры. Регистры предикатов 64 регистра предикатов (Predicate Registers) 1 регистр = 1 бит 16 статических регистров 48 вращающихся регистров. Вращаются все 48 регистров PR0 == 1
7
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) Другие
8
Optimization of applications for Intel* platforms Регистры Branch Registers 630 BR7 BR0 GR1 GR31 GR127 GR32 GR0 NaT Stacked, Rotating Static 0 Integer Registers 630 Predicate Registers Rotating Static 1 PR1 PR63 PR0 PR15 PR16 bit 0 +0.0 +1.0 FR0 FR1 FR2 FR31 FR32 FR127 810 FP Registers
9
Optimization of applications for Intel* platforms Регистровый стек 32 Outputs Local 48 56 32 (Inputs) Outputs Local 46 32 (Inputs) Outputs Local (Inputs) PROC B PROC A CallAllocRet Virtual 52 46 32 52 Каждая процедура заказывает себе требуемое ей количество стековых регистров командой alloc Кадр предоставляемых регистров делится на три части: Inputs, Local, Outputs Outputs является Inputs для вызываемой процедуры
10
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 устройств работы с целочисленными данными
11
Optimization of applications for Intel* platforms Бандл (bundle) Бандл (16 байт) – единица двоичного исполняемого кода, содержит группу из трех команд и поле шаблона (template) 1 бандл = 128 бит 3 инструкции в бандле по 41 биту (слоты) типы слотов соответствуют типам портов (M, I, F, B) и определяются шаблоном Граница группы инструкций определяется “stop” битом или шаблоном Instruction 2Instruction 1 Instruction 0dispersal template 4 bits stopstop 128 bits (bundle) 41 bits
12
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 Таблица ранних загрузок
13
Optimization of applications for Intel* platforms Обзор системы команд Команда alloc Команды обмена данными Арифметические и логические команды Команды сравнения Команды сдвига Команды обработки данных с плавающей точкой Команды параллельной обработки Команды переходов Влияние предикатов на команду
14
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 )
15
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;
16
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 – выгружает из регистра данных с плавающей точкой в память в соответствующем формате
17
Optimization of applications for Intel* platforms Обзор системы команд. Команды обмена данными ldX.a ранняя загрузка ldX.c спекулятивная загрузка
18
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 – позволяют передавать данные из регистров общего назначения в регистры данных с плавающей точкой и обратно
19
Optimization of applications for Intel* platforms Обзор системы команд. Арифметические и логические команды add, sub, and, or, xor и т.п. – естественно, присутствуют shladd r1 = r2, n, r3 – операнд из r2 сдвигается влево на n разрядов (n=1-4), к результату прибавляется операнд из r3 и полученная сумма помещается в r1
20
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
21
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
22
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 – выполняет преобразование целочисленных данных в числа с плавающей точкой и в обратную сторону Другие
23
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 – команды упаковки, изменения позиции в регистре
24
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 – тоже варианты последней команды цикла. Данные команды позволяют организовать цикл с программным конвейером. Обзор системы команд. Команды переходов
25
Optimization of applications for Intel* platforms Обзор системы команд. Влияние предикатов на команду Почти все команды имеют поле для указания на предикатный регистр. По умолчанию команде соответствует регистр p0 (p0==1) Команда выполняется только в том случае, если соответствующий ей предикатный регистр установлен в 1, иначе команда не исполняется (p8) add r1 = r2, r3 Механизм предикатов позволяет избавляться от ветвлений, и как следствие, уменьшить число промахов при переходах. Также механизм предикатов позволяет реализовать программный конвейер.
26
Optimization of applications for Intel* platforms Q&A
27
Optimization of applications for Intel* platforms Thank you.
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.