МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
Кафедра ЗІ
/
Звіт
до лабораторної роботи №4з курсу «Архітектура комп’ютерних систем»
на тему: «Дослідження конвеєрного виконання інструкцій рухомої коми»
Варіант - 18
Львів 2022
Мета роботи: опанувати техніку конвеєрного виконання 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
/
Рис. 1. Виконана програма без оптимізації
/
Рис. 2. Вікно статистики після виконання коду
Результат виконання програми показав нам такий результат: Загальне число виконаних циклів становить 26.
СРІ = 2.600 – це середнє число тактових інтервалів (cycles per instruction), що припало на виконання кожної інструкції програми.
RAW Stalls (read after write) = 10
Branch Taken Stalls (виконаного умовного переходу) = 2
Branch Misprediction Stalls(передбаченні напрямку умовного переходу)= 0
Виконавши на симуляторі наступний оптимізований фрагмент коду:
.data
number: .word 27
max: .word 0
.text
start:
ld r1,number(r0)
loop:
andi r3,r1,1
beqz r3,even
odd:
dadd r2,r1,r1
j over
even:
dsrl r1,r1,1
over:
ld r4,max(r0)
slt r3,r4,r1
beqz r3,skip
sd r1,max(r0)
skip:
slti r3,r1,2
beqz r3,loop
halt
nop
Увімкнемо функцію випередження (Enable Forwarding) для оптимізації:/
Рис. 3. Виконана програма з оптимізацією за допомогою Enable Forwarding
/
Рис. 4. Вікно статистики після виконання оптимізованого коду
Проаналізуємо вміст вікна статистики (Statistics) і зауважимо, що ми отримали вже 5 пригальмуваннь RAW. Витратили 21 тактових циклів на виконання 10 інструкцій. Значить, отримали середнє число тактових імпульсів CPI=2 на одну інструкцію. Середнє число тактових інтервалів (cycles per instruction або CPI), що припало на виконання кожної інструкції програми також зменшилось до 2100
Висновок: на даній лабораторній роботі, Я, опанував техніку конвеєрного виконання RISC інструкцій для операндів формату рухомої коми.