МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра безпеки
інформаційних технологій
/
ДОСЛІДЖЕННЯ ВИКОНАННЯ ЦИКЛІВ НА
КОНВЕЄРІ ІНСТРУКЦІЙ
МЕТОДИЧНІ ВКАЗІВКИ
до лабораторної роботи № 2
з дисципліни «Архітектура комп’ютерних систем»
для студентів спеціальності 125 «Кібербезпека»
Львів 2022
Дослідження виконання циклів на конвеєрі інструкцій: методичні вказівки до виконання лабораторної роботи з дисципліни «Архітектура комп'ютерних систем» / Укл. Мельник В.А., Банах Р.І. – Львів, Національний університет «Львівська політехніка», 2022. – 10 с.
Укладачі: Мельник В.А., дтн, професор каф. БІТ
Банах Р.І., асистент каф. БІТ.
Відповідальний за випуск:
Рецензент
Надруковано за рішенням засідання кафедри безпеки інформаційних технологій Національного університету
«Львівська політехніка» Протокол № від 2022 р.
Мета роботи
Опанувати техніку конвеєрного виконання RISC інструкцій.
Завдання
Засобами архітектурного симулятора WinMIPS64 машини з 64-розрядною RISC архітектурою MIPS64 дослідити конвеєрне виконання фрагментів машинних програм, що містять цикли. Виявити наявні залежності (небезпеки) даних і керування, оптимізувати програмний код та дослідити дію запропонованої оптимізації. За результатами проведених лабораторних досліджень оформити звіт та захистити його.
Варіант
Числа
1
15, 38, 3, 43, 11, 47, 56, 11, 28, 29
2
3, 55, 17, 7, 56, 23, 29, 58, 52, 51
3
36, 50, 56, 48, 57, 52, 30, 53, 27, 1
4
24, 30, 39, 49, 22, 24, 53, 28, 44, 22
5
53, 54, 15, 13, 12, 33, 35, 58, 29, 23
6
7, 31, 34, 31, 25, 57, 13, 4, 39, 22
7
17, 17, 48, 32, 27, 46, 37, 40, 60, 27
8
17, 18, 24, 27, 51, 58, 24, 16, 37, 1
9
58, 47, 44, 14, 38, 27, 60, 5, 7, 27
10
4, 46, 41, 46, 18, 57, 13, 24, 4, 33
11
20, 3, 56, 17, 38, 19, 35, 53, 32, 42
12
19, 16, 22, 55, 39, 36, 50, 57, 19, 21
13
17, 13, 21, 20, 21, 13, 49, 56, 29, 26
14
7, 43, 19, 21, 22, 32, 35, 30, 10, 35
15
59, 36, 33, 60, 27, 21, 3, 46, 48, 43
16
17, 43, 15, 22, 34, 17, 53, 11, 40, 23
17
50, 21, 23, 8, 2, 39, 22, 44, 38, 26
18
60, 52, 51, 44, 21, 7, 8, 18, 7, 14
19
36, 7, 60, 1, 43, 60, 4, 11, 39, 25
20
1, 55, 20, 21, 58, 33, 36, 59, 17, 50
21
3, 9, 29, 34, 21, 47, 13, 27, 25, 11
22
11, 58, 54, 8, 14, 7, 58, 20, 57, 1
23
51, 25, 32, 31, 38, 16, 17, 40, 33, 2
24
26, 7, 60, 58, 32, 8, 11, 11, 42, 4
25
59, 30, 36, 9, 58, 15, 17, 52, 47, 15
26
41, 9, 50, 43, 4, 14, 23, 36, 32, 60
27
27, 17, 56, 36, 33, 46, 49, 46, 5, 46
28
50, 48, 55, 58, 26, 42, 27, 6, 25, 59
29
41, 31, 13, 13, 23, 11, 38, 39, 1, 40
30
18, 43, 19, 53, 43, 55, 37, 52, 16, 35
31
23, 19, 17, 54, 34, 7, 18, 20, 30, 36
Базовий варіант виконання лабораторної роботи
Нехай симулюється наступна програма, записана мовою асемблер. Програма знаходить суму десяти чисел (від 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
Інструкції, що використовуються:
LD
Формат: LD rt, offset(base)
Мета: завантажити подвійне слово з пам'яті.
Опис: rt ← пам'ять[база+зміщення]
Вміст 64-розрядного подвійного слова в місці пам’яті вибирається та розміщується в GPR rt. 16-бітове зміщення зі знаком додається до вмісту бази GPR для формування адреси.
Обмеження:
Ефективна адреса повинна бути природно вирівняна. Якщо будь-який із трьох найменш значущих бітів адреси відрізняються від нуля, виникає виняток Address Error.
MIPS IV: 3 молодших біта поля зміщення мають бути нульовими. Якщо їх немає, то результат інструкції не визначено.
Винятки:
TLB Refill, TLB Invalid
Помилка шини
Помилка адреси
Зарезервована інструкція
DADD
Формат: DADD rd, rs, rt
Мета: додати 64-розрядні цілі числа.
Опис: rd ← rs + rt
64-бітове значення подвійного слова в GPR rt додається до 64-бітового значення в GPR rs, щоб отримати 64-розрядний результат. 64-розрядний результат поміщається в GPR rd.
Обмеження: Жодного
Винятки:
Переповнення цілого числа
Зарезервована інструкція
SD
Формат: SD rt, зміщення (база)
Мета: зберегти подвійне слово в пам'яті.
Опис: пам'ять[база+зміщення] ← rt
64-розрядне подвійне слово в GPR rt зберігається в пам'яті в місці, визначеному вирівнянням ефективної адреса. 16-бітове зміщення зі знаком додається до вмісту бази GPR сформувати діючу адресу.
Обмеження:
Ефективна адреса повинна бути природно вирівняна. Якщо будь-який із трьох найменш значущих бітів ефективної адреси відмінні від нуля, виникає виняток Address Error.
MIPS IV: 3 молодших біта поля зміщення мають бути нульовими. Якщо їх немає, то результат інструкції не визначено.
Винятки:
TLB Refill, TLB Invalid
TLB змінений
Помилка адреси
Зарезервована інструкція
HALT
Формат: HALT
Мета: переводить процесор у стан HALT, зупиняючи виконання інструкції. Інструкція зупинки є привілейованою.
Будемо користуватися процесором, де задіяні апаратні механізми випередження даними і прогнозування напрямку умовного переходу за допомогою буфера цільових адрес переходу (branch target buffer, BTB).
СРІ – це (середнє) число тактових інтервалів (cycles per instruction), що припало на виконання кожної інструкції програми. В ідеальному випадку для нашого п’ятисходинкового конвеєра маємо СРІ = 1, але залежності поміж інструкціями через дані (data hazards, RAW, WAR, WAW) збільшують СРІ, тобто часові витрати на виконання програми.
Нижче зображено основне вікно симулятора зі завантаженою програмою (одне дочірнє вікно не видно). Дозволено використання апаратури випередження (forwarding) і апаратури передбачення напрямку умовного переходу (branch target buffer) (Рис. 1).
Далі видно основне вікно та вміст пам’яті до старту програми (Рис. 2). Після виконання семи циклів симулювання, отримуємо перше RAW (Рис. 3).
/
Рис. 1. Основне вікно симулятора зі завантаженою програмою
/
Рис. 2. Основне вікно симулятора, де видно вміст пам’яті до старту
/
Рис. 3. Основне вікно симулятора, виконано 7 циклів симулювання
/
Рис. 4. Перше RAW пригальмування, 7 тактів симулювання
У дочірньому вікні “конвеєра” симулятора після семи тактів симулювання можна побачити виконання першого RAW пригальмування (Рис. 4), в той час, як після десяти тактів відбувається друге RAW пригальмування (Рис. 5).
Коли виконано одинадцять тактів симулювання, стається перше пригальмування за рахунок виконаного умовного переходу (branch taken stall) (Рис. 6).
/
Рис. 5. Друге RAW пригальмування. Виконано 10 тактів.
Можна спостерігати стан виникнення першої помилки в передбаченні напрямку умовного переходу (Branch misprediction stall) (Рис. 7). Branch prediction «вгадує» наступну інструкцію, яку потрібно виконати, і вставляє наступну передбачувану інструкцію в конвеєр. Неправильне вгадування називається Branch misprediction stall. Частково оброблені інструкції в конвеєрі після розгалуження повинні бути відкинуті, а конвеєр повинен початися спочатку з правильної гілки, коли буде виявлено branch misprediction stall, а це уповільнює виконання програми.
/
Рис. 6. Пригальмування за рахунок виконаного умовного переходу
/
Рис. 7. Виникнення помилки в передбаченні напрямку умовного переходу
/
Рис. 8. Головне вікно симулятора по завершенню симулювання програми
По виконанню програми з оптимізованою апаратурою втрати конвеєра інструкцій склали 20 RAW-пригальмувань, 2 пригальмування під час виконання виконаних взятих, виконаних умовних переходів (Branch taken) і ще 2 пригальмування через помилками передбачення напрямку умовного переходу апаратними засобами (тут використовується буфер цільових адрес переходів - branch target buffer) (Рис. 8). При використанні неоптимізованої апаратури час виконання програми зросте. Потрібно подати відповідь та питання – коли, чому, наскільки?
Контрольні питання
Як працює програма? Яку функцію виконує pointer increment?
Яку функцію виконує decrement counter?
Що таке Branch misprediction stall?
Що таке branch target buffer?
НАВЧАЛЬНЕ ВИДАННЯ
Дослідження виконання циклів на конвеєрі інструкцій
Методичні вказівки до лабораторної роботи
з дисципліни «Адміністрування комп'ютерних систем» для студентів спеціальності 125 «Кібербезпека»
Укладачі: Мельник В.А., дтн, професор каф. БІТ
Банах Р.І., асистент каф. БІТ.
Національний університет
«Львівська політехніка»
Львів 2022