Міністерство освіти та науки України
Національний університет «Львівська політехніка»
Кафедра БІТ
/
Лабораторна робота №4
«ДОСЛІДЖЕННЯ КОНВЕЄРНОГО ВИКОНАННЯ ІНСТРУКЦІЙ РУХОМОЇ КОМИ»
з дисципліни
«Архітектура комп'ютерних систем»
Варіант - 26
Львів 2022
Мета роботи – опанування технікою конвеєрного виконання RISC інструкцій для операндів формату рухомої коми.
Завдання
Засобами архітектурного симулятора WinMIPS64 дослідити на прикладі фрагментів програмного коду можливості паралельного опрацювання машинних інструкцій на рівні апаратури та позитивні ефекти, що при цьому досягаються. За результатами проведених лабораторних досліджень оформити звіт та захистити його.
Асемблерні інструкції
Аналіз неоптимізованого коду.
.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
Програма перед початком виконання інструкцій
/
Кінець виконання програми
/
Вікно статистики
/
На виконання даного коду йде велика кількість циклів проте є декілька способів, які можна використати для оптимізації роботи цього коду. Перший з них – випередження(forwarding).
Кінець виконання програми з увімкненим форвардінгом
/
Вікно статистики
/
Вікно статистики показує, що при увімкненому форвардінгу кількість тактів дещо зменшується, при порівнянні із попередньою статистикою. Різниця становить 101 такти. Так відбувається через велику кількість операцій ld/sd – завантаження з/у пам’яті. Велика кількість тактів економиться через відсутність потреби чекати проходження усіх етапів виконання цих операцій і використання даних, які поміщенні у регістр, у наступних інструкціях. Також є ще один спосіб – branch target buffer.
Кінець виконання програми з увімкненим форвардінгом та branch target buffer
/
Вікно статистики
/
Через увімкненя цієї функції додатково економиться невелика кількість тактів, їх можна економити на вгадуванні наступної інструкції, на моментів коли потрібно обрати логіку із парним або непарним числом. Проте,ми бачимо на статистиці є 12 невгадувань. Незважаючи на це, використання цієї функції все одно економлять кількість тактів.
Висновок: при виконанні даної лабораторної роботи, я опанував техніку конвеєрного виконання RISC інструкцій для операндів формату рухомої коми. Оптимізацію коду проведено завдяки використанню функцій forwarding та brench target buffer. Є варіант із заміною інструкцій в залежності від використання регістрів пам’яті. Але, цей варіант тут не підходить, оскільки виконання інструкцій конвеєрне і необхідно дочекатися виконання попередньою інструкції для використання даних, які вона обробила, у наступній інструкції.