You are on page 1of 7

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»


ІКТА
ЗІ

Звіт
до лабораторної роботи №2

з курсу: «Архітектура комп'ютерних систем»


на тему: «Дослідження виконання циклів на
конвеєрі інструкцій»

Варіант №19

Виконала:
Ст. групи КБ-306
Сорока Соломія .
Прийняв:
Горячий О. Я.

Львів — 2023
Мета
Опанувати техніку конвеєрного виконання RISC інструкцій.

Короткі теоретичні відомості


1. LD
Формат: LD rt, offset(base)
Мета: завантажити подвійне слово з пам'яті.
Опис: rt ← пам'ять[база+зміщення]
2. DADD
Формат: DADD rd, rs, rt
Мета: додати 64-розрядні цілі числа.
Опис: rd ← rs + rt
64-бітове значення подвійного слова в GPR rt додається до 64-бітового
значення в GPR rs, щоб отримати 64-розрядний результат. 64-розрядний
результат поміщається в GPR rd.
3. DSUB
Формат: DSUB rd, rs, rt
Мета: відняти 64-розрядні цілі числа; пастка при переповненні.
Опис: rd ← rs - rt
64-бітове значення подвійного слова в GPR rt віднімається від 64-бітового
значення в GPRrs до отримати 64-розрядний результат. 64-розрядний результат
поміщається в GPR rd.
4. SD
Формат: SD rt, зміщення (база)
Мета: зберегти подвійне слово в пам'яті.
Опис: пам'ять[база+зміщення] ← rt
64-розрядне подвійне слово в GPR rt зберігається в пам'яті в місці, визначеному
вирівнянням ефективної адреса. 16-бітове зміщення зі знаком додається до
вмісту бази GPR сформувати діючу адресу.
5. HALT
Формат: HALT
Мета: переводить процесор у стан HALT, зупиняючи виконання інструкції.
Інструкція зупинки є привілейованою.

Забарвлення вказує на сходинку конвеєра, де знаходиться відповідно


забарвлена інструкція:
● жовтий для IF (вибирання інструкції з пам’яті інструкцій, точніше з кеша
інструкцій)
● блакитний для ID (декодування інструкції і вибирання операндів
безпосередніх і з регістрового файла)
● червоний для EX (виконання інструкції, 1 такт для інструкцій з
фіксованою комою і більше тактів для інструкцій з рухомою комою)
● зелений для MEM (запис/читання до/з комірок пам’яті даних)
● пурпурний для WB (запис результату до регістру регістрового файлу)

Засобами архітектурного симулятора WinMIPS64 машини з 64-розрядною


RISC архітектурою MIPS64 дослідити конвеєрне виконання фрагментів
машинних програм, що містять цикли. Виявити наявні залежності (небезпеки)
даних і керування, оптимізувати програмний код та дослідити дію
запропонованої оптимізації. За результатами проведених лабораторних
досліджень оформити звіт та захистити його.

Таблиця 2. Варіанти для виконання завдання

Варіант Числа
19 36, 7, 60, 1, 43, 60, 4, 11, 39, 25

Код програми:

; Program: loop.s
; Sum of 10 integer values
.data
values: .word 36, 7, 60, 1, 43, 60, 4, 11, 39, 25; 64-bit integers
result: .space 8
.text
MAIN: daddui R1,R0,10 ; R1 <- 10
dadd R2,R0,R0 ; R2 <- 0 POINTER REG
dadd R3,R0,R0 ; R3 <- 0 RESULT REG
LOOP: ld R4,values(R2) ;GET A VALUE IN R4
dadd R3,R3,R4 ; R3 <- R3 + R4
daddi R2,R2,8 ; R2 <- R2 + 8 POINTER INCREMENT
daddi R1,R1,-1 ; R1 <- R1 - 1 DECREMENT COUNTER
bnez R1,LOOP
nop
sd R3,result(R0) ; Result in R3
HALT ; the end
Результати виконання роботи
I. Неоптимізована програма

Запустимо програму з дозволеним випереджанням та апаратурою умовного


переходу (branch target buffer).
Виконавши сім циклів симулювання отримуємо перше RAW (рис. 1)

Рисунок 1 Отриманий RAW після 7 кроків симулювання неоптимізованої програми

Рисунок 2 Отриманий RAW після 7 кроків симулювання неоптимізованої програми

Другий RAW виникає після 10 тактів симулювання.


Коли виконано одинадцять тактів симулювання, стається перше
пригальмування за рахунок виконаного умовного переходу (branch taken
stall)

Рисунок 3 Пригальмування за рахунок умовного переходу

Можна спостерігати стан виникнення першої помилки в передбаченні


напрямку умовного переходу (Branch misprediction stall) (Рис. 7). Branch
prediction «вгадує» наступну інструкцію, яку потрібно виконати, і вставляє
наступну передбачувану інструкцію в конвеєр. Неправильне вгадування
називається Branch misprediction stall. Частково оброблені інструкції в
конвеєрі після розгалуження повинні бути відкинуті, а конвеєр повинен
початися спочатку з правильної гілки, коли буде виявлено branch
misprediction stall, а це уповільнює виконання програми.

По виконанню програми з оптимізованою апаратурою втрати конвеєра


інструкцій склали 20 RAW-пригальмувань, 2 пригальмування під час
виконання виконаних взятих, виконаних умовних переходів (Branch taken) і
ще 2 пригальмування через помилками передбачення напрямку умовного
переходу апаратними засобами (тут використовується буфер цільових адрес
переходів - branch target buffer) (Рис. 8). При використанні неоптимізованої
апаратури час виконання програми зросте.

II. Оптимізована програма

Спробуємо оптимізувати код, за допомогою зміни порядку інструкцій для


процесора. Методом проб і помилок отримали наступний оптимізований
код:

; Program: loop.s
; Sum of 10 integer values
.data
values: .word 36, 7, 60, 1, 43, 60, 4, 11, 39, 25 ; 64-bit integers
result: .space 8
.text
MAIN:
daddui R1,R0,10 ; R1 <- 10
dadd R2,R0,R0 ; R2 <- 0 POINTER REG
dadd R3,R0,R0 ; R3 <- 0 RESULT REG
LOOP:
ld R4,values(R2) ;GET A VALUE IN R4
daddi R1,R1,-1 ; R1 <- R1 - 1 DECREMENT COUNTER
daddi R2,R2,8 ; R2 <- R2 + 8 POINTER INCREMENT
dadd R3,R3,R4 ; R3 <- R3 + R4
bnez R1,LOOP;
sd R3,result(R0); Result in R3
HALT; the end

Запустивши програму на виконання у вікні статистики бачимо, що ми


змогли зменшити кількість RAW до нуля, і тим самим змогли збільшити
швидкість виконання програми.

Порівняння вікна “Statistics” з вимкненим випередженням та з


увімкненим:

До оптимізації Після оптимізації


Висновок
Під час виконання лабораторної роботи я опанувала техніку конвеєрного
виконання RISC інструкцій, вивчила та сконфігурувала архітектурний
симулятор. Я здобула важливі навички та розширила розуміння процесу
оптимізації програм. Ретельний розгляд цього допоміг мені краще зрозуміти, як
внутрішньо працюють комп'ютери та як взаємодіють інструкції, регістри та
пам'ять.

You might also like