МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
Кафедра ЗІ
/
Лабораторна робота №4
з дисципліни: «Архітектура комп’ютерних систем»
на тему: «ДОСЛІДЖЕННЯ КОНВЕЄРНОГО ВИКОНАННЯ ІНСТРУКЦІЙ РУХОМОЇ КОМИ»
Мета роботи: опанування технікою конвеєрного виконання RISC інструкцій для операндів формату рухомої коми.
Завдання
Засобами архітектурного симулятора WinMIPS64 машини з 64-розрядною RISC архітектурою MIPS64 дослідити конвеєрне виконання фрагментів машинних програм, що команди опрацювання операндів в форматі з рухомою комою. Виявити наявні залежності (небезпеки) даних і керування, оптимізувати програмний код та дослідити дію запропонованої оптимізації. За результатами проведених лабораторних досліджень оформити звіт та захистити його.
Виконання роботи
Для виконання, змінимо початкове число та проаналізуємо і виконаємо такий код:
; hail.s
; Hailstone numbers iteration
; If number is odd, multiply by 3 and add 1
; If number is even, divide it by 2
; repeat this iteration until number is 1
.data
number: .word 19 ; this is input number - change it!
max: .word 0 ; max number so far
.text
start: ld r1,number(r0) ; program start
loop: andi r3,r1,1 ; test odd or even
beqz r3,even
odd: dadd r2,r1,r1 ; times 2 dadd r1,r2,r1 ; times 3 daddi r1,r1,1 ; plus 1
j over
even: dsrl r1,r1,1 ; divide by 2
over: ld r4,max(r0)
slt r3,r4,r1 ; compare with max
beqz r3,skip
sd r1,max(r0) ; new max
skip: slti r3,r1,2 ; test for finished
beqz r3,loop
halt
Перевірка синтаксису за допомогою asm.exe:
/
Після перевірки синтаксису потрібно відкрити WinMIPS і включити Forwarding та Branch Target Buffer.
Після включення цих механізмів потрібно запустити програму для перевірки кількості циклів.
/
Програма працювала 301 цикл та виконала 182 інструкції. Також відбулося 1 Raw пригальмовування. Команд на цикл – 1.654.
Програмний код можна оптимізувати змінивши послідовність виконання інструкцій.
Оптимізований код:
.data
number: .word 19 ; this is input number - change it!
max: .word 0 ; max number so far
.text
start: ld r1,number(r0) ; program start
andi r5,r1,1 ; test odd or even
loop: dadd r2,r1,r1 ; times 2
beqz r5,even
odd: dadd r1,r2,r1 ; times 3
ld r4,max(r0)
daddi r1,r1,1 ; plus 1
slt r3,r4,r1 ; compare with max
andi r5,r1,1
beqz r3,loop
sd r1,max(r0) ; new max
j loop
even: dsrl r1,r1,1 ;divide by 2
slti r3,r1,2 ; test for finished
andi r5, r1,1
beqz r3,loop
halt
Перевірка синтаксису за допомогою asm.exe:
/
Після перевірки синтаксису потрібно відкрити WinMIPS і включити Forwarding та Branch Target Buffer.
Після включення цих механізмів потрібно запустити програму для перевірки кількості циклів.
/
Програма працювала 174 цикла та виконала 139 інструкцій. Також відбулося 1 Raw пригальмовування, 18 Branch target пригальмовувань та 12 Branch misprediction пригальмовувань. Команд на цикл – 1.252.
Висновок
Під час виконання цієї лабораторної роботи я опанував техніку конвеєрного виконання RISC інструкцій для операндів формату рухомої коми. Після виконання я отримав такі результати:
До оптимізації програма виконувалась за 301 цикл.
Після оптимізації програма виконується за 174 цикла.