МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
Кафедра ЗІ
/
Лабораторна робота №4
з дисципліни: «Архітектура комп’ютерних систем»
на тему: «ДОСЛІДЖЕННЯ КОНВЕЄРНОГО ВИКОНАННЯ ІНСТРУКЦІЙ РУХОМОЇ КОМИ»
Мета роботи: опанування технікою конвеєрного виконання RISC інструкцій для операндів формату рухомої коми.
Завдання
Засобами архітектурного симулятора WinMIPS64 машини з 64-розрядною RISC архітектурою MIPS64 дослідити конвеєрне виконання фрагментів машинних програм, що команди опрацювання операндів в форматі з рухомою комою. Виявити наявні залежності (небезпеки) даних і керування, оптимізувати програмний код та дослідити дію запропонованої оптимізації. За результатами проведених лабораторних досліджень оформити звіт та захистити його.
Виконання роботи
Змінюємо початкове число- 27 та виконуємо наступний фрагмент коду:
; 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 і запустимо цей код використавши апаратні механізми випередження даними і прогнозування напрямку умовного переходу за допомогою буфера цільових адрес переходу (branch target buffer, BTB).
/
Вікно налаштування Configure
Вмикаємо дозвіл на використання випередження (forwarding) і апаратуру передбачення напрямку умовного переходу (branch target buffer), запускаємо програму ще раз.
/
Основне вікно симулятора по завершенню симулювання програми
Програма відпрацювала за 1639 циклів, виконуючи 1013 інструкцій, з 445 пригальмовуваннями RAW (Read after write). СPI = 1.611.
Для оптимізації коду змінимо деяку послідовність виконання функцій, та надамо дозвіл на використання випередження (forwarding) і апаратури передбачення напрямку умовного переходу (branch target buffer).
Оптимізований код:
.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 і запустимо цей код ввімкнувши forwarding та branch target buffer:
/
Вікно налаштування Configure
/
Основне вікно симулятора по завершенню симулювання програми
Програма відпрацювала за 976 циклів, виконуючи 781 інструкцій, з 1 пригальмуванням RAW (Read after write). СPI = 1.250.
Висновок
Під час виконання цієї лабораторної роботи я опанувала техніку конвеєрного виконання RISC інструкцій для операндів формату рухомої коми. Також оптимізувала наданий програмний код, дослідила дію запропонованої оптимізації та отримала такий результат в порівнянні з початковим кодом:
було – 1639 циклів, стало – 976;
було – 445 RAW, стало – 1;
було CPI – 1.611, стало – 1.250.