Wie kann ein Prozessor mehr IPS ausführen als seine Frequenz?

Wie kann ein Prozessor mehr IPS ausführen als seine Frequenz?

Das ist etwas, was ich einfach nicht begreifen kann. Fast jeder moderne Prozessor kann mehr Befehle pro Sekunde ausführen, als seine Frequenz beträgt.

Ich kann verstehen, warum Prozessoren der unteren Klasse weniger IPS ausführen können als ihre Frequenz. Zum Beispiel derATmega328führt etwa 16 MIPS bei 16 MHZ aus (das ist zumindest das, was mir gesagt wurde), und dieZ80führt 0,5 MIPS bei 4 MHz aus. Der Pentium 4 Extreme kann jedoch mehr als 9 GIPS bei nur 3,2 GHz ausführen. Das sind etwa drei Befehle pro Taktzyklus!

Wie wird das gemacht und warum wird das nicht in kleineren Prozessoren implementiert, wieAVRMikrocontroller?

Alle Informationen, mit Ausnahme des ATmega328, habe ich vonHier.

Antwort1

Dies ist auf eine Kombination von Eigenschaften moderner Prozessoren zurückzuführen.

Der erste Faktor, der zu einem hohen IPS beiträgt, ist die Tatsache, dass moderne Prozessoren über mehrere Ausführungseinheiten verfügen, die unabhängig voneinander arbeiten können. Im folgenden Bild (entliehen vonWikipedia: Intel Core Mikroarchitektur) können Sie unten sehen, dass es acht Ausführungseinheiten (gelb dargestellt) gibt, die alle gleichzeitig Befehle ausführen können. Nicht alle dieser Einheiten können die gleichen Befehlstypen ausführen, aber mindestens fünf von ihnen können eine ALU-Operation ausführen, und es gibt drei SSE-fähige Einheiten.

Bildbeschreibung hier eingeben

Kombinieren Sie das mit einem langenAnweisungspipelinedie Befehle effizient stapeln können, damit diese Einheiten sie ausführen können (außer Betrieb, falls erforderlich) bedeutet, dass ein moderner Prozessor zu jedem beliebigen Zeitpunkt eine große Anzahl von Anweisungen im laufenden Betrieb ausführen kann.

Die Ausführung jedes Befehls kann einige Taktzyklen dauern. Wenn Sie die Ausführung jedoch effektiv parallelisieren können, können Sie die IPS-Leistung auf Kosten der Prozessorkomplexität und der Wärmeabgabe deutlich steigern.

Damit diese großen Pipelines mit Anweisungen gefüllt bleiben, ist auch ein großer Cache erforderlich, der vorab mit Anweisungen und Daten gefüllt werden kann. Dies trägt zur Größe des Chips und auch zur Wärmemenge bei, die der Prozessor erzeugt.

Der Grund, warum dies bei kleineren Prozessoren nicht gemacht wird, ist, dass dadurch die Menge an Steuerlogik, die um die Verarbeitungskerne herum erforderlich ist, sowie der Platzbedarf und die erzeugte Wärme erheblich zunimmt. Wenn Sie einen kleinen, stromsparenden und hochreaktiven Prozessor möchten, benötigen Sie eine kurze Pipeline ohne zu viel „zusätzliches“ Zeug um die eigentlichen Funktionskerne herum. Daher wird der Cache normalerweise minimiert, auf nur eine Einheit jedes Typs beschränkt, die zur Verarbeitung von Anweisungen erforderlich ist, und die Komplexität jedes Teils reduziert.

SiekönnteEinen kleinen Prozessor könnte man genauso komplex machen wie einen größeren Prozessor und dabei eine ähnliche Leistung erzielen, doch dann würden Stromverbrauch und Kühlbedarf exponentiell steigen.

Antwort2

Das ist nicht schwer vorstellbar. Ein Zyklus genügt, um viele tausend Transistoren zu schalten. Solange die Befehle parallel angeordnet sind, kann ein Zyklus ausreichen, um sie alle auszuführen.

Besser als zu versuchen, es selbst zu erklären,hier ist ein guter Ausgangspunkt.

Antwort3

Um etwas grundlegender zu werden als Mokubais Antwort:

Superskalare CPUs analysieren den Befehlsstrom auf Daten- (und andere) Abhängigkeiten zwischen Befehlen. Befehle, die nicht voneinander abhängig sind, können parallel ausgeführt werden.

Typische x86-Desktop-CPUs rufen 16 oder 32 B an Anweisungen pro Taktzyklus ab. Intel-Designs seit Core2 können bis zu 4 Anweisungen pro Zyklus ausgeben. (Oder 5, wenn es eine Vergleichs- und Verzweigungsfunktion gibt, die eine Makrofusion durchführen kann).

In der netten Antwort von Mobukai finden Sie Links und Details dazu, wie CPUs in der Praxis vorgehen, um aus dem von ihnen ausgeführten Code möglichst viel Parallelität auf Befehlsebene zu extrahieren.

Siehe auchhttp://www.realworldtech.com/sandy-bridge/und ähnliche Artikel für andere CPU-Architekturen für eine ausführliche Erklärung dessen, was sich unter der Haube abspielt.

Antwort4

Frühere Antworten zeigen, wie man durch die Definition von „Anweisung“ des Prozessors mehr Anweisungen ausführen kann, und man kann sich vorstellen, dass dies tatsächlich die Absicht des Fragestellers ist.

Eine andere Ursache hierfür kann jedoch sein, dass jede „Anweisung“ tatsächlich eine bestimmte Datenmenge ist, die vom Prozessor als Anweisungseingabe behandelt wird. Wenn die Zählung seiner Quelle nur das zählt, was der Prozessor als Anweisungen betrachtet, trägt das Folgende nichts bei. Wenn seine Quelle jedoch alles zählt, was ein Mensch als „Anweisung“ bezeichnen würde, dann: Fügen Sie hinzu, dass nicht jede Anweisung physisch so lang ist wie jede andere Anweisung (eine kann 12 Bytes lang sein, eine andere 56 Bytes usw.). Wenn also in jedem Zyklus 64 Bytes Material als „Anweisung“ geladen werden (oder so viele vollständige Anweisungen wie möglich, bevor 64 Bytes erreicht werden) und eine dieser 64 Bytes sechs Anweisungen enthält, werden in diesem Zyklus sechs Anweisungen (wie Sie und ich sie betrachten würden) abgeschlossen.

Da viele sehr einfache Befehle (unsere „sinnvolle“ Definition) Überbleibsel aus der Anfangszeit mit 8-Byte-Befehlslängen sind und sehr einfache Befehle per Definition möglicherweise unverhältnismäßig oft verwendet werden, würde allein dies schon viel dazu beitragen, dass mehr „Befehle“ ausgeführt werden, als die Häufigkeit zulässt.

verwandte Informationen