Конкурентне виконання машинних інструкцій

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА Кафедра ЗІ / Звіт до лабораторної роботи №3 з курсу: «Архітектура комп’ютерних систем» на тему: «Конкурентне виконання машинних інструкцій» Мета роботи Опанувати техніку розпаралелення виконання машинних інструкцій на рівні апаратури. Завдання Засобами архітектурного симулятора WinMIPS64 дослідити на прикладі фрагментів програмного коду можливості паралельного опрацювання машинних інструкцій на рівні апаратури та позитивні ефекти, що при цьому досягаються. За результатами проведених лабораторних досліджень оформити звіт та захистити його. Початок виконання роботи .text div.d f7,f9,f10 mul.d f2,f4,f3 sub.d f7,f7,f4 ld r1,78(r0) add.d f4,f5,f6 halt Код початкової програми мовою асемблера Pass 1 completed with 0 errors   00000000          .text 00000000 462a49c3 div.d f7,f9,f10 00000004 46232082 mul.d f2,f4,f3 00000008 462439c1 sub.d f7,f7,f4 0000000c dc01004e ld r1,78(r0)   00000010 46262900 add.d f4,f5,f6 00000014 04000000 halt Pass 2 completed with 0 errors   Code Symbol Table Data Symbol Table Результат перевірки / Статистичні результати показують 33 цикли та 22 пригальмовування типу Read-after-write, з чого робимо висновок, що програма працює вкрай неефективно та потребує рефакторингу. Проаналізуємо діаграму станів конвеєра: / Бачимо, що найбільше часу виконуються інструкції ділення з рухомою комою та інструкція віднімання, яка залежить від регістру f7, який зайнятий інструкцією ділення. В свою чергу, інструкція відінмання використовує регістр f4, і оскільки вона знаходиться в очікуванні, в очікуванні знаходиться і залежна від даного регістру інструкція додавання. Найлогічнішим кроком буде змінити порядок виконання інструкцій так, щоб мінімізувати простоювання конвеєра та ефективно використати можливості паралельного виконування команд множення, додавання/віднімання з рухомою комою та цілочисельних операції. Операції множення та ділення є досить складними, а тому їх можна виконувати після простіших операцій додавання та віднімання. .text sub.d f7,f7,f4 div.d f7,f9,f10 ld r1,78(r0) add.d f4,f5,f6 mul.d f2,f4,f3 halt Вигляд програми після рефакторингу Pass 1 completed with 0 errors 00000000          .text       00000000 462439c1 sub.d f7,f7,f4       00000004 462a49c3 div.d f7,f9,f10       00000008 dc01004e ld r1,78(r0) 0000000c 46262900 add.d f4,f5,f6       00000010 46232082 mul.d f2,f4,f3       00000014 04000000 halt Pass 2 completed with 0 errors Code Symbol Table Data Symbol Table Результат перевірки програми після рефакторингу / Статистичні результати суттєво покращилися після оптимізації коду. Кількість пригальмовувань Read-after-write зменшилася до трьох. / Як бачимо з діаграми станів конвеєра, процесорний час використовується значно ефективніше. Але програму можна оптимізувати ще краще, оскільки спостерігаються RAW Stall, тобто поки регістр f4 зарезервований інструкцією додавання, інструкція множення не може прочитати цей регістр і простоює. Отже, можна оптимізувати код зміною порядку інструкцій. .text sub.d f7,f7,f4 div.d f7,f9,f10 ld r1,78(r0) mul.d f2,f4,f3 add.d f4,f5,f6 halt Вигляд програми після другого рефакторингу 00000000          .text 00000000 462439c1 sub.d f7,f7,f4       00000004 462a49c3 div.d f7,f9,f10       00000008 dc01004e ld r1,78(r0) 0000000c 46232082 mul.d f2,f4,f3       00000010 46262900 add.d f4,f5,f6       00000014 04000000 halt Pass 2 completed with 0 errors Code Symbol Table Data Symbol Table Результат перевірки програми після другого рефакторингу / Таким чином, ми позбулися ще трьох пригальмовувань і максимально оптимізували код. / Це видно також і на діаграмі станів конвеєра. Найбільше часу все ще займає інструкція ділення з рухомою комою. Висновок На цій лабораторній роботі я дослідив конкурентне виконання інструкцій різного типу (множення, ділення, додавання/віднімання з рухомою комою та цілочисельних операцій) на прикладі тестової програми, яка поєднує всі перелічені типи інструкцій. Вдалося досягти максимальних результатів продуктивності.
Антиботан аватар за замовчуванням

08.04.2025 12:04-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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