Von-Neumann-Zyklus

Gast
Der von-Neuman-Zyklus bezieht sich wohl expliziet auf Single Core CPUs, 
ich würde aber sagen es ist eine Definitionsfrage, wenn Du nur einen 
einzigen Kern betrachtest muss dieser wohl strickt den von-Neuman-Zyklus 
durchlaufen, die zeitgleiche oder asyncrone Verarbeitung von 
Programmanweisungen ist erst mit Multicore CPUs möglich, wobei jede 
einzelne für sich betrachtet doch wieder den von_Neuman_Zyklus 
abarbeitet.
Gast
A. K. schrieb:
> Out-of-order execution und Multicore-CPUs sind zwei Konzepte, die nichts
> miteinander zu tun haben.

Könntest Du das einmal präzesieren? Ohne eine zweite 
Verarbeitungseinheit ist eine nichtlineare Befehlsabarbeitung wohl kaum 
zu realisieren?
HVV schrieb:
> A. K. schrieb:
>> Out-of-order execution und Multicore-CPUs sind zwei Konzepte, die nichts
>> miteinander zu tun haben.
>
> Könntest Du das einmal präzesieren? Ohne eine zweite
> Verarbeitungseinheit ist eine nichtlineare Befehlsabarbeitung wohl kaum
> zu realisieren?

Eine Multicore-CPU enthält mehrere vollständig voneinander unabhängig 
arbeitende Cores. Jeder einzelne dieser out-of-order Cores führt aus 
Sicht des Programmierers ein Programm so aus, wie es im von-Neumann 
Zyklus beschrieben ist. Wenn man jedoch dichter dran geht ändert sich 
das.

Das out-of-order Konzept bezieht sich auf die Art, wie die Befehle in 
einem solchen Core abgearbeitet werden. Eine mögliche Pipeline ist am 
besten in 2 Ebenen beschrieben. Der Einfachheit halber betrachte ich 
hier einfache RISC ALU-Befehle wie ADD, bei denen ein Befehl nur eine 
Operation darstellt, also nicht in mehrere Operationen zerlegt wird.

Gesamtansicht des Ablaufs eines solchen Befehls.
  in-order frontend
  out-of-order execution
  in-order backend

in-order frontend:
  branch prediction
  fetch
  decode
  register renaming
  add to reorder buffer | add to reservation station

out-of-order execution, each execution unit:
  read from reservation station
  read operands from registers | steer result bus feedback
  execute
  store result in temp register
  notify reorder buffer

in-order backend:
  wait until oldest reorder buffer entry done
  assign temp register to architecture state

Sowohl das in-order-frontend als auch das in-order backend betrachten 
Befehl strikt sequentiell in ihrere nominellen Reihenfolge. Allerdings 
typischerweise 2-4 davon gleichzeitig.

In der out-of-order execution werden Befehle (eigentlich Operationen) 
dann ausgeführt, wenn ihre Operanden bereit stehen, unabhängig von der 
Reihenfolge im Programm. Die Abhängigkeiten der Befehle voneinander 
werden durch register renaming aufgelöst.

Das ist natürlich nur schematisch dargestellt und beschreibt keine 
exakte Pipeline. Auch unterscheidet sich, ob und wann Register 
tatäschlich gelesen/geschrieben werden, oder ob wie im hiesigen Beispiel 
bloss Registernummern verschoben werden.
HVV schrieb:
> Ohne eine zweite
> Verarbeitungseinheit ist eine nichtlineare Befehlsabarbeitung wohl kaum
> zu realisieren?

Eine Quadcore-CPU enthält 4 Cores. Jeder dieser Cores wiederum enthält 
so um die 5-10 Ausführungseinheiten (execution units, reservation 
station ports), die parallel voneinander arbeiten.

Mögliche Ursache des Missverständnisses: Dein Begriff 
"Verarbeitungseinheit" kann gleichermassen für einen Core einer 
Multicore-CPU stehen, oder für eine execution unit innerhalb eines 
solchen Cores. Das ist auch ein Grund, weshalb ich oben nicht erst 
versucht habe, die branchenüblich englischen Begriffe einzudeutschen.

NB: Das ist so immer noch vereinfacht. Bei aktuellen AMD Cores ist das 
ein wenig komplizierter, da die Cores sogenannte Module implementieren, 
die wieder aus 2 Integer-Teilen und einem Floating-Point-Teil bestehen. 
Bei Intel wiederum kommt noch Hyperthreading hinzu.
Gast
Aha, die Hardware ist ja dann schon keine von-Neuman Architektur mehr, 
auch wenn sie nach Aussen hin so 'auftritt'. Dann würde ich sagen ist 
das der von_Neumann_Zyklus definitiv keine Qut_Of_Order_Execution 
ermöglicht.
HVV schrieb:
> Aha, die Hardware ist ja dann schon keine von-Neuman Architektur mehr,

Obacht, das ist jetzt wieder ein völlig anderer Begriff. Die v-N 
Architektur beschreibt nicht den Ablauf eines Befehls, sondern je nach 
Lesart einen einzigen einheitlichen Adressraum (so betrachte ich das) 
oder einen einzigen einheitlichen Speicherbus (oft in der Literatur zu 
finden, ist aber sehr problematisch).

> das der von_Neumann_Zyklus definitiv keine Qut_Of_Order_Execution
> ermöglicht.

Der v-N Zyklus ist ja auch nur eine einfache Zerlegung in mögliche 
Schritte, ein theoretisches Modell. Reale Cores sind oft wesentlich 
komplexer, selbst wenn sie nicht out-of-order arbeiten. Bei Cores wie 
AVR oder Cortex-M0/M3 ist man noch dicht am v-N Zyklus dran, aber schon 
beim Cortex-M7 wird es etwas komplizierter.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.