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

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА кафедра ЗІ / З В І Т до лабораторної роботи №4 з курсу: « Архітектура комп'ютерних систем » на тему: «Дослідження конвеєрного використання інструкцій рухомої коми» Варіант № 22 Львів 2022 Мета роботи - опанувати техніку конвеєрного виконання RISC інструкцій для операндів формату рухомої коми. Завдання Засобами архітектурного симулятора WinMIPS64 машини з 64-розрядною RISC архітектурою MIPS64 дослідити конвеєрне виконання фрагментів машинних програм, що команди опрацювання операндів в форматі з рухомою комою. Виявити наявні залежності (небезпеки) даних і керування, оптимізувати програмний код та дослідити дію запропонованої оптимізації. За результатами проведених лабораторних досліджень оформити звіт та захистити його. Виконання завдання Код 1 Використовуючи середовище розробки Visual Studio Code, створив програмний файл hail.s, який містить базовий (прототипний) програмний код для MIPS64. Код програми на мові асемблер : .data number: .word 22 max:   .word 0         .text start: ld r1,number(r0) loop:  andi r3,r1,1     beqz r3,even odd: dadd r2,r1,r1 dadd r1,r2,r1 daddi r1,r1,1 j over even:  dsrl r1,r1,1   over:  ld r4,max(r0) slt r3,r4,r1     beqz r3,skip sd r1,max(r0)   skip:  slti r3,r1,2     beqz r3,loop halt Ще до симулювання перевіряємо синтаксис програми з допомогою утиліти asm.exe, прописуючи команду операційній системі : Синтаксис є коректним, результат з’являється на дисплеї (лише коментар написаний українською вивело некоректно). / Запускаємо програму WINMIPS64 і відкриваємо в ній програмний файл hail.s / Налаштування конфігурації середовища / Виконуємо симулювання файлу hail.s програми в WINMIPS64 і отримуємо результат. / / ОПТИМІЗУВАТИ ВИКОНАННЯ КОДУ МОЖНА ЗА РАХУНОК: Використання можливості асинхронного виконування команд Для цього ми редагуємо код, а саме перенесемо інструкції andi (логічне І), виконання якої тривало 2 цикла. Команди було переставлено, щоб не було «простою» в 1 цикл, поки наступна інструкція чекає на результат виконання попередньої. Новий код виглядає так: .data number: .word 22       max:   .word 0        ; max number so far  .text start: ld r1,number(r0) ; program start  andi r5,r1,1    ; test odd or even loop: dadd r2,r1,r1  ; times 2  beqz r5,even odd: dadd r1,r2,r1 ; times 3  ld r4,max(r0)  daddi r1,r1,1   ; plus 1  slt r3,r4,r1   ; compare with max  andi r5,r1,1  beqz r3,even  sd r1,max(r0)  ; new max  j loop even: dsrl r1,r1,1   ;divide by 2  slti r3,r1,2    ; test for finished  andi r5, r1,1  beqz r3,loop  halt Ще до симулювання перевіряємо синтаксис програми з допомогою утиліти asm.exe, прописуючи команду операційній системі : Синтаксис є коректним, результат з’являється на дисплеї (лише коментар написаний українською вивело некоректно). / Результат змін коду: / / Бачимо, що кількість циклів зменшилася на 136; CPI (число циклів на одну інструкцію) зменшилося на 0,514; Пригальмування RAW(Read after write) зменшилося на 22; Branch taken stalls зменшилося на 21. Включення Enable Forwarding (випередження) / Це допоможе вирішити проблему потреби у очікуванні проходженні усіх етапів виконання операції та завантаження даних, які поміщені у регістр. З цим методом оптимізації операції ld/sd (завантаження у/з пам’яті) виконуються не очікуючи кінця інструкцій. / / Бачимо, що кількість циклів зменшилася на 55; CPI (число циклів на одну інструкцію) зменшилося на 0,545; Пригальмування RAW(Read after write) зменшилося на 55 і становить лише 1; Branch taken stalls не змінилося. Включення Enable Branch Target Buffer / Ця оптимізація дозволяє зменшити кількість тактів за рахунок вгадування наступної інструкції, наприклад на моментів коли потрібно обрати логіку із парним або непарним числом. / / Бачимо, що кількість циклів збільшилася на 3; CPI (число циклів на одну інструкцію) збільшилося на 0,03; Пригальмування RAW(Read after write) не змінилося і становить 1; Branch taken stalls зменшилося на 7. Але бачимо, що відбулося лише 6 вгадувань та 10 невгадувань(Branch misprediction stalls). По CPI бачимо, що цей метод оптимізації не допоміг. Висновок : виконавши дану лабораторну роботу я опанував техніку конвеєрного виконання RISC інструкцій для операндів формату рухомої коми. В оптимізації коду допомогли використання асинхронного виконання задач та ввімкнення випередження. Branch Target Buffer за рахунок великої кількості невгадувань сповільнило програму.
Антиботан аватар за замовчуванням

08.04.2025 12:04-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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