Was sind "Anweisungen pro Zyklus"?


23

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.


Nein, das ist nicht der Fall. Moderne x86-CPUs können unter idealen Bedingungen drei Befehle pro Kern und Zyklus unterstützen, während einige Befehle Dutzende von Zyklen erfordern können.
David Schwartz

Antworten:


22

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.


9
Die "Fließband" -Analogie suggeriert für mich nur einfaches Pipelining, keine superskalare Architektur. Superscalar beinhaltet das Replizieren von Teilen der CPU-Hardware (z. B. eine Phase der Pipeline, die ein Engpass ist), um den Durchsatz zu verbessern.
SBLAIR

2
Ich füge der Kürze halber hinzu: RISC = reduzierter Befehlssatz; CISC = Komplexer Befehlssatz. Gute Erklärung, Ludwig für das Aufzeigen des Cache-Hit / Miss-Verhältnisses und (letztendlich) das Aufzeigen des TLB. Es ist nicht einfach, die Architektur von Mikroprozessoren zu erklären, vor allem, wenn man alles in einen (ziemlich kompakten) Beitrag packt! :)
osij2is

1
Nach allem, was ich höre, verbringen CPUs heutzutage einen großen Teil ihrer Zeit damit, auf die Arbeit zu warten, um aus dem Hauptspeicher angezeigt zu werden. Zumindest war das die Antwort, die ich erhielt, als ich fragte, warum in einer CPU nicht mehr Ausführungskerne vorhanden sind.
Surfasb

32

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 ...


Schöne Analogie. Ich werde es stehlen.
dmckee

6
Und Hyperthreading ist so, als würden mehrere Leute ihre Wäsche im selben Waschsalon waschen.
Ronald Pottol

1
Branch Prediction: Sie fangen an, Kleidung zu waschen, von der Sie glauben, dass Sie sie in der nächsten Woche benötigen werden
Akash,

2
Hyperthreading: Sie akzeptieren die Wäsche anderer und geben die Anzahl Ihrer Waschmaschinen an (1). Bald merkt man, dass in der Waschmaschine mehr Platz ist als in der Hose, die man wäscht, nur keine weitere Hose, sondern etwas Kleineres. Also steckst du auch ein paar Socken rein. Jetzt bewerben Sie 2 Waschmaschinen und hoffen, dass die Leute die Wäsche so unterschiedlich abgeben, dass Sie immer "die Löcher füllen" mit kleineren Gegenständen. Gerade als dieser Typ, der nur einmal mit 10 schmutzigen Jeans und 1 Paar Socken kommt, sein Zeug fallen lässt, ist es so langsam wie immer.
Florenz Kley

@Akash Sie waschen Kleidung, die noch nicht einmal Flecken hat, nur für den Fall?
Kevin Panko

3

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 .


2

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 .


1

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.


0

Cycles ist eher ein Pro-Core-Konzept. Jeder Kern führt parallel eigene Zyklen durch.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.