Міністерство освіти та науки України
Національний університет «Львівська політехніка»
Кафедра ЗІ
/
Лабораторна робота №3
«КОНКУРЕНТНЕ ВИКОНАННЯ МАШИННИХ ІНСТРУКЦІЙ»
з дисципліни «Архітектура комп’ютерних систем»
Львів-2022
Мета роботи: опанувати техніку розпаралелення виконання машинних інструкцій на рівні апаратури.
Завдання
Засобами архітектурного симулятора WinMIPS64 дослідити на прикладі фрагментів програмного коду можливості паралельного опрацювання машинних інструкцій на рівні апаратури та позитивні ефекти, що при цьому досягаються. За результатами проведених лабораторних досліджень оформити звіт та захистити його. Завдання полягає у дослідженні можливості оптимізації коду.
Виконання та аналіз коду до оптимізації
Для завдання потрібно проаналізувати і виконати на стимуляторі даний фрагмент коду:
.text
div.d f7,f9,f10
mul.d f2,f4,f3
sub.d f7,f7,f4
ld r1,78(r0)
add.d f4,f5,f6
halt
Наступний крок це перевірити синтаксис програми ще до симулювання за допомогою утиліти asm.exe:
/
Симулювання
Синтаксис є коректним. Далі відкриємо програму WINMIPS64 і запустимо в ній нашу програму та симулюємо виконання інструкцій та отримаєм такий результат.
/
/
Статистика після виконання програми:
Загальне число виконаних циклів становить 36.
СРІ = 6.000 – це середнє число тактових інтервалів (cycles per instruction), що припало на виконання кожної інструкції програми.
RAW Stalls (read after write) = 24
Також, щоб зменшити кількість циклів, можна увімкнути Еnable Forwarding
/
Статистика після ввімкнення Еnable Forwarding:
Загальне число виконаних циклів становить 33.
СРІ = 5.500 – середнє число тактових інтервалів.
RAW Stalls (read after write) = 22
Перейдемо, до головної оптимізації коду:
.text
sub.d f7,f7,f4
div.d f7,f9,f10
mul.d f2,f4,f3
add.d f4,f5,f6
ld r1,78(r0)
halt
Наступний крок це перевірити синтаксис програми ще до симулювання за допомогою утиліти asm.exe:
/
Синтаксис є коректним. Перейдемо до симулювання та отримаєм ось такий результат:
/
/
Статистика після виконання програми:
Загальне число виконаних циклів становить 29.
СРІ = 4.833 – це середнє число тактових інтервалів (cycles per instruction), що припало на виконання кожної інструкції програми.
RAW Stalls (read after write) = 0
Висновок
Під час виконання цієї лабораторної роботи я опанував техніку розпаралелення виконання машинних інструкцій на рівні апаратури, провів тестування коду даного за завданням, покращив код для його швидкодії та отримав досить хороший результат, а саме:
На початку було 33 цикли, стало 29;
На початку було 22 RAW, стало 0;
На початку CPI – 5,500 , стало – 4,833.