DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА кафедра ЗІ / З В І Т до лабораторної роботи №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:25

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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