Rechnerarchitektur

Die Rechnerarchitektur beschreibt die interne Struktur des Rechners und die Organisation der Arbeitsabläufe, die direkt durch einen Maschinenprogrammierer verändert werden können. Die interne Struktur des Rechners besteht in diesem Fall aus Befehlssatz, Befehlsformaten, OP-Codes, Register und Adressierungsarten. Die Implementierung kann abhängig des Hardwareaufbaus und der Organisation der Datenpfade variieren.

Von-Neumann-Architektur

Bei der Von-Neumann-Architektur besteht ein Computersystem aus Rechen- und Steuerwerk (CPU), Speicherwerk (RAM) und einem Ein-/Ausgabe System. Die CPU kann über einen Systembus auf Daten und Programme zugreifen. Der Systembus setzt sich aus Adressbus, Datenbus und Steuerbus zusammen, was bedeutet, dass Befehle und Daten über den gleichen Bus übertragen werden.

Harvard-Architektur

Bei dieser Möglichkeit Rechner aufzubauen, gibt es getrennte Bussysteme für Daten und Programm. Somit ist der gleichzeitige Zugriff auf Daten und Befehle möglich.

Befehlssatzarchitekturen

Bei der Betrachtung eines Prozessors ist die Befehlssatzarchitektur (ISA, instruction set architecture), eines der wichtigsten Merkmale. Die Befehlssatzarchitektur beschreibt, welche Maschinenbefehle der Prozessor ausführen kann.
Um dies gewährleisten zu können, muss die Befehlssatzarchitektur durch eine Mikroarchitektur realisiert werden. Die Mikroarchitektur führt sozusagen die Maschinenbefehle aus und realisiert diese in Transistoren, Gatter usw.

CISC (Complex-Instruction Set Computer)

CISC bietet einen sehr komplexen Befehlssatz und viele Adressierungsarten. Diese Befehlssatzarchitektur kommt dafür aber mit wenigen Registern aus.

RISC (Reduced-Instruction Set Computer)

Die RISC Architektur verfügt über einen reduzierten Befehlssatz, weißt allerdings viele Register auf. Verknüpfungsoperationen verwenden lediglich Register, somit ist eine Befehlscodierung mit fester Länge möglich was zum Vorteil hat, dass Befehle im Steuerwerk schnell decodiert werden.

Werbung

Mikroarchitektur - Pipelining

Prozessoren bestehen aus mehreren Komponenten, die nacheinander verwendet werden können. Um die Komponenten effizienter nutzen zu können, muss man sie geschickt zusammenschalten um eine überlappende Verarbeitung von Befehlen zu ermöglichen. Heutzutage verwenden alle gängigen Mikroprozessoren dieses Prinzip der optimalen Nutzung der Komponenten. Allerdings können so Störungen, sogenannte (Hazards) auftreten. Diese lassen sich in 3 Kategorien einteilen.

  • Struktur-Hazards
    Ressourcenkonflikte: Eine Stufe der Pipeline benötigt Zugriff auf eine Ressource, die bereits von einer anderen Stufe belegt ist.
  • Daten-Hazards
    Datenkonflikte: Befehle, deren Ausführung vom Ergebnis des vorherigen Befehls abhängt. Es wird unterschieden zwischen: Read after Write (RAW), Write after Read (WAR) und Write after Write (WAW).
  • Steuer-Hazards
    Kontrollflusskonflikte: Die Pipeline muss abwarten, ob ein bedingter Sprung ausgeführt wird oder nicht.

 

Beispiel: 5-stufige RISC-Pipeline

  • IF Instruction Fetch
    Befehlsbereitstellung: Befehl wird geladen und Befehlszähler erhöht
  • ID Instruction Decode
    Befehlskodierung: Befehl wird dekodiert
  • Ex Execute
    ALU-Operation: Dekodierter Befehl wird ausgeführt
  • Mem Memory
    Speicherzugriff
  • WB Write Back
    Zurückschreiben: Ergebnis wird in Arbeitsspeicher oder Registersatz geschrieben

Struktur-Hazard

Es tritt ein Ressourcenkonflikt auf: Gleichzeitiger Speicherzugriff von Memory (Mem) und Instruction Fetch (IF).

LOAD R9,Mem
ADD R1, R2, R3
ADD R4, R5, R6
SUB R7, R8, R3
LOADIFIDExMemWB
ADD IFIDExMemWB
ADD  IFIDExMemWB
SUB   IFIDExMemWB

 

1. Abhilfe: Verzögerung um 1 Takt, sodass der Speicherzugriff von IF erst nach dem Speicherzugriff von Mem geschieht.

LOADIFIDExMemWB
ADD IFIDExMemWB
ADD  IFIDExMemWB
SUB   stallIFIDExMemWB

Abhilfe kann zudem durch die Anwendung der Harvard-Architektur geschaffen werden, da diese ein getrenntes Speicherinterface für Daten und Befehle aufweist.

Daten-Hazard

R1 wird für die Berechnung des SUB-Befehls gelesen (Ex), bevor das Ergebnis des ADD-Befehls ins Zielregister geschrieben (WB) wurde. Da der erste Befehl den Operanden noch nicht geschrieben hat, arbeitet der zweite Befehl mit falschen Daten. Es handelt sich um einen Read after Write (RAW) Daten-Hazard.

ADD R1, R2, R3
SUB R4, R1, R5
ADDIFIDExMemWB
SUB IFIDExMemWB

 

1. Abhilfe: Verzögerung um 2 Takte, sodass R1 für die Berechnung des SUB-Befehls erst gelesen wird, nachdem das Ergebnis des ADD-Befehls ins Zielregister geschrieben wurde.

ADDIFIDExMemWB
SUB stallstallIFIDExMemWB

 

2. Abhilfe: Forwarding, damit das Ergebnis der ALU direkt nach (Ex) bekannt ist.

ADDIFIDExMemWB
SUB IFIDExMemWB

Abhilfe kann zudem durch Umordnen der Befehle erreicht werden.

Steuer-Hazard

Das Sprungziel des BNE-Befehls steht erst nach der Ausführung des dekodierten Befehls fest. Also nach der Execute Phase.

BNE Adress
ADD R1, R2, R3
LOAD R8, Mem
BNEIFIDExMemWB
ADD IFIDExMemWB
LOAD  IFIDExMemWB

 

1. Abhilfe: Verzögerung um 2 Takte, damit das Sprungziel feststeht, beovor die restlichen Befehle abgearbeitet werden.

BNEIFIDExMemWB
ADD stallstallIFIDExMemWB
LOAD  stallstallIFIDExMemWB

Abhilfe kann zudem durch Delayed-Branch Prediction und durch Branch Prediction geschaffen werden.

(Delayed-) Branch Prediction

Die Delayed-Branch Prediction Technik gewährleistet die Ausführung des dem Sprungbefehl folgenden Befehls. Der Compiler ist für die korrekte Ausführung der Befehle zuständig. Branch Prediction (Sprungvorhersage) oder auch Verzweigungsvorhersage, ermittelt die Zieladresse eines Sprungs und ob ein bedingter Sprung ausgeführt wird. Hierbei wird unter der statischen Vorhersage zur Übersetzungszeit und der dynamischen Vorhersage zur Laufzeit unterschieden.


Werbung