МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИНАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ«ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТАкафедра БІТ
/
З В І Т
до лабораторної роботи №4
з курсу: «Архітектура комп’ютерних систем»
на тему:
«ДОСЛІДЖЕННЯ КОНВЕЄРНОГО ВИКОНАННЯ ІНСТРУКЦІЙ РУХОМОЇ КОМИ»
Варіант №18
Львів 2022
Мета роботи - опанування технікою конвеєрного виконання RISC інструкцій для операндів формату рухомої коми.
Завдання
Засобами архітектурного симулятора WinMIPS64 машини з 64-розрядною RISC архітектурою MIPS64 дослідити конвеєрне виконання фрагментів машинних програм, що команди опрацювання операндів в форматі з рухомою комою. Виявити наявні залежності (небезпеки) даних і керування, оптимізувати програмний код та дослідити дію запропонованої оптимізації. За результатами проведених лабораторних досліджень оформити звіт та захистити його.
ВИКОНАННЯ:
Вміст файлу hail.s;
.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. Вікно статистики (Statistics) після завершення симулювання
По виконанню роботи за допомогою вікна статистики (рис.2) можна охарактеризувати роботу симулятора. Відбулось 445 RAW-пригальмувань, 317 гальмувань під час виконання умовних переходів (Branch taken). Витратив 1794 цикли для виконання 1028 інструкцій. Отже, отримав середнє число тактових імпульсів CPI=1.745 на одну інструкцію.
У даному коді є проблеми, які не дозволяють паралельно виконувати всі потрібні функції, тому я спробував відкоригувати даний код змінивши послідовність виконання функцій.
Новий вміст файлу hail.s;
.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
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
/
Рис. 3. Фініш програми
/
Рис. 2. Вікно статистики (Statistics) після завершення симулювання
Відбулось 1 RAW-пригальмування, 180 гальмувань під час виконання умовних переходів (Branch taken). Витратив 977 циклів для виконання 792 інструкцій і середнє число тактових імпульсів CPI=1,243 на одну інструкцію. Результат кращий, ніж попередній.
ВИСНОВКИ:
Під час виконання лабораторної роботи я опанував техніку конвеєрного виконання RISC-інструкцій для операндів формату рухомої коми. Також виконав оптимізацію коду, для покращення виконання роботи програми.
Було 1794 цикли - стало 977;
Було CPI = 1,745 - стало 1,234;
Було 445 RAW-гальмувань - стало 1.