Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Лабораторна робота №2
ДОСЛІДЖЕННЯ ВИКОНАННЯ ЦИКЛІВ НА КОНВЕЄРІ ІНСТРУКЦІЙ
Мета: дослідження виконання циклів на конвеєрі інструкцій
Нехай симулюється наступна програма, записана мовою асемблер. Програма знаходить суму десяти чисел (від 1 до 10 з кроком 1, відповідь є 0х37 = 55 десяткове). Ясно, що в пам’яті програмно резервують (.word) з ініціалізацією 10 комірок з доданками, а також (без ініціалізації, .space) місце для результату (суми).
; Program: loop.s
; Sum of 10 integer values
.data
values: .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 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
Будемо користуватися процесором, де задіяні апаратні механізми випередження даними і прогнозування напрямку умовного перходу за допомогою буфера цільових адрес переходу (branch target buffer, BTB).
Рис. 1 – Основне вікно симулятора зі завантаженою програмою (одне дочірнє вікно не видно).
Дозволено використання апаратури випередження (forwarding) і апартури
передбачення напрямку умовного переходу (branch target buffer)
Рис. 2 – Основне вікно симулятора, чітко видно вмістиме пам’яті до старту виконання програми
Рис. 3 – Основне вікно симулятора, виконано 7 циклів симулювання. Є перше RAW (read after write)
Рис. 4 – Дочірнє вікно “конвеєр” симулятора, перше RAW пригальмування, 7 тактів симулювання
Рис. – Друге RAW пригальмування. Виконано 10 тактів
Рис. – Виконано 11 тактів симулювання, сталося перше пригальмування за рахунок
виконаного умовного переходу (branch taken stall)
Рис. Стан виникнення першої gомилки в передбаченні напрямку умовного переходу
(Branch misprediction stall)
Рис. – Головне вікно симулятора по завершенню симулювання програми ЦИКЛ
СРІ – це (середнє) число тактових інтервалів (cycles per instruction), що припало на виконання кожної інструкції програми. В ідеальному випадку для нашого п’ятисходинкового конвеєра маємо СРІ=1, але залежності поміж інсирукціями через дані (data hazards, RAW, WAR, WAW) збільшують СРІ, тобто часові витрати на виконання програми.
По виконанню програми з оптимізованою апаратурою втрати конвеєра інструкцій склали 20 RAW-пригальмувань, 2 пригальмування під час виконання виконаних взятих, виконаних умовних переходів (Branch taken) і ще 2 пригальмування через помилками передбачення напрямку умовного переходу апаратними засобами (тут використовується буфер цільових адрес переходів - branch target buffer).Ясно, що при використанні неоптимізованої апаратури час виконання програми зросте. Симулюванням треба подати відповідь та питання – коли, чому, наскільки?