Современи Компјутерски Системи

- аудиториски вежби -

Содржина
Содржина.........................................................................................1
Час 1

Вовед во инструкциско ниво на паралелизам................2

Основни хардверски карактеристики на Itanium и Itanium 2 процесорите . 2

Час 2
2.1
2.2
2.3
2.4

Час 3
3.1
3.2
3.3

Час 4

Вовед во архитектурата на Itanium .................................3
Управување на меморија...................................................................... 3
Мемориско адресирање ........................................................................ 4
Регистри ................................................................................................. 4
Експлицитен паралелизам на инструкциски пресметки (EPIC)....... 6

Инструкциско множество на Itanium..............................9
Синтакса на инструкциите на Itanium архитектурата ....................... 9
Предикација (predication) ................................................................... 10
Инструкции за целобројно пресметување ........................................ 11

Инструкции за споредување ..........................................14

Час 5 Инструкции за мултимедија и пресметување со броеви со
подвижна запирка ...................................................................................16
5.1
5.2

Час 6
програмата

Инструкции за пресметување со броеви со подвижна запирка...... 18
Инструкции за работа со мултимедија ............................................. 20

Инструкции за контрола на текот на извршување на
21

6.1
Инструкции за условно разгранување .............................................. 21
6.2
Инструкции за разгранување при јамки за броење на чекорите
(counted loop branch) ................................................................................................... 23

Час 7

Софтверска проточност..................................................25

Час 8

Инструкции за пристап кон меморија ..........................32

8.1
8.2
8.3

Мемориска латентност ....................................................................... 32
Предвремен и шпекулативен пристап кон меморија....................... 37
Инструкции со семафори ................................................................... 41

Вежби .............................................................................................43

1

Современи Компјутерски Системи
- аудиториски вежби -

Час 1 Вовед во инструкциско ниво на
паралелизам
1.
2.
3.
4.
5.
6.
7.

Концепт за програма, секвенцијален запис на инструкции
Извршување на инструкции
RISC организација на компјутерски систем
Концепт за проточност и проточно извршување на инструкции
Застои (stalls) и конфликти (hazards) во проточното извршување
Типови на меѓуинструкциски зависности
Воведување на повеќе извршни единици и поим за основен блок (basic
block)
8. Искористување на инструкциско ниво на паралелизам
9. Два основни правци (1) машини со долги инструкциски зборови – VLIW
(Very Large Instruction Word) и (2) суперскаларни машини (superscalar)
10. EPIC (Explicit Paralelism Instruction Computing) и IA-64 архитектура
11. Itanium и Itanium 2 процесори
12. Основни хардверски карактеристики

1.1 Основни хардверски карактеристики на Itanium и
Itanium 2 процесорите
Itanium процесорите се први во фамилијата процесори на Intel коишто се
засноваат на IA-64 архитектурата. Itanium процесорите ја прошируваат Intel
архитектурата на 64-битно ниво и воведуваат имплементација на EPIC
архитектурата.
Процесорите имаат релативно ниски работни фрекфенции (од 733MHz до
1000MHz). Itanium 2 има 50-100% поголеми перформанси од Itanium, што најмногу
се должи на големината на кеш меморијата и брзината системската магистрала.
Кеш меморијата е поделена на три нивоа како што е прикажано на табела 1.
Ниво на кеш меморија

Ниво 1

Ниво 2

Ниво 3

Itanium

32KB

96KB

2-4MB

Itanium 2

32KB

256KB

1.5-3MB

Табела 1 Кеш меморија кај Itanium процесорите.
Системската магистрала на Itanium 2 работи на фрекфенција од 400MHz,
додека пак магистралата на Itanium има 266MHz.
Поддржани оперативни системи се Windows, HP-UX и Linux.

2

Современи Компјутерски Системи
- аудиториски вежби -

Час 2

Вовед во архитектурата на Itanium

Itanium е 64-битна архитектура на Intel којашто се заснова на EPIC (Explicit
Parallel Instruction Computing) дизајн филозофија. Itanium архитектурата има
неколку цели:




Надминување на ограничувањата на денешните архитектури
Подобрени перформанси при работа со броеви со подвижна запирка
64-битно адресирање за меморија
Компатибилност со IA-32 архитектурата (80x86 и Pentium архитектурите)
Поддршка за e-business апликациите и обемните технички пресметки

Подобрувањето на перформансите на Itanium процесорите се врши со
помош на:



Зголемување на ILP (Instruction Level Parallelism)
Подобрено справување со разгранување
Намалување на мемориската латентност
Поддршка за модуларен код

2.1 Управување на меморија
2.1.1 Типови на податоци
Itanium архитетурата поддржува повеќе бројните типови на податоци:

Целобројни типови на податоци (1, 2, 4 и 8 бајти)
Децимални броеви со подвижна запирка (4 бајти), децимални броеви со
подвижна запирка со двојна прецизност (8 бајти) и проширени децимални
броеви со подвижна запирка со двојна прецизност (10 бајти) во потполна
согласност со IEEE стандардот
Покажувачи (8 бајти)

Сите целобројни операции се извршуваат со 64 битни податоци и во
регистрите се запишуваат 64 битни податоци. Сите податоци коишто зафаќаат
помалку од 64 бита се прошируваат до 64 битни податоци со зачувување на знакот
или нули.

3

Современи Компјутерски Системи
- аудиториски вежби -

2.2 Мемориско адресирање
Itanium архитектурата дефинира единствен униформен линеарен модел на
мемориско адресирање од 264 бајти. Единствен модел значи дека податоците и
инструкции се наоѓаат на исто место во меморијата. Униформен модел значи дека
нема посебни адресни простори со специјална намена. Линеарен модел значи дека
не постојат сегменти, односно сите 264 бајти се последователни.
Кодот се сместува во little-endian редослед на меморија (најмалку значајниот
бајт се сместува во помалата мемориска локација). Податоците вообичаено се
сместуваат во истиот редослед. Постои поддршка за big-endian редослед на
меморија за поддршка на оперативните системи коишто го користат ваквиот начин
на меморирање. Пристапот до меморијата се овозможува само со експлицитно
повикување на инструкциите за читање и запишување во меморија.

2.3 Регистри
2.3.1 Целобројна регистерска датотека
Itanium архитектурата обезбедува 128 64-битни општонаменски регистри за
сите целобројни и мултимедијални пресметки.


Регистерот r0 може само да се чита и секогаш ја има вредноста 0
32 регистри се статични и се глобални за процесот
96 регистри се во форма на стек. Служат за пренесување на аргументи и дел
од нив може да се искористат за техниката на софтверска проточност.

Секој регистар има додатен NaT (Not a Thing) бит кој означува дали
вредноста во регистерот е валидна.

2.3.2 Регистерска датотека за броеви со подвижна запирка
Itanium архитектурата обезбедува 128 82-битни регистри за броеви со
подвижна запирка. Сите регистри се глобално достапни во еден процес.



Регистерот fp0 може само да се чита и секогаш ја има вредноста +0.0
Регистерот fp1 може само да се чита и секогаш ја има вредноста +1.0
32 регистри се статични
96 регистри се ротирачки и се користат за софтверска проточност.
Секој регистер има три полиња како што е прикажано на слика 1:

1. Мантиса (significant) од 64 бита (0-63)
2. Експонент од 17 бит (64-80)

4

Современи Компјутерски Системи
- аудиториски вежби 3. Бит за знак (81)
81 80

64

0

Слика 1 Регистер за број со подвижна запирка

2.3.3 Предикатна регистерска датотека
Itanium архитектурата обезбедува 64 еднобитни предикатни регистри
коишто овозможуваат контрола над извршувањето на инструкциите. Кога
вредноста на предикатниот регистар е 1 (точно) тогаш инструкцијата се извршува,
инаку се извршува NOP (no operation). Предикатните регистри овозможуваат:

Валидни/невалидни инструкции
Елиминација на гранките во if/then/else логичките блокови
Постојат:


16 статични предикатни регистри
48 ротирачки предикатни регистри за контрола на софтверска проточност

Инструкциите на коишто експлицитно не им е зададен предикатен регистер,
имаат предефиниран предикатен регистар pr0 којшто може само да се чита и
секогаш има вредност 1 (точно).

2.3.4 Регистерска датотека за разгранувања
Постојат 8 64-битни регистри коишто служат за чување на вредностите на
адресата за скок при индиректно превземање на адресата за скок.

Апликативна регистерка датотека
Постојат 128 64-битни регистри за специјална намена коишто се користат за
различни функции. Тие што се често се користат вообичаено имаат асемблерски
ознаки. На пример ar66 се користи како Epilogue Counter со ознака ar.ec.

Валидност на регистрите
Шпекулативниот пристап до меморијата има потреба од задоцнето
раководење со софтверски прекини. Ова е овозможено со пропагирање на условите
на софтверските прекини.

5

NaTVal е вредност на регистерот којашто служи за пропагирање на валидноста/невалидноста при шпекулација со податоци со подвижна запирка. Во секој процесорски циклус. Тие може да се изведат паралелно. којшто го олеснува паралелното процесирање на инструкциите Обезбедувајќи голем број на регистри и користење за различни регистри за различна намена за да се избегне загушувањето на регистерските датотеки.. На овој начин имплементацијата на инструкциските групи ја намалува потребата од оптимизирање на кодот за секоја нова микроархитектура.4 Експлицитен паралелизам на инструкциски пресметки (EPIC) Itanium архитектурата го подобрува паралелизамот на инструкциско ниво: • • • Овозможувајќи му на компајлерот/асемблерот експлицитно да го наведе паралелизамот Воведувајќи инструкциски збор со ширина од 3 инструкции.2 Пакет (bundle) Групите инструкции се составени од инструкции што се сместуваат во пакети. Една група инструкции мора да содржи барем една инструкција. 2.4. Бројот на инструкции во една инструкциска група не е ограничен.4. Секој пакет содржи три инструкции и поле за шаблон (template).. 2. Една група инструкции може да заврши динамично во случај на прифатен скок. Кога се компајлира или се пишува асемблерски код групите од инструкции се одделуваат со ознака за циклус. Овие битови овозможуваат пропагирање на валидноста/невалидноста при шпекулација со податоци.аудиториски вежби Секој општонаменски регистер има соодветен NaT бит. Овој 6 . Регистрите за броевите со подвижна запирка користат специјална инстанца на псеудо нула.Современи Компјутерски Системи . Процесорите може да ги искористат додатните ресурси при извршување на поголемите групи инструкции. процесорот се труди да изврши што е можно повеќе инструкции од една група инструкции во зависност од зафатеноста на неговите ресурси. којшто се означува со двојна точка-запирка . наречен пакет (bundle). За време на извршување една група инструкции не мора да биде целосно извршена во еден циклус ако нема доволно слободни ресурси во процесорот. Група инструкции е множество на инструкции без RAW или WAW зависности меѓу нив. Тој се поставува за време на создавање на кодот од компајлерот или од асемблерот.1 Групи од инструкции Секоја инструкција е дел од една група инструкции. наречена NaTVal (Not a Thing Value). 2..

127 MFIs 87 I 46 F 5 0 М Слика 2 Претставување на пакет со шаблон MFIs Шаблоните ги мапираат инструкциите со извршните единици.Современи Компјутерски Системи . Еден пакет се состои од 128 бита. Со сива боја се обележани битовите за шаблонот. Шаблонот исто така може да индицира стоп наредба што означува крај на една група инструкции.аудиториски вежби начин на групирање на инструкциите не дозволува појавување на RAW и WAW зависности во една инструкциска група. Дозволените шаблони се прикажани во табелата 2. а со задебелена црна линија е обележана наредбата за стоп. една инструкција за броеви со подвижна запирка и една инструкцијата за цели броеви. Со овој пакет завршува една група инструкцијата бидејќи е индицирана наредба стоп. Пакетите се подредени на 16 бајти во меморијата. Ова му овозможува на компајлерот да ги користи функционалните единици на начин што ќе го спречи загушувањето. На сликата е прикажан шаблонот MFIs кој означува дека во пакетот се сместува една мемориска инструкција. Од нив првите 5 бита (0-4) служат за шаблонот и наредните 3 х 41 бит (5-45. Ова му овозмошува на процесорот паралелно да ги издава сите три инструкции. 46-86. Множеството на шаблони дефинира комбинации на функционални единици коишто може да бидат повикани при извршување на еден пакет. Шаблони MII MIIs MIsI MIsIs MLX* MLXs* MMI MMIs MsMI MsMIs MFI MFIs MMF MMFs MIB MIBs MBB MBBs BBB BBBs MMB MMBs MFB MFBs Легенда M I F B L “s” – – – – – – * – проширено L што се испраќа до целобројната единица L+X мемориска функција целобројна функција функција со подвижна запирка функција за разгранување функција со долг непосреден операнд индицира стоп Табела 2 Дозволени шаблони за еден пакет 7 . Ова е прикажано на слика 2. 87-127) служат за сместување на 3 инструкции.

Современи Компјутерски Системи .3 Групи од инструкции и пакети Полето за шаблон на еден пакет може да ја прекине групата од инструкции или на крајот или во средината на еден пакет. Група А MMF F М М MFIs I F М Група C Група B MIsI I I М MBBs B B М Слика 3 Дефинирање групи инструкции со помош на пакети 8 .аудиториски вежби - 2. На слика 3 се прикажани три групи од инструкции: групите од инструкции А и С завршуваат на крајот на еден пакет додека пак групата од инструкции В завршува во средината на еден пакет.4.

Тие претставуваат опции коишто дефинираат варијации на основниот мнемоник. На пример. Овозможува компатибилност со IA-32 архитектурата и додатни инструкции за поддршка на IA64 архитектурата.комп2] се комплетери (completers) на инструкцијата.cloop означува инструкција за разгранување при јамки за броење на чекорите.cond означува инструкција за условно разгранување. Притоа: • • • • (qp) – е квалификативен предикат (Qualifying Рredicate) којшто го означува предикатниот регистер според кој се одредува дали инструкцијата треба да се изврши. а br. мнемоникот br означува инструкција за разгранување.Современи Компјутерски Системи .комп1][. дестинација и извор – скоро сите Itanium инструкции имаат барем два изворни операнди и еден операнд за дестинација. инструкцијата се извршува. При разгледување на инструкциите се користи следната класификација: • • • • Инструкции за целобројно пресметување Инструкции за контрола на текот на извршување на програмата Инструкции за пристап кон меморија Инструкции за работа со мултимедија и пресметување со броеви со подвижна запирка 3. Дестинацијата типично е регистер во којшто се запишува резултатот. Инструкциите во коишто експлицитно не е дефиниран предикатниот регистер се смета дека за предикатен регистер го имаат регистерот р0 којшто секогаш има вредност 1 (точно). 9 .1 Синтакса на инструкциите на Itanium архитектурата Типична Itanium инструкција има три операнди со следната синтакса: [(qp)] мнемоник[. Постојат инструкции коишто не може да се поврзат со предикатен регистер.аудиториски вежби - Час 3 Инструкциско множество на Itanium Itanium архитектурата има обемно инструкциско множество. Кога вредноста на регистерот е 0. br. [. Мнемоник (mnemonic) е единственото име на инструкцијата.комп2] дестинација = извор Полињата во средни загради се опции. тогаш инструкцијата се третира како NOP (No OPeration). Притоа. Кога вредноста на регистерот е 1. Изворните операнди се користат како влез во инструкцијата и може да бидат регистри или непосредни вредности (immidiate values) одделени со запирки.комп1][.

r3 add r1 = r2. Се извршуваат линиите код коишто се со задебелени букви. 1 cmp. најчесто од инструкциите за споредување.p2=a. тогаш инструкцијата се третира како NOP.2 Предикација (predication) Предикација (predication) е условно извршување на инструкции врз основа на квалификативниот предикат. Кога предикатот е точно (1).b y=4 y=3 Извршувањето на кодот без предикати е прикажано на лева страна.Современи Компјутерски Системи . Во предикатниот код постои податочна зависност меѓу инструкцијата cmp и двете инструкции. инструкцијата се извршува. Примерот на слика 5 го покажува текот на извршувањето при предикација. r4 3.eq p3 = r2.аудиториски вежби - Неколку примери за инструкциите се: Едноставна инструкција Инструкција со предикат Инструкција со непосредна вредност Инструкција со комплетер add r1 = r2. Предикатите се поставуваат од разни инструкции. Притоа се знае дека операцијата за споредување враќа резултат 1 (точно). Тие зависат од предикатии и се извршуваат паралелно. r3. На тој начин се елиминираат разгранувањата во кодот. r3 (p4) add r1 = r2. Кога предикатот е неточно (0). 10 .b jump EQ y=3 jump END EQ: y=4 END: Код со предикати (p1) (p2) cmp. додека пак извршувањето на кодот со предикати е прикажано на десната страна.eq p1. Предикацијата овозможува претворање на контролната зависност во податочна зависност. Код без предикати cmp a.

r3 Регистерска форма Инкрементирање за еден.b jump EQ (p1) y=4 y=3 (p2) y=3 jump END NOP p1=1 p2=0 (Предикатот p2=0.b cmp a. регистерска форма Форма со моментална вредност Двата изворни операнди (и опционалната константа 1) се собираат и резултатот се сместува во општонаменскиот регистер r1. r3 (qp) add r1 = r2.b (p1) (p2) jump EQ y=3 jump END EQ: y=4 y=4 y=3 Завршено END: Слика 4 Споредба на непредикатно и предикатно извршување на разгранување 3.1 Аритметички инструкции add (qp) add r1 = r2.3.eq p1. Инкрементирањето за единица е возможно само во регистерска форма.p2=a. 11 .b cmp a.b jump EQ (p1) y=4 y=3 jump END (p2) y=3 a==b EQ: y=4 END: Чекор 2 cmp.eq p1. 1 (qp) add r1 = imm.b cmp a.p2=a. r3.p2=a.Современи Компјутерски Системи .аудиториски вежби - Чекор 1 cmp.eq p1.3 Инструкции за целобројно пресметување 3. па затоа y=3 се извршува како NOP) EQ: y=4 END: Чекор 3 cmp.

gr1. Ова е единствена инструкција којашто зафаќа две инструкциски места во еден пакет. count2. r3. 1 (qp) sub r1 = imm8. Декрементирање за единица е возможно само во регистерска форма. r3 (qp) addl r1 = imm22. Кога се додава 22 битна моментална вредност регистерот r3 може да биде само еден од општонаменските регистри gr0. 2. gr2 или gr3. 12 . Во регистерската форма првиот операнд е регистерот r2. 3 или 4 бита. r3 Регистерска форма Декрементирање за еден. r3 додава 14 битна моментална вредност додава 22 битна моментална вредност псеудо операција Двата изворни операнди се собираат и резултатот се сместува во општонаменскиот регистер r1. shladd (shift left and add) (qp) shladd r1 = r2. r3 (qp) add r1 = imm.Современи Компјутерски Системи . Псеудо операцијата ја бира првата или втората форма во зависност од големината на моменталната вредност. За големи константи од 64 бита се користи инструкцијата movl. r3 Првиот изворен операнд r2 се поместува во лево за count2 бита и тогаш се додава вториот изворен операнд r3. adds/addl (add short/long) (qp) adds r1 = imm14. Во формата со моментална вредност првиот операнд се зема од полето за моментална вредност коешто се проширува со задржување на знакот (sign extended). регистерска форма Форма со моментална вредност од 8 бита Вториот изворен оператор (и опционалната константа 1) се одземаат од првиот операнд и резултатот се сместува во општонаменскиот регистер r1. sub (qp) sub r1 = r2. Притоа count2 е двобитна константа и може да се поместува за 1. Полињата за моментална вредност се прошируваат со зачувување на знакот. r3 (qp) sub r1 = r2. Оваа инструкција се користи за скалирање на поместувањето (offset) во полиња од структури на податоци според големината на објектот кој се сместува во полето.аудиториски вежби mov (qp) mov r1 = imm22 (qp) movl r1 = imm64 Задавање на 22 битна константа Задавање на 64 битна константа За задавање на 22 битни константни се користи mov инструкцијата како псеудо инструкција на формата со моментална вредност на add инструкцијата со втор операнд r0.

Инструкцијата andcm прво создава прв комплемент на вториот операнд. 6. r3 регистерска форма форма со 8 битна моментална вредност Врз двата изворни операнди се извршуваат соодветната логичка операција и резултатот се сместува во општонаменскиот регистер r1. 13 . len6 со зачувување на знакот без зачувување на знакот Дел од регистерот r3 се вади според позиција зададена со 6 битната константа pos6 (0-63) и должина зададена со 6 битната константа length6 (1-64) и резултатот се сместува во општонаменскиот регистер r1. r3 (qp) мнемоник r1 = imm8.u r1 = r3. а потоа ја извршува операцијата И врз двата операнди. 13. extr.2 Логички инструкции and/or/xor/andcm (add complement) (qp) мнемоник r1 = r2. Полето за моментална вредност се проширува без задржување на знакот. 6 63 gr7= 18 13 0 63 gr5= 5 0 0 Слика 5 Извршување на инструкцијата extr.Современи Компјутерски Системи .u gr5 = gr7.3. Притоа константата count6 може да прима вредности од 1-64. r2 регистерска форма поместување за вредност (qp) мнемоник r1 = r3. extr/extr. count6 дадена моментална Вредноста на регистерот r3 се поместува во зависност од мнемоникот на лево или на десно. 3. pos6.3. Ако комплетерот е специфициран во повикот на инструкцијата тогаш инструкцијата ќе се изврши без зачувување на знакот. 13. pos6. len6 (qp) extr.3 Инструкции за работа со битови и поместување shl/shr/shr.u (extract/extract unsigned) (qp) extr r1 = r3. Во овој случај имаме еден комплетер u (unsigned). Пример за извршување на оваа инструкција е даден на слика 5.u gr5 = gr7. со или без зачувување на знакот за вредноста на регистерот r2 или моменталната 6 битна константа count6.u (shift left/right/right unsigned) (qp) мнемоник r1 = r3.аудиториски вежби - 3.

r0 регистерска форма 8 битна моментална вредност паралелна форма за нееднаквост псеудо инструкција Двата изворни операнди се споредуваат според една од десет релации дефинирани со crel (compare relation) кои се прикажани во табела 2. Резултатот од операцијата се запишува во соодветниот предикатен регистер. p1. Потоа во зависност од предикатниот регистер р3 инструкцијата се извршува како инструкција за нормален начин на споредување или се извршува како NOP. or или or. Инструкцијата прво ги иницијализира двата предикатни регистри p1 и p2 на 0. Ваквиот начин на запишување во предикатните регистри дозволува повеќе паралелни споредување од ист тип да се извршат врз ист предикатен регистер.ctype cmp. Crel Eq Ne lt/ult le/ule gt/ugt ge/uge a a a a a a a во релација со b еднакво на b нееднакво на b помало од b/без споредување на знак помало или еднакво на b/без споредување на знак поголемо од b/без споредување на знак поголемо или еднакво на b/без споредување на знак Табела 3 Десет релации коишто може да се дефинираат со помош на crel. Дефинирањето на начинот на споредување се врши со помош на комплетерот ctype. 3. Паралелен начин на споредување – комплетери може да бидат: and. r3 r3. 14 . p1.crel.Современи Компјутерски Системи .ctype p1.аудиториски вежби - Час 4 Инструкции за споредување cmp (qp) (qp) (qp) (qp) cmp. p1.crel. Безусловен начин на споредување – комплетерот за споредување се вика unc. 2. Логичкото споредување враќа резултат 1 ако споредувањето е точно или 0 ако е неточно. Овој резултат се запишува во предикатните регистри p1 и p2 според начинот на споредување ctype (compare type). Инструкцијата се извршува како инструкција за нормален начин на споредување сè до моментот кога треба да се запише резултатот во предикатните регистри.crel. p2 p2 p2 p2 = = = = r2. Нормален начин на споредување – не се дефинира ctype и инструкцијата го запишува резултатот од споредувањето во првиот предикатен регистер р1.ctype cmp. Врз резултатот од споредувањето и старите вредности на предикатните регистри се врши логичка операција дефинирана од комплетерот.ctype cmp.crel.andcm (OR and complement). а комплементот на резултатот во вториот предикатен регистер р2. Има три начини на споредување: 1. r3 imm8. r3 r2.

r33 cmp.p2=r32.p2=r3 cmp.z.eq.p2=r32.trel.or p1.r33 cmp. <=).unc p1.p2=r32.eq.z.z.unc p1.eq.p2=r32.r33 Резултат од споредувањето 0 0 0 1 0 1 0 1 р1 р2 0 1 0 0 0 1 без промена 1 1 0 0 без промена без промена 1 0 Табела 4 Начини на споредување tnat (test NaT bit) (qp) tnat.p2=r5 cmp.andcm p1.p2=r32.p2=r32. Резултатот од тестот се добива според trel комплетерот којшто може да биде .eq.or.p2=r6 cmp.or p1.or. >=.nz.r33 cmp.nz (no zero) или .r33 (p3)cmp.r33 cmp.Современи Компјутерски Системи . Во табела 5 се дадени неколку примери за тестирање на NaT битот со различни комплетери: ctype нормален безусловен (р3=0) безусловен (р3=1) OR AND OR and complement Пример cmp.p2=r32. p2 = r3 тестирање на NaT бит Се тестира NaT битот на општонаменскиот регистер r3.r33 cmp.and p1.r33 (p3)cmp.nz. Во паралелната форма за нееднаквост вториот операнд мора да биде општонаменскиот регистер r0.and p1.andcm p1.ctype p1.eq p1.p2=r6 cmp.z.unc p1.z (zero).gt.andcm p1.z.gt.p2=r2 cmp.p2=r3 NaT 1 1 0 0 1 0 1 1 Резултат 0 0 0 1 0 1 0 1 р1 р2 0 1 0 0 0 1 без промена 1 1 0 0 без промена без промена 1 0 Табела 5 Тестирање на NaT бит 15 .or p1.p2=r32 (p3)cmp.nz.andcm p1.p2=r32.аудиториски вежби Во регистерска форма првиот операнд е општонаменскиот регистер r2. Начинот на којшто ќе се изврши споредувањето е ист како кај инструкцијата cmp.p2=r32. Во првиот случај резултатот е 1 ако NaT битот е 1 и обратно.or. Во табела 4 се дадени примери за сите начини на споредување.p2=r7 cmp.eq.p2=r2 (p3)cmp.z p1.or p1.unc p1.and p1. <. ctype нормален безусловен (р3=0) безусловен (р3=1) OR AND OR and complement Пример cmp.and p1. Паралелната форма за нееднаквост се користи само кога начинот на споредување дозволува паралелност и релацијата е нееднаквост (>.r33 cmp.or. додека пак во моменталната форма се зема знаковно проширеното поле imm8.gt.

Оваа инструкција овозможува да се помножи и додаде вредност на регистер со подвижна запирка во време потребно да се изврши само едно множење или само едно собирање. Itanium архитектурата поддржува целобројни инструкции и инструкции со подвижна запирка за работа со мултимедија. Целобројните инструкции за мултимедија ги третираат општонаменските регистри како 8×8. Читање и запишување во меморија при што резултатот при читањето од меморија може да се смести во два регистра. Брза конверзија од броеви со подвижна запирка во целобројни вредности и обратно. Пренос на податоци меѓу општонаменски регистри и регистри со подвижна запирка и обратно. Инструкциите се разгледуваат според следната класификација: 16 . Овие специфични инструкции ги извршуваат операциите на вака поставените податоци како што е покажано на слика 6. двојна и двојна проширена прецизност според IEEE стандардот.аудиториски вежби - Час 5 Инструкции за мултимедија и пресметување со броеви со подвижна запирка Itanium архитектурата обезбедува високи перформанси при работа со броеви со подвижна запирка и целосна поддршка за броеви со подвижна запирка со единечна. Статусен регистер којшто може да содржи повеќе статусни вредности и овозможува шпекулација. 4×16 или 2×32 битни елементи. Ротирачки регистри за броеви со подвижна запирка.Современи Компјутерски Системи . Обезбедена е специјална поддршка за мултимедија преку: • • целобројни SIMD (Single Instruction Multiple Data) инструкции слични на MMX технологијата SIMD-FP (Floating Point Single Instruction Multiple Data) инструкции Поддршката за пресметување со броеви со подвижна запирка се обезбедува со: • • • • • • • 128 регистри за броеви со подвижна запирка Инструкцијата fma (floating point multiply and accumulate) којашто користи четири различни регистри за броеви со подвижна запирка (f = a*b + c). Мултимедијалните инструкции на Itanium архитектурата се семантички компатибилни со MMX технологијата.

прец. Мултимедијалните инструкциите со подвижна запирка ги третираат регистрите за броеви со подвижна запирка како 2×32 битни елементи со единечна прецизност (види слика 7). 0 един.аудиториски вежби Собирање и одземање со три форми на заситена аритметика (saturation arithmetic) Множење Лево поместување и десно поместување со и без чување на знакот Конверзија меѓу различни типови на елементи 0 63 a3 a2 a1 a0 b1 b0 a1+b1 a0+b0 + b3 b2 = a3+b3 a2+b2 Слика 6 Извршување на мултимедијално целобројно собирање Itanium архитектурата обезбедува регистри за броеви со подвижна запирка од 82 бита. Претставувањето овозможува софтверско делење и коренување компатибилно со хардверот на машините со широк инструкциски збор (wide machines) без губење на прецизност и добивање на валидни 80 битни резултати. овозможуваат четири различни околини при пресметувањето. Околината при пресметување го дефинира однесувањето на инструкциите со 17 . FPSR (види слика 8) содржи шаблони (traps). 81 80 64 експонент 81 80 0 мантиса 64 експонент 32 един. Типот на броеви со подвижна запирка е со 80 бита. прец.• • • • Современи Компјутерски Системи . Слика 7 Претставување на регистри за броеви со подвижна запирка како 2×32 битни елементи Itanium архитектурата обезбедува четири посебни статусни полиња како дел од статусниот регистер за броеви со подвижна запирка FPSR (Floating Point Status Register). Статусните полиња (status fields). обележани како sf0-sf3. четири статусни полиња и едно резервирано поле од 6 бита коешто секогаш мора да ја содржи вредноста нула. но моменталните вредности што се задаваат во инструкциите може да бидат 82 битни.

s r1 = getf.). како и големината на експонентот. Во формата за експонент (види слика 9).Современи Компјутерски Системи . полето за мантиса од регистерот f2 се копира во општонаменскиот регистер r1. а битот за знак се копира во 17 бит.exp r1 getf.аудиториски вежби подвижна запирка при настанување на прекини (division by zero.1 Инструкции за пресметување со броеви со подвижна запирка getf (get floating point value or exponent or significant) (qp) (qp) (qp) (qp) getf. полето за експонент на регистерот f2 се копира во битовите 0-16 на општонаменскиот регистер r1. Шаблоните (traps) служат за маскирање на IEEE прекините дефинирани при пресметување со броеви со подвижна запирка. sf3 sf2 sf1 sf0 traps 6 13 13 13 13 6 Слика 8 FPSR (Floating Point Status Register) 5. итн.exp r1 = f2 18 . вредноста на регистерот за броеви со подвижна запирка f2 се претвора во единечна или форма со двојна прецизност и таа мемориска репрезентација се сместува во општонаменскиот регистер r1. 81 80 64 0 експонент f2 мантиса 16 63 0 експонент 0 r1 17 Слика 9 Извршување на инструкцијата getf.d r1 = getf. прецизноста на броевите со подвижна запирка и слично.sig r1 f2 f2 = f2 = f2 форма форма форма форма за за за за единечна прецизност двојна прецизност експонент мантиса (significant) Во формата за единечна и двојна прецизност. 63 0 резерв. overflow. ако f2 содржи NaTVal вредност се поставува NaT битот на општонаменскиот регистер r1. Во формата за мантиса. За сите форми.

h f1 = f3.sff1 = f3. Притоа во зависност од тоа дали се користи . При извршување на инструкцијата може да се појави некој од следните случаи: • • • • Ако кој било од регистрите f2. Ако f2 е f0. fma (floating point multiply add instruction) (qp) fma. вредноста на f1 се поставува на NaTVal. се извршува операција на собирање според IEEE стандардот. Ако f4 е f0. f4. Бидејќи се множат два 64-битни броеви. се извршува нормализација на регистерот f2. f2 xma. xma (fixed point multiply add instruction) (qp) (qp) (qp) (qp) xma. Формите . резултатот е 128-битен број. f2 xma. f2 Се пресметува производот на регистрите f3 и f4 со бескрајна прецизност и f2 се додава на овој производ повторно со бескрајна прецизност. f4. f2 xma. се извршува операција на множење според IEEE стандардот.l f1 = f3.Современи Компјутерски Системи . При користење на овие форми се врши запазување на знакот.pc (каде што sf може да биде едно од статусните полиња). f4. Потоа на резултатот се додава мантисата на регистерот f2 исто како кај инструкцијата fma.rc. Резултатот од последната операција се заокружува на прецизност индицирана од FPSR.hu не вршат запазување на знакот. Ако f4 е f1.sf. користејќи начин на заокружување дефиниран од FPSR. f3 или f4 има NaТVal вредност.pc. пришто мантисите на регистрите за броеви со подвижна запирка ги содржат целобројните вредности.lu f1 = f3. наместо fma.hu f1 = f3. f2 форма форма форма форма со бит за знак за најважните битови без бит за знак за најважните битови со бит за знак за неважните битови без бит за знак за неважните битови Се пресметува производот на регистрите f3 и f4.h (high) формата на инструкцијата во мантисата на регистерот f1 се запишуваат или најважните или најневажните 64 бита од резултатот.lu и .аудиториски вежби Претворањето на вредности од општонаменски регистри во регистри за броеви со подвижна запирка се врши со инструкцијата setf (set floating point value or exponent or significant) којашто ја има истата синтакса како инструкцијата getf. f4.sf. наместо fma. 19 . f4. Заокружениот резултат се сместува во f1.l (low) или .

Најмалку значајните битови од десно се пополнуваат со нули. 3 63 0 r2 r31 0 0 0 0 3 0 0 0 0 Слика 10 Извршување на инструкцијата pshl (parallel shift) 20 . r3 (qp) padd2 r1 = r2.аудиториски вежби - 5. r2. r3 модуларна 1 бајтна форма модуларна 2 бајтна форма модуларна 4 бајтна форма Се собираат соодветните елементи општонаменскиот регистер r1 (види слика 6). r3 count5 r3 count5 2 2 4 4 бајтна бајтна бајтна бајтна форма форма форма форма со со со со променлива константа променлива константа Елементите на општонамескиот регистер r2 независно еден од друг се поместуваат на лево за вредност сместена во општонаменскиот регистер r3 или константата count5. и резултатот се сместува во pshl (parallel shift left) (qp) (qp) (qp) (qp) pshl2 pshl2 pshl4 pshl4 r1 r1 r1 r1 = = = = r2. r3 (qp) padd4 r1 = r2. pshl2 r31 = r2.2 Инструкции за работа со мултимедија padd (parallel add) (qp) padd1 r1 = r2. r2. r2. Ако поместувањето поголемо од 15 (за 2 бајтна форма) или 31 за (4 бајтна форма) се добива резултат нула. Резултатот од инструкцијата се сместува во општонаменскиот регистер r1 (види слика 10).Современи Компјутерски Системи .

Кодирањето на ознаката во инструкцијата за скок се врши како моментална вредност за скок со големина од 21 бита (imm21). imm21 ја означува големината на скокот (offset) меѓу тековниот пакет и пакет кадешто се наоѓа целната инструкција.cond.аудиториски вежби - Час 6 Инструкции за контрола на текот на извршување на програмата Itanium архитектурата разликува два типа на инструкции според целната адреса на разгранувањето: • • релативно во однос на IP (Instruction Pointer) – целната адреса на разгранувањето се специфицира со помош на 21 битна моментална вредност за релативен скок во однос на моменталната вредност на IP директно – целната адресата за скок се сместува во еден од регистрите за разгранување 6. Ако скокот е преземен тогаш извршувањето мора да продолжи од почетокот на некој пакет. целната адреса на скокот се наоѓа во регистерот за разгранување b2.cond.Современи Компјутерски Системи . 21 . операндот target25 специфицира асемблерска ознака (label) кадешто треба да се изврши скокот. Извршувањето група инструкции во која се наоѓа инструкција за разгранување тече нормално сé до инструкцијата за разгранување. Притоа разгранувањето се презема (branch is taken) и IP покажува на адресата на скокот или разгранувањето не се презема (branch is not taken) и извршувањето на инструкциите продолжува по секвенцијален редослед.bwh target25 br target25 (bp) br.bwh b2 br b2 IP релативна форма псеудо инструкција индиректна форма псеудо инструкција Се пресметува дали треба да се изврши скокот. Големината на скокот се пресметува како imm21 = (target25 – IP) >> 4 Кога се работи со индиректната форма.1 Инструкции за условно разгранување br.cond (conditional branch) (bp) br. Во IP релативни скокови. а во спротивно се продолжува со извршување на инструкции од тековната група од инструкции.

. Во секој чекор од јамката вредноста на регистерот r31 се зголемува за еден и се споредува во вредноста на регистерот r30.sptk loop Јамката ќе се извршува се додека е исполнет условот за преземање на скокот. Предикатниот регистер се поставува од страна на инструкцијата за споредување. Притоа споредувањето го менува предикатниот регистер p1 на нормален начин.. односно ако споредбата е успешна. односно r31==r30 (count=3). предикатниот регистер ќе прими вредност 0 и скокот нема да се изврши. којашто ги споредува вредностите на општонаменските регистри r30 и r31.r31 .r30 (p1) br. Во регистерот r30 се чува вредноста на бројачот. cmp. 22 . а во регистерот r31 се чува вредноста којашто го одредува условот за извршување на јамката.lt p1=r31. тогаш предикатниот регистер добива вредност 1 и јамката треба да се изврши уште еднаш. односно се додека предикатниот регистер p1 има вредност 1. а ако истата не постои се претпоставува дека скокот не се презема. Кодот на левата страна е напишан во програмскиот јазик C. Тие се прикажани во табела 4. Кога споредбата ќе биде неуспешна. се користи табела за историја на податоците BHT (Branch History Table). Постојат четири стратегии за прифаќање на скокови при разгранување. Квалификативниот предикат за разгранување (bp) кажува дали скокот ќе се преземе. При динамично одредување за тоа дали ќе се преземе скокот или не.аудиториски вежби Комплетерот bwh (branch whether) ја специфицира стратегијата за прифаќање на скокот. Со задебелени букви се прикажани промените во регистрите и линиите код коипто се извршуваат. Код напишан во C count=0 do count=count+1. bwh spnt sptk dpnt dptk Стратегија за преземање на скокот статично не се презема статично се презема динамично не се презема динамично се презема Табела 6 Комплетери коишто ја дефинираат стратегијата при преземање на скокови Следниот пример покажува како се презема скок со помош на квалификативен предикат за разгранување.Современи Компјутерски Системи . Извршувањето на асемблерскиот код е претставено на слика 6. додека пак на десната страна се наоѓа кодот во асемблер. while (count<3) Асемблерски код mov r30=3 mov r31=0 . loop: add r31=1. ако не постои стратегија за прифаќање на скокот.

r31 ...lt p1=r31.. cmp.lt p1=r31.. loop: add r31=1. loop: add r31=1.sptk loop Чекор 5 mov r30=3 mov r31=0 .lc. add r31=1.r30 br.lc (Loop Counter) за да одреди дали ќе биде прифатен скокот или не. Ако вредноста на регистерот ar.r31 ...lc е 0 тогаш скокот се прифаќа за уште еднаш за последен пат.r30 (p1) br.sptk loop Чекор 7 mov r30=3 mov r31=0 .. Притоа не се користи квалификативен предикат за разгранување. add r31=1.cloop (counted loop branch) br. loop: add r31=1.2 Инструкции за разгранување при јамки за броење на чекорите (counted loop branch) br.r31 . Овој тип на разгранување го користи апликативниот регистер ar65.r31 . cmp. додека пак на десната страна се наоѓа кодот во асемблер.аудиториски вежби - r30=3 r31=0 p1=/ r30=3 r31=1 p1=1 r30=3 r31=2 p1=1 r30=3 r31=3 p1=0 Чекор 1 mov r30=3 mov r31=0 . add r31=1.r30 (p1) br. Следниот пример покажува како се користи инструкцијата за скок при јамка со броење на чекорите.sptk loop Чекор 8 mov r30=3 mov r31=0 ..r31 . Кодот на левата страна е напишан во програмскиот јазик C.lt p1=r31. со ознака ar.sptk loop r30=3 r31=1 p1=/ r30=3 r31=2 p1=1 r30=3 r31=3 p1=1 r30=3 r31=3 p1=0 Слика 11 Извршување на условно разгранување со квалификативен предикат за разгранување 6.Современи Компјутерски Системи .lt p1=r31.r31 .cloop target25 IP релативна форма Инструкцијата за разгранување br. cmp. loop: add r31=1.cloop служи за поддршка на едноставни јамки со броење на чекорите.sptk loop Чекор 6 mov r30=3 mov r31=0 .sptk loop loop: (p1) loop: (p1) loop: (p1) loop: (p1) Чекор 2 mov r30=3 mov r31=0 ..sptk loop Чекор 3 mov r30=3 mov r31=0 .r30 br..r31 .. 23 .lt p1=r31. Јамката се извршува за еден чекор повеќе од почетната вредноста на регистер за броење на чекори ar. Ако вредноста на регистерот ar.. add r31=1...r30 br.r31 .r30 br.. cmp.lt p1=r31. cmp.lt p1=r31.r30 (p1) br. cmp.. cmp. cmp.sptk loop Чекор 4 mov r30=3 mov r31=0 .r30 (p1) br.lc е поголема од 0 тогаш скокот се прифаќа.lt p1=r31.

r31 . а во регистерот r31 се чува вредноста на бројачот. br. r30=0 r31=0 lc=3 r30=0 r31=1 lc=2 r30=1 r31=2 lc=1 r30=3 r31=3 lc=0 r30=6 r31=4 lc=0 Чекор 1 mov ar.sptk loop Чекор 3 mov ar.cloop.lc=3 mov r30=0 mov r31=0 .r31 add r31=1.cloop. k<=3.r31 add r31=1.. add r30=r30.cloop.аудиториски вежби Код напишан во C sum = 0...cloop.sptk loop r30=0 r31=1 lc=3 r30=1 r31=2 lc=2 r30=3 r31=3 lc=1 r30=6 r31=4 lc=0 Завршува извршувањето на јамката Слика 12 Извршување на инструкција за разгранување при јамки со броење на чекорите 24 .sptk loop Чекор 6 mov ar. односно сè додека апликативниот регистер ar.r31 ...sptk loop Чекор 4 mov ar.cloop. br.cloop. br.lc=3 mov r30=0 mov r31=0 .sptk loop Чекор 8 mov ar. add r30=r30. k++) { sum = sum + k.cloop.r31 add r31=1. br.lc=3 mov r30=0 mov r31=0 .r31 . loop: add r30=r30.lc=3 mov r30=0 mov r31=0 .. loop: add r30=r30..cloop.r31 . for (k=0. add r30=r30.sptk loop loop: loop: loop: loop: Чекор 2 mov ar. loop: add r30=r30..r31 . br.r31 add r31=1.r31 add r31=1. Во регистерот r30 се чува вредноста на сумата... add r30=r30. Вредноста на ar.r31 add r31=1.. Извршувањето на асемблерскиот код е претставено на слика 7.sptk loop Чекор 7 mov ar.lc=3 mov r30=0 mov r31=0 . br. loop: add r30=r30.r31 .lc=3 mov r30=0 mov r31=0 .sptk loop Чекор 5 mov ar.. br..r31 ...r31 add r31=1.sptk loop Јамката ќе се извршува сè додека е исполнет условот за преземање на скокот.lc=3 mov r30=0 mov r31=0 . br.cloop.. Со задебелени букви се прикажани промените во регистрите и инструкциите коишто се извршуваат. loop: add r30=r30.lc има вредност поголема или еднаква на нула..lc=3 mov r30=0 mov r31=0 .r31 add r31=1.r31 . br.r31 add r31=1.lc=3 mov r30=0 mov r31=0 .sptk loop Чекор 9 mov ar.. br. } Асемблерски код mov ar. loop: add r30=r30.r31 .r31 add r31=1..lc се поставува на почетокот и потоа истата автоматски се декрементира при секое повикување на инструкцијата за разгранување br.r31 .cloop..Современи Компјутерски Системи .cloop.lc=3 mov r30=0 mov r31=0 .

lc (Loop Counter) и ar. Во овој случај мора да се додаде код за извршување на пролог (prolog) што претставува полнење на проточноста (еxecution pipeline) и код за извршување на eпилог (epilog) што претставува празнење. Наместо чекорите да се извршуваат четири пати за секоја инструкција. за време на извршување на втората инструкција за првпат. Itanium архитектурата дава хардверска поддршка за софтверски проточно јамки со елиминација на кодот потребен за пролог и епилог.ec (Epilog Counter) за броење на чекорите на извршување на јамката и броење на инструкции во јамката коишто треба да се испразнат од проточната цевка.аудиториски вежби - Час 7 Софтверска проточност Извршувањето на јамките се подобрува со софтверски техники како: • • Одмотување јамки – избегнување на инструкциите за скок и мултипликација на телото на јамката толку пати колку што се извршува целата јамка. Софтверска проточност – паралелно проточно извршување на инструкциите од јамката (види слика 12). За таа цел се воведува: • • • специјални инструкции за скок апликативните регистри ar. ротирачки регистри (rotating registers) Нормална јамка време Софтверска проточна цевка 1 1 1 2 1 1 3 2 1 4 3 2 4 3 2 2 2 пролог 4 тело (kernel) епилог Слика 13 Извршување на нормална јамка и software pipelining loop Во примерот на слика 12 се претпоставува дека јамката има три инструкции во своето тело и јамката се повторува четири пати. 25 . Потоа кога третата инструкцијата се извршува по првпат. може да се извршува првата инструкција за вторпат.Современи Компјутерски Системи . а првата инструкција за третпат итн. втората инструкција се извршува за вторпат.

За време на прологот и телото (kernel) на јамката ar. Според br. За да се избегне зависноста и да се овозможи проточноста се воведуваат ротирачки регистри (rotating registers). јамката се извршува уште еден последен пат и се извршува последната регистерска ротација.ec има вредност поголема од еден.Современи Компјутерски Системи .lc и ar. Кога инструкцијата се извршува и ar. Во следниот пример е дадена една едноставна јамка со броење на чекорите. апликативниот регистер ar.lc ја намалува својата вредност за еден ако вредноста што ја содржи не е нула.ctop.cexit е спротивен на услов на инструкцијата br. Променливата n го содржи бројот на чекори на извршување на јамката.ctop скокот се презема ако апликативниот регистер ar. Тоа е апликативниот регистер ar.ec почнува да ја намалува својата вредност за еден во секој чекор.cexit target25 IP релативна форма Двата типа на инструкцијата се однесуваат идентично освен во одредувањето кога треба да се преземе скокот.ec почнува да одбројува до нула. Овие две инструкции за разгранување ги користат апликативните регистри ar. Ротацијата на регистрите започнува при првото извршување на инструкцијата за разгранување. регистерот rX+1 ја предава својата вредност на регистерот rX+2 итн. Ротирачки регистри може да бидат само одредени регистри.lc има вредност различна од нула или апликативниот регистер ar.ec ќе добие вредност нула софтверската проточна цевка завршува со своето извршување. Условот за преземање за инструкцијата br. Oпштонаменски ротирачки регистри се регистрите r32 – r127.ec истовремено ќе добијат вредност нула. Јамката ги 26 .lc и ar. Кога ar. односно регистерот rX ја предава својата вредност на регистерот rX+1. Кога апликативниот регистер ar.lc има вредност нула се влегува во епилогот на јамката и ar. а ar. Инструкциите во јамката може да се меѓусебно зависни инструкции и тоа не само во еден ист чекор.аудиториски вежби За создавање на проточниот систем на јамката Itanium архитектурата воведува апликативен регистер за броење на инструкциите при празнење на проточноста.ec за контрола на регистерската ротација и иницијализацијата на предикатните регистри. туку во различни чекори на извршување на јамката. Ротирачки регистри се оние регистри коишто при извршување на соодветна инструкција кружно ги менуваат вредностите за една позиција.cexit (modulo-scheduled counted loop branch instructions) br.lc има вредност нула.ctop/br.ec има вредност еден.ctop/br.lc ќе добие вредност нула. Софтверската проточност се овозможува со следните инструкции: br.ec (Еpilog Counter) и најчесто за почетна вредност го добива бројот на инструкции во јамката. Кога инструкцијата се извршува и ar. a предикатни ротирачки регистри се регистрите p16 – p63. Ротацијата на регистрите престанува кога апликативните регистри ar. Променливите x и y претставуваат еднодимензионални полиња од бајти.

додека пак вредностите на предикатните регистри се р16=1.eq p16. р18=0. што значи дека епилогот има должина 3 и вредноста на ar. Јамката се повторува 5 пати. Вредноста на првиот ротирачки предикатен регистер се поставува на 1 затоа што тој претставува предикат за првата инструкција во јамката. i < n.Современи Компјутерски Системи . Кодот во асемблер со којшто се имплементира истата јамка како софтверски проточна јамка е: mov pr.ec = 3 loop: (p16) ld1 r32 = [r12].1 (p17) add r34 = 1. i++) y[i] = x[i]+1. n = 5. Инструкцијата add служи за да се додаде еден на тековниот член од полето.r0 mov ar. р17=0. Сите инструкции во јамката се со предикати коишто претставуваат последователни предикатни ротирачки регистри.p0 = r0. Исто така инструкции за пристап кон меморијата настануваат со промена на основата за 1.rot = 0 cmp. 27 .sptk loop Првата линија од кодот вредноста на сите предикатни ротирачки регистри ја поставува на 0. Во самата јамка се јавуваат две инструкции за пристап кон податоци со големина 1 бајт.lc = 4 mov ar. Промената на основата се врши за 1 затоа што податоците се од тип бајт и во меморијата се сместени на растојание 1.аудиториски вежби зголемува сите елементи на полето x за еден и ги сместуваат со истиот индекс во полето y. Јамката има три инструкции.lc се поставува на 4.ctop.1 br.ec се поставува на 3. па затоа вредноста ar.r33 (p18) st1 [r13] = r35. for (i = 0. На почетокот не се важни вредностите на општонаменските регистри. Извршувањето на јамката е претставено на слика 13.

Современи Компјутерски Системи .1 (p17) add r34 = 1.1 br.sptk loop х1 32 33 34 35 36 37 38 Предикатни регистри 1 0 0 4 3 16 17 18 lc ec Пролог (чекор 2) Општонаменски регистри loop: (p16) ld1 r32 = [r12].r33 NOP (p18) st1 [r13] = r35.sptk loop x2 х1 y1 32 33 34 35 36 37 38 Предикатни регистри 1 1 0 3 3 16 17 18 lc ec Пролог (чекор 4) Општонаменски регистри loop: (p16) ld1 r32 = [r12].r33 NOP (p18) st1 [r13] = r35.1 br.аудиториски вежби Пролог (чекор 1) Општонаменски регистри loop: (p16) ld1 r32 = [r12].1 (p17) add r34 = 1.ctop.1 br.r33 (p18) st1 [r13] = r35.ctop.ctop.1 NOP (p17) add r34 = 1.ctop.sptk loop х1 32 33 34 35 36 37 38 Предикатни регистри 1 1 0 3 3 16 17 18 lc ec Пролог (чекор 3) Општонаменски регистри loop: (p16) ld1 r32 = [r12].1 (p17) add r34 = 1.1 br.sptk loop 32 x2 x1 y1 33 34 35 36 37 38 Предикатни регистри 1 1 1 2 3 16 17 18 lc ec 28 .r33 (p18) st1 [r13] = r35.

аудиториски вежби Тело (чекор 5) Општонаменски регистри loop: (p16) ld1 r32 = [r12].r33 (p18) st1 [r13] = r35.sptk loop 32 x4 x3 y3 y2 y1 33 34 35 36 37 38 Предикатни регистри 1 1 1 0 3 16 17 18 lc ec 29 .sptk loop x3 x2 y2 y1 32 33 34 35 36 37 38 меморија Предикатни регистри 1 1 1 2 3 16 17 18 lc ec Тело (чекор 6) Општонаменски регистри loop: (p16) ld1 r32 = [r12].r33 (p18) st1 [r13] = r35.1 (p17) add r34 = 1.1 br.r33 (p18) st1 [r13] = r35.ctop.sptk loop x4 x3 y3 y2 y1 32 33 34 35 36 37 38 меморија Предикатни регистри 1 1 1 1 3 16 17 18 lc ec Тело (чекор 8) Општонаменски регистри loop: (p16) ld1 r32 = [r12].1 (p17) add r34 = 1.1 (p17) add r34 = 1.1 br.1 br.ctop.1 br.sptk loop 32 x3 x2 y2 y1 33 34 35 36 37 38 Предикатни регистри 1 1 1 1 3 16 17 18 lc ec Тело (чекор 7) Општонаменски регистри loop: (p16) ld1 r32 = [r12].ctop.1 (p17) add r34 = 1.ctop.r33 (p18) st1 [r13] = r35.Современи Компјутерски Системи .

1 br.sptk loop x5 x4 y4 y3 y2 y1 32 33 34 35 36 37 38 меморија Предикатни регистри 1 1 1 0 3 16 17 18 lc ec Eпилог (чекор 10) Општонаменски регистри loop: (p16) ld1 r32 = [r12].1 br.sptk loop 32 33 x5 y5 y4 y3 y2 34 35 36 37 38 Предикатни регистри 0 0 1 0 1 16 17 18 lc ec 30 .r33 (p18) st1 [r13] = r35.r33 (p18) st1 [r13] = r35.sptk loop 32 x5 x4 y4 y3 y2 y1 33 34 35 36 37 38 Предикатни регистри 0 1 1 0 2 16 17 18 lc ec Eпилог (чекор 11) Општонаменски регистри loop: NOP (p16) ld1 r32 = [r12].ctop.r33 (p18) st1 [r13] = r35.1 (p17) add r34 = 1.1 br.1 (p17) add r34 = 1.sptk loop 32 x5 y5 y4 y3 y2 y1 33 34 35 36 37 38 меморија Предикатни регистри 0 1 1 0 2 16 17 18 lc ec Eпилог (чекор 12) Општонаменски регистри loop: (p16) ld1 r32 = [r12].1 (p17) add r34 = 1.ctop.ctop.r33 (p18) st1 [r13] = r35.аудиториски вежби - Тело (чекор 9) Општонаменски регистри loop: (p16) ld1 r32 = [r12].Современи Компјутерски Системи .1 (p17) add r34 = 1.ctop.1 br.

r33 (p18) st1 [r13] = r35.ctop.sptk loop 32 33 x5 y5 y4 y3 y2 34 35 36 37 38 меморија Предикатни регистри 0 0 1 0 1 16 17 18 lc ec Eпилог (чекор 14) Општонаменски регистри loop: (p16) ld1 r32 = [r12].1 br.sptk loop Завршува извршувањето на јамката 32 33 34 x5 y5 y4 y3 35 36 37 38 Предикатни регистри 0 0 0 0 0 16 17 18 lc ec Слика 14 Извршување на софтверска проточна цевка 31 .1 br.Современи Компјутерски Системи .1 (p17) add r34 = 1.r33 (p18) st1 [r13] = r35.аудиториски вежби - Eпилог (чекор 13) Општонаменски регистри loop: NOP (p16) ld1 r32 = [r12].1 NOP (p17) add r34 = 1.ctop.

Притоа сите инструкции како операнди користат регистри освен инструкцијата за читање од меморија ld (load) и инструкцијата за запишување во меморија st (store). За таа цел се задаваат на шпекулативни пристапи до меморијата пред кодните бариери. Мемориската латентност се намалува со помош на две техники: • • Податочна шпекулација (Data speculation) – извршување на операција пред да се разреши податочната зависност Контролна шпекулација (Control speculation) – извршување на операција пред да се разреши контролната зависност Itanium архитектурата овозможува намалување на латентноста на меморијата за читање на податоци од меморијата. Itanium архитектурата дава можности за елиминација или намалување на мемориските пристапи преку користењето на големите регистерски датотеки. односно предвремено преземање податоци. Застојот заради мемориската латентност се минимизира и се создаваат поголеми можности за паралелно извршување на инструкциите.1 Мемориска латентност Денешните процесори работат со зголемени брзини и паралелизам. но можностите за издавање на инструкции најчесто не се искористени заради бавниот пристап кон меморијата. како и зголемена контрола врз мемориската хиерархија. Овој начин на пристап кон меморијата му дозволува на процесорот да ги добие податоците на време и да ги избегне проточните застои (stalls). Заостанатите мемориски пристапи се намалуваат со тоа што се поместуваат инструкциите за читање од меморија порано во кодот. На тој начин се намалува мемориската латентност.аудиториски вежби - Час 8 Инструкции за пристап кон меморија 8. Притоа: • • Ако не се открие грешка или прекин мемориската латентност се намалува Ако се открие грешка или прекин пристапот кон меморија се повторува и зависната инструкција мора повторно да биде извршена од код за справување со грешки (exception handler) 32 .Современи Компјутерски Системи . Кога се извршуваат шпекулативни пристапи за читање од меморија мора да се употреби детекцијата на грешки и прекини пред да се преземе конечниот резултат од операцијата.

Комплетерот ldtype ги специфицира еден од начините за читање од меморија прикажани во табела 5. 4 или 8) се чита од меморија почнувајќи од адресата специфицирана во општонаменскиот регистер r3.ldhint r1 = [r3].Современи Компјутерски Системи .ldhint r1 = [r3] (qp) ldsz.аудиториски вежби Itanium архитектурата кодните бариери ги совладува користејќи: 1. imm9 без промена на базниот регистер промена на основата со регистерски операнд промена на основата со поместување – непосреден податок Вредност која се состои од sz бајти (1.ldtype. комбинација на првите два пристапи (speculative advanced load) ако постои истовремена податочна и контролна зависност предвремен пристап кон меморија st ld st проверка на податоците шпекулативен пристап кон меморија (p) br ld Слика 15 Предвремен пристап кон меморија (p) br проверка на податоците Слика 16 Шпекулативен пристап кон меморија ld (load) (qp) ldsz. предвремен пристап кон меморија (advanced load) при податочна зависност (слика 8) 2. 33 . NaT битот на регистерот r1 се брише освен при шпекулативно читање од меморија.ldtype.ldtype. r2 (qp) ldsz. ако треба се дополнува со нули и се сместува како 64 битна вредност во општонаменскиот регистер r1. Вредноста од таа адреса.ldhint r1 = [r3]. 2. шпекулативен пристап (speculative load) кон меморија при контролна зависност (слика 9) 3.

34 . ниту на податоците прочитани од меморија и истата се додава кон вредноста на општонамескиот регистер r3. Истовремено се поставува и NaT битот и се запишува влез во ALAT табелата. Вредноста на регистерот r2 или константата imm9 не влијае на тековната адреса на ld инструкцијата.аудиториски вежби ldtype без комплетер s а sa c Интерпретација нормално читање шпекулативно читање предвремено читање комбинирано читање проверка резултатот на Извршување на операцијата Во случај да не е успешно шпекулативното читање од меморија се поставува NaT битот. Табела 7 Можни вредности за комплетерот ldtype за инструкцијата ld и нивното значење Кога се користат формите во коишто има промена на основата прво се извршува операцијата за читање од меморија. NaT битот се брише и се проверува дали претходно имало влез во ALAT табелата за дадениот регистер. Ако овие услови се исполнети се раното читање од меморија се смета за успешно. Пример за извршување на оваа инструкција е даден во табелата 7. а потоа се извршува промената на базниот регистер. На овој начин се забележува колизијата со подоцнежните запишувања во меморијата. Претпоставуваме дека податоците во меморијата се запишани во little-endian редослед.Современи Компјутерски Системи . Во оваа табела се чуваат сите адреси при предвремено читање од меморијата. Проверката може да се изврши со комплетер . Се проверува дали при предвремено читање од меморија се јавиле грешки. Се додава влез во табелата ALAT (Advanced Load Address Table). Во случај да нема истовремено шпекулативно читање за регистерот.nc (no clear) којшто служи за бришење на влезот во ALAT табелата.c (clear) и .

nta комплетерот) без да се губи време за пребарување низ нивоата на кеш меморијата. r20=[r4] r21=[r4].. Под временска локалност на податоците се подразбира дека податоците што билe користени во последно време.. Последниот комплетер ldhint (види табела 8) служи за дефинирање на временската локалност на податоците. r22=[r4] r4=1200 r20=/ r21=/ r22=/ mov ld1 ld2 ld4 r4=1200. ldhint Инструкциja Значење ld st lfetch без комплетер временски зависни на сите нивоа x x x .2.nt1 временски зависни на ниво поголемо од 1 x - x .2. 35 . r22=[r4] r4=1202 r20=32 r21=3104 r22=50464004 Табела 8 Извршување на инструкцијата ld со промена на базниот регистер Itanium архитектурата претпоставува дека сите податоци имаат просторна локалност. Податоци со просторна зависност се податоци коишто имаат мемориски адреси блиски до податоците или инструкциите што се извршуваат во моментот. r20=[r4] r21=[r4]...2. најверојатно повторно ќе бидат барани. r22=[r4] r4=1202 r20=32 r21=3104 r22=/ mov ld1 ld2 ld4 r4=1200.nta временски независни x x x Табела 9 Можни вредности за комплетерот ldhint за инструкцијата ld и нивното значење Временската локалност се дефинира по нивоата на кеш меморијата како што е прикажано на слика 10.. Податоците коишто се сметаат за временски независни се читаат директно од главната меморија (со спецификација на .Современи Компјутерски Системи .аудиториски вежби Мемориска адреса Вредност 00001200 00001201 00001202 00001203 00001204 00001205 00001206 00001207 32 12 4 5 2 3 1 245 Инструкција Резултат mov ld1 ld2 ld4 r4=1200. r20=[r4] r21=[r4]. Податоците се временски зависни во однос на нивоата на кеш меморијата. Временски зависните податоци се читаат од некое ниво на кеш меморијата што се специфицира со ldhint комплетерот.nt2 временски зависни на ниво поголемо од 2 - - x ..

Ниво 0 Ниво 1 Ниво 2 Временски зависни структури . 36 .Современи Компјутерски Системи .sthint [r3] = r2. ако се повика lfetch.nt1 тогаш пребарувањето на податоците ќе се врши од нивото 1.nta МЕМОРИЈА Временски независни структури Слика 17 Временската зависност на податоците во кеш меморијата во зависност од ldhint На пример. Извршување оваа инструкција не смее да го попречува извршувањето на програмата. imm9 без промена на базниот регистер промена на основата со поместување непосреден податок – Вредноста на општонаменскиот регистер r2 од sz бајти (1. Комплетерот sthint ја специфицира временската локалност на пристапот (види табела 8) и може да ja прими само вредноста . Пребарувањето на кеш меморијата за одреден податок може да се специфицира директно во ld инструкцијата со ldhint комплетерот. па нагоре во мемориската хиерархија. 2.sthint [r3] = r2 (qp) stsz. Промената на основата при запишувањето на меморијата се извршува со додавање на непосредната вредност imm9 и истата не влијае на адресата на запишување на податоците или на самите податоци. Таа го означува нивото на кеш меморијата во коешто ќе бидат барани податоците при читање од меморија. Ако NaT битот на регистерот r2 е поставен на 1 се јавува прекин. Алокација во кеш меморија без компл. st (store) (qp) stsz.аудиториски вежби Инструкцијата lfetch (line fetch) служи за префрлање на податоци меѓу нивоата на кеш меморијата. 4 или 8) се запишува во меморија почнувајќи од адресата специфицирана во општонаменскиот регистер r3.nta.nt1 . Оваа инструкција може да биде игнорирана од страна на имплементацијата на Itanium архитектурата.nt2 .

Ако адресите се различни тогаш првиот пристап кон меморијата (запишување) и вториот пристап кон меморијата (читање) се независни. Потенцијалната податочна зависност може да се разреши со помош на предвремено читање податоци. Вредноста на променливата h се запишува во општонаменскиот регистер r5. покажувачот addr2 покажува на адресата запишана во општонаменскиот регистер r33.аудиториски вежби - 8. Од друга страна. int nekoja (int *addr1. } Не може да се знае однапред дали двата покажувачи addr1 и addr2 покажуваат кон истата адреса. [r32]=r3 r2=[r33] .. ако покажувачите референцираат иста адреса. // втор пристап кон меморија return(h+1). r5=1. // прв пристап кон меморија h = *addr2. int *addr2) { int h.r0 . За целобројниот тип int се претпоставува дека има големина од 4 бајти.a за да изврши предвремено читање на податоците. прво мора да се запише податокот и дури тогаш истиот може да биде прочитан без да се јави грешка. Тогаш е дозволено читањето од меморија да се изврши пред да се изврши запишувањето во меморија. Функција ја задава вредноста 4 на мемориската локација референцирана од покажувачот addr1 и потоа ја презема вредноста од мемориската локација на којашто покажува addr2 и додава еден и ја враќа како вредност на функцијата. Асемблерскиот код што соодветствува на фукцијата напишана во програмскиот јазик С е: add st4 ld4 add r3=4. а ld. *addr1 = 4.Современи Компјутерски Системи . Во функцијата се задаваат два покажувачи како аргументи.. Следниот код напишан во асемблер ја користи инструкцијата ld.2 Предвремен и шпекулативен пристап кон меморија Во примерот е даден код кој претставува едноставна функција во програмскиот јазик С. r2 Покажувачот addr1 покажува на адресата запишана во општонаменскиот регистер r32.c за да изврши проверка дали се јавила податочна зависност. 37 .

r2 Ако податокот во мемориската адреса на којашто покажува addr2 не се променил тогаш шпекулацијата е успешна и мемориската латентност е скриена. Ако податокот во мемориската адреса на којашто покажува addr2 се променил. Во ваков случај не може само да се проверува дали се добро прочитани податоците туку мора обезбеди код за поправка на грешките настанати од операциите извршени со погрешно шпекулираните податоци. target25 проверка при шпекулативен читање проверка при рано читање Се проверува дали резултатот од шпекулативен или предвремен пристап кон меморија е успешен или не.cond.a.Современи Компјутерски Системи . target25 (qp) chk. Употребата на инструкцијата chk при рано читање на податоци и вршење на операции врз нив може да се види од примерот на слика 11: 38 .r0 . Ако проверката не е успешна тогаш се врши скок на асемблерската ознака target5 на ист начин како IP релативната форма на инструкцијата br.a r2=[r33] // предвремен пристап кон меморија add r3=4. односно ако е најден влез во ALAT табелата тогаш ld. Многу често се јавува потреба да се шпекулира со податоците (и во двата случаја на зависност) и потоа да се извршат операции со шпекулираните податоци.s r2. // проверка на зависност add r5=1.aclr r1... Комплетерот aclr на инструкцијата chk.a може да ги прими вредностите clr (clear) или nc (no clear). за да се избрише влезот во ALAT табелата. За таа намена се користи инструкцијата chk. st4 [r32]=r3 ld4.c r2=[r33] .c инструкцијата го повторува пристапот кон меморија.аудиториски вежби - ld4. chk (check load instruction) (qp) chk.

add r5 = r6. Во случај на извршување на поправката програмата го продолжува својот нормален тек. односно само ако addr покажува на некоја мемориска локација различна од нула. r7. Пред да се изврши инструкцијата st8 [r18]=r5. popravка nazad: st8 [r18] = r5 popravка: ld8 r6 = [r8]. st8 [r4] = r12 st8 ld8 add st8 [r4] = r12 r6 = [r8].a. кој служи за поправка на кодот при погрешно шпекулирани податоци. За таа цел е поставена ознаката nazad.аудиториски вежби Без шпекулација на податоци Со шпекулација на податоци ld8. во случајот со ознака popravka. Следниот пример е функција напишана во програмскиот јазик С која има само еден аргумент – покажувач кон тип на променлива int. Податочната зависност е можна во случај регистрите r4 и r8 да содржат иста мемориска адреса.clr r6.. add r5 = r6. r7. Функцијата ја зголемува вредноста на мемориската локација на којашто покажува addr за 5. Меѓутоа операцијата треба да се изврши само ако покажувачот нема вредност NULL. [r18] = r5 chk.Современи Компјутерски Системи .. Инструкциите напишани со задебелени букви се извршени шпекулативно на десната страна од сликата. За таа цел се пишува посебен код за справување со прекини (exception handler). 39 . r5 = r6. Ако шпекулацијата не била успешна мора повторно да се изврши читање на податоците. но и add инструкцијата што се извршува врз прочитаните вредности. r7 br nazad Слика 18 Употреба на chk при предвремено читање на податоците од меморија Кодот на левата страна од сликата се извршува без шпекулација со податоци... мора да се провери дали предвременото читање на податоците било успешно.a r6 = [r8]..

Ако р6 добие вредност 0. 40 .аудиториски вежби int dodadi5 (int *addr) { if (addr==NULL) return (-1). else return (*addr+5).ret. Ако се знае дека веројатноста покажувачот аddr да има вредност NULL е мала. (p6)add r8=-1.. тогаш регистерот r8 добива вредност –1 и се излегува од функцијата. тогаш инструкциите коишто враќаат вредност –1 се извршуваат како NOP. Инструкциите може да се сместат во една иста група од инструкции и со помош на предикатните регистри при извршување да се одреди кои од инструкциите се валидни..eq p6. . Ознаката popravka служи за поправка на грешките при недозволено читање од меморија.r0. Ако р6 добие вредност 1.p5=r32.. popravka add r8=5. } Во овој момент може да се искористи шпекулативно читање од меморија..ret (p5)chk. Соодветниот асемблерски код е: add5: ld4.s r1=[r32] cmp. Кодот врши шпекулативно читање од мемориската локација на којашто покажува addr и паралелно проверува дали мемориската локација на којашто покажува addr е 0. Излезот од функцијата се врши со помош на инструкцијата br.r1 br. При проверката на мемориската локација на којашто покажува addr се задаваат вредности на двата предикатни регистри р5 и р6.s r1. Вредноста на регистерот r8 станува вредноста на мемориската адреса референцирана од addr зголемена за пет. Резултатот од функцијата се враќа во општонаменскиот регистер r8. Ова е можно да се изврши паралелно затоа што овие две инструкции може да се сместат во иста група од инструкции. тогаш може да се помести читањето од меморија пред да се изврши разгранувањето..ret.Современи Компјутерски Системи . popravka: .r0 (p6)br. //popravka Во кодот покажувачот addr покажува на мемориската адреса што е сместена во општонаменскиот регистер r32..

16. cmpxchg (compare and exchange) (qp) cmpxchgsz. 4 или 8) се чита од меморија почнувајќи од адресата што се наоѓа во општонамескиот регистер r3. –4. 1. Вредноста се проширува со нули и се запишува во општонаменскиот регистер r1. xchg (exchange) (qp) xchgsz.ldhint r1 = [r3].ccv (cmpxchg Compare Value application register) тогаш се извршува запишување на најмалку значајните sz бајти од општонаменскиот регистер r2 во меморија почнувајќи од адресата специфицирана во општонаменскиот регистер r3. Таа вредност потоа се проширува со нули и се запишува во општонаменскиот регистер r1. –8. ar. r2. 4.ccv Податокот од sz бајти (1. –1. односно обезбедуваат читање од меморија. 8. fetchadd (fetch and add) (qp) fetchadd4.sem r1 = [r3]. 4 или 8) се чита од меморија почнувајќи од адресата што се наоѓа во општонамескиот регистер r3. inc3 форма со 4 бајти форма со 8 бајти Вредност што се содржи во 4 или 8 бајти се чита од меморија почнувајќи од адресата специфицирана во општонаменскиот регистер r3.ldhint r1 = [r3]. операција врз прочитаните податоци и запишување на резултатот во меморија. Кон вредноста прочитана од меморија се додава константната вредност специфицирана од inc3. Атомичните операции поддржуваат повеќепроцесни пристапи кон меморија со заклучување на мемориската локација се додека не се изврши целата операција.Современи Компјутерски Системи . 2. Таа вредност потоа се проширува со нули и се запишува во општонаменскиот регистер r1.аудиториски вежби - 8.3 Инструкции со семафори Инструкциите со семафори извршуваат атомични мемориски операции. Најмалку значајните sz бајти од општонаменскиот регистер r2 се запишуваат во меморијата почнувајќи од адресата специфицирана во регистерот r3. r2 Податокот од sz бајти (1. Комплетерот ldhint е со исто значење како комплетерот ldhint за инструкцијата ld. Потоа вредноста се запишува 41 . 2. inc3 (qp) fetchadd8. inc3 може да ги прими само вредностите –16. Ако вредноста во регистерот r1 e еднаква со вредноста во регистерот ar.ldhint r1 = [r3]. Комплетерот ldhint е со исто значење како комплетерот ldhint за инструкцијата ld.

аудиториски вежби во назад во меморија почнувајќи од адресата запишана во општонаменскиот регистер r3. Комплетерот ldhint е со исто значење како комплетерот ldhint за инструкцијата ld. 42 .Современи Компјутерски Системи .

c = a + b + 1. mov r1 = 1 mov r2 = 4. b = a*4 + c. r1. mov r1 = 1. add r4 = 4. 2. r3 43 . add r3 = r2. MisIs. 1. r1 3. add r3 = r1. shladd r2 = r1..аудиториски вежби - Вежби 1. r2. 1 add r1 = r1. променливата c со r3 и променливата d со r4. променливата c со r3.. Колку најмалку инструкции се потребни за да се претстави програмата? Решение: Променливата а е претставена со регистерот r1. MMB. променливата b со r2. 2.. MsMI. Колку групи инструкции се потребни за да се претстави програмата? Решение: Променливата а е претставена со регистерот r1. d = a + 4. MsMIs? Решение: Една група инструкции е дефинирана со помош на наредбата стоп. b = 4. променливата b со r2. Следната програма напишана во програмскиот јазик C да се преведе во асемблер: a = 1.Современи Компјутерски Системи . Тоа значи дека со пакетите се дефинирани пет групи од инструкции. Следната програма напишана во програмскиот јазик C да се преведе во асемблер: a = 1. r3. c = a + c + 1. a = a + b. Колку групи инструкции се дефинирани со следните пакети: MII..

Регистерот r3 добива вредност 12.. Вредноста на регистерот r4 е 0. Извршувањето на инструкцијата cmp.unc p1.. Трите бита после дваесеттиот бит се 010.gt на r5 и r3 е 0. 3 Колкава е вредноста на регистерот r4? Решение: Регистерот r3 има бинарна вредност 10101100011010100110101000110001111 дополнета со нули од лево. 20. shr. Значи резултатот е: р1 = 0.u r5 = r4. r5 cmp. а регистерот r6 има бинарна вредност 10110001111 дополнета со нули од лево.. р2 = 1. Резултатот од споредувањето cmp.... од каде што следува дека нема промена на вредностите на регистрите p1 и p2. Ова значи дека не е важна почетната вредност на регистрите р1 и р3.Современи Компјутерски Системи . p3 = r3.. Решение: Регистерот р1 добива вредност 1. а регистерот r4 добива вредност 192.. extr r4 = r3.010. но е важна почетната вредност на регистерот р2.gt.. 4 (p2) cmp. Прво вршиме конјукција на соодветните битови и се добива резултатот 0.аудиториски вежби 4.10110001111 cm 0.. Регистерот р1 добива вредност 0.00011100111 and 0. Дадена е следната програма напишана во асемблер: mov p1 = 1 mov p2 = 0 mov r3 = 12 mov r4 = 192. p2 = r5. Регистерот r5 добива вредност 12.unc зависи од вредноста на предикатниот регистер р2. p2. 6. p3? Дали е важна почетната вредност на регистерот р3? А на регистрите р1 и р2.00010000111 1.. Дадена е следната програма напишана во асемблер: mov r3 = 23141241231. andcm r4 = r3.eq. r6 Колкава е вредноста на регистерот r4? Решение: Регистерот r3 има бинарна вредност 11100111 дополнета со нули од лево..eq.or p1. Дадена е следната програма напишана во асемблер: mov r3 = 231 mov r6 = 1423..11101111000 5. 44 . р3 = 0. Предикатниот регистер р2 е нула. r3 Колкава е вредноста на регистрите p1. па според тоа р1 и р3 добиваат вредност 0 без разлика на резултатот од споредувањето и нивните претходни вредности.

8.аудиториски вежби 7. р2 = 0. а променливата z со r2. 45 . односно 8. Вредноста на z како бинарен број е 1000.nz врз регистерот r1 е 1. p1 = r2.lt р1.u.. } Да се состави програма во асемблер во којашто нема да има инструкции за скок. За пресметување на вредноста на z да се искористи само една инструкција. 4. Решение: Променливата y е претставена со помош на регистерот r1.. 4. if (y < z) { y = z++. р2 = r1. 2. Тоа значи дека вредноста на регистрите р1 и р2 се поставува на 1 без разлика каква била нивната почетна вредност. 2.nz. Резултатот од втората споредба е 0.and p2.or p1. cmp. Дадена е следната програма напишана во асемблер: tnat. mov r1 = 12 mov r3 = 2321312. 3. Поместувањето за два бита во десно значи дека вредноста на променливата z е вредноста на битовите 5. z = 0. Пресметувањето на вредноста променливата z може да се изврши на следниот начин: Барањето на остаток при делење со 64 како резултат ги враќа првите 6 цифри на бројот во бинарна форма. колкава е вредноста на регистрите p1. Од тука се согледува дека z може да се пресмета со користење на инструкцијата extr.. NaT битот на регистерот r1 е поставен на 1.Современи Компјутерски Системи . extr. y = 0.u r2 = r3. } else { z = y. z = (2321312 % 64) >> 2. Дали е потребно да се знае почетната вредност на регистрите p1 и р2. tnat. p2 = r1.. r2 (p1) add r1 = 1. Да се проследи текот на извршување на програмата. Ако не. па според тоа резултатот е: р1 = 0. а на регистерот r2 е поставен на 0.nz. p2? Решение: Резултатот од тестот tnat. Регистерот r3 се користи како помошен регистер. Даден е следниот код во програмскиот јазик C: y = 12. r2 (p1) mov r2 = r0 (p2) mov r2 = r1 (p2) mov r1 = r0 За задавање на вредност на променливата у ја користиме инструкцијата mov.

Решение: Променливата count е претставена со помош на регистерот r1. Даден е следниот код во програмскиот јазик C: count = 5. р2 = r1..аудиториски вежби За да се избегне инструкцијата за скок се користат предикатни регистри. Ако вредноста на предикатниот регистер пред инструкцијата е 0. } Да се состави програма во асемблер и да се проследи текот на извршување на програмата. а предикатниот регистер р2 е помошен.gt p1. 46 .lt. а променливата S со r2. Пресметувањето на Ѕ го вршиме со помош на инструкцијата shladd. што е одредено од предикатниот регистер р1. Во спротивно треба да се извршат инструкции коишто го претставуваат else делот. mov r1 = 5 mov r2 = 0. односно се извршува како NOP. За таа цел се користат регистрите р1 и р2 и инструкцијата за споредување cmp. r1. 9. while (count > 0) { S = S + (count --) * 2. r0 (p1) br. cmp. 1. а потоа таа вредност се додава на сумата. Се пресметува вредноста на count*2 (како поместување во лево за 1 бит). Предикатниот регистер р1 служи за контрола дали е исполнет условот.sptk while На почетокот се поставуваат вредностите за count и Ѕ. z = 0. while: shladd r2 = r1. По пресметувањето на резултатот од споредувањето се поставува вредноста соодветниот предикатен регистер.. Конечниот резултат на програмата е: y = 12. r2 sub r1 = 1. Ако условот y<z е исполнет тогаш треба да се извршат инструкциите што го претставуваат then делот на if структурата. Регистерот р1 се поставува од страна на инструкцијата што го проверува условот на циклусот. Треба да се забележи дека скокот што го имплементира повторувањето на циклусот претпоставува дека скокот статично се презема. Потоа се врши декрементирање на вредноста на бројач и проверка за тоа дали треба да се изврши уште едно повторување на циклусот.Современи Компјутерски Системи . Ако вредноста на предикатниот регистер пред инструкцијата е 1. Циклусот завршува ако не се изврши скокот. тогаш инструкцијата не се извршува. Ознака while го означува местото за скокот потребен за имплементација на циклусот. тогаш инструкцијата се извршува.cond.

Современи Компјутерски Системи .lc затоа што го означува бројот на чекори на јамката. p2 = r4.. r0 (p1) add r1 = r1.lc = 9 mov r1 = 0. for (i = 0.. 11. 0.аудиториски вежби 10. Решение: Вредноста на променливата n намалена за 1 се поставува во апликативниот регистер ar. а почетната адреса на полето х е дадена во регистерот r2. 2. mov ar. да се напише нова програма којашто ќе користи предвремено читање од меморија на регистерот r3. st2 [r5] = r4 Ако се претпостави дека веројатноста бројот r2 да биде поголем од 250 е многу мала. За да се соберат само парните членови на полето се врши проверка дали последниот бит на елементот на полето е 0. Дадена е следната програма напишана во асемблер: add r6 = r2. } Да се состави програма во асемблер и да се проследи текот на извршување на програмата. cmp.. 1 . 4. st2 [r1] = r2.lc. add r4 = r3... i < n. х е поле од int променливи со големина од 4 бајти. Притоа се читаат по четири бајти меморија и базниот регистер се поместува за 4 бајти затоа што големината на податоците е 4 бајти. 47 .sptk for Јамката ќе се повтори онолку чекори колку што се наведени во апликативниот регистер ar.u r4 = r3. for: ld4 r3 = [r2]. i++) { if (x[i] % 2 == 0) S = S + x[i]. S = 0. Ознаката for служи за обележување на местото на скокот потребен да се имплементира јамката. Останува да се прочита полето од меморија. extr..cloop. Променливата S е претставена со помош на регистерот r1. ld2 r3 = [r6]. 1.eq p1. Даден е следниот код во програмскиот јазик C: n = 10... r4 br.

48 . тогаш веројатноста податокот што го чита инструкцијата ld2 r3 = [r6] да биде променет е мала.Современи Компјутерски Системи . Во спротивен случај бројот прима некоја предефинирана вредност.аудиториски вежби Решение: add r6 = r2.с r3 = [r6]. } Ако веројатноста бројот да биде точно внесен е мала. 1 . int Proverka (int *broj. Дадена е следната функција напишана во програмскиот јазик С во којашто се проверува дали еден внесен број се наоѓа во одредени граници. Резултатот до функцијата се враќа во општонаменскиот регистер r7.а r3 = [r6] st2 [r1] = r2 ld2.b]. int *default) { if (*broj < b && *broj > a) return (b + a) / 2. add r4 = r3. st2 [r5] = r4 Ако веројатноста податокот што се запишува со инструкцијата st2 [r1]=r2 да биде 250 е мала. После предвременото читање од меморија треба да се провери валидноста на податокот којшто е прочитан за да се види дали неговата содржина е променета. ld2. Решение: Адресата на покажувачот *broj се чува во регистерот r10. Променливите а и b се сместени во регистрите r5 и r6 соодветно. 12.. int b. Во случај бројот да се наоѓа во одредените граници бројот се поставува на средината на интервалот [a. int a. else *broj = *default. 2.. Овој факт ја оправдува употребата на предвременото читање на податокот r3.. да се напише асемблерски код кој ќе ја извршува оваа функција и ќе користи шпекулативно читање од меморија. Во тој случај податокот повторно се вчитува од меморија и програмата продолжува со својот нормален тек на извршување.. Адресата на покажувачот *default се чува во регистерот r11.

Решение: Променливите n. for: ld4 r1 = [r10] cmpxhg4. p2 = r1.ret (p3) chk. int y. i++) if (x[i]==y) x[i] = z.lt p1. i < n.unc p2. int z) { for (i = 1.. ar. add r10 = 4.ccv = r6. Адресата на покажувачот x е сместена во регистерот r10. Даден е следниот код во програмскиот јазик C: void Smeni (int *x.s r2 mov r7 = r2 br. r7.Современи Компјутерски Системи .s r2 = [r11] ld4 r1 = [r10] mov p3 = 1 cmp. r0 (p2) br. 13. r6. а ако *broj < b тогаш се проверува дали *broj > a. z се сместени во регистрите r5. Вредноста на *default се чита шпекулативно од меморија за да може да се изврши шпекулативно извршување на if структурата..lc = r5 mov ar. у.sptk for 49 . Предикатните регистри p1 и p2 се поставуваат во зависност од проверката на услов.аудиториски вежби Proverka: ld4. r5 (p2) sub r7 = 1. int n. p3 = r1... Покажувачот *broj се чита од меморијата.ccv.gt.ret. r10 br.cloop. r6 и r7 соодветно. Smeni: sub r5 = 1. } Да се напише соодветна програма во асемблер и да се искористи инструкцијата cmpxchg. Во случај условот да не е исполнет се врши проверка дали шпекулативното читање од меморија е успешно и се продолжува со извршувањето на програмата. r5 mov ar. (p1) cmp.sem r1 = [r10].

mov pr. 1 (p17) cmp.lt p1. else z[i] = y[i]. Даден е следниот код во програмскиот јазик C: n = 10. Полињата y и z содржат бајти.Современи Компјутерски Системи .lc се поставува на 9. Променливата x е сместена во општонаменскиот регистер r1. 1 (p2) mov r34 = r33 (p18) st1 [r11] = r34.ctop.ec = 3.lc = 9 mov ar. 4 Решение: r1=00011111 00110111 11111100 11010001 01000100 00100010 r2=11111001 10111000 11100110 10001000 00100001 00010000 r3=11111001 10111111 11100110 10001010 00100001 00010000 50 . Дали се исти вредностите на регистрите r2 и r3? mov r1 = 34325325235234 pshl2 r2 = r1.ec се поставува на 3 затоа што проточноста има 3 проточни чекори. 15. Вредноста на апликативниот регистер ar.sptk loop На почетокот вредноста на предикатните регистри се поставува на 0. } Да се создаден код во асемблер кој ќе содржи софтверски проточна јамка.. Адресата на покажувачот z е сместена во општонаменскиот регистер r11. p0 = r0. r0 mov ar. i++) { if (y[i]<x) z[i] = 2 * y[i].eq p16. 4 shl r3 = r1. Потоа вредноста на апликативниот регистер ar. loop: (p16) ld1 r32 = [r10]. затоа што јамката треба да се изврши 10 пати. i < n. r1 (p1) shl r34 = r33. x = 50. p2 = r33.аудиториски вежби 14. Да се проследи текот на извршување на програмата. for (i = 1. Решение: Адресата на покажувачот у е сместена во општонаменскиот регистер r10. 1 br.rot = 0 cmp.

Sign up to vote on this title
UsefulNot useful