ІКТА / КБ-24 / Архітектура Мельник, Нємкова / Лаби умови / ARCH3lab
.pdfЛабораторний практикум |
11 |
Отриману суму, що дорівнює 0хАА + 0хВВ = 0х165 містить комірка з адресою 0х14. Це стверджує протокол зміни вмістимого комірок основної пам’яті (рис. 4.2). Видно, що другий доданок заміщено сумою.
Рис. 4.3 містить протокол статистик, отриманих під час опрацювання програми. Характеристики цього протоколу визначено з врахуванням загалом 10-ти витрачених циклів. [Далі подають аналізроз’яснення щодо кожного розділу протоколу статистик із ручним прорахунком-підтвердженням наведених у машинному протоколі значень статистичних характеристик].
4.4. Експериментальна частина
Скоректуємо асемблерний код нашої програми за правилами статичного планування, що реально виконує автоматично оптимізуючий компілятор уведенням інструкції nop аби розв'язати (скасувати залежності даних). Тоді отримуємо наступний текст програми.
;Compiler Scheduling. Example DLX code
;Assumtions:
;R1 initially holds the value 0
;A is an integer, stored beginning at address 0x10
;B is an integer array, stored beginning at address 0x14
lw |
r2,0x10(r1) |
;get A value |
lw |
r3,0x14(r1) |
;get B value |
nop |
r2,r2,r3 |
;compiler scheduling, cycle bypass |
add |
;update A=A+B |
|
sw |
0x14(r1),r2 |
;store new A |
trap |
0 |
;end |
Протокол роботи конвеєра подано рисунком 4.4.
Рис. 4.4. Протокол роботи конвеєра для експериментальної програми із статичним плануванням
Бачимо, що пригальмування зникли. [Далі розглядаємо решту протоколів, як це було зроблено вище для базисної версії програми].
Зрозуміло, що наші пропозиції щодо усунення залежностей даних в спосіб статичної диспетчеризації підтверджено.
4.5. Висновки
А. Існування притаманних програмі залежностей даних спричинило виникнення залежності RAW, яку автоматично визначила та в спосіб затримки на один цикл знищила апаратна частина машини. При цьому втрата швидкодії склала 1 – 9/8 = - 12.5 %.
В. Можливе скасування залежності даних уведенням інструкції nop після другої інструкції програми, що відповідає не динамічному, а статичному плануванню процесу виконання програми. С. У великих програмах зустрічаються випадки, коли при статистичному плануванні компілятор замість операції nop уводить корисну інструкцію, яка розташована ближче до початку програми, та за умови, коли її пересунення (після чергове опрацювання)не спотворює сенс програми.
В. Мельник. Кафедра БІТ. Національний університет “Львівська політехніка”
Лабораторний практикум |
12 |
5. Лабораторні роботи
Далі подано інформацію щодо тематики, обсягу та термінів виконання лабораторних робіт. Фактично кожна лабораторна робота містить дві частини, а саме, базову частину та експериментальну частину.
Метою виконання базової частини кожної лабораторної роботи є опанування студентом технологій обробки потоку інструкцій конвеєром універсальних процесорів (на прикладі обробки програм певних типів) та отримання навичок з кількісного оцінювання ефективності мікроархітектур цих процесорів.
Метою виконання експериментальної частини відповідної лабораторної роботи є прищеплення студентам навичок з самостійного планування експерименту та розв'язування інженерних задач, що при цьому виникають, з подальшим оцінюванням ефективності запропонованих та втілених ними пропозицій за обраними студентами критеріями.
Лабораторні роботи розрізняють за типом програми, виконання якої симулюють. При цьому базова (Б) та експериментальна (Е) частини усіх лабораторних робіт мають формально збіжні завдання, як це подано нижче.
Завдання до роботи 1Б.
1.Завантажити базисну версію програми до симулятора. Спланувати використання комірок головної пам’яті та записати до них вихідні дані.
2.Виконати програму у кроковому режимі. Перевірити результат виконання програми.
3.Пояснити подані вікнами (циклове вікно, вікно статистик) симулятора протоколи виконання програми.
4.Зробити висновки за результатами симуляції виконання програми.
5.Оформити звіт Б та захистити його.
Завдання до роботи 1Е.
1.Запропонувати заходи з покращення ефективності використання апаратних засобів процесора та скласти відповідну експериментальну версію базової програми.
2.Виконати експериментальну програму у кроковому режимі. Перевірити результат виконання програми.
3.Пояснити подані вікнами (циклове вікно, вікно статистик) симулятора протоколи виконання програми.
4.Подати кількісні значення тих характеристик, які доводять зростання ефективності роботи апаратних засобів.
5.Зробити висновки за результатами виконання експерименту.
6.Оформити звіт Е та захистити його.
Звіт з кожної лабораторної роботи містить:
-титульну сторінку,
-завдання (базове, або ж експериментальне, у тому числі текст програми),
-чітко викладену студентом мету роботи,
-планування використання комірок головної пам’яті (для роботи Б),
-сутність експерименту (для роботи Е),
-необхідні витяги з протоколів, складених симулятором за результатом опрацювання програми,
-стисле пояснення результатів, що містять зазначені витяги,
-чисельні значення тих кількісних характеристик, що доводять ефективність або ж, навпаки, спростовують ефективність запропонованої студентом експериментальної версії програми у порівнянні з наданою базисною програмою (лише для роботи Е),
-стисло сформульовані висновки.
Звіти (у роздрукованому та зшитому вигляді) подають на захист на початку наступної лабораторної роботи. Обсяг кожного звіту – до 4-х друкованих (шрифтом 10) стандартних аркушів.
В. Мельник. Кафедра БІТ. Національний університет “Львівська політехніка”
Лабораторний практикум |
13 |
5.1. План виконання робіт
План виконання лабораторних робіт подано наступною таблицею.
Номер |
Вид роботи |
Тип програми |
Бали |
заняття |
|
|
|
1 |
Вступ |
|
n/a |
2 |
Ознайомча робота |
Додавання двох цілих чисел |
3 |
3 |
Робота 1Б. Базисна версія |
Цикл |
3 |
4 |
Робота 1Е. Експеримент |
|
3 |
5 |
Робота 2Б. Базисна версія |
Рухома кома |
|
6 |
Робота 2Е. Експеримент |
|
3 |
7 |
Робота 3Б. Базисна версія |
Просте число |
|
8 |
Робота 3Е. Експеримент |
|
3 |
9 |
Робота 4Б. Базисна версія |
Факторіал |
19Робота 4Е. Експеримент
5.2.Лабораторна робота 1. Програма ЦИКЛ
Базисна версія програми.
;****************************************************************
;* |
Example DLX code without the use of loop unrolling and |
* |
||
;* |
rescheduling. |
|
* |
|
;* |
Assumtions: |
|
* |
|
;* |
R1 initially holds the value 0 |
* |
||
;* |
A is an integer array, stored beginning at address 0 |
* |
||
;* |
B is an integer array, stored beginning at address 4000 |
* |
||
;* |
|
|
|
* |
;* |
Written by Dr. Michelle Hugue |
* |
||
;* |
(Worksheet Loop Unrolling and Rescheduling 1) |
* |
||
;**************************************************************** |
|
|||
Loop: |
r2,0(r1) |
|
|
|
|
lw |
;get next A value |
|
|
|
lw |
r3,20(r1) |
;get next B value |
|
|
add |
r2,r2,r3 |
;update A |
|
|
sw |
40(r1),r2 |
;store new A |
|
|
addi |
r1,r1,#4 |
;update counter |
|
|
subi |
r4,r1,#16 |
;check to see if done |
|
|
bnez |
r4,Loop |
;repeat loop if not done |
|
|
trap |
0 |
;end |
|
5.3. Лабораторна робота 2. Програма РУХОМА КОМА
Базисна версія програми.
;*********************************************************
;*This example calculates the equation: (A*B)+(C*D) |
* |
;*We are assuming that the value of A is stored at |
* |
;*location 100; B is at 200; C, 300; D, 400. |
The result * |
;*will be stored at location 500. |
* |
;*A, B, C, and D are all 32 bit integers |
* |
;*********************************************************
Equation: |
r1,100(r0) |
|
lw |
;load A |
|
lw |
r2,200(r0) |
;load B |
lw |
r3,300(r0) |
;load C |
lw |
r4,400(r0) |
;load D |
movi2fp f1,r1 |
;convert A into floating pt |
movi2fp f2,r2 |
;convert B to fp |
movi2fp f3,r3 |
;convert C to fp |
В. Мельник. Кафедра БІТ. Національний університет “Львівська політехніка”
Лабораторний практикум |
14 |
|
movi2fp f4,r4 |
;convert D to fp |
|
multf |
f5,f1,f2 |
;A*B is stored into f1 |
movfp2I |
r1,f5 |
;move f1 to r1 |
multf |
f6,f3,f4 |
;C*D is stored into f3 |
movfp2I |
r3,f6 |
;move f3 to r3 |
add |
r1,r1,r3 |
;(A*B)+(C*D) |
sw |
500(r0), r1 |
;store result at mem[500] |
trap |
0 |
;end |
5.4. Лабораторна робота 3. Програма ПРОСТЕ ЧИСЛО
Базисна версія програми.
;WINDLX Exp.2: Generate prime number table
;(c) 1991 Guenther Raidl
;Modified 1992 Maziar Khosravipour
;Program begins at symbol main
;generates a table with the first 'Count' prime numbers from 'Table' ;---
.data
|
;--- size of table |
|
|
Count: |
.global |
Count |
|
.word |
10 |
|
|
Table: |
.global |
Table |
|
.space |
Count*4 |
||
|
.text |
main |
|
main: |
.global |
|
|
;--- Initialization |
|
||
|
|
||
|
addi |
r1,r0,0 |
;Index in Table |
|
addi |
r2,r0,2 |
;Current value |
NextValue: |
;--- Determine, if R2 can be divided by a value in table |
||
addi |
r3,r0,0 |
;Helpindex in Table |
|
Loop: |
seq |
r4,r1,r3 |
;End of Table? |
|
bnez |
r4,IsPrim ;R2 is a prime number |
|
|
lw |
r5,Table(R3) |
|
|
divu |
r6,r2,r5 |
|
|
multu |
r7,r6,r5 |
|
|
subu |
r8,r2,r7 |
|
|
beqz |
r8,IsNoPrim |
|
|
addi |
r3,r3,4 |
|
IsPrim: |
j |
Loop |
|
;--- Write value into Table and increment index |
|||
|
sw |
Table(r1),r2 |
|
|
addi |
r1,r1,4 |
|
|
;--- 'Count' reached? |
|
|
|
lw |
r9,Count |
|
|
srli |
r10,r1,2 |
|
|
sge |
r11,r10,r9 |
|
IsNoPrim: |
bnez |
r11,Finish |
|
;--- Check next value |
|
||
|
addi |
r2,r2,1 |
;increment R2 |
Finish: |
j |
NextValue |
|
;--- end |
0 |
|
|
|
trap |
|
В. Мельник. Кафедра БІТ. Національний університет “Львівська політехніка”
Лабораторний практикум |
15 |
5.5. Лабораторна робота 4. Програма ФАКТОРІАЛ
Базисна версія програми.
;WINDLX Ex.3: Factorial
;(c) 1991 Guenther Raidl
;Modified: 1992 Maziar Khosravipour
;Program begin at symbol main
;requires module INPUT
;read a number from stdin and calculate the factorial (type: double)
;the result is written to stdout
;--- |
.data |
|
|
|
|
|
Prompt: |
|
"An integer value >1 : " |
|
|||
.asciiz |
|
|||||
PrintfFormat: |
.asciiz |
"Factorial = %g\n\n" |
||||
PrintfPar: |
.align |
|
|
2 |
|
|
.word |
|
PrintfFormat |
|
|
||
PrintfValue:.space |
|
|
8 |
|
|
|
|
.text |
|
main |
|
|
|
main: |
.global |
|
|
|
||
;--- Read value from stdin into R1 |
|
|||||
|
|
|||||
|
addi |
|
r1,r0,Prompt |
|
|
|
|
jal |
|
InputUnsigned |
|
||
|
;--- init values |
|
;R1 -> D0 |
D0..Count register |
||
|
movi2fp |
f10,r1 |
|
|||
|
cvti2d |
|
f0,f10 |
|
;1 -> D2 |
D2..result |
|
addi |
|
r2,r0,1 |
|||
|
movi2fp |
f11,r2 |
|
|
|
|
|
cvti2d |
|
f2,f11 |
|
;1-> D4 |
D4..Constant 1 |
|
movd |
|
f4,f2 |
|
||
Loop: |
;--- Break loop if D0 = 1 |
|
||||
led |
|
f0,f4 |
|
;D0<=1 ? |
|
|
|
bfpt |
|
Finish |
|
|
|
|
;--- Multiplication and next loop |
|
||||
|
multd |
|
f2,f2,f0 |
|
|
|
|
subd |
|
f0,f0,f4 |
|
|
|
Finish: |
j |
|
Loop |
|
|
|
;--- write result to stdout |
|
|||||
|
sd |
|
PrintfValue,f2 |
|
||
|
addi |
|
r14,r0,PrintfPar |
|
||
|
trap |
|
5 |
|
|
|
|
;--- end |
0 |
|
|
|
|
|
trap |
|
|
|
|
На цьому подання матеріалів для виконання лабораторних робіт завершено.
В. Мельник. Кафедра БІТ. Національний університет “Львівська політехніка”
Лабораторний практикум |
16 |
6.ДОДАТОК. Таблиця інструкцій процесора
Інструкція, тип та код |
|
Сутність інструкції |
|
|
Move data between registers and memory, or between the integer and |
Пересилання даних |
|
FP or special registers; only memory address mode is 16-bit displacement |
|
|
+ contents |
LB, LBU, SB |
|
Load byte, load byte unsigned, store byte |
LH, LHU, SH |
|
Load halfword, load halfword unsigned, store halfword |
LW, SW |
|
Load word, store word |
LF, LD, SF, SD |
|
Load single precision float, load double precision float, store single precision |
|
|
float, store double precision float |
MOVI2S, MOVS2I |
|
Move from/to integer register to/from a special register |
MOVF, MOVD |
|
Copy one floating point register or a DP pair to another register or pair |
MOVFP2I, MOVI2FP |
|
Move 32 bits from/to a FP register to/from an integer register |
Арифметичні та логічні |
|
Operations on integer or logical data in integer registers; signed arithmetic |
|
|
instructions trap on overflow |
ADD, ADDI, ADDU, ADDUI |
|
Add, add immediate (all immediates are 16 bits); signed and unsigned |
SUB, SUBI, SUBU, SUBUI |
|
Subtract, subtract immediate; signed and unsigned |
MULT, MULTU, DIV, DIVU |
|
Multiply and divide, signed and unsigned; operands must be floating-point |
|
|
registers; all operations take and yield 32-bit values |
AND, ANDI |
|
And, and immediate |
OR, ORI, XOR, XORI |
|
Inclusive or, Inclusive or immediate, exclusive or, exclusive or immediate |
LHI |
|
Load high immediate - loads upper 16 bits of register with immediate and zeros |
|
|
the lower 16 bits |
SLL, SRL, SRA, |
|
Shifts; both immediate (S__I) and variable form (S__); shifts are left logical, righ |
SLLI, SRLI, SRAI |
|
logical and right arithmetic |
SEQ, SNE, SLT, |
|
Set conditional; set equal zero, set not equal zero, set less than, set greater than, |
SGT, SLE, SGE |
|
set less than or equal, set greater than or equal |
Керування |
|
Conditional branches and jumps; PC-relative or through register |
BEQZ, BNEZ |
|
Branch integer register equal/not equal to zero; 16 bit offset from PC+4 |
BFPF, BFPT |
|
Test comparison bit in the FP status register and branch; 16 bit offset from PC+4 |
J, JR |
|
Jumps; 26 bit offset from PC+4 (J) or target register (JR) |
JAL, JALR |
|
Jump and link; save PC+8 to R31, target is 26 bit offset from PC+4 (JAL) or a |
|
|
register (JALR) |
TRAP |
|
Transfer to operating system at a vectored address |
RFE |
|
Return to user code from an exception; restore user mode |
Рухома кома |
|
Floating-point operations on DP and SP floats |
ADDD, ADDF |
|
Add DP and SP floats |
SUBD, SUBF |
|
Subtract DP and SP floats |
MULTD, MULTF |
|
Multiply DP and SP floats |
DIVD, DIVF |
|
Divide DP and SP floats |
CVTD2F, CVTD2I, |
|
Convert instructions; CVTx2y converts from type x to type y, where x and y are |
CVTF2D, CVTF2I, |
|
one of D (double precision float), F (single precision float) or I (integer); both |
CVTI2D, CVTI2F |
|
operands are in floating point registers |
EQD, EQF, NED, NEF, LTD, LTF, |
|
DP and SP compares; set comparison bit in FP status register |
GTD, GTF, LED, LEF, GED, GEF |
|
|
В. Мельник. Кафедра БІТ. Національний університет “Львівська політехніка”