Technische Informatik I – Übung 1: Instruktionssatz...Technische Informatik I Übung 1:...
Transcript of Technische Informatik I – Übung 1: Instruktionssatz...Technische Informatik I Übung 1:...
Technische Informatik IÜbung 1: Instruktionssatz
08.10.2018
Lukas SigristComputer Engineering Group, ETH Zürich 1
||
Lukas Sigrist
Computer Engineering Group, ETH Zürich
1
Technische Informatik I – Übung 1: Instruktionssatz
Übersicht Übungsstunden
2
Musterlösungen und Slides werden auf der Webseite verfügbar gemacht
Übung 1 Instruktionssatz Rechenübung ETF E1
Übung 2 Assembler Computerübung ETZ D96
Übung 3 Assembler Rechenübung ETF E1
Übung 4 Toolflow Computerübung ETZ D96
Übung 5 Datenpfad Rechenübung ETF E1
Übung 6 Eingabe - Ausgabe Computerübung ETZ D96
Übung 7 Pipelining Rechenübung ETF E1
Übung 8 Pipelining Computerübung ETZ D96
Übung 9 Instruktionsparallelität Rechenübung ETF E1
Übung 10 Cache Rechenübung ETF E1
Übung 11 Virtueller Speicher Rechenübung ETF E1
Lernziele Übung 1
• Speicheradressierung und Anwendung in Assembler Programmen
• Kodieren und Dekodieren von Instruktion in Maschinensprache
• Synchronisation zur Vermeidung von Speicherzugriffkollisionen
3
Voraussetzungen Übung 1
Vorlesung Kapitel 2
• Grundlegende Assembler-Kenntnisse
• MIPS Instruktionskodierung
• Synchronisation
4
Prozessor Register und Hauptspeicher [2-5]
5
Hauptspeicher
Prozessorkern(Central Processing Unit)
Daten in Register laden: lw Instruktion [2-11ff]
6
lw t0 0(a0)
Instruktion
Zielregister Immediate-Offset
Basisadresse
Zieladresse = Basisadresse + Immediate-Offset
Technische Informatik IÜbung 1: Instruktionssatz
08.10.2018
Lukas SigristComputer Engineering Group, ETH Zürich 2
MIPS Instruktionskodierung [2-28ff]
• Fixe Grösse von einem Maschinenwort (32 Bit)
• Drei Typen von Instruktionen
7
•Typ I
•31 •0•15•16•20•21•25•26
•op •rs •rt •immediate
•Typ J
•0•25•26•31
•op •target
•Typ R•0•15•16•20•21•25•26•31 •11•10 •6 •5
•op •rs •rt •rd •shamt •funct
Datenformate [2-36ff]
• Zweierkomplement für vorzeichenbehaftete Binärzahlen
𝐵 = −𝑏𝑛−1 ⋅ 2𝑛−1 +σ𝑖=0
𝑛−2 𝑏𝑖 ⋅ 2𝑖
8
Register-Wort (32 Bit)
0A0B0C0Dhex
Adresse Byte Wert
2000 0A
2001 0B
2002 0C
2003 0D
Speicher (big-endian) Speicher (little-endian)
Adresse Byte Wert
2000 0D
2001 0C
2002 0B
2003 0A
Synchronisation [2-23ff]
• Gleichzeitiges Lesen und Schreiben von mehreren Prozessoren auf denselben Speicherbereich führt zu Kollisionen
• Lösung: lock Variable zur Blockierung des Speicherbereiches
• Spezifische Assembler Instruktionen in MIPS
• Load linked:
ll $t1, offset($s1)
• Store conditional:
sc $t0, offset($s1)
9
CPU 1 CPU 2
Übungsaufgaben
10
Aufgabe 1: Speicheradressierung [2-20, 2-28f, 2-32]
Nehmen Sie an, das Register $gp enthält den Wert 10008000hex.
Zum Lesen eines Wertes aus dem Hauptspeicher wird der Befehl
lw $t0 x($gp)
verwendet, wobei x eine Zahl bedeutet.
11
Aufgabe 1: Speicheradressierung
(a) Die kleinste Hauptspeicheradresse, die gelesen werden kann ist
10000000hex.
lw $t0 -32768($gp)
−32768 = −1 ⋅ 215 + 0
12
Technische Informatik IÜbung 1: Instruktionssatz
08.10.2018
Lukas SigristComputer Engineering Group, ETH Zürich 3
Aufgabe 1: Speicheradressierung
(b) Die grösste Hauptspeicheradresse, die gelesen werden kann ist
1000FFFFhex.
lw $t0 32764($gp)
Höchste 16-bit Zahl: 32767 = 215 − 1An Wortgrenze ausgerichtet: 32764 = 215 − 4
13
Aufgabe 1: Speicheradressierung
(c) Wie lautet die Instruktion falls die Adresse 10006edchex gelesen werden soll?
$gp + x = Zieladresse
x = 10006edchex - 10008000hex
= (-1)·1124hex
= -4388dec
lw $t0 -4388($gp)
14
Aufgabe 1: Speicheradressierung
(d) Instruktionen aus Aufgaben (a)-(c) in Maschinensprache
lw $t0 x($gp)
15
(d) Die lw Instruktion hat op Code 35
35dec = 100011bin
Aufgabe 1: Speicheradressierung
16
Aufgabe 1: Speicheradressierung
(d) Das Quellenregister (rs) ist $gpmit Registernummer 28,
das Zielregister (rt) ist $t0mit Registernummer 8
17
28dec= 11100bin
8dec = 01000bin
Aufgabe 1: Speicheradressierung
(d) Immediate Offset x in Zweierkomplement
lw $t0 x($gp)
4388dec = 1124hex = 0001 0001 0010 0100bin
18
Aufgabe xdec xbinZweierkomplement
(a) -32768 1000 0000 0000 0000
(b) 32768 0111 1111 1111 1111
(c) - 4388 1110 1110 1101 1100
Technische Informatik IÜbung 1: Instruktionssatz
08.10.2018
Lukas SigristComputer Engineering Group, ETH Zürich 4
Aufgabe 1: Speicheradressierung
(d) Instruktionstyp: Immediate
19
Aufgabe op rs rt immediate
(a) 100011 11100 01000 1000 0000 0000 0000
(b) 100011 11100 01000 0111 1111 1111 1111
(c) 100011 11100 01000 1110 1110 1101 1100
•31 •0•15•16•20•21•25•26
•op •rs •rt •immediate
Aufgabe 1: Speicheradressierung
(e) Zwei Immediate Instruktionen für upper und lower 16 bit
lui $gp, 0x1000
addiu $gp, $gp, 0x8000
20
Aufgabe 2: Instruktionskodierung [2-32ff, 2-36ff]
• Byte-adressierter Speicher (big-endian Konvention)
• Je 32 Bit zu einem Instruktionswort zusammenfassen
• Umwandeln in Instruktionen
21
•Typ I
•31 •0•15•16•20•21•25•26
•op •rs •rt •immediate
•Typ J
•0•25•26•31
•op •target
•Typ R
•0•15•16•20•21•25•26•31 •11•10 •6 •5
•op •rs •rt •rd •shamt •funct
Aufgabe 2: Instruktionskodierung
• OP Code bestimmt Funktionstypen
22
Nr op Rest Funktionstyp
1 001101 00000100010100000000000001 I
2 000000 00000100011001001111000000 R
3 101011 10010100101111000000000000 I
Aufgabe 2: Instruktionskodierung
• Immediate Funktionstypen
ori $s1, $zero, 0x4001sw $s2, -4096($s2)
23
Nr op rs rt immediate
1 001101 00000 10001 0100 0000 0000 0001
3 101011 10010 10010 1111 0000 0000 0000
•Typ I
•31 •0•15•16•20•21•25•26
•op •rs •rt •immediate
Aufgabe 2: Instruktionskodierung
• Register Funktionstyp
sll $s2, $s1, 15
24
Nr op rs rt rd shamt funct
2 000000 00000 10001 10010 01111 000000
•Typ R•0•15•16•20•21•25•26•31 •11•10 •6 •5
•op •rs •rt •rd •shamt •funct
Technische Informatik IÜbung 1: Instruktionssatz
08.10.2018
Lukas SigristComputer Engineering Group, ETH Zürich 5
Aufgabe 2: Instruktionskodierung
• Instruktionssequenz:
ori $s1, $zero, 0x4001sll $s2, $s1, 15sw $s2, -4096($s2)
• Speicherlayout:
25
Adresse (hex) Wert (bin)
2000 7000 0010 0000
2000 7001 0000 0000
2000 7002 1000 0000
2000 7003 0000 0000
Aufgabe 3: Synchronisation
• System mit zwei Prozessoren und einem Speicher
• Sich verändernde, sehr unterschiedliche und unbekannte Ausführungszeiten pro Instruktion
• Schritt 1: Pseudocode Programm
26
CPU 1 CPU 2
# ta1
1 2 µs
2 6 s
3 4 µs
# ta2
1 8 µs
2 1 µs
3 4 ms
Aufgabe 3a: Pseudocode
t1 = 0s1 = 0while s1 < s0:
s1 = s1 + 1t1 = t1 + s1wait(lock)
s2 = memory1if s1 < s2:
s1 = s2t1 = memory2
else if s2 < s1:memory1 = s1memory2 = t1
signal(lock)
27
Initialisierung
Iteration und Summation
Exklusiver Speicherzugriff
Lokal weiter fortgeschritten:aktualisiere lokale Register
Lokal weniger fortgeschritten:aktualisiere lokale Register
Freigabe exklusiver Zugriff
Aufgabe 3a: Initialisierung
• Pseudocode Fragment:
t1 = 0s1 = 0
• Assembler:
add $t1, $zero, $zero # Initialisiere t1add $s1, $zero, $zero # Initialisiere s1
28
Aufgabe 3a: Iteration und Summation
• Pseudocode Fragment:
while s1 < s0:s1 = s1 + 1t1 = t1 + s1
• Assembler:
loop:beq $s1, $s0, loop_end # while s1 != s0addi $s1, $s1, 1 # Inkrementiere Zähleradd $t1, $t1, $s1 # Berechne die Summe<...>j loop
29
Aufgabe 3a: Exklusiver Speicherzugriff
• Pseudocode Fragment:
wait(lock)
• Assembler:
try_lock:ll $t3, 0($s3) # ll auf lock Variable lockbne $t3, $zero, try_lock # Wiederhole bis lock == 0addi $t2, $zero, 1 # $t2 = 1sc $t2, 0($s3) # sc auf Variable lock
# Falls sc nicht erfolgreich -> try_lockbeq $t2, $zero, try_lock
# Jetzt kann der Speicherbereich sicher genutzt werden
30
Technische Informatik IÜbung 1: Instruktionssatz
08.10.2018
Lukas SigristComputer Engineering Group, ETH Zürich 6
Aufgabe 3a: Fortschritt Vergleich (langsamer)
• Pseudocode Fragment:
s2 = memory1if s1 < s2:s1 = s2t1 = memory2
• Assembler:
lw $s2, 4($s3) # Lade den Zähler aus dem Speicherslt $t2, $s1, $s2 # Überprüfe welcher Prozess weiter…beq $t2, $zero, elif # ...fortgeschritten istlw $t1, 8($s3) # Aktualisiere interne Register...addi $s1, $zero, $s2 # ...mit den Werten aus dem Speicherj unlock
31
𝑠1 < 𝑠2
Aufgabe 3a: Fortschritt Vergleich (schneller) • Pseudocode Fragment:
else if s2 < s1 thenmemory1 = s1memory2 = t1
• Assembler:
elseif: # if s2 > s1slt $t2, $s2, $s1beq $t2, $zero, unlocksw $s1, 4($s3) # Überschreibe die Werte im Speichersw $t1, 8($s3)
# Im Falle von s2 == s1 ist der Speicherzugriff nicht nötig
32
𝑠2 < 𝑠1
Aufgabe 3a: Freigabe Exklusiver Zugriff
• Pseudocode Fragment:
signal(lock)
• Assembler:
unlock:sw $zero, 0($s3) # Setze lock = 0j loop # Springe zum Beginn der Schleife
• Vollständige Lösung mit Erläuterungen des Codes wird online gestellt
33
Aufgabe 3: Synchronisation
(b) Lösung ohne Initialisierung des Datenspeichers mit 0?
Wenn der Datenspeicher nicht mit 0 initialisiert kann nicht eindeutig bestimmt werden, ob die lock Variable gesetzt ist oder nicht.
Deshalb ist eine Speicherzugriffkollision nicht auszuschliessen.
34