Міністерство освіти та науки України
Національний університет «Львівська політехніка»
ІКТА
Кафедра ЗІ
/
Лабораторна робота №2
з дисципліни: «Архітектура комп’ютерних систем»
на тему: «ДОСЛІДЖЕННЯ ВИКОНАННЯ ЦИКЛІВ НА
КОНВЕЄРІ ІНСТРУКЦІЙ»
Варіант - 24
Мета роботи - опанувати техніку конвеєрного виконання RISC інструкцій.
Завдання
Засобами архітектурного симулятора WinMIPS64 машини з 64-розрядною
RISC архітектурою MIPS64 дослідити конвеєрне виконання фрагментів
машинних програм, що містять цикли. Виявити наявні залежності (небезпеки)
даних і керування, оптимізувати програмний код та дослідити дію
запропонованої оптимізації. За результатами проведених лабораторних
досліджень оформити звіт та захистити його.
/
Виконання роботи
Асемблерний код програми
; Program: loop.s
; Sum of 10 integer values
.data
values: .word 59, 30, 36, 9, 58, 15, 17, 52, 47, 15 ; 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
Перед виконанням роботи перевіряємо коректність програми за допомогою asm.exe
/
Виконання програми у WinMIPS64. Ось так виглядає головна сторінка програми після відкриття файлу lab2.s:
/
Перед початком виконання покрокової симуляції виконання інструкцій, увімкнемо апаратні механізми випередження даними і прогнозування напрямку умовного переходу за допомогою буфера цільових адрес переходу (branch target buffer, BTB) у Configure – Enable Forwarding і Enable Branch Target Buffer та натиснемо F7:
/
На 7 циклі було отримано RAW (read after write), що показано на скріншоті:
/
Було отримано 2 RAW на 10 циклі:
/
Після 11 циклів симуляції виконання інструкцій, утворилося перше пригальмування за рахунок виконаного умовного переходу (branch taken stall).
/
За 40 циклів було отримано 10 RAW та 2 BTS (branch taken stall):
/
На 76 циклі симуляції виконання інструкцій, трапилася помилка передбачення напрямку умовного переходу (Branch misprediction stall у вікні статистики):
/
І на 84 циклі була завершена програма з такими результатами:
/
Проте вимкнувши апаратні механізми випередження даними і прогнозування напрямку умовного переходу за допомогою буфера цільових адрес переходу, отримаємо ось такі результати:
/
Результат виконання програми сумування 10 чисел з механізмами випередження та прогнозування:
Загальне число виконаних циклів становить 84.
СРІ = 1.500 – середнє число циклів (cycles per instruction), що припало на виконання кожної інструкції програми.
• RAW Stalls (read after write) = 20;
• Branch Taken Stalls (виконаного умовного переходу) = 2;
• Branch Misprediction Stalls (передбачені напрямку умовного переходу)= 2;
Результат виконання програми сумування 10 чисел без механізмів випередження та прогнозування:
Загальне число виконаних циклів становить 110.
СРІ = 1.964 – середнє число циклів (cycles per instruction), що припало на виконання кожної інструкції програми.
• RAW Stalls (read after write) = 41;
• Branch Taken Stalls (виконаного умовного переходу) = 9;
• Branch Misprediction Stalls (передбачені напрямку умовного переходу)= 0;
Висновок: Виконавши дану лабораторну роботу, я навчилась виконувати певні RISC інструкції. Слід зазначити, що при вимкнених механізмах випередження та прогнозування не було помилки в передбаченні напрямку умовного переходу (Branch misprediction stall).