МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
Кафедра БІТ З В І Т
до лабораторної роботи №3
з курсу: «Архітектура комп’ютерних систем»
Варіант № 21
Львів 2022
Мета: опанувати техніку паралельного виконання машинних інструкцій на рівні апаратури.
Завдання: Засобами архітектурного симулятора 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
Результат після виконання команди C:\winmips64> asm lab3.s > report.txt
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
/
Результат виконання програми показав нам що програма відпрацювала 36 циклів виконуючи 6 інструкцій. Також варто зазначити що було 24 пригальмування RAW і 1 Structural Stall.
У даному коді є проблеми, які не дозволяють паралельно виконувати усі потрібні функції. Так як функція ділення виконується за 28 кроків, то затримуючи змінні в регістрах, а саме працюючи з ними, інші функціїї не мають доступу до них. Так само mul займає досить багато часу.
Тому змінити послідовність початку виконання фунцій. Функцію ділення поставимо на 4 місце, mul на 2, sub на 1 та add на 3. І отримаємо наступний код програми:
.text
sub.d f7,f7,f4
mul.d f2,f4,f3
ld r1,78(r0)
add.d f4,f5,f6
div.d f7,f9,f10
halt
Pass 1 completed with 0 errors
00000000 .text
00000000 462439c1 sub.d f7,f7,f4
00000004 46232082 mul.d f2,f4,f3
00000008 dc01004e ld r1,78(r0)
0000000c 46262900 add.d f4,f5,f6
00000010 462a49c3 div.d f7,f9,f10
00000014 04000000 halt
Pass 2 completed with 0 errors
Code Symbol Table
Data Symbol Table
Помилок немає, можемо запустити код в симуляторі.
/
Тож результат виконання показав що виправлений код має на 4 цикли менше і відповідно середнє число тактових інтервалів менше на 0.667
Також існує інший варіант зміни послідовності початку виконання фунцій. Функцію ділення поставимо на 2 місце, mul на 4, sub на 1 та add на 3. І отримаємо наступний код програми:
.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
Помилок також немає, можемо запустити код в симуляторі.
/
Тут результат показав, що код має на 7 циклів менше, середнє число тактових інтервалів менше на 1.167 та 5 пригальмувань RAW
Висновок
Під час виконання цієї лабораторної роботи я опанував техніку паралельного виконання машинних інструкцій на рівні апаратури, провів тестування коду даного за завданням, покращив код для його швидкодії та досягнув кращого результату, а саме:
При першій зміні коду циклів стало на 4 менше, при другій на 7
При першій зміні середнє число тактових інтервалів зменшилось на 0.667, при другій 1.167
При першій зміні пригальмовувань не було, а при другій 5