WOJSKOWA AKADEMIA TECHNICZNA
SPRAWOZDANIE Z LABORATORIUM ARCHITEKTURY I ORGANIZACJI KOMPUTERÓW
L9_10
Wersja 5
Michał
Sokołowski
I0Y4S1
nr 16
Treść zadania
Zadanie laboratoryjne 9_10:
Napisać program Lab9.s w asemblerze komputera DLX, który:
Zadeklaruje dwie tablice przechowujące liczby zmiennoprzecinkowe podwójnej precyzji: T 130- elementową oraz TB ROZMIAR-elementową, a także zmienną Suma zmiennoprzecinkową podwójnej precyzji.
Komórki
tablicy T
wypełni (za pomocą obliczeń, wykonanych w pętli, a nie za pomocą
statycznej deklaracji z nadaniem wartości początkowych) kolejnymi
liczbami o części ułamkowej równej UŁAMEK i części
całkowitej rosnącej o jeden, począwszy od numeru w dzienniku
studenta/ studentki, powiększonej o SKŁADNIK (np. nr=1;
UŁAMEK = 0.35; SKŁADNIK = 5;
w tablicy T mają
być zapisane liczby T[1] = 6.35, T[2] = 7.35 itd.).
Następnie dla każdego elementu tablicy TB wykona operację, określoną w poniższej tabeli (UWAGA: wszystkie występujące we wzorze działania mają być jawnie wykonane w programie, nie są dopuszczalne przekształcenia wzoru (np. skrócenia), zastępowanie wykonywania działań obliczonymi stałymi. Można użyć stałych dla reprezentowania w programie wartości numeru w dzienniku i danych SKŁADNIK i UŁAMEK):
W zmiennej Suma umieści sumę wszystkich elementów tablicy TB.
Przed rozpoczęciem tworzenia programu zaprojektować arkusz kalkulacyjny w Excelu lub innym arkuszu kalkulacyjnym, wykonujący te same obliczenia.
Zmierzyć liczbę cykli zegarowych dla wykonania uzyskanego programu przy zmianach w sprzęcie komputera:
Forwarding on/ off
Liczba jednostek zmiennoprzecinkowych dodających 1/ 4
Liczba jednostek zmiennoprzecinkowych mnożących 1/ 4
Liczba
jednostek zmiennoprzecinkowych dzielących 1/ 4
Razem 16
pomiarów. Wyniki pomiarów przedstawić w tabeli, zamieszczając
jednocześnie wartość obliczonej przez program zmiennej Suma.
Na podstawie wyników pomiarów wybrać jedną konfigurację, dla której dla poprawnych wyników ilość cykli zegarowych , potrzebnych do wykonania programu jest
najmniejsza (konfiguracja szybka)
największa (konfiguracja wolna)
Kod programu Lab9.s
.data
numer: .double 16
skladnik: .double 155
ulamek: .double 0.55
mnoz: .double 5.2
cyfrajed: .double 1.0
T: .space 1040
TB: .space 840
suma: .space 8
.text
ld f2, ulamek
ld f4, skladnik
ld f6, numer
ld f8, cyfrajed
addi r1,r0,#0
addd f10, f2, f4
addd f22, f10, f6
tabT:
sd T(r1), f22
addd f22, f22, f8
addi r1, r1, #8
seqi r6, r1, 1040
beqz r6, tabT
addi r3, r0, T
addi r2, r0, #0
ld f16, mnoz
ld f30, suma
tabTB:
ld f2, 0(r3)
ld f4, 8(r3)
ld f6, 16(r3)
ld f8, 24(r3)
ld f10, 32(r3)
ld f28, 40(r3)
multd f12,f2,f16
multd f14,f12,f4
addd f18,f6,f8
addd f24,f18,f10
subd f26,f14,f24
nop
divd f12,f26,f28
sd TB(r2), f12
addd f30, f30, f12
addi r2, r2, #8
addi r3, r3, #8
seqi r6, r2, 840
beqz r6, tabTB
sd suma(r0), f30
trap 0
Algorytm
Wyniki z arkusza kalkulacyjnego
10 pierwszych elementów tablic T, TB oraz Suma
10 ostatnich elementów tablicy T i TB
Wydruki z pamięci WINDLX
Porównanie konfiguracji
Forwarding ON
b)Forwarding OFF
ON)
Żadna z konfiguracji jednostek arytmetycznych nie przyspiesza działania programu. Dla wszystkich wartość liczba cykli wyniosła 5587 . Większa liczba jednostek arytmetycznych nie zwiększa szybkości ponieważ nie są eliminowane hazardy podczas ładowania kolejnych argumentów działań.
OFF)
Jak widać wszystkie kombinacje jednostek arytmetycznych i forwardingu działają z taką samą szybkością.
Podsumowując wykonane przeze mnie 16 pomiarów stwierdzam, iż jedynie forwarding przyspiesza działanie mojego programu. Szybszą wersją jest zatem opcja z włączonym forwardingiem a wolniejsza z wyłączonym. Ilość jednostek arytmetycznych nie wpływa na wynik działania programu.
Liczba cykli w wersji szybszej: 5578
Liczba instrukcji w wersji szybszej: 2658
Liczba cykli w wersji wolniejszej: 7541
Liczba instrukcji w wersji wolniejszej: 2658