Ist bei dem Vom-Neumann-Zyklus auch out-of-order-execution möglich? Eigentlich ja, oder? LG
:
Bearbeitet durch User
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?
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.
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.
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.
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.
:
Bearbeitet durch User
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
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.
:
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.