Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти та науки України
Національний університет «Львівська політехніка»
Кафедра ЗІ
/
Лабораторна робота №2
«ДОСЛІДЖЕННЯ ВИКОНАННЯ ЦИКЛІВ НА КОНВЕЄРІ ІНСТРУКЦІЙ»
з дисципліни «Архітектура комп’ютерних систем»
Львів-2022
Мета роботи: опанувати техніку конвеєрного виконання RISC інструкцій
Завдання
Засобами архітектурного симулятора WinMIPS64 машини з 64-розрядною RISC архітектурою MIPS64 дослідити конвеєрне виконання фрагментів машинних програм, що містять цикли. Виявити наявні залежності (небезпеки) даних і керування, оптимізувати програмний код та дослідити дію запропонованої оптимізації. За результатами проведених лабораторних досліджень оформити звіт та захистити його.
Варіант
Числа
8
17, 18, 24, 27, 51, 58, 24, 16, 37, 1
Виконання
Спершу ми створюємо файл sumtens.s:
/
Рисунок 1.1 Файл sumtens.s
Наступний крок це перевірити синтаксис програми ще до симулювання за допомогою утиліти asm.exe. Для цього потрібно виконати команду операційної системи: > asm sumtens.s. Рис.1.2
/
Рисунок 1.2. Перевірка синтаксису утилітою asm.
2. Симулювання
Синтаксис є коректним. Далі відкриємо програму WINMIPS64 і запустимо в ній файл sumtens.s., яким ми попередньо створили. Програма завантажена до пам’яті і симулятор готовий до роботи. У вікні “Code” спостерігаємо код програми.
/
Перед виконанням покрокової симуляції виконання інструкцій, вмикаємо апаратні механізми випередження даними і прогнозування напрямку умовного переходу за допомогою буфера цільових адрес переходу (branch target buffer, BTB).
/
Рисунок 2.2 Дозволяємо використання випередження (forwarding) і апаратури передбачення напрямку умовного переходу (branch target buffer) у вікні Configure.
Покроково симулюємо виконання інструкцій. На 7 циклів отримали RAW-пригальмування (read after write).
Clock 7
/
На 11 циклі симулювання, сталося перше пригальмування за рахунок виконаного умовного переходу (branch taken stall).
Clock 11
/
На 76 циклі виконання отримали першу помилку передбачення напрямку умовного переходу (Branch misprediction stall), викликане тим, що Branch prediction повинне вгадати наступну інструкцію та вставити її в конвеєр. Якщо це виконується неправильно автоматично виконується Branch misprediction stall:
Clock 76
/
Після завершення програми наше кінцеве число = 111– в шістнадцятковій системі числення.
Clock 84
/
Якщо ми переведемо число 111 в десяткову систему численням за допомогою конвертора то отримаємо число 273 (Рис 2.3)
/
За умовою ми додавали числа 17 + 18+ 24+ 27 + 51 + 58 + 24 + 16 + 37 + 1 = 273. Отже програма відпрацювала правильно.
Наступний етап, повторно запускаймо програму вимкнувши апаратні механізми випередження даними і прогнозування напрямку умовного переходу за допомогою буфера цільових адрес переходу, отримаємо такі результати:
/
Статистика після виконання програм:
У режимі із забороною випередження(forwarding)
/
Результат виконання програми сумування 10 чисел показав нам правильний результат 111. Загальне число виконаних циклів становить 84.
СРІ = 1.500 – це середнє число тактових інтервалів (cycles per instruction), що припало на виконання кожної інструкції програми.
• RAW Stalls (read after write) = 20
• Branch Taken Stalls (виконаного умовного переходу) = 2
• Branch Misprediction Stalls(передбаченні напрямку умовного переходу)= 2
У режимі без forwarding та branch target buffer
/
Результат виконання програми без механізмів випередження та прогнозування сумування 10 чисел показав нам такий самий результат 11е. Загальне число виконаних циклів становить 110. СРІ = 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 менше ніж з вимкненими механізмами. Середнє число тактових інтервалів без механізмів також виросло на 0.464. При вимкнених механізмах не було помилки в передбаченні напрямку умовного переходу (Branch misprediction stall).