labor mips pol(1)


Akademia Techniczno-Humanistyczna w Bielsku-Białej

Anatoliy Melnyk

Ćwiczenia laboratoryjne

z przedmiotu „Architektura komputerów”

Bielsko-Biała-2015

  1. Praca laboratoryjna 2. Badanie wykonania cyklu na potoku rozkazów

Cel wykonania pracy laboratoryjnej: Opanować technikę potokowego wykonania rozkazów RISC

Zadanie: Symulatorem WinMIPS64 wykonać badanie potokowego wykonania fragmentów programów komputerowych z cyklami. Optymizować kod programowy i wykonać badanie kodu.

Bazowe opcje wykonania pracy laboratoryjnej.

Jest symulowany program jaki zapisany w języku Asembler. Program szuka sumy 10 liczb od 1 do 10 z krokiem 1.

; Program: loop.s

; Sum of 10 integer values

.data

values: .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 64-bit integers

result: .space 8

.text


MAIN:

LOOP:

daddui R1,R0,10 ; R1 <- 10

dadd R2,R0,R0 ; R2 <- 0 POINTER REG

dadd R3,R0,R0 ; R3 <- 0 RESULT REG

ld R4,values(R2) ;GET A VALUE IN R4

dadd R3,R3,R4 ; R3 <- R3 + R4

daddi R2,R2,8 ; R2 <- R2 + 8 POINTER INCREMENT

daddi R1,R1,-1 ; R1 <- R1 - 1 DECREMENT COUNTER

bnez R1,LOOP nop

sd R3,result(R0) ; Result in R3

HALT ; the end


Niżej pokazano okno symulatora.


0x01 graphic

Rysunek. 1 -Główne okno symulatora z załadowanym programem. Wykorzystano zasoby przesyłania i prognozowanie kierunku przejścia warunkowego (branch target buffer)


0x01 graphic

Rysunek. 2 - Główne okno symulatora w jakie widać zawartośc pamięci do startu wykonania programu.

0x01 graphic

Rysunek. 3 - Główne okno symulatora, wykonano 7 cyklów symulowania, jest pierwszy konflikt RAW (read after write)


0x01 graphic

Rysunek. 4 - Potok symulatora, Pierwszy RAW hamowanie. 7 taktów symulowania.

0x01 graphic

Rysunek 5. - Drugi RAW hamowania. Wykonano 10 taktów.


0x01 graphic

Rysunek 6. -Po wykonaniu 11 taktów wystąpiło pierwsze hamowanie, przez wykonanie przechodu warunkowego (branch taken stall).

0x01 graphic

Rysunek 7. Pojawienie się pierwszego błędu w prognozowaniu kierunku przesyłania warunkowego (Branch misprediction stall)


0x01 graphic

Rysunek 8. - Główne okno symulatora w momencie zakończenia CYKLU.

СРІ - CPI - jest (średnia) liczba taktów zegara (cykli na instrukcji), które miały miejsce w trakcie wykonywania poszczególnych instrukcji programu.

Po wykonaniu programu z optymizowanym sprzętem straty potoku rozkazow stanowię: 20 RAW-hamowan, 2 hamowania pod czas wykonania przehodow warunkowych (Branch taken) i jeszcze 2 hamowania czrez blendy z wyznaczeniem kierunku przejścia warunkowego. Jasne, ze przy wykorzystaniu nie optymizowanego sprzętu czas wykonania wzrosty.

Symulowaniem potrzebne nadać odpowiedz na pytania: kiedy, czego, ile?


  1. Praca laboratoryjna 3. Równolegle wykonanie maszynowych rozkazow

Cel wykonania pracy laboratoryjnej:

Opanowanie techniką równoległego wykonania maszynowych rozkazów na poziomie sprzętu.

Zadanie

Za pomocą symulatora WinMIPS64 wykonać badanie równoległego wykonania maszynowych rozkazów na poziomie sprzętu i otrzymane przewagi na przykładzie stworzonych studentem fragmentow maszynowego kodu.

W potoku rozkazow realizowana następna strategia: w schodku ID rozkaz sie analizuje i jeśli ma operandy rucha dalej, a jeśli operandow niema - wstrzymuje się. taka strategia pinwale wykorzystać przewagi nie urządzonego zakończenia wykonania (out-of-order completion), lecz ona również może spowodować niebezpieczeństwo WAR. Tu może pomóc technika przemianowywania  registrów (register renaming). Na przykład, takie może stać się w następnym fragmencie kodu:

.text

add.d f7,f7,f3 add.d f7,f7,f4

mul.d f4,f5,f6 ; WAR czrez wspolny rejestr f4

Kiedy wypuścić mul.d, wtedy ten rozkaz (za pewnej umowy) "wyprzedzi" drugi rozkaz add.d i pierwszym zapisze do f4. Więc, mul.d musimy zatrzymać na ID.. Prosta reguła zapobiegania niebezpieczeństw brzmi tak: długie rozkazy wykonują pierwszymi. Niechaj mamy fragment kodu :

;***************************************

;*** winMIPS64 //hazard3.s// *****

;*** (c) 2003 CA226, DCU *****

;***************************************

.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

Wyniki jego syntaktycznej kontroli.

Pass 1 completed with 0 errors

;***************************************

;*** winMIPS64 //hazard3.s// *****

;*** (c) 2005 CA226, DCU *****

;***************************************

00000000

.text

00000000 462a49c3

div.d f7,f9,f10

00000004 46232082

00000008 462439c1

mul.d f2,f4,f3 sub.d f7,f7,f4

0000000c dc01004e

ld r1,78(r0)

00000010 46262900

add.d f4,f5,f6

; WAR on f4

00000014 04000000

halt

Pass 2 completed with 0 errors Code Symbol Table

Data Symbol Table


0x01 graphic

Ryż. - Niepotokowy powolny wykonawczy węzeł dzielenia z ruchomym przecinkiem podejmował pracę pierwszym

0x01 graphic

Ryż. - Niepotokowy wykonawczy węzeł dzielenia z ruchomym przecinkiem ( 24 takty zwłoki) jest dociążony

0x01 graphic

Rys. - 4 rozkazy jest wykonany potokowe (z nie urządzonym zakończeniem)

0x01 graphic

Rys. - Równolegle wykonanie się kontinuje, żądny rozkaz nie doszedł do schodki МЕМ


0x01 graphic

Rys. - Pierwszy rozkaz dzielenia jeszcze się wykonuje, a trzecia od końca ld jest bliska do wykonania

0x01 graphic

Rys. - Nie urządzone (chaotyczne) zakończenie wykonanie rozkazu potoku


0x01 graphic

Rys. - sub.d ma te samy cel jak i div.d. Stworzona się sytuacja WAW, temu hamowano add.d i halt

0x01 graphic

Rys. - Hamowana na pierwszej z 4 schodek sub.d hamuje następne za niej add.d


0x01 graphic

Rys. - Zakończenie div.d odblokowało potok. Dzielenie i odejmowanie wykonywane

0x01 graphic

Rys. - Chaotycznie zakończony od początku halt, za tym odejmowanie i dodawanie z ruchomym przecinkiem


0x01 graphic

Rys. - Chaotyczne zakończenie wykonania rozkazu potoku

0x01 graphic

Rys. - Program jest wykonany, otrzymano statystyki programowe


  1. Praca laboratoryjna 4. Badanie potokowego wykonania rozkazow dla opracowania danych z ruchomym przecinkiem

Cel wykonania pracy laboratoryjnej

Opanowanie techniki potokowego wykonania rozkazow RISC dla opracowania danych z ruchomym przecinkiem

.

Zadanie

Z wykorzystaniem symulatora WinMIPS64 komputera 64-bitowej architektury RISC typu MIPS64 wykonac badanie potokowego wykonania fragmentow programowych dla opracowania danych z ruchomym przecinkiem.

Wyszukać zależności za danymi i kierowaniem, optymizować kod programu i wykonać badanie zaproponowanej optymizacji. Sformować sprawozdanie.

Wariant bazowy pracy laboratoryjnej

Kod programowy jaki wykonuje opracowanie danych z ruchomym przecinkiem podano niżej.

; hail.s

; Hailstone numbers iteration

; If number is odd, multiply by 3 and add 1

; If number is even, divide it by 2

; repeat this iteration until number is 1

.data

number: .word 27 ; this is input number - change it!

max: .word 0 ; max number so far

.text

start: ld r1,number(r0) ; program start

loop: andi r3,r1,1 ; test odd or even

beqz r3,even

odd: dadd r2,r1,r1 ; times 2 dadd r1,r2,r1 ; times 3 daddi r1,r1,1 ; plus 1

j over

even: dsrl r1,r1,1 ; divide by 2

over: ld r4,max(r0)

slt r3,r4,r1 ; compare with max

beqz r3,skip

sd r1,max(r0) ; new max

skip: slti r3,r1,2 ; test for finished

beqz r3,loop halt



Wyszukiwarka

Podobne podstrony:
labor dlx pol
Ubytki,niepr,poch poł(16 01 2008)
Poł kształtowe cz 1
7 Celiakia seminarium dla IV roku pol (2)
27 407 pol ed02 2005
137 407 pol ed02 2005
28 407 pol ed02 2005
highwaycode pol c20 sygnaly policjii innych (str 104,105)
123 607 pol ed01 2007
808D OPT Part3 pol POL pl PL
121 307 POL ED02 2001
80 307 POL ED02 2001
highwaycode pol c5 rowery motocykle (s 22 26, r 60 83)
POL SPAWANE
44 47 407 pol ed02 2005
89 307 POL ED02 2001
54 55 307 POL ED02 2001

więcej podobnych podstron