Міністерство освіти та науки України
Національний університет «Львівська політехніка»
Кафедра ЗІ
/
Лабораторна робота №4
«ДОСЛІДЖЕННЯ КОНВЕЄРНОГО ВИКОНАННЯ ІНСТРУКЦІЙ РУХОМОЇ КОМИ»
з дисципліни «Архітектура комп’ютерних систем»
Львів-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
Виконання програми asm.exe, яка дозволяє перевірити синтаксис програми, ще до її виконання.
/
Синтаксис є коректним. Відкриваємо програму WinMips64 та запускаємо в ній файл lab4.s
Симулювання
Синтаксис є коректним. Далі відкриємо програму WINMIPS64 і запустимо в ній нашу програму та симулюємо виконання інструкцій та отримаєм такий результат.
/
/
Статистика після виконання програми:
Загальне число виконаних циклів становить 1703.
СРІ = 1.657 – це середнє число тактових інтервалів (cycles per instruction), що припало на виконання кожної інструкції програми.
RAW Stalls (read after write) = 445
Оптимізуємо код
Перенесемо інструкції andi (логічне І), виконання якої тривало 2 цикла. Команди було переставлено, щоб не було «простою» в 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 та запускаємо в ній файл.
Переходимо до симулювання:
/
Результат виконання
/
Статистика після оптимізації програми:
Загальне число виконаних циклів становить 966.
СРІ = 1.237 – це середнє число тактових інтервалів (cycles per instruction), що припало на виконання кожної інструкції програми.
RAW Stalls (read after write) = 1
До оптимізації було:
1794 цикли
1028 інструкцій
1,745 циклів на інструкцію
445 RAW Stall
Після оптимізації стало:
966 циклів
781 інструкція
1,237 циклів на інструкцію
1 RAW Stall
Висновок: Виконавши дану лабораторну роботу я опанувала технікою конвеєрного виконання RISC інструкцій для операндів формату рухомої коми, також провела покращенні коду і добилась збільшення швидкості виконання і добилась хорошого результату, який полягає в наступному:
Спочатку було 1703 цикли, стало 976;
Спочатку було 445 RAW, стало 1;
Спочатку було CPI – 1,657 , стало – 1,250.