МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
Кафедра ЗІ
/
Лабораторна робота №4
з дисципліни: «Архітектура комп’ютерних систем»
на тему: «ДОСЛІДЖЕННЯ КОНВЕЄРНОГО ВИКОНАННЯ ІНСТРУКЦІЙ РУХОМОЇ КОМИ»
Львів 2022
Мета роботи: опанування технікою конвеєрного виконання RISC інструкцій для операндів формату рухомої коми.
Завдання
Засобами архітектурного симулятора WinMIPS64 дослідити на прикладі фрагментів програмного коду можливості паралельного опрацювання машинних інструкцій на рівні апаратури та позитивні ефекти, що при цьому досягаються. За результатами проведених лабораторних досліджень оформити звіт та захистити його.
Асемблерні інструкції
.data
number: .word 13
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
Результат виконання програми до оптимізації
/
Вікно статистики
/
Шляхи оптимізації коду:
Forwarding
Branch target buffer
Асинхронне виконання команд. У даному випадку це пов’язано із заміною інструкцій в залежності від використання регістрів пам’яті.
Асинхронне виконання команд
Оптимізовані асемблерні інструкції:
.data
number: .word 13
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,even
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
Оптимізація відбулась за рахунок перенесення інструкції andi (логічне І), виконання якого тривало 2 цикла. Враховуючи це, переставлено команди, щоб не було «простою» в 1 цикл, поки наступна інструкція чекає на результат виконання попередньої. Після оптимізування коду число циклів значно зменшилося.
Результат виконання програми після оптимізації асемблерних інструкцій
/
Вікно статистики
/
Результат виконання програми з Enable Forwarding (випередження)
/
Вікно статистики
/
Кількість тактів відчутно зменшилась. Це пов’язано з тим, що потреба у очікуванні проходженні усіх етапів виконання операції та завантаження даних, які поміщені у регістр відсутня, оскільки операції ld/sd (завантаження у/з пам’яті) виконуються не очікуючи кінця інструкцій.
Результат виконання програми з Enable Branch Target Buffer (випередження)
/
Вікно статистики
/
Кількість тактів знову зменшилася. Це пов’язано з передбаченням операцій, зокрема коли потрібно обрати логіку із парним або непарним числом. У даному випадку відбулось 8 успішних передбачень та 4 невдалих.
Висновок: у ході виконання лабораторної роботи засобами архітектурного симулятора WinMIPS64 досліджено на прикладі фрагментів програмного коду можливості паралельного опрацювання машинних інструкцій на рівні апаратури та позитивні ефекти, що при цьому досягаються. Опановано техніку конвеєрного виконання RISC інструкцій для операндів формату рухомої коми. Проведено оптимізацію коду за допомогою Forwarding та Branch Target Buffer.