Frage

Nun sieht auch einfach eine Frage gestellt werden, aber ich fragte, nachdem sie durch einige ppts auf beide gehen.

Beide Verfahren erhöhen Befehlsdurchsatz. Und Superscaling macht fast immer auch den Einsatz von Pipelining. Superscaling hat mehr als eine Ausführungseinheit und so auch Pipelining oder bin ich hier falsch?

War es hilfreich?

Lösung

superskalare Design beinhaltet den Prozessor mehr Befehle in einem einzigen Takt, mit redundanten Einrichtungen zur Ausgabe in der Lage, einen Befehl auszuführen. Wir sprechen hier über in einem einzigen Kern, Geist Sie -. Multicore-Verarbeitung unterscheidet

Pipelining teilt eine Anweisung in Schritte, und da jeder Schritt in einem anderen Teil des Prozessors ausgeführt wird, können mehr Befehle in verschiedenen „Phasen“ jeder Takt werden.

Sie sind fast immer zusammen verwendet werden. Dieses Bild von Wikipedia zeigt beiden Konzepte im Einsatz, da diese Konzepte am besten erklärten grafisch:

superskalare / Pipelining in Gebrauch

Hier werden zwei Befehle gleichzeitig in einer fünfstufigen Pipeline ausgeführt werden.


Um es zu brechen weiter, da Ihre letzte Bearbeitung:

In dem obigen Beispiel eine Anweisung über 5 Stufen geht zu sein „durchgeführt“. Dies sind IF (Befehlsabruf), ID (Befehlsdecodierung), EX (Ausführen), MEM (Update-Speicher), WB (Zurückschreiben in Cache).

In einem sehr einfachen Prozessor-Design, jeder Takt eine andere Stufe abgeschlossen sein würde, so würden wir haben:

  1. IF
  2. ID
  3. EX
  4. MEM
  5. WB

Welche einen Befehl in fünf Takten tun würde. Wenn wir dann eine redundante Ausführungseinheit hinzufügen und superskalaren Design einführen, würden wir diese haben, für zwei Befehle A und B:

  1. IF (A) IF (B)
  2. ID (A) ID (B)
  3. EX (A) EX (B)
  4. MEM (A) MEM (B)
  5. WB (A) WB (B)

Zwei Befehle in fünf Takten -. Eine theoretische maximale Verstärkung von 100%

Pipelining erlaubt die Teile gleichzeitig ausgeführt werden, so würden wir mit so etwas wie (für zehn Befehle A bis J) Ende:

  1. IF (A) IF (B)
  2. ID (A) ID (B) IF (C) IF (D)
  3. EX (A) EX (B) ID (C), ID (D) IF (E) IF (F)
  4. MEM (A) MEM (B) EX (C) EX (D) ID (E) ID (F) IF (G) IF (H)
  5. WB (A) WB (B) MEM (C) MEM (D) EX (E) EX (F) ID (G) ID (H), wenn (i) IF (j)
  6. WB (C) WB (D) MEM (E) MEM (F) EX (G) EX (H) ID (I) ID (J)
  7. WB (E) WB (F) MEM (G) MEM (H) EX (I) EX (j)
  8. WB (G) WB (H) MEM (I) MEM (J)
  9. WB (I) WB (J)

In neun Uhren haben wir zehn Befehle ausgeführt - Sie sehen können, wo Pipelining wirklich bewegt Dinge zusammen. Und das ist eine Erklärung der Beispielgrafik, nicht, wie es tatsächlich in dem Gebiet durchgeführt (das ist black magic ).

Die Wikipedia-Artikel für superskalare und Instruction-Pipeline ziemlich gut sind.

Andere Tipps

Eine lange Zeit Vor CPUs ausgeführt nur ein Maschinenbefehl in einer Zeit . Erst wenn wurde es komplett fertig war die CPU den nächsten Befehl aus dem Speicher holen (oder später die Befehls-Cache).

Schließlich bemerkte jemand, dass dies dazu geführt, dass die meisten von einer CPU nichts tat, die meiste Zeit, da es mehrere Ausführungsuntereinheiten (wie der Befehlsdecoder, der Integer-Recheneinheit und FP-Recheneinheit, etc.) waren und die Ausführung eine Anweisung gehalten nur einen von ihnen zu einer Zeit beschäftigt.

So „ einfach Pipelining geboren wurde: einmal eine Anweisung durchgeführt wurde Decodierung und ging in Richtung der nächsten Ausführung Untereinheit, warum nicht schon holen und dekodieren die nächste Anweisung ? Wenn Sie hatte 10 solcher „ Stufen “, dann mit jeder Stufe Prozess eine andere Anweisung, die man theoretisch den Befehlsdurchsatz verzehnfacht überhaupt ohne eine Erhöhung der CPU-Takt erhöhen könnte! Natürlich funktioniert dies nur einwandfrei, wenn es keine bedingten Sprünge im Code sind (dies eine Menge von zusätzlichem Aufwand führte bedingte Sprünge speziell zu handhaben).

Später mit Moores Gesetz für länger als erwartet auf ihre Richtigkeit über weiterhin, CPU-Hersteller fanden sich mit immer mehr Transistoren Verwendung und dachte: „Warum haben nur eine von jeder Ausführung Untereinheit?“ Zu machen. So superskalaren CPUs mit mehreren Ausführungsuntereinheiten der Lage, die gleiche , was parallel zu tun geboren wurden, und CPU-Design wurde viel, viel komplexen verteilen Anweisungen über diese vollständig parallelen Einheiten, während die Ergebnisse gewährleisten die gleichen waren wie die Befehle nacheinander ausgeführt worden waren.

Eine Analogie: Waschen Kleidung

Stellen Sie sich ein Trockenreinigungs Speicher mit folgenden Einrichtungen: a. Gestell zum Aufhängen von verschmutzten oder sauberen Kleidung, eine Waschmaschine und einen Trockner (von denen jedes ein Kleidungsstück zu einer Zeit waschen kann), ein Klapptisch, und ein Bügelbrett

Der Begleiter, der alle der eigentlichen Waschen und Trocknen tut, ist ziemlich dämlich so der Ladenbesitzer, der die Reinigungsaufträge nimmt, kümmert sich besonders um jede Anweisung zu schreiben, sehr sorgfältig und explizit.

An einem typischen Tag dieser Anweisungen möglicherweise etwas entlang der Linien von:

  1. nehmen Sie das Hemd aus dem Rack
  2. wäscht das Hemd
  3. trocknet das Hemd
  4. Eisen das Hemd
  5. faltet das Hemd
  6. legt das Hemd wieder auf dem Rack
  7. nehmen die Hose aus dem Rack
  8. wäscht die Hose
  9. trocknet die Hose
  10. falten Sie die Hose
  11. legt die Hose wieder auf dem Rack
  12. nimmt den Mantel aus dem Rack
  13. waschen Sie den Mantel
  14. trocknen den Mantel
  15. Eisen das Fell
  16. legt den Mantel wieder auf dem Rack

Der Begleiter folgt an den Abschlag diese Anweisungen sehr aufpassen, nicht immer aus, um etwas zu tun. Wie Sie sich vorstellen können, dauert es eine lange Zeit des Tages Wäsche gemacht zu bekommen, weil es eine lange Zeit braucht, um vollständig zu waschen, trocken und jedes Wäschestück falten, und es muss alles, was man zu einem Zeitpunkt durchgeführt werden.

Doch ein Tag der Begleiter beendet und ein neuer, intelligenter Begleiter wird eingestellt, die bemerkt, dass die meisten Geräte im Leerlauf ist die Verlegung zu einem bestimmten Zeitpunkt während des Tages. Während die Hosen waren weder das Bügelbrett Trocknen noch die Scheibe im Einsatz. So entschied er sich eine bessere Nutzung seiner Zeit zu machen. So kann anstelle der oben genannten Reihe von Schritten, würde er dies tun:

  1. nehmen Sie das Hemd aus dem Rack
  2. Waschen Sie das T-Shirt, nehmen die Hose aus dem Rack
  3. Trocknen Sie das Hemd, waschen die Hose
  4. Eisen das Hemd, trocknen die Hose
  5. falten Sie das T-Shirt, (nehmen Sie den Mantel aus dem Rack)
  6. legte das Hemd wieder auf dem Rack, falten Sie die Hose (Waschen der Mantel)
  7. legt die Hose wieder auf dem Rack (trocknet den Mantel)
  8. (Eisen des Mantels)
  9. (legt den Mantel wieder auf dem Rack)

Dies ist Pipelining. Sequenzierung nicht zusammenhängende Tätigkeiten, so dass sie verschiedene Komponenten zur gleichen Zeit nutzen. Indem maximieren Sie so viel von den verschiedenen Komponenten aktiv auf einmal Effizienz und beschleunigen die Ausführungszeit, in diesem Fall reduziert 16 „Zyklen“ bis 9, eine Beschleunigung von mehr als 40%.

Nun, die wenig trocken Putzerei begonnen, mehr Geld zu verdienen, weil sie so viel schneller arbeiten konnten, so kaufte der Besitzer eine zusätzliche Waschmaschine, Trockner, Bügelbrett, Faltstation, und stellte sogar einen anderen Begleiter. Jetzt sind die Dinge noch schneller, anstelle der oben haben Sie:

  1. nehmen Sie das Hemd aus dem Rack, nimmt die Hose aus dem Rack
  2. Waschen Sie das T-Shirt, wäscht die Hose (nehmen Sie den Mantel aus dem Rack)
  3. Trocknen Sie das Hemd, trocknen die Hose (waschen Sie den Mantel)
  4. Eisen das Hemd, falten Sie die Hose (trockne den Mantel)
  5. falten Sie das T-Shirt, die Hose auf dem Gestell setzen (Eisen den Mantel)
  6. legt das Hemd wieder auf dem Rack, (das Fell auf dem Gestell setzen)

Dies ist superskalaren Design. mit mehreren Teilkomponenten, die die gleiche Aufgabe gleichzeitig zu tun, sondern mit dem Prozessor zu entscheiden, wie es zu tun. In diesem Fall ist es in einem fast 50% Geschwindigkeitsschub führte (in 18 „Zyklen“, die neue Architektur könnte durch drei Iterationen dieses „Programms“ laufen, während die bisherige Architektur nur durch 2 laufen kann).

ältere Prozessoren, wie die 386 oder 486, sind einfache skalare Prozessoren, sie auszuführen, einen Befehl zu einem Zeitpunkt, in genau die Reihenfolge, in der sie empfangen wurde. Moderne Verbraucher Prozessoren since der PowerPC / Pentium sind Pipeline- und superskalaren. Eine Core2 CPU ist in der Lage, den gleichen Code laufen, die für ein 486 kompiliert wurde, während immer noch die Vorteile der Parallelität auf Befehlsebene zu nehmen, weil sie ihre eigene innere Logik enthält, den Maschinencode analysiert und bestimmt, wie es neu zu ordnen und läuft (was parallel ausgeführt werden kann Dies, was nicht, etc.) ist die Essenz des superskalaren Designs und warum es so praktisch.

Im Gegensatz ein Vektorparallelprozessor führt Operationen auf mehrere Datenstücke auf einmal (ein Vektor). Somit, anstatt nur das Hinzufügen x und y Vektorprozessor fügt hinzu, sagen sie, x0, x1, x2 bis y0, y1, y2 (resultierend in z0, z1, z2). Das Problem bei dieser Konstruktion ist, dass es eng an den spezifischen Grad an Parallelität des Prozessors gekoppelt ist. Wenn Sie Skalar-Code auf einem Vektorprozessor ausgeführt werden (vorausgesetzt, Sie könnten) Sie keinen Vorteil des Vektors Parallelisierung sehen würde, weil es explizit verwendet werden muss, ähnlich, wenn Sie die Vorteile einer neueren Vektorprozessor mit mehreren parallelen Verarbeitungseinheiten nehmen wollte (zB Lage von Vektoren von 12 Zahlen statt nur 3) Hinzufügen Sie benötigen würden Sie den Code neu kompilieren. Vektor-Prozessor-Designs waren beliebt in der ältesten Generation von Supercomputern, weil sie einfach zu entwerfen und es gibt große Klassen von Problemen in Wissenschaft und Technik mit vielen natürlichen Parallelität.

Der superskalare Prozessoren können auch die Fähigkeit haben, die spekulative Ausführung durchzuführen. Anstatt Leerverarbeitungseinheiten verlassen und warten auf ein Codepfad vor Verzweigung einen Prozessor ausgeführt beenden können eine beste Vermutung machen und beginnen Code über die Zweigausführungs vor, bevor Code Verarbeitung beendet hat. Wenn die Ausführung des Stand des Code fängt kann der Prozessor mit dem Verzweigungspunkt bis dann den eigentlichen Zweig mit dem Zweig guess vergleichen und entweder weiter auf, wenn die Vermutung richtig ist (schon weit voraus, wo es durch die nur darauf warten gewesen wäre) oder es kann die Ergebnisse der spekulativen Ausführung ungültig machen und den Code für die korrekte Verzweigung ausgeführt werden.

Pipelining ist, was eine Autofirma hat in der Herstellung ihrer Autos. Sie brechen den Prozess ein Auto in Stadien und führen die verschiedenen Stufen an verschiedenen Punkten entlang einer Montagelinie des Setzens von verschiedenen Leuten zusammen gemacht. Das Nettoergebnis ist, dass das Auto genau an der Geschwindigkeit des langsamsten Stufe allein hergestellt wird.

In CPUs der Pipelining-Prozess ist genau das gleiche. Eine „Anweisung“ wird in verschiedenen Stufen der Ausführung aufgeschlüsselt, in der Regel etwas wie 1. Befehlsabruf, 2. Operanden holen (Register oder Speicher-Werte, die gelesen werden), 2. Berechnung durchführen, 3. Schreib Ergebnisse (in den Speicher oder Register) . Die langsamste hierfür könnte der Berechnungsteil sein, wobei in diesem Fall die Gesamtdurchsatzgeschwindigkeit der Anweisungen durch diese Pipeline nur die Geschwindigkeit des Rechenteils ist (als ob die anderen Teile waren „frei“.)

superskalare Mikroprozessoren in bezieht sich auf die Fähigkeit, mehrere Befehle von einem einzigen Ausführungsstrom gleichzeitig parallel auszuführen. Also, wenn ein Autofirma zwei Linien Montag läuft dann offensichtlich konnten sie doppelt so viele Autos produzieren. Aber wenn der Prozess eine Seriennummer auf dem Auto in der letzten Phase der Umsetzung war und von einer einzigen Person durchgeführt wird, dann müßten sie zwischen den beiden Pipelines wechseln und garantieren, dass sie jeweils in der halben Zeit bekommen konnten von die langsamste Stufe selbst die langsamste Stufe zu vermeiden, um zu werden.

Super-Skalar in Mikroprozessoren ist ähnlich, aber in der Regel weit mehr Einschränkungen hat. So holt die Anweisungsstufe erzeugt typischerweise mehr als einen Befehl während seiner Bühne - das ist, was in Mikroprozessoren möglich superskalare macht. Es gäbe dann zwei holen Stufen sein, zwei Ausführungsstufen und zwei Rückschreibstufen. Das ist offensichtlich verallgemeinert, um mehr als nur zwei Pipelines.

Das ist alles schön und gut, aber aus der Sicht der Schall Ausführung können beide Techniken zu Problemen führen, wenn blind gemacht. Für die korrekte Ausführung eines Programms wird davon ausgegangen, dass die Anweisungen vollständig nacheinander in dieser Reihenfolge ausgeführt werden. Wenn zwei aufeinanderfolgende Befehle voneinander abhängig Berechnungen oder die gleichen Register verwenden, dann kann es ein Problem sein, die spätere Instruktion benötigt für die Rückschreib des vorhergehenden Befehls warten, um abzuschließen, bevor es die Operandenabrufstufe durchführen kann. So müssen Sie die zweite Anweisung von zwei Stufen zum Stillstand kommen, bevor er ausgeführt wird, die Niederlagen der Zweck dessen, was durch diese Techniken in erster Linie gewonnen wurde.

Es gibt viele Techniken, um das Problem des Müssens zum Stillstand zu reduzieren, dass ein wenig kompliziert zu beschreiben, aber ich werde auflisten: 1. Register Weiterleitung, (auch die Weiterleitung zu laden speichern) 2. Registerumbenennungs-, 3. Score- Boarding, 4. out-of-Order-Ausführung. 5. Spekulative Ausführung mit Rollback (und Ruhestand) Alle modernen CPUs verwenden ziemlich all diese Techniken superskalare und Pipeline-Verarbeitung zu implementieren. Allerdings neigen diese Techniken abnehmende Erträge in Bezug auf die Anzahl der Pipelines in einem Prozessor zu haben, bevor Stände unvermeidlich worden. In der Praxis machen keine CPU-Hersteller mehr als 4 Pipelines in einem einzigen Kern.

Multi-Core hat nichts mit irgendwelchen Techniken zu tun. Dies rammt im Grunde zwei Mikro-Prozessoren zusammen symmetrisches Multi auf einem einzigen Chip zu implementieren und nur die Komponenten teilen, den Sinn machen, zu teilen (in der Regel L3-Cache und I / O). Doch eine Technik, die Intel „Hyper-Threading“ nennen, ist eine Methode zu versuchen, so gut wie die Semantik von Multi-Core innerhalb des superskalaren Rahmen eines einzelnen Kerns umzusetzen. So dass eine einzelne Mikroarchitektur enthält die Register von zwei (oder mehr) virtuellen Kernen und holt Instruktionen von zwei (oder mehr) verschiedenen Ausführungsströmen, aber von einem gemeinsamen superskalare System ausgeführt wird. Die Idee ist, dass, weil die Register nicht miteinander interferieren können, wird esneigen dazu, mehr Parallelität zu weniger Stände zu führen. Also anstatt einfach die Ausführung zwei virtuellen Kern Ausführungsströme mit der halben Geschwindigkeit, ist es besser, auf Grund der Gesamtreduktion in den Ställen. Dies scheint zu zeigen, dass Intel die Anzahl der Pipelines erhöhen könnte. Allerdings hat diese Technik gefunden worden, etwas werden in praktischen Implementierungen fehlt. Da es ein integraler Bestandteil superskalare Techniken ist aber, habe ich es trotzdem erwähnt werden.

Pipelining ist die gleichzeitige Ausführung verschiedenen Stadien mehrerer Befehle im gleichen Zyklus. Es basiert auf Aufspalten Befehlsverarbeitung in Stufen und mit Spezialeinheiten für jede Stufe und Register zum Speichern von Zwischenergebnissen.

Superscaling entsendet mehrere Befehle (oder Mikrobefehle) an mehrere Ausführungseinheiten in bestehende CPU. Es basiert somit auf redundante Einheiten in CPU.

Natürlich ist diese Ansätze einander ergänzen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top