Technische Informatik I – Übung 1: Instruktionssatz...Technische Informatik I Übung 1:...

6
Technische Informatik I Übung 1: Instruktionssatz 08.10.2018 Lukas Sigrist Computer 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

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