МІНІСТЕРСТВО ОСВІТИ, НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Лабораторна робота № 5
з дисципліни
"Архітектура комп’ютерів ч.2"
Львів – 2013
Тема: Програма побудови таблиці простих чисел
Мета : Дослідити техніку конвеєрного виконання програми побудови таблиці простих чисел
Хід роботи
У даній лабораторній роботі досліджується програма, що будує таблицю простих чисел
Базисна версія програми, що буде симулюватися .data
.global Count
Count: .word 10
.global Table
Table: .space Count*4
.text
.global main
main: ;*** Initialization
addi r1,r0,0 ;Index in Table
addi r2,r0,2 ;Current value
;*** Determine, if R2 can be divided by a value in table
NextValue:addi r3,r0,0 ;Helpindex in Table
Loop: seq r4,r1,r3 ;End of Table?
bnez r4,IsPrim ;R2 is a prime number
lw r5,Table(R3)
divu r6,r2,r5
multu r7,r6,r5
subu r8,r2,r7
beqz r8,IsNoPrim
addi r3,r3,4
j Loop
IsPrim: ;*** Write value into Table and increment index
sw Table(r1),r2
addi r1,r1,4
;*** 'Count' reached?
lw r9,Count
srli r10,r1,2
sge r11,r10,r9
bnez r11,Finish
IsNoPrim:;*** Check next value
addi r2,r2,1 ;increment R2
j NextValue
Finish: trap 0
Рис.1 Вікно статистики
Рис.2 Вікно конвеєра
Як бачимо, було виконано 750 інструкцій, на що пішло 2605 циклів (CPI=3.47).
Відбулося 2021 RAW пригальмовування конвеєра,107 пригальмовувань керування і 2 пригальмовування зупинки (trap stalls). Всього зупинок конвеєра 2130
Модифікована (оптимізована) версія програми.data
.global Count
Count: .word 10
.global Table
Table: .space Count*4
.text
.global main
main: ;*** Initialization
addi r1,r0,0 ;Index in Table
addi r2,r0,2 ;Current value
;*** Determine, if R2 can be divided by a value in table
NextValue: addi r3,r0,0 ;Helpindex in Table
Loop: seq r4,r1,r3 ;End of Table?
nop
bnez r4,IsPrim ;R2 is a prime number
lw r5,Table(R3)
nop
divu r6,r2,r5
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
multu r7,r6,r5
nop
nop
nop
nop
subu r8,r2,r7
nop
beqz r8,IsNoPrim
addi r3,r3,4
j Loop
IsPrim: ;*** Write value into Table and increment index
sw Table(r1),r2
addi r1,r1,4
;*** 'Count' reached?
lw r9,Count
srli r10,r1,2
sge r11,r10,r9
nop
bnez r11,Finish
IsNoPrim:;*** Check next value
addi r2,r2,1 ;increment R2
j NextValue
Finish: trap 0
Рис.3 Вікно конвеєра
Рис.5 Вікно коду (вміст пам’яті) – 10 простих чисел Рис.4 Вікно статистики
Було виконано 2495 інструкцій, на що пішло 2674 цикли (CPI=1.07)
Не відбулося жодного RAW пригальмовування, 107 пригальмовувань керування і 2 пригальмовування зупинки (trap stalls). Всього зупинок конвеєра 109
Для оптимізації було введено декілька “порожніх” інструкції nop та змінено порядок виконання деяких інструкцій
Висновок: На лабораторній роботі я опанувала техніку конвеєрного виконання програми побудови таблиці простих чисел