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

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
КН
Кафедра:
ЗІ

Інформація про роботу

Рік:
2022
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Архітектура комп ютерних систем

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА кафедра ЗІ / З В І Т до лабораторної роботи №2 з курсу: « Архітектура комп'ютерних систем » на тему: «Дослідження виконання циклів на конвеєрі інструкцій» Варіант № 22 Львів 2022 Мета роботи - опанувати техніку конвеєрного виконання RISC інструкцій. Завдання Засобами архітектурного симулятора WinMIPS64 машини з 64-розрядною RISC архітектурою MIPS64 дослідити конвеєрне виконання фрагментів машинних програм, що містять цикли. Виявити наявні залежності (небезпеки) даних і керування, оптимізувати програмний код та дослідити дію запропонованої оптимізації. За результатами проведених лабораторних досліджень оформити звіт та захистити його. Варіант Числа  22 11, 58, 54, 8, 14, 7, 58, 20, 57, 1   Виконання завдання Використовуючи середовище розробки Visual Studio Code, створив програмний файл loop.s , який містить код для MIPS64, що знаходить суму десяти чисел. Код програми на мові асемблер : ; Program: loop.s ; Sum of 10 integer values .data values: .word 11, 58, 54, 8, 14, 7, 58, 20, 57, 1 ; array of ints result: .space 8 ; place for result 64 bits .text MAIN: daddui R1,R0,10 ; R1 <- 10 ; iterations number dadd R2,R0,R0 ; R2 <- 0 pointer for values dadd R3,R0,R0 ; R3 <- 0 result LOOP: ld R4,values(R2) ; load value with r2 pointer to 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, прописуючи команду в терміналі powershell : / У симуляторі WINMIPS64 відкриваємо файл loop.s з текстом програми на мові асемблер. / Встановлюємо дозволи на використання апаратури випередження (forwarding) і апаратури передбачення напрямку умовного переходу (branch target buffer) у налаштуваннях. / Далі я виконуємо покрокове симулювання, натискаючи Execute/Single Cycle (або F7). Після виконання семи циклів симулювання, отримую перше RAW, що видно на наступному скріншоті. / Після виконання десяти циклів симулювання, отримую друге RAW пригальмування, що видно на наступному скріншоті. / Виконую одинадцять тактів симулювання, стається перше пригальмування за рахунок виконаного умовного переходу (branch taken stall). / Стан виникнення першої помилки в передбаченні напрямку умовного переходу (Branch misprediction stall) можна спостерігати після виконання 76 циклів симулювання. В вікні статистика (Statistics) видно що в пункті (Branch misprediction stall) з’явилася перша помилка (наступний скрін). / Після виконання 84 тактів симулювання завершується. Загальне число виконаних циклів становить 84 на 56 інструкцій. На наступному скріншоті видно головне вікно симулятора по завершенню симулювання програми. / Підсумовуючи можна сказати, що після виконання програми з оптимізованою апаратурою втрати конвеєра інструкцій склали 20 RAW-пригальмувань. СРІ = 1.500 – це середнє число тактових інтервалів (cycles per instruction), що припало на виконання кожної інструкції програми. RAW Stalls (read after write) = 20. Branch Taken Stalls (виконаного умовного переходу) = 2. Branch Misprediction Stalls (передбаченні напрямку умовного переходу) = 2. Ці дані розміщено у вікні Statistics, яке показано на наступному скріншоті. / Змінюючи налаштування виконую симулювання ще раз для того, щоб переконатися, що при використанні неоптимізованої апаратури час виконання програми зросте. Вимикаємо апаратні механізми випередження даними і прогнозування напрямку умовного переходу за допомогою буфера цільових адрес переходу (branch target buffer). / Виконуємо повторне симулювання. / Аналізуючи вікно статистики (Statistics), можна побачити, що у загальне число виконаних циклів становить 110 на 56 інструкцій. СРІ = 1.964 – це середнє число тактових інтервалів (cycles per instruction), що припало на виконання кожної інструкції програми. RAW Stalls (read after write) = 41. Branch Taken Stalls (виконаного умовного переходу) = 9. Branch Misprediction Stalls (передбаченні напрямку умовного переходу) = 0. / Висновок: на даній лабораторній роботі я опановував техніку конвеєрного виконання RISC інструкцій. Під час симулювання дослідив, що з увімкненим механізмом випередження і прогнозування напрямку умовного переходу за допомогою буфера цільових адрес переходу (branch target buffer, BTB) програма виконала на 26 циклів менше ніж із вимкненими механізмами, але при вимкнених механізмах не було помилок в передбаченні напрямку умовного переходу (Branch misprediction stall).
Антиботан аватар за замовчуванням

08.04.2025 12:04-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!