МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра ЗІ
/
З В І Т
до лабораторної роботи №4
з дисципліни: “Архітектура комп’ютерних систем” на тему:
«ДОСЛІДЖЕННЯ КОНВЕЄРНОГО ВИКОНАННЯ ІНСТРУКЦІЙ РУХОМОЇ КОМИ»
Варіант № 2
Мета роботи
Опанування технікою конвеєрного виконання 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 27 ; 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, яка дозволяє перевірити синтаксис програми, ще до її виконання.
/
Синтаксис є коректним. Відкриваємо програму WinMips64 та запускаємо в ній файл lab4.s
Завершення програми
/
Результат
/
Оптимізуємо код програми
; 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 27 ; 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, яка дозволяє перевірити синтаксис програми, ще до її виконання.
/
Синтаксис є коректним. Відкриваємо програму WinMips64 та запускаємо в ній файл
Завершення програми
/
Результат виконання
/
Висновок
На даній лабораторній роботі, я опанував техніку конвеєрного виконання RISC інструкцій для операндів формату рухомої коми. Завдання було оптимізувати код програми Hailstone numbers iteration.
До оптимізації було:
1794 цикли
1028 інструкцій
1,745 циклів на інструкцію
445 RAW Stall
Після оптимізації стало:
966 циклів
781 інструкція
1,237 циклів на інструкцію
1 RAW Stall
Як бачимо результат став значно кращий.