update
BIN
Writerside/images/image_532.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
Writerside/images/image_533.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
Writerside/images/image_534.png
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
Writerside/images/image_535.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
Writerside/images/image_536.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
Writerside/images/image_537.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
Writerside/images/image_538.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
Writerside/images/image_539.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
Writerside/images/image_540.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
Writerside/images/image_541.png
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
Writerside/images/image_542.png
Normal file
After Width: | Height: | Size: 28 KiB |
@ -69,7 +69,7 @@
|
||||
<toc-element toc-title="Rechnersysteme">
|
||||
<toc-element topic="Rechnersysteme_Intro.md"/>
|
||||
<toc-element topic="Caches.md"/>
|
||||
|
||||
<toc-element topic="Multicore.md"/>
|
||||
</toc-element>
|
||||
</toc-element>
|
||||
</toc-element>
|
||||
|
135
Writerside/topics/RA/Multicore.md
Normal file
@ -0,0 +1,135 @@
|
||||
# Multicore
|
||||
## Erweiterung Steuerwerk
|
||||
- Zur überlappenden Verarbeitung von Befehlen
|
||||
### Phasenpipelining
|
||||
- Mehrere Befehle gleichzeitig im Prozessor in Arbeit
|
||||
- in unterschiedlichen Phasen
|
||||
- verwenden unterschiedliche Komponenten des Prozessors
|
||||
- **Je mehr Stufen, desto mehr Befehle gleichzeitig**
|
||||
- desto eher wird CPI = 1 erreicht
|
||||
- Voraussetzung
|
||||
- Anpassung Befehlssatz an Pipelinebedingungen
|
||||
- RISC, Load-Store, Register-Register
|
||||
- Probleme
|
||||
- Steuerungs-, Daten-, strukturelle Konflikte (=Hazards)
|
||||
- **Je mehr Stufen, desto schlimmer ist Leeren und Neustart der Pipeline nach falscher Sprungvorhersage**
|
||||
|
||||
#### 14-18 Pipelinestufen optimal
|
||||
|
||||
#### Verfahren zur Lösung der Konflikte
|
||||
- Hardware
|
||||
- Caches, Forwarding, Branch Prediction
|
||||
- Befehlssatzerweiterung
|
||||
- Software
|
||||
- Pipeline-gemäße Sortierung der Befehle durch den Compiler
|
||||
|
||||
## Beispiel anhand einer 5-Stufigen Pipeline
|
||||

|
||||
- **Befehlsholphase (IF)**
|
||||
- Lesen des Befehls
|
||||
- separater Speicher von Befehlen und Daten
|
||||
- Vermeidung von Konflikten mit Datenzugriffen
|
||||
- `STR R1, [R2]` bzw `ADD R4, R5, R6`
|
||||
- **Dekodier- / Register-Lese-Phase (ID)**
|
||||
- Lesen der Register
|
||||
- möglich wegen fester Plätze für Registernummern im Befehlswort
|
||||
- `R1, R2` bzw `R5, R6` lesen
|
||||
- **Ausführungs- / Adressberechnungsphase (EX)**
|
||||
- Berechnung arithmetischer Funktionen
|
||||
- `R5 + R6`
|
||||
- bzw. Adresse für Speicherzugriff
|
||||
- `[R2] + 0`
|
||||
- **Speicherzugriffsphase (Mem)**
|
||||
- Wird nur bei Lade- / Speicherbefehlen benötigt
|
||||
- _Abspeichern des Werts R1 an zuvor berechnete Adresse [R2]_
|
||||
- **Abspeicherungsphase (WB)**
|
||||
- Speichern in Register
|
||||
- Bei Speicherbefehlen (ohne Autoinkrement) nicht benötigt
|
||||
- _Speichern des Ergebnisses der Addition in R4_
|
||||
|
||||
|
||||
|
||||
- **Reihenfolge ohne Pipelining (3 Befehle)**
|
||||
- 
|
||||
- **Reihenfolge mit Pipelining (3 Befehle)**
|
||||
- 
|
||||
- 
|
||||
|
||||
## Pipeline-Konflikte
|
||||
### Strukturelle Konflikte (structural hazards)
|
||||
- resultieren aus Ressourcenkonflikten
|
||||
- überlappende Instruktionen, die gleiche Ressource benutzen
|
||||
|
||||
#### Beispiel strukturelle Konflikte
|
||||
- 
|
||||
- 
|
||||
- Alternative Darstellung:
|
||||
- 
|
||||
|
||||
### Datenkonflikte (data hazards)
|
||||
- resultieren aus Instruktionen, die von Ergebnissen einer vorigen Instruktion abhängig sind
|
||||
- _bspw. Read-After-Write_
|
||||
- Instruktion liest aus Register, nachdem eine andere reingeschrieben hat
|
||||
- **Lösung durch Forwarding**
|
||||
- Write-After-Read
|
||||
- Write after Write
|
||||
- 2 Instruktionen haben gleiches Ergebnisregister
|
||||
- WAR / WAW
|
||||
- Konflikte durch Doppelverwendung
|
||||
- können durch mehr Register gelöst werden
|
||||
|
||||
### Steuerungskonflikte (control hazards)
|
||||
- resultieren aus Sprüngen
|
||||
- Befehle, die PC verändern
|
||||
- führt zu entleeren der Pipeline und einem erneuten Befüllen
|
||||
- 
|
||||
|
||||
## Sprungvorhersage
|
||||
- Vorhersagen, ob Sprung ausgeführt wird
|
||||
- Falls nicht ausgeführt wird
|
||||
- Pipelinedurchlauf nicht unterbrechen
|
||||
- PC inkrementieren
|
||||
- nächste Instruktion machen
|
||||
- Falls richtig, kann Pipeline normal weiter laufen
|
||||
|
||||
### Korrektur Sprungvorhersage
|
||||

|
||||
|
||||
### Methoden Sprungvorhersage
|
||||
#### Statisch (vom Computer implementiert)
|
||||
- Default-Annahmen über Sprungverhalten zur Laufzeit
|
||||
- Default not taken
|
||||
- bspw. Verzweigung (Sprung vorwärts)
|
||||
- Default taken
|
||||
- bspw. Schleifen (Sprung rückwärts)
|
||||
- Delayed branches
|
||||
- ersetzen den freien Slot in der Pipeline mit sinnvollen, Sprungunabhängigen Befehlen
|
||||
|
||||
### Dynamisch
|
||||
- in Abhängigkeit vom tatsächlichen Verhalten des Sprungs
|
||||
- **Sprungvorhersagepuffer (Branch History Table - BHT)**
|
||||
- 
|
||||
- Sprungziel muss noch ausgerechnet werden
|
||||
- Kleiner Speicher
|
||||
- wird mit (Teil der) Adresse des Sprungbefehls indiziert
|
||||
- verwendet nur wenige untere Bits der Adresse
|
||||
- Enthält ein Bit
|
||||
- Sprung beim letzten Mal ausgeführt?
|
||||
- **Taken / not Taken**
|
||||
- Vorhersage
|
||||
- Sprung verhält sich wie beim letzten Mal
|
||||
- Nachfolgebefehle
|
||||
- ab vorhergesagter Adresse holen
|
||||
- Falls Vorhersage Falsch
|
||||
- Vorhersagebit invertieren
|
||||
- **Sprungzielvorhersage**
|
||||
- **Branch Target Buffer (BTB)**
|
||||
- 
|
||||
- Erfolgt in IF-Phase
|
||||
- Verhalten ähnlich eines Caches
|
||||
- adressiert mit Sprungbefehlsadresse
|
||||
- BTB liefer vorhergesagte Adresse als Ergebnis
|
||||
- Keine Verzögerung
|
||||
- WENN KORREKT
|
||||
|
||||
|