Ich habe ein bisschen mehr über die Funktionsweise von Prozessoren gelernt, konnte jedoch keine eindeutige Antwort auf die Anweisungen pro Zyklus finden.
Zum Beispiel hatte ich den Eindruck, dass eine Vierkern-CPU vier Befehle pro Zyklus ausführen könnte, sodass eine Vierkern-CPU mit 2 GHz 8 Milliarden Operationen pro Sekunde ausführen würde. Ist das der Fall?
Ich bin sicher, es ist zu einfach, aber wenn es einen Leitfaden oder etwas anderes gibt, mit dem ich mich klarstellen kann, bin ich auf jeden Fall offen für Ideen.
cpu
computer-architecture
Matt Simmons
quelle
quelle
Antworten:
Die Schlüsselwörter, nach denen Sie wahrscheinlich suchen sollten, sind CISC , RISC und superskalare Architektur .
CISC
In einer CISC-Architektur (x86, 68000, VAX) ist ein Befehl leistungsstark, die Verarbeitung dauert jedoch mehrere Zyklen . In älteren Architekturen wurde die Anzahl der Zyklen festgelegt, heutzutage hängt die Anzahl der Zyklen pro Befehl normalerweise von verschiedenen Faktoren ab (Cache-Treffer / Fehler, Verzweigungsvorhersage usw.). Es gibt Tische, an denen man nachsehen kann. Oft gibt es auch Erleichterungen, um tatsächlich zu messen, wie viele Zyklen ein bestimmter Befehl unter bestimmten Umständen dauert (siehe Leistungsindikatoren ).
Wenn Sie an den Details für Intel interessiert sind, ist das Intel 64- und IA-32-Optimierungsreferenzhandbuch eine sehr gute Lektüre.
RISC
RISC-Architektur (ARM, PowerPC, SPARC) bedeutet normalerweise, dass ein sehr einfacher Befehl nur wenige (oft nur einen) Zyklen benötigt.
Superskalar
Unabhängig von CISC oder RISC gibt es jedoch eine superskalare Architektur. Die CPU verarbeitet nicht einen Befehl nach dem anderen, sondern bearbeitet viele Befehle gleichzeitig, ähnlich einer Fertigungsstraße.
Die Folge ist: Wenn Sie einfach die Zyklen für jede Anweisung Ihres Programms nachschlagen und dann alle addieren, erhalten Sie eine viel zu hohe Zahl. Angenommen, Sie haben eine Single-Core-RISC-CPU. Die Zeit zum Verarbeiten eines einzelnen Befehls kann niemals kürzer sein als die Zeit eines Zyklus, aber der Gesamtdurchsatz kann durchaus mehrere Befehle pro Zyklus betragen.
quelle
Die Art, wie ich es mir vorstelle, ist eine Wäscherei-Analogie. CPU-Anweisungen sind wie jede Menge Wäsche. Sie müssen sowohl die Waschmaschine als auch den Trockner für jede Ladung verwenden. Nehmen wir an, jeder Vorgang dauert 30 Minuten. Das ist der Taktzyklus. Alte CPUs ließen die Waschmaschine und dann den Trockner laufen, wobei jedes Mal 60 Minuten (2 Zyklen) benötigt wurden, um jede Ladung Wäsche zu beenden.
Pipelining: Eine Pipeline ist, wenn Sie beide gleichzeitig verwenden - Sie waschen eine Ladung und während des Trocknens waschen Sie die nächste Ladung. Der erste Ladevorgang dauert 2 Zyklen, der zweite Ladevorgang wird jedoch nach einem weiteren Zyklus beendet. Die meisten Lasten benötigen also nur einen Zyklus, mit Ausnahme der ersten Last.
Superscalar: Bringen Sie die Wäsche zum Waschsalon. Holen Sie sich 2 Unterlegscheiben und laden Sie beide. Wenn sie fertig sind, finden Sie 2 Trockner und verwenden Sie beide. Jetzt können Sie 2 Ladungen in 60 Minuten waschen und trocknen. Das sind 2 Lasten in 2 Zyklen. Jede Ladung dauert immer noch 2 Zyklen, aber Sie können jetzt mehr davon ausführen. Die durchschnittliche Zeit beträgt jetzt 1 Last pro Zyklus.
Superskalar mit Pipelining: Waschen Sie die ersten 2 Ladungen und laden Sie während des Trocknens die Waschmaschinen mit den nächsten 2 Ladungen auf. Jetzt dauern die ersten 2 Ladevorgänge noch 2 Zyklen, und die nächsten 2 sind nach 1 weiteren Zyklus beendet. Meistens beenden Sie also zwei Ladevorgänge in jedem Zyklus.
Mehrere Kerne: Gib die Hälfte deiner Wäsche deiner Mutter, die auch 2 Waschmaschinen und 2 Trockner hat. Wenn Sie beide zusammenarbeiten, können Sie doppelt so viel erreichen. Das ist ähnlich wie bei Superscalar, aber etwas anders. Anstatt dass Sie die gesamte Wäsche zu und von jeder Maschine selbst bewegen müssen, kann sie dies gleichzeitig mit Ihnen tun.
Das ist großartig, wir können in der gleichen Zeit achtmal mehr Wäsche waschen als vorher, ohne schnellere Maschinen bauen zu müssen. (Verdoppeln Sie die Taktrate: Waschmaschinen, die nur 15 Minuten zum Laufen brauchen.)
Lassen Sie uns nun darüber sprechen, wie etwas schief geht:
Pipeline-Blase: Sie haben einen Fleck, der beim Waschen nicht herausgekommen ist, und entscheiden sich, ihn erneut zu waschen. Jetzt sitzt der Trockner nur noch da und wartet auf etwas zu tun.
Cache Miss: Der LKW, der die schmutzige Wäsche liefert, steckt im Verkehr. Jetzt haben Sie 2 Waschmaschinen und 2 Trockner, aber Sie bekommen keine Arbeit mehr, weil Sie warten müssen.
Abhängig davon, wie oft Fehler auftreten, können nicht immer 4 Ladungen pro Zyklus ausgeführt werden, sodass der tatsächliche Arbeitsaufwand variieren kann.
Branch Prediction: Nun, Sie fangen an, Ihre sauberen Klamotten zu waschen, falls Sie sie später beflecken, damit sie schon sauber sind ... Okay, hier bricht die Analogie zusammen ...
quelle
Nicht genau. Der Zyklus, auf den Sie sich beziehen, ist der Taktzyklus. Da die meisten modernen Prozessoren Pipelines verwenden, dauert es mehrere Taktzyklen, bis ein Befehl ausgeführt wird. (Dies ist eine gute Sache, da es anderen Befehlen ermöglicht, mit der Ausführung zu beginnen, noch bevor der erste Befehl abgeschlossen ist.) Unter den idealsten Umständen wären es wahrscheinlich 8 Milliarden IPC, aber alle möglichen Dinge passieren wie Abhängigkeiten, Blasen in der Pipeline , Äste usw. funktioniert also nicht immer.
Entschuldigung, es ist viel zu kompliziert für eine klare Antwort. Jon Stokes macht einen guten Job, um es mit diesem Artikel zu erklären .
quelle
Die Tage, an denen man die Zykluszeit für jeden Befehl nachschlagen (oder sich diese sogar merken) und wissen konnte, wie viele Uhren es dauern würde, bis ein bestimmtes Stück Code fertig ist, sind für High-End-Chips längst vorbei (aber in einigen sind wir noch dabei Mikrocontroller). Ein moderner Allzweck-CPU-Kern kann mehrere Kopien mehrerer verschiedener Ausführungseinheiten in mehreren Pipelines haben und auf einen mehrstufigen Speichercache mit eigener Logik sowie Verzweigungsvorhersage und spekulativer Ausführungsfähigkeit zugreifen. Das Vorhandensein mehrerer Kerne auf einem einzelnen Die beeinträchtigt die Logik der Cache-Konsistenz und andere Komplexitäten.
Die kurze Antwort lautet also: Mehr Kerne bedeuten mehr Kapazität, um Dinge zu erledigen, aber nicht auf eine nette, vorhersehbare Weise .
quelle
Ludwig erklärte den Unterschied zwischen CISC und RISC, vergaß jedoch zu erwähnen, dass RISC-Anweisungen zwar einfach und schnell sind, aber einzeln wenig bewirken. Sie müssen also mehrere Anweisungen aneinanderreihen, um dasselbe wie eine einzelne Anweisung in einem CISC-Prozessor zu tun. Infolgedessen sind einige RISC-Anweisungen schneller, andere nicht.
quelle
Cycles ist eher ein Pro-Core-Konzept. Jeder Kern führt parallel eigene Zyklen durch.
quelle