1 / 27

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

IA64 . Архитектура и обзор системы команд. Юрий Долгов , Дмитрий Шкурко. План. Обзор IA-64 архитектуры Обзор системы команд. IA-64 архитектура. Регистры Порты Бандл Кэши, ALAT и исполнительные устройства. Регистры. Целочисленные регистры.

aqua
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. IA64. Архитектура и обзор системы команд Юрий Долгов, Дмитрий Шкурко

  2. План • Обзор IA-64 архитектуры • Обзор системы команд

  3. IA-64 архитектура Регистры Порты Бандл Кэши, ALAT и исполнительные устройства

  4. Регистры. Целочисленные регистры • 128 регистров общего назначения (General Registers) • 1 регистр = 64 бита • 32 статических регистра (Static registers) • 96 стековых вращающихся регистров (Rotating registers). Количество реально вращающихся определяется программно,но должно быть кратно 8 • GR0 == 0 • Каждому регистру соответствует NaT бит • Все регистры доступны программисту

  5. 81 80 64 63 0 sign exponent significand Регистры. Регистры для вычислений с плавающей точкой • 128 регистров данных с плавающей точкой (Float-point Registers) • 1 регистр = 82 бита • 32 статических регистра (Static registers) • 96 вращающихся регистров (Rotating registers). Вращаются все 96регистров • FPR0 == 0.0f • FPR1 == 1.0f • Зарезервировано специальное NaTVal значение • Все регистры доступны программисту

  6. Регистры. Регистры предикатов • 64 регистра предикатов (Predicate Registers) • 1 регистр = 1 бит • 16 статических регистров • 48 вращающихся регистров. Вращаются все 48 регистров • PR0 == 1

  7. Регистры. Регистры переходов. Регистры приложений • 8 регистров перехода (Branch Registers) • 128 регистров приложений (Application Registers) • Счетчик циклов ar.lc (Loop Count Register) • Счетчик эпилога ar.ec (Epilog Count Register) • Регистр состояния устройства обработки данных с плавающей точкой (Float-point Status Register) • Другие

  8. Integer Registers 63 0 bit 0 0 GR0 1 PR0 GR1 PR1 GR31 PR15 GR32 PR16 PR63 GR127 Static Static Stacked, Rotating Rotating Регистры Branch Registers Predicate Registers 63 0 BR0 BR7 FP Registers 81 0 FR0 +0.0 FR1 +1.0 FR2 NaT FR31 FR32 FR127

  9. Регистровый стек Outputs Outputs Outputs Outputs Call Alloc Ret PROC A PROC B PROC B PROC A • Каждая процедура заказывает себе требуемое ей количество стековых регистров командой alloc • Кадр предоставляемых регистров делится на три части: Inputs, Local, Outputs • Outputs является Inputs для вызываемой процедуры 56 48 Local Virtual 52 52 (Inputs) 32 32 46 46 Local Local (Inputs) (Inputs) 32 32

  10. Порты и исполнительные устройства • Порт – устройство, через которое инструкция достигает исполняющего устройства • M-порт – для команд обмена данными с кэш, арифметических и логических операций Itanium2 – M0, M1, M2, M3 • I-порт – для команд арифметических и логических операций, операций сдвига I0, I1 • B-порт - длякоманд переходов B0, B1, B2 • F-порт – для команд с операндами - числами с плавающей точкой F0, F1 Исполнительные устройства • 1 устройство взаимодействия с кэшами • 3 устройства переходов • 4 устройства обработки чисел с плавающей запятой • 17 устройств работы с целочисленными данными

  11. template 4 bits Бандл (bundle) 128 bits (bundle) Instruction 2 Instruction 1 Instruction 0 dispersal • Бандл (16 байт) – единица двоичного исполняемого кода, содержит группу из трех команд и поле шаблона (template) • 1 бандл = 128 бит • 3 инструкции в бандле по 41 биту (слоты) • типы слотов соответствуют типам портов (M, I, F, B) и определяются шаблоном • Граница группы инструкций определяется “stop” битом или шаблоном 41 bits 41 bits 41 bits s t o p

  12. Кэш • 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. Обзор системы команд Команда alloc Команды обмена данными Арифметические и логические команды Команды сравнения Команды сдвига Команды обработки данных с плавающей точкой Команды параллельной обработки Команды переходов Влияние предикатов на команду

  14. Формат инструкций • (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. Обзор системы команд. Команда alloc • Должна стоять первой в вызываемой функции • Формат alloc R1 = i, l, o, r • в регистр R1копируется регистр состояния предыдущей функции, обычно, его можно не сохранять (и не восстанавливать), если в функции регистр состояния не изменяется • i – количество передаваемых в функцию целочисленных и адресных параметров • l – количество локальных переменных (нестатических стековых регистров), которые будут использоваться в функции • o – количество передаваемых целочисленных и адресных параметров для функции, которая будет вызываться из данной функции • r – количество нестатическихстековых целочисленных регистров, которые будут вращаться,r – кратно 8 • общее количество задействованных нестатических стековых регистров s = i + l + o; r <= s;

  16. Обзор системы команд. Команды обмена данными • 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. Обзор системы команд. Команды обмена данными • ldX.aранняя загрузка • ldX.cспекулятивная загрузка

  18. Обзор системы команд. Команды обмена данными • Команда MOV – копирует данные из одного регистра в другой • mov r1 = r2 – псевдокоманда; реально ассемблер превращает ее в команду add r1 =r0, r2, про это полезно помнить • mov f1 = f2 – тоже псевдокоманда, которая реально превращается в fmerge f1 = f2, f2, что тоже полезно помнить, т.к. fmerge исполняется только в устройстве F0 • Команды setf, getf – позволяют передавать данные из регистров общего назначения в регистры данных с плавающей точкой и обратно

  19. Обзор системы команд. Арифметические и логические команды • add, sub, and, or, xor и т.п. – естественно, присутствуют • shladd r1 = r2, n, r3 – операнд из r2сдвигается влево на nразрядов (n=1-4), к результату прибавляется операнд из r3и полученная сумма помещается в r1

  20. Обзор системы команд. Команды сравнения • 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. Обзор системы команд. Команды сдвига • shr, shl r1 = r2, r3 – сдвигает содержимое регистра r2 в соответствующем направлении и помещает в регистр r1; на сколько – указано в регистре r3; может выполняться в I0 и I1 устройствах • shr, shl r1 = r2, n – сдвигает содержимое регистра r2 в соответствующем направлении на nразрядов и помещает в регистр r1; псевдокоманда – реализуется через команды extr, и как следствие, может выполняться только в I0

  22. Обзор системы команд.Команды обработки данных с плавающей точкой • fma, fms, fnma f1 = f2, f3, f4 – основные команды вычислений; по порядку: умножает и складывает, умножает и вычитает, умножает и выполняет обратное вычитание • fmax, fmin – мнемоника все об’ясняет • frcpa, frsqrt – вычисляют обратную величину и обратный квадратный корень с относительной точностью 2**-8; первое приближение для итерационных вычислений • fmerge – собирает от разных операндов знак, порядок, мантиссу и формирует новое число; на fmerge опирается много псевдокоманд, например fabs • fand, for, fxor– выполняют побитовые логические операции над операндами из регистров данных с плавающей точкой • fcvt– выполняет преобразование целочисленных данных в числа с плавающей точкой и в обратную сторону • Другие

  23. Обзор системы команд. Команды параллельной обработки • Параллельные команды для регистров общего назначения. Эти команды обращаются к регистрам общего назначения как к 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. Обзор системы команд. Командыпереходов • brlabel – переход на метку; на самом деле в коде указывается смещение относительно счетчика команд, оно должно укладываться в 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. Обзор системы команд. Влияние предикатов на команду • Почти все команды имеют поле для указания на предикатный регистр. По умолчанию команде соответствует регистр p0 (p0==1) • Команда выполняется только в том случае, если соответствующий ей предикатный регистр установлен в 1, иначе команда не исполняется (p8) add r1 = r2, r3 • Механизм предикатов позволяет избавляться от ветвлений, и как следствие, уменьшить число промахов при переходах. Также механизм предикатов позволяет реализовать программный конвейер.

  26. Q&A

  27. Thank you.

More Related