Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdJoris de Lange Laatst gewijzigd meer dan 6 jaar geleden
1
Digitale Methoden Onderdeel van vak Computer Systemen
Micha de Groot (A,D) Tessa Wagenaar (B) Hendrik Huang (C) Martijn Brehm (E) Kyrian Maat (F)
2
Digitale Methoden Syllabus “Van 0 en 1 tot pipelined processor”, Ben Bruidegom week 1: hfdstk 1,2,3 week 2: hfdstk 7,8 week 3: hfdstk 9 week 4: tentamen week 5: hfdstk 10 week 6: hfdstk 11 week 7: nog te bepalen week 8: tentamen
3
Digitale Methoden Wekelijkse opgaven tellen ieder voor 3% van het totale cijfer. Opgaven maken in Sakai in paren van 2: De opgaven zijn een goede voorbereiding voor Digitale Methoden tentamen vragen.
4
Hfdstk 1,2,3: Rekenmachine
5
Hfdstk 1,2,3: Rekenmachine Een computer is logisch gezien opgebouwd als een zeer grote combinatie van een klein aantal logische poorten: AND, OR, NOT, XOR Poorten worden gebruikt voor representatie van en operaties op data zoals optellen/aftrekken van getallen door een Adder. 7 – 6 = = (inverteer en plus 1) = 0001
6
Hfdstk 1,2,3: Rekenmachine Een processor kan een reeks van instructies (een programma) uitvoeren en bestaat in de basis uit: Program Counter Instruction Memory Registers ALU
7
Hfdstk 1,2,3: Rekenmachine
8
Hfdstk 1,2,3: Rekenmachine Paragraaf 3.7 Opdracht 4, een voorbeeld programma wat de waarde van register 1 en register 2 wisselt zonder gebruik van een derde register. @include "Rekenmachine_II.wasm" .code MyCode : REKENMACHINE_II LOADI $1, 0x00FF # Laad test data in register 1 LOADI $2, 0xFF00 # Laad test data in register 2 XOR $1, $1, $ # 0xFFFF XOR $2, $1, $ # 0x00FF XOR $1, $1, $ # 0xFF00 Wat is een andere manier om te wisselen en waarom is deze manier nuttig?
9
Hfdstk 7,8: Harvard Processor
10
Hfdstk 7: Calulator with loops
Branch instructies zijn toegevoegd aan de processor om "loops" te kunnen uitvoeren. BZ, branch if rt is zero BNZ, branch if rt is not zero BEQ, branch when rs equals rt BNE, branch when rs not equal rt BRA, branch always
11
Hfdstk 7: Calulator with loops
Hiervoor is de processor uitgebreid met extra elementen. Branch, maakt branch mogelijk Zero, test of uitgang ALU 0 is Invert, inverteerd de zero bit waarde RegWrite, beslist of naar rd geschreven wordt SecReg, beslist of ALU rt of Constant Number binnen krijg
12
Hfdstk 7: Calulator with loops
13
Hfdstk 8: Harvard Processor
Data Memory is toegevoegd om in meer dan alleen registers data op te kunnen slaan. Nieuwe instructies: SW, schrijf waarde van rt naar adres wat de ALU bepaalt LW, laad rd met de waarde op adres wat de ALU bepaalt
14
Hfdstk 8: Harvard Processor
Hiervoor is de processor uitgebreid met extra elementen. MemWrite, beslist of data naar Data Memory geschreven wordt Mem2Reg, beslist dat of Data Memory of de ALU data aan biedt aan rd
15
Hfdstk 8: Harvard Processor
16
Hfdstk 7,8: Harvard Processor
Paragraaf 7.5 Opdracht 7, sorteer 2 registers van klein naar groot @include "CalculatorWithLoops.wasm" .code MyRegisters : REGISTERS 0x1: WORD a 15 0x2: WORD b 13 0x3: WORD a_min_b 0x4: WORD temp .code MyCode : LOOPS_MACHINE, MyRegisters SUB a_min_b, a, b # subtract to compare ANDI temp, a_min_b, 0x8000 # bit mask of last bit BNZ temp, end # if last bit is 1 (negative) go to end COPY temp, a # else switch: remember value of a COPY a, b # a gets value of b COPY b, temp # b gets old value of a end: HALT Waarvoor dient de bit mask "0x8000"?
17
Hfdstk 9: Pipelined Processor
18
Hfdstk 9: Pipelined Processor
Bij een Pipelined Processor wordt er per cycle maar een deel van een instructie uitgevoerd, maar de processor werkt wel aan meerdere instructies tegelijkertijd. Dit levert (vaak) snelheidswinst op, maar kan ook voor problemen zorgen: Data Hazard Branch Hazard
19
Hfdstk 9: Pipelined Processor
Data Hazard, een instructie heeft data nodig, maar de instructie die deze data produceert is nog niet klaar. Mogelijke oplossingen: bubbles (NOP) toevoegen, wachten op de data (snelheidsverlies) forwarding, processor aanpassen zodat data (in sommige gevallen) sneller beschikbaar is scheduling, volgorde van instructies aanpassen zonder gevolgen voor de uitkomst van programma
20
Hfdstk 9: Pipelined Processor
Branch Hazard, de instructie die bepaalt of een branch plaats vindt is nog niet klaar waardoor niet duidelijk is welke volgende instructies in de processor moeten worden geladen. Mogelijke oplossingen: flushing, verkeerd geladen instructies worden automatisch verwijderd, het werk hieraan is voor niks geweest scheduling, volgorde van instructies aanpassen zonder gevolgen voor de uitkomst van programma branch prediction, proberen te raden of de branch plaats vindt op basis van vorige keren
21
Hfdstk 9: Pipelined Processor
Paragraaf 9.6 Opdracht 5, kopieer data van 'start' naar 'dest' zonder forwarding en met branch prediction @include "PipelinedHarvard.wasm" .data MyData : DATAMEM 0x10: WORD start x01 WORD x02 WORD x03 WORD x04 WORD x05 WORD x00 0x20: WORD dest .data MyRegisters: REGISTERS 0x00: WORD index 0 0x01: WORD temp .code MyCode : HARVARD, MyData, MyRegisters loop: LW temp, start, index NOPasasNOP NOP SW temp, dest, index ADDI index, index, 1 BNZ temp, loop HALT Waarvoor zijn de NOPs nodig, en hoe zou scheduling of forwarding dit programma kunnen versnellen?
22
Hfdstk 10: Procedures
23
Hfdstk 10: Procedures Een procedure aanroep is een branch instructie waarbij we het adres bewaren waarnaar we willen terugkeren aan het einde van de procedure. Ook willen we dat het uitvoeren van de procedure de waarden van registers die in gebruik zijn niet verandert. Daarom bewaren we deze waarden tijdelijk op de stack.
24
Hfdstk 10: Procedures Hiervoor is de processor uitgebreid met extra elementen. First Reg, kan PC nu ook de waarde van rs geven Result Origin, kan rd nu ook de waarde van PC+1 geven
25
Hfdstk 10: Procedures
26
Hfdstk 10: Procedures @include "16bitJumper.wasm"
Paragraaf 10.6 Opdracht 6, functie max3 bepaalt het maximum van 3 waarden @include "16bitJumper.wasm" .code MyCode : REGSTACK, MyData LOADI $arg1, 1 LOADI $arg2, 2 LOADI $arg3, 3 JSR max3 HALT # endless loop max: # max procedure SUB $tmp1, $arg1, $arg2 ANDI $tmp1, $tmp1, 0x8000 BZ $tmp1, arg1max COPY $val1, $arg2 RETURN $ra arg1max: COPY $val1, $arg1 RETURN $ra # return max Max3: # max3 procedure SUBI $sp,$sp,2 # reserve memory on stack SW $ra, 0, $sp # write to stack SW $s1, 1, $sp COPY $s1, $arg3 JSR max COPY $arg1, $val1 COPY $arg2, $s1 LW $s1, 1, $sp # read back from stack LW $ra, 0, $sp ADDI $sp,$sp,2 # release memory on stack RETURN $ra # return max Waarom wordt bij "max" niet naar de stack geschreven maar bij "max3" wel?
27
Hfdstk 11: Caching
28
Hfdstk 11: Caching Cache geheugen is snel geheugen wat data van een groter langzamer geheugen sneller beschikbaar probeert te maken. Dit doet het door tijdelijk data van het langzame geheugen te bewaren waarvan de kans groot is dat dit gelezen of overschreven gaat worden.
29
Hfdstk 11: Caching Hiervoor is de processor uitgebreid met extra elementen. De Cache, het snelle geheugen Mem Read, vertelt de Cache wanneer uit Data Memory gelezen wordt Advance PC, houdt PC tegen bij cache miss
30
Hfdstk 11: Caching
31
Hfdstk 11: Caching @include "16bitDirectMappedCache.wasm"
.data MyData : DATAMEM 0d0: WORD base .code MyCode : HARVARD, MyData LOADI $1, # set loop counter loop: SUBI $1, $1, 1 # decrease loop counter LW $2, base, $1 # load next word BNZ $1, loop # loop when loop counter not zero HALT We gebruiken direct-mapped cache van 16 blocks van ieder 4 words. Hoeveel cache misses komen dan voor bij uitvoeren van dit programma?
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.