WOJSKOWA AKADEMIA TECHNICZNA
Architektura i organizacja komputerów II
Sprawozdanie z pracy laboratoryjnej
Nr 7
Student : Adrian Kępa
Grupa : I3X6S1
Nr : 14
Data : 23.05.2014r.
Treść zadania
Zadanie laboratoryjne 7_8:
A
. Napisać program Lab7.s w asemblerze komputera DLX, który:
1
. Zadeklaruje dwie tablice przechowujące liczby całkowite: T 110- elementową oraz
TB Rozmiar-elementową (gdzie liczba Rozmiar jest podana w tabeli z punktu A3), a
także zmienną Suma zmiennoprzecinkową podwójnej precyzji.
2
. Komórki tablicy T wypełni rosnąco kolejnymi liczbami całkowitymi począwszy od
numeru w dzienniku studentki/ studenta, powiększonego o liczbę SKŁADNIK, o
wartości podanej poniżej (np. dla numeru 10, TA będzie zawierać kolejne liczby
całkowite 10+SKŁADNIK, 11+SKŁADNIK,…)
3
. Następnie dla każdego elementu tablicy TB wykona operację :
Wersja :
10
Operacja :
(T[i+7] + T[i+9] - T[i+3])* SKŁADNIK
Składnik :
190
Rozmiar tablicy TB :
80
Numer studenta :
14
4
. W zmiennej Suma umieści sumę wszystkich elementów tablicy TB.
B
. Przed napisaniem programu Lab7.s zaprojektować arkusz kalkulacyjny w Excelu (lub innym
arkuszu kalkulacyjnym), wykonujący te same obliczenia. Porównać wyniki z arkusza z wynikami
napisanego programu Lab7.s.
C
. Zmierzyć liczbę cykli zegarowych dla wykonania uzyskanego programu przy 1)załączonym
2)wyłączonym forwardingu (WinDLX, menu Configuration/ Enable Forwarding). Wyniki
pomiarów przedstawić w postaci tabeli. Dla każdego uruchomienia sprawdzić poprawność
obliczonej zmiennej Suma.
D
. W sprawozdaniu naszkicować (lub wydrukować) i porównać diagramy cykli zegarowych dla
wykonania jednej iteracji obliczeń z punktu A3 (TB[i] = …) dla konfiguracji: 1) Forwarding
Enabled i 2) Forwarding Disabled. Opisać występujące w tej iteracji hazardy i przyczyny ich
powstania. Na podstawie analizy diagramów cykli zegarowych obliczyć liczbę cykli zegarowych,
liczbę instrukcji i CPI (Clock cycles Per Instruction = liczba cykli zegarowych / liczba
wykonanych instrukcji) dla całego programu dla obu wybranych konfiguracji. Wyniki obliczeń
porównać z zawartością okienka Statistics programu WinDLX.
Kod programu
.data
skladnik: .word 190
numerstud: .word 14
a: .word 110
b: .word 80
T: .space 440
TB:
.space 320
Suma: .double 4
.text
pierwszyelem:
addi R9, R0, T
lw R4, skladnik
lw R5, numerstud
add R4, R4, R5
sw 0(R9), R4
lw R20, a
addi R1,R1,1
addi R2, R0, 0
wypelnianie_T:
subi R20, R20, #1
sw 0(R9), R4
add R4, R4, R1
addi R9, R9, #4
bnez R20, wypelnianie_T
przygotowanie_do_sumy:
addi R10, R0, T
lw R19, b
lw R28, skladnik
addi R7, R0, TB
addi R26, R0, 0
obliczenia:
lw R5, 28(r10)
lw R6, 36(r10)
lw R15, 12(r10)
add R8, R5, R6
sub R8, R8, R15
mult R16, R8, R28
addi R10, R10, #4
subi R19, R19, #1
sw 0(R7), R16
addi R7, R7, #4
add R26, R16, R26
bnez R19, obliczenia
movi2fp F10, R26
cvti2d F10, F10
sd Suma, F10
trap 0
Opis programu
Program Lab7.s ma za zadanie wypełnić komórki tablicy T kolejnymi liczbami począwszy od
liczby SKLADNIK + NUMER STUDENTA. W tym przypadku jest to 204. Następnie, każdy
element tablicy TB zostaje wyliczony na podstawie wzoru :
(T[i+7] + T[i+9] - T[i+3])* SKŁADNIK
Ostatnią częścią programu jest zsumowanie wszystkich elementów tablicy TB i zapisanie ich w
zmiennej Suma.
Pierwsze 10 elementów tablic T i TB
T[i]
TB[i]
204
41230
205
41420
206
41610
207
41800
208
41990
209
42180
210
42370
211
42560
212
42750
213
42940
Ostatnie 10 elementów tablic T i TB
T[i]
TB[i]
304
54530
305
54720
306
54910
307
55100
308
55290
309
55480
310
55670
311
55860
312
56050
313
56240
Pozostałe dane
Numer
Studenta
Składnik
TB[1]
TB[80]
Suma
14
190
41230
56240
3,89880E+06
Zawartość pamięci dla
włączonego
forwardingu.
Zawartość pamięci dla
wyłączonego
forwardingu.
Obliczenia
A
. Ilość instrukcji –
Taka sama dla włączonego i wyłączonego forwardingu.
-8 instrukcji początkowych
-Pętla wypełniająca tablicę T zawierająca 5 instrukcji, wykonuje się 110 razy, więc w samej pętli
wykona się 550 instrukcji.
-Następnie w etykiecie przygotowanie_do_sumy wykona się 5 instrukcji.
-Pętla obliczenia zawierająca 12 instrukcji, wykonuje się 80 razy więc w samej pętli wykona się
960 instrukcji.
-Końcowa faza programu zawiera 4 instrukcje.
-Razem wszystkich instrukcji wykonanych podczas działania programu =
8 + 550 + 5 + 960 + 4 =
1527
B
. CPI (
Clock Cycles Per Instruction
) FORWARDING ON
CPI = ilosc cykli / ilosc instrukcji
CPI = 1880/1527 =
1,23
C
. CPI (
Clock Cycles Per Instruction
) FORWARDING OFF
CPI = ilosc cykli / ilosc instrukcji
CPI = 2448/1527 =
1,60
Porównanie wyników
Forwarding
ON
OFF
Ilość cykli
1880
2448
Ilość instrukcji
1527
1527
Clock cycles per instr.
1,23
1,60
Zmienna Suma
3,89880E+006
3,89880E+006
Forwarding ON
Na powyższym zdjęciu zamieściłem wycinek cyklu zegarowego wykonanego programu dla pętli
obliczającej elementy tablicy TB. Hazard występuje w momencie gdy rozkaz
sw 0(R7), R16
chce
skorzystać z rejestru R16 który z kolei jest wcześniej wykorzystywany poprzez rozkaz
mult R16,
R8, R29
. W WinDLX mnożenie trwa aż 5 cykli, dlatego rozkaz
sw 0(R7), R16
musiał odczekać 2
cykle by mnożenie w poprzednim rozkazie zostało wykonane. Rozkaz
addi R7, R7, #4
również
musi odczekać 2 cykle, by skorzystać z rejestru R7 zależnego od poprzedniego hazardu.
Forwarding OFF
Powyższe zdjęcie ilustruje przebieg programu bez forwardingu. Oprócz hazardów opisanych dla
poprzedniego przypadku, występują nowe. Na przykład –
add R8, R5, R6
chce skorzystać z
rejestru R6 do którego ładowany jest element tablicy. Z kolei rejestr ten jest obsługiwany przez
rozkaz
lw R6, 36(R10)
i występuje tutaj hazard typu RAW. Kolejny dodatkowy hazard ma miejsce
już w następnym rozkazie –
sub R8, R8, R15
który to rozkaz jest w hazardzie z rozkazem
add R8, R5, R6
. Rozkaz mult
R16, R8, R20
również próbuje skorzystać z rejestru R8 ale jest
uzależniony zarówno od rozkazu
sub R8, R8, R15
jak i
add R8, R5, R6
.
Wnioski
Na podstawie powyższych danych i obliczeń widać, że forwarding to mocne narzędzie które potrafi
przyspieszyć i zoptymalizować działanie komputera. Włączenie/wyłączenie forwardingu dla
badanego programo spowodowało zmianę ilości wykonywanych cykli i zauważalnie zwiększony
czas wykonywania programów. Dodatkowo, wyłączony forwarding przyczynił się do powstania
większej ilości hazardów, które to spowalniały pracę programu. Dla danego programu, wynik
zapisany w zmiennej Suma nie zmieniał się przy wyłączaniu/włączaniu forwardingu.