4.0 🚧 Befehlsverarbeitung

YouTube, Pipeline anschaulich: Steve jobs talking about the Megahertz Myth 🔗

4.1 Load-Store Architektur

[Wikipedia: Load/Store-Architektur]

Fragen

  1. Wann spricht man von einer Load-Store-Architektur?
  2. Warum sind viele RISC-Architekturen danach konstruiert?
  3. Welche Vor- und Nachteile hat diese Architektur?
Lösungen
  1. Load/Store-Architektur: Wenn Daten-Speicherzugriffe immer über Register geschehen.
  2. Um die Befehle kompakter zu gestalten, es ist maximal ein Register und eine Speicheradresse beteiligt. Statt wie bei CISC viele Speicheradressen.
  3. Vorteil: Einheitlich kompakte, gleichlange Befehle, besser für Pipelining.
    Nachteil: Für den selben Effekt müssen manchmal mehr Befehle ausgeführt werden.

4.2 Steuerung / Leitwerk

[Wikipedia: Steuerwerk]

Fragen

  1. Welche Aufgabe hat das Leitwerk?
  2. Wofür steht die Abkürzung IR?
Lösungen
  1. Das Leitwerk dekodiert den Befehl und schaltet für die Verarbeitung die notwendigen Verbindungen zwischen den Organen der CPU, z.B. Register zu ALU.
  2. IR steht für Instruction Register, ist das Register in der ein Befehl zur Decodierung geladen wird.

4.3 Befehlspipeline

[Wikipedia: Pipeline (Prozessor)] [YouTube: Steve jobs talking about the Megahertz Myth]

Aufgabe 1

HolenDekodierenAusführen
1. Takt
2. Takt
3. Takt
4. Takt
Pipeline

Füllen Sie die Tabelle aus. Im Codespeicher steht:

mov R0,#10
mov R1,#20
add R2,R1,R0
mov R3,R2

Aufgabe 2

Berechnen Sie die Ausführungszeit des Programms bei einer Taktfrequenz f=32MHz. Alle Instruktionen werden in einem Takt ausgeführt.
Hinweis: Wenn verzweigt wird werden ? zusätzliche Takte benötigt um die Pipeline neu zu füllen. Ich gehe hier von 3 Takten aus, habe allerdings schon Erklärvideo mit weniger Takten bei bedingtem Sprung gesehen… ToDo: Video wieder finden mit Beispiel!
Warum sollten Verzweigungen in schnellen Programmen möglichst vermieden werden? Blöde Frage wie soll das gehen?
Welche Aufgabe hat der Programcounter?

Vorbedingungen: R0=100, R1=1
w1:
  subs R0,R1  //R0:=R0-R1, Nullanzeiger wird aktualisiert
  bne w1      //wenn 0 verzweige zu Sprungmarke w1

4.4 RISC_CISC

[Wikipedia: Reduced Instruction Set Computer]

Hinweis: Anzahl der Takte für ARM RISC stimmen für mich nicht, bzw. sind für mich noch nicht ganz nachvollziehbar.

ldr  R1,=Adresse (>=2 Takte) Wird in zwei Befehle vom Assembler umgewandelt!?
ldr  R2,[R1,0]   (2 Takte)
add  R0,R0,R2    (1 Takt)

ldr  R1,=Adresse (>=2 Takte) Wird in zwei Befehle vom Assembler umgewandelt!?
ldr  R2,[R1,0]   (2 Takte)
subs R2,#1       (1 Takt)
str  R2,[R1,0]   (2 Takte)
bne  Sprungmarke (>=1 Takte) Wie viele Takte bei Sprung und bei nicht Sprung? Gibt es Branch Pre Decision Table?

Fragen

  1. Unser STM32 (AVR: ATmega328P) hat einen RISC Befehlssatz.
    1. Wo für steht die Abkürzung RISC?
    2. Nennen Sie die Alternative und die Abkürzung dazu.
    3. Welche Vor- und Nachteile hat RISC gegenüber der Alternative?
    4. Warum wurde RISC eingeführt?
Lösungen
  1. RISC -> Reduced Instruction Set Computer
  2. Alternative CISC -> Complex Instruction Set Computer
  3. Vorteil RISC: Befehle einfacher und möglichst gleich lang (Bytes pro Befehl), dadurch besser für Pipelining geeignet -> weniger Stufen notwendig.
    Nachteil RISC: Teilweise mehr Befehle für Aktion notwendig, mehr Code-Speicher für selben Effekt notwendig.
  4. RISC wurde in Hinblick auf effizienteres Pipelining eingeführt. Weniger “Strafe” bei Sprüngen: Kurze Befehle -> kurze Pipeline -> weniger Wegwerfen bei Sprung.