Forum: PC Hard- und Software Von-Neumann-Zyklus


von Cat C. (catcache)


Lesenswert?

Ist bei dem Vom-Neumann-Zyklus auch out-of-order-execution möglich? 
Eigentlich ja, oder?

LG

: Bearbeitet durch User
von HVV (Gast)


Lesenswert?


von Cat C. (catcache)


Lesenswert?

Den Artikel habe ich gelesen und er beschreibt das so, als wäre out of 
order E. nicht beim Vom-Neumann-Z. möglich. Aber eigentlich müsster out 
of order E. doch auch dort möglich sein?

von HVV (Gast)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

Cat C. schrieb:
> Ist bei dem Vom-Neumann-Zyklus auch out-of-order-execution möglich?

Sie verhalten sich aus Sicht des Programmierers so, als ob es diesen 
noch gäbe. Der tatsächliche interne Ablauf ist jedoch ein wenig 
komplizierter.

von (prx) A. K. (prx)


Lesenswert?

HVV schrieb:
> Der von-Neuman-Zyklus bezieht sich wohl expliziet auf Single Core CPUs,

Out-of-order execution und Multicore-CPUs sind zwei Konzepte, die nichts 
miteinander zu tun haben.

von HVV (Gast)


Lesenswert?

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?

von (prx) A. K. (prx)


Lesenswert?

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.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

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.

: Bearbeitet durch User
von HVV (Gast)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.