Ich bin kein Neuling in der Computerarchitektur, aber ich habe nur akademische Erfahrung mit der Implementierung von Mikroarchitekturen.
Ich habe das viele Male gehört und gelesen, aber nie wirklich die Mühe gemacht, die Aussage zu verstehen: Einige Anweisungen werden in 1 oder 2 Taktzyklen abgeschlossen, während komplexere Anweisungen sagen, dass Ganzzahlen oder Gleitkomma in 2, 4, 6 Taktzyklen usw. abgeschlossen sind oder geladen / gespeichert werden 80-100 Taktzyklen wegen langsamem Speicher.
Jetzt bin ich sicher, dass die meisten Prozessoren, sei es eingebettet oder Desktop, nur wenige Stufen von Pipelines haben, sagen wir von 5 Stufen bis zu 30 Stufen. Daher sollte die Latenz für jeden Befehl gleich der Pipeline-Tiefe oder der Anzahl der Pipeline-Stufen sein. Außerdem kann der Durchsatz eines Skalarprozessors mit einer einzigen Pipeline maximal 1 IPC (Anweisungen pro Zyklus) betragen. Aber wie können einige Befehle in 1, 2 oder 4 Taktzyklen für einen Prozessor mit 10-stufiger oder 12-stufiger Pipeline beendet werden? Kann mir das jemand erklären?
PS: Das einzige, was ich verstehen kann, ist, dass einige Phasen möglicherweise als Multi-Cycle-Phase markiert sind, wie dies normalerweise während STA und Timing Closure der Fall ist. Und dass sie versuchen zu sagen, dass die Ausführung von Anweisungen in dieser bestimmten Multi-Zyklus-Phase 1 cc, 2 cc, 4 cc usw. dauert?
Im Allgemeinen wird die Befehlsausführungszeit nicht vom Eintritt in die Pipeline bis zum Verlassen gemessen, sondern von dem Zeitpunkt, zu dem er einen beliebigen Punkt in der Pipeline passiert, bis zu dem Zeitpunkt, zu dem der nächste Befehl diesen Punkt passiert. Wenn kein Befehl mehr als z. B. 20 Zyklen benötigt, um seinen Weg durch die Pipeline zu finden, ergibt das Messen der Zeit, die eine Befehlssequenz zum Durchlaufen eines beliebigen Zustands benötigt, ein Ergebnis, das innerhalb von 20 Zyklen der tatsächlichen Zeit liegt, die zum Ausführen der gesamten Sequenz erforderlich ist Anfang bis Ende. Da Programmierer im Allgemeinen viel weniger an der Zeit zum Ausführen einer einzelnen Anweisung interessiert sind als an der Zeit, die zum Ausführen von Sequenzen mit vielen Anweisungen (oft Tausend, wenn nicht mehr) erforderlich ist,
Die Länge der Pipeline ist nur die Verzögerung zwischen Eingang und Ausgang.
Zyklen für die Fertigstellung ist die Zeit, die pro Vorgang benötigt wird.
Das ist nicht dasselbe, das eine ist "Verzögerung", das andere ist "Geschwindigkeit". Es ist also durchaus möglich, eine Pipeline und mehrere Zyklen pro Befehl in jedem Verhältnis zu haben.
Angenommen, Sie haben eine 5-stufige Pipeline und benötigen 3 Zyklen pro Anweisung. Dies bedeutet, dass die Einheit in den nächsten zwei Zyklen nach dem Anlegen einer Eingabe nicht bereit ist, neue Eingaben zu akzeptieren. Hinzu kommt eine Verzögerung von 5 Zyklen durch die Pipeline. Daher dauert es 8 Zyklen vom Anlegen der Eingabe, bis das Ergebnis verfügbar ist. Aber hinsichtlich des Durchsatzes werden nur 3 Zyklen pro Operation benötigt. Dh obwohl das erste Ergebnis nicht vollständig ist, kann im 3. Zyklus eine neue Eingabe akzeptiert werden und die Berechnung wird gestartet (und das Ergebnis wird 8 Zyklen später erhalten).
Mit einer Pipeline erledigen Sie Dinge parallel (auf Kosten der Verzögerung), die Sie sonst seriell erledigen müssten (mehr Zyklen pro Operation).
Eine Anweisung zu haben, die alle Pipeline-Stufen (Fetch -> Decode -> ...) in ein oder zwei Taktzyklen durchlaufen kann, scheint mir unmöglich. Die "Ausführungszeit", wie Sie sie zitiert haben, ist wahrscheinlich eine Art Slang.
Die beste Vermutung, die ich machen kann, ohne den gesamten Kontext der Aussage sehen zu können, die Sie verwirrt, ist, dass diese Zahlen das "Hängen" der Pipeline darstellen, wenn eine Anweisung ausgeführt wird. Anders ausgedrückt stellt diese Zahl den theoretischen Durchsatz der Pipeline dar, wenn nur die Befehle dieser Art ausgeführt würden.
Zum Beispiel:
In modernen Multi-Pipeline-CPUs hat die rohe "Befehlsausführungszeit" allein keinen großen Nutzen. Der Einsatz von Multi-Level-Caching, Out-of-Order-Ausführung, Predictive Branching und vielem mehr verkompliziert die Analyse und mildert die Strafe für das Blockieren einer einzelnen Pipeline. Manchmal kann diese Strafe auf Null reduziert werden.
Ja, die Quelle dieses Blockierens der Pipeline ist die Tatsache, dass einige Befehle "Mehrfachzyklus"-Stufen haben können. Die Verwendung von „Mehrfachzyklus“ in diesem Zusammenhang ist jedoch nicht immer gleichbedeutend mit der Verwendung von „Mehrfachzyklus“ im Zusammenhang mit STA-Werkzeugen. Die Pipeline-Multi-Cycle-Stufe kann eine kombinatorische Stufe sein, die wenige Taktzyklen benötigt (in diesem Fall sollte sie für STA-Tools auch als Multi-Cycle definiert werden), oder sie kann eine sequentielle Stufe sein, die mehr als einen einzelnen Taktzyklus benötigt abgeschlossen (in diesem Fall muss es immer noch das Timing als einzelne Zyklusstufe erfüllen).
Wouter van Ooijen
Das Photon
nurabha