Міністерство освіти та науки України
Національний університет «Львівська політехніка»
ІКТА
Кафедра ЗІ
/
Лабораторна робота №4
з дисципліни: «Архітектура комп’ютерних систем»
на тему: «ДОСЛІДЖЕННЯ КОНВЕЄРНОГО ВИКОНАННЯ ІНСТРУКЦІЙ РУХОМОЇ КОМИ»
Львів 2022
Мета роботи - опанування технікою конвеєрного виконання RISC інструкцій для операндів формату рухомої коми.
Завдання
Засобами архітектурного симулятора WinMIPS64 машини з 64-розрядною RISC архітектурою MIPS64 дослідити конвеєрне виконання фрагментів машинних програм, що команди опрацювання операндів в форматі з рухомою комою. Виявити наявні залежності (небезпеки) даних і керування, оптимізувати програмний код та дослідити дію запропонованої оптимізації. За результатами проведених лабораторних досліджень оформити звіт та захистити його.
Виконання роботи
Було надано код програми:
.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
dadd r1,r2,r1
daddi r1,r1,1
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
Виконання програми asm.exe за допомогою Windows PowerShell, яка дозволяє перевірити синтаксис програми до її виконання та її результат:
/
Оскільки синтаксис є правильним, наступним кроком буде виконання програми та його результат:
/
Програма відпрацювала за 2403 цикли, виконуючи 1028 інструкцій, тому на одну інструкцію припадає 2,338 циклів. Бачимо, що присутні 1054 пригальмовування RAW (Read after write). Проте можлива оптимізація цього коду, змінивши послідовність початку виконання фунцій та надано дозвіл на використання випередження (forwarding) і апаратури передбачення напрямку умовного переходу (branch target buffer). Після оптимізації отримано наступний код програми:
.data
number: .word 27
max: .word 0
.text
start: ld r1,number(r0)
andi r5,r1,1
loop: dadd r2,r1,r1
beqz r5,even
odd: dadd r1,r2,r1
ld r4,max(r0)
daddi r1,r1,1
slt r3,r4,r1
andi r5,r1,1
beqz r3,even
sd r1,max(r0)
j loop
even: dsrl r1,r1,1
slti r3,r1,2
andi r5, r1,1
beqz r3,loop
halt
Перевірка синтаксису програми до її виконання та її результат:
/
Після запуску програми у WinMIPS64 та його виконання, програма відпрацювала за 864 циклів (на 1 539 цикли менше ніж у попередній), виконуючи 729 інструкцій, тому на одну інструкцію припадає 1,185 циклів для її виконання. Бачимо, що присутнє 1 пригальмування.
/
Висновок: Опанувавши техніку конвеєрного виконання RISC інструкцій для операндів формату рухомої коми, була виконана дана лабораторна робота, оптимізовано код для його швидкодії за допомогою зміни послідовності виконання функцій, функціями Forwarding (випередження) та Branch Target Buffer (прогнозування напрямку умовного переходу).