Dies war etwas, das ich nicht mit meinem Kopf umwickeln kann. Nahezu jeder moderne Prozessor ist in der Lage, mehr Befehle pro Sekunde als seine Frequenz auszuführen.
Ich kann verstehen, warum Prozessoren der unteren Klasse weniger IPS als ihre Frequenz ausführen können. Zum Beispiel führt der ATmega328 ungefähr 16 MIPS bei 16 MHz aus (oder zumindest wurde mir das mitgeteilt), und der Z80 führt 0,5 MIPS bei 4 MHz aus. Aber dann kann der Pentium 4 Extreme mehr als 9 GIPS bei nur 3,2 GHz ausführen. Das sind ungefähr drei Befehle pro Taktzyklus!
Wie wird dies durchgeführt und warum wird dies nicht in kleineren Prozessoren wie AVR- Mikrocontrollern implementiert ?
Von hier aus habe ich alle meine Informationen bis auf den ATmega328 gefunden .
Antworten:
Dies ist auf eine Kombination von Merkmalen moderner Prozessoren zurückzuführen.
Das erste, was zu einem hohen IPS beiträgt, ist die Tatsache, dass moderne Prozessoren mehrere Ausführungseinheiten haben, die unabhängig voneinander arbeiten können. In der folgenden Abbildung (von Wikipedia ausgeliehen: Intel Core Microarchitecture ) sehen Sie unten, dass acht Ausführungseinheiten (gelb dargestellt) Anweisungen gleichzeitig ausführen können. Nicht alle dieser Einheiten können dieselben Befehlstypen sichern, aber mindestens fünf von ihnen können eine ALU-Operation ausführen, und es gibt drei SSE-fähige Einheiten.
Kombiniert mit einer langen Anweisungs-Pipeline, die Anweisungen effizient stapeln kann, die für die Ausführung von Anweisungen durch diese Einheiten bereit sind ( falls erforderlich, außer Betrieb ), bedeutet dies, dass ein moderner Prozessor jederzeit eine große Anzahl von Anweisungen im laufenden Betrieb haben kann.
Die Ausführung jedes Befehls kann einige Taktzyklen in Anspruch nehmen. Wenn Sie die Ausführung jedoch effektiv parallelisieren können, können Sie IPS auf Kosten der Prozessorkomplexität und der thermischen Leistung massiv steigern.
Um diese großen Pipelines mit Anweisungen zu füllen, ist auch ein großer Cache erforderlich, der 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 der Fall ist, liegt darin, dass der Umfang der für die Prozessorkerne erforderlichen Steuerlogik sowie der Platzbedarf und die erzeugte Wärme erheblich erhöht werden. Wenn Sie einen kleinen, stromsparenden und schnell reagierenden Prozessor benötigen, benötigen Sie eine kurze Pipeline ohne zu viel "zusätzliches" Material, das die eigentlichen Funktionskerne umgibt. In der Regel minimieren sie den Cache, beschränken ihn auf nur einen der Einheitentypen, die für die Verarbeitung von Anweisungen erforderlich sind, und reduzieren die Komplexität jedes Teils.
Sie könnten einen kleinen Prozessor so komplex wie einen größeren Prozessor machen und eine ähnliche Leistung erzielen, aber dann würden sich die Anforderungen an Stromverbrauch und Kühlung exponentiell erhöhen.
quelle
Das ist nicht schwer vorstellbar. Ein Zyklus reicht aus, um viele tausend Transistoren zu schalten. Solange Befehle parallel aneinandergereiht sind, kann ein Zyklus ausreichen, um sie alle auszuführen.
Besser als es selbst zu erklären, hier ist ein guter Ausgangspunkt .
quelle
Um ein bisschen grundlegender zu werden als Mokubais Antwort:
Superskalare CPUs analysieren den Befehlsstrom auf Daten- (und andere) Abhängigkeiten zwischen Befehlen. Anweisungen, die nicht voneinander abhängig sind, können parallel ausgeführt werden.
Typische x86-Desktop-CPUs rufen in jedem Taktzyklus 16 oder 32B Befehle ab. Intel-Designs seit Core2 können bis zu 4 Anweisungen pro Zyklus ausgeben. (Oder 5, wenn es einen Compare-and-Branch gibt, der eine Makroverbindung ausführen kann).
In Mobukais netter Antwort finden Sie Links und Details dazu, wie CPUs in der Praxis vorgehen, um aus dem von ihnen ausgeführten Code so viel Parallelität auf Befehlsebene zu extrahieren, wie sie tun.
Unter http://www.realworldtech.com/sandy-bridge/ und ähnlichen Artikeln zu anderen CPU-Architekturen finden Sie ausführliche Erklärungen zu dem, was sich unter der Haube befindet.
quelle
Frühere Antworten zeigen, wie man durch die Definition von "Befehl" durch den Prozessor mehr Befehle ausführen lässt, und man stellt sich vor, dass dies tatsächlich die Absicht des Fragenden ist.
Eine andere Quelle kann sein, dass jeder "Befehl" tatsächlich eine bestimmte Datenmenge ist, die vom Prozessor als Befehlseingabe behandelt wird. Wenn die Zählung seiner Quelle nur zählt, was der Prozessor als Anweisung ansieht, wird im Folgenden nichts hinzugefügt. Aber wenn seine Quelle alles zählt, was ein Mensch eine "Anweisung" nennen würde, dann: Füge hinzu, dass nicht jede Anweisung physisch so lang ist wie jede andere Anweisung (eine könnte 12 Bytes sein, eine andere 56 Bytes, usw.). Wenn also in jedem Zyklus 64 Bytes Material als "Befehl" geladen werden (oder so viele vollständige Befehle wie möglich, bevor 64 Bytes erreicht werden) und einer sechs Befehle in diesen 64 Bytes enthält, dann sechs Befehle (wie Sie und ich sie möglicherweise betrachten) ) wird in diesem Zyklus beendet.
Da viele sehr grundlegende Anweisungen (unsere "vernünftige" Definition) Überbleibsel aus der Anfangszeit mit 8-Byte-Anweisungslängen sind und sehr grundlegende Anweisungen per definitionem möglicherweise unverhältnismäßig verwendet werden, würde dies viel dazu beitragen, dass mehr "Anweisungen" ausgeführt werden als Frequenz scheint zu erlauben.
quelle
add al, bl
und 80386add eax, ebx
.