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

14

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 .

Jaca
quelle
3
Bei Wikipedia finden Sie Schlagworte wie Pipelineing, superskalare Architektur, nicht ordnungsgemäße Ausführung, simultanes Multithreading, Multi-Core, Vektorerweiterung (SSE, ..., AVX), Caching usw. Insgesamt kann der CPI-Wert unter 1,0 liegen.
Paebbels
7
Sie meinten 9 GIPS für den Pentium 4, nicht MIPS, oder?
Calimo
5
Eigenwerbung: Wie kann eine CPU mehr als eine Anweisung pro Zyklus liefern? wurde an der Elektrotechnik-Stapelbörse gefragt (meine Antwort wurde angenommen und vielleicht zu hoch bewertet).
Paul A. Clayton
Ich habe mich immer gefragt, ob ich nicht etwas abstimmen soll, wenn es schon so hoch ist, wie ich es für richtig halte. Oder immer positiv stimmen, wenn ich der Meinung bin, dass der Aufwand und die Qualität eines Beitrags eine Belohnung verdienen?
Peter Cordes,
@PeterCordes Es gibt verschiedene Abstimmungsphilosophien. Einige behaupten, "nützlich" sei das einzige Kriterium, andere betrachten den relativen Wert (für Antworten). Ich neige dazu, die absolute Stimmenzahl ("nett", "gut", "gut", "gut", "gut", "gut", "gut") sowie die relative Stimmenzahl (die bei der Beantwortung des Rankings hilfreich ist) zu berücksichtigen. Überraschenderweise scheint Meta.SE nicht viel zu diesem Thema zu haben und " Wie soll ich abstimmen? " Hat nicht einmal eine Antwort!
Paul A. Clayton

Antworten:

23

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.

Bildbeschreibung hier eingeben

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.

Mokubai
quelle
Ich wusste nie, dass es spezialisierte Hinrichtungseinheiten gab, und mehr als eine von ihnen. Trotzdem wäre es schön, ein superskalares Arduino zu haben. Ich hätte nichts gegen die Anforderungen an Leistung und Kühlung, wenn es mehr Durchsatz bedeuten würde. Danke für die Antwort.
Jaca
1
Wenn Sie einen superskalaren Prozessor benötigen, verwenden Sie einen. Aber Arduinos besetzen eine Nische für Leute, die die Anforderungen an Leistung und Kühlung (sowie Kosten und Komplexität) von superskalaren Prozessoren berücksichtigen.
David Schwartz
4

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 .

misha256
quelle
3

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.

Peter Cordes
quelle
-2

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.

Roy
quelle
Das ist ein bisschen ähnlich wie bei CPUs, aber das Abrufen mehrerer Maschinen-Insns pro Zyklus ist nur ein Teil der Funktionsweise einer superskalaren CPU. (und die durchschnittliche Länge von Insns beträgt bei x86 eher 4 Byte.) Tiefe Pipelines bedeuten, dass Befehle, die jetzt abgerufen werden, möglicherweise 15 Zyklen lang nicht ausgeführt werden (oder viel länger, wenn sie durch einen Cache-Fehler aufgehalten werden, aber nicht abhängige Befehle könnten weiter ausführen.) Ihre Erklärung beschreibt überhaupt kein Pipeline-Design. Auch nicht klar, was Sie denken, ist der Unterschied zwischen einem 8bit 8086 add al, blund 80386 add eax, ebx.
Peter Cordes