Wie berechne ich die Taktrate in Mehrkernprozessoren?


23

Ist es beispielsweise richtig zu sagen, dass ein Prozessor mit vier Kernen, die jeweils mit 3 GHz betrieben werden, tatsächlich ein Prozessor mit 12 GHz ist?

Ich bin einmal mit einem Bekannten in einen Streit über "Mac vs. PC" geraten (der übrigens NICHT im Mittelpunkt dieses Themas steht ... das war damals in der Mittelschule), der darauf bestand, dass Macs nur als 1-GHz-Rechner beworben würden, weil sie waren Dual-Prozessor-G4s mit jeweils 500 MHz.

Zu der Zeit wusste ich, dass dies aus Gründen, von denen ich denke, dass sie für die meisten Menschen offensichtlich sind, Schwachsinn ist, aber ich habe gerade einen Kommentar auf dieser Website mit der Wirkung von "6 Kerne x 0,2 GHz = 1,2 GHz" gesehen, und das brachte mich erneut zum Nachdenken darüber, ob Darauf gibt es eine echte Antwort.

Das ist also eine mehr oder weniger philosophische / tiefgreifende technische Frage zur Semantik der Taktberechnung. Ich sehe zwei Möglichkeiten:

  1. Jeder Kern führt tatsächlich x Berechnungen pro Sekunde durch, daher beträgt die Gesamtzahl der Berechnungen x (Kerne).
  2. Die Taktrate ist eher eine Zählung der Anzahl der Zyklen, die der Prozessor in einer Sekunde durchläuft. Solange alle Kerne mit derselben Geschwindigkeit ausgeführt werden, bleibt die Geschwindigkeit jedes Taktzyklus gleich, unabhängig davon, wie viele Kerne vorhanden sind . Mit anderen Worten, Hz = (Core1Hz + Core2Hz + ...) / Kerne.

Viele der hier gegebenen Antworten sind eine gute Erklärung dafür, warum z. B. ein Quad-Core-Prozessor mit 2 GHz nicht unbedingt einem Single-Core-Prozessor mit 8 GHz entspricht. Es fällt mir jedoch schwer einzuschätzen, wie die Geschwindigkeit von Mehrkernprozessoren zu beurteilen ist, wenn ich die Eignung eines Systems für eine Anwendung entscheide, in deren Anforderungen eine bestimmte Geschwindigkeit und Anzahl von Kernen aufgeführt ist. (Beispiel: Borderlands 2 erfordert einen 2,4-GHz-Dual-Core-Prozessor. Sollten wir erwarten, dass ein langsamerer Quad-Core oder ein schnellerer Single-Core genauso gut funktioniert?) Ist das hier (oder könnte es hier beantwortet werden), oder sollte es eine eigene frage sein?
Iszi

@Iszi Das sollte eine andere Frage sein, aber es ist wahrscheinlich, dass Borderlands für mehr als einen Thread optimiert ist, wenn sie "Dual Core" in ihre Anforderungen aufnehmen. In diesem Fall wird ein Single-Core-Prozessor nicht empfohlen, es ist jedoch unklar, ob er die Vorteile von> 2 Kernen nutzen kann.
NReilingh

Es ist wichtig zu wissen, dass die Taktrate und die Anzahl der Kerne nicht nur die "Geschwindigkeit" des Prozessors bestimmen. Zum Beispiel beeinflussen die Cache-Größen und die Geschwindigkeit die Zeit, die der Prozessor auf Anweisungen und Daten wartet. Darüber hinaus wirken sich die Anweisungen pro Zyklus (in gewisser Weise „Effizienz“, obwohl sie sich von der Leistungseffizienz unterscheiden und mit dieser zusammenhängen) auch auf die Berechnungsgeschwindigkeit aus. Verschiedene Prozessoren benötigen unterschiedliche Zeiten, um den gleichen Befehl auszuführen.
Bob

Antworten:


35

Der Hauptgrund, warum ein Quad-Core-3GHz-Prozessor niemals so schnell ist wie ein 12-GHz-Single-Core, hängt damit zusammen, wie die auf diesem Prozessor ausgeführte Aufgabe funktioniert, dh Single-Threaded oder Multi-Threaded. Amdahls Gesetz ist wichtig, wenn Sie die Art der Aufgaben berücksichtigen, die Sie ausführen.

Wenn Sie eine Aufgabe haben, die von Natur aus linear ist und genau schrittweise erledigt werden muss, wie z. B. (ein grob einfaches Programm)

10: a = a + 1
20: goto 10

Dann hängt die Aufgabe stark vom Ergebnis des vorherigen Durchlaufs ab und kann nicht mehrere Kopien von sich selbst ausführen, ohne den Wert von 'a'zu beschädigen, da jede Kopie den Wert von 'a'zu unterschiedlichen Zeiten erhalten und anders zurückschreiben würde. Dadurch wird die Aufgabe auf einen einzelnen Thread beschränkt, und daher kann die Aufgabe zu einem bestimmten Zeitpunkt immer nur auf einem einzelnen Kern ausgeführt werden. Würde sie auf mehreren Kernen ausgeführt, würde die Synchronisationsbeschädigung auftreten. Dies begrenzt es auf die Hälfte der CPU-Leistung eines Dual-Core-Systems oder 1/4 in einem Quad-Core-System.

Nehmen Sie nun eine Aufgabe wie:

10: a = a + 1
20: b = b + 1
30: c = c + 1
40: d = d + 1
50: goto 10

Alle diese Leitungen sind unabhängig voneinander und können wie die erste in vier separate Programme aufgeteilt und gleichzeitig ausgeführt werden. Jedes dieser Programme kann die volle Leistung eines der Kerne ohne Synchronisationsprobleme effektiv nutzen. Dies ist Amdahls Gesetz kommt hinein.

Wenn Sie also eine Single-Thread-Anwendung haben, die Brute-Force-Berechnungen durchführt, würde der einzelne 12-GHz-Prozessor zweifellos gewinnen. Wenn Sie die Aufgabe auf irgendeine Weise in separate Teile und Multi-Thread-Anwendungen aufteilen können, dann könnten die 4 Kerne nahe kommen, aber nicht ganz reichen. die gleiche Leistung wie nach dem Amdahlschen Gesetz.

Die Hauptsache, die Ihnen ein Multi-CPU-System bietet, ist die Reaktionsfähigkeit. Auf einem Einzelkerncomputer, der hart arbeitet, kann das System träge erscheinen, da die meiste Zeit von einer Aufgabe verwendet wird und die anderen Aufgaben nur in kurzen Intervallen zwischen den größeren Aufgaben ausgeführt werden, was zu einem trägen oder ruckeligen System führt . Auf einem Multi-Core-System erhält die schwere Aufgabe einen Kern und alle anderen Aufgaben werden auf den anderen Kernen ausgeführt und erledigen ihre Aufgaben schnell und effizient.

Das Argument "6 Kerne x 0,2 GHz = 1,2 GHz" ist in jeder Situation Müll, es sei denn, die Aufgaben sind vollkommen parallel und unabhängig. Es gibt eine gute Anzahl von Aufgaben, die sehr parallel sind, aber dennoch eine gewisse Form der Synchronisation erfordern. Handbrake ist ein Video-Trancoder, der alle verfügbaren CPUs sehr gut nutzt, aber einen Kernprozess benötigt, um die anderen Threads mit Daten zu füllen und die Daten zu sammeln, mit denen sie fertig sind.

  1. Jeder Kern führt tatsächlich x Berechnungen pro Sekunde durch, daher beträgt die Gesamtzahl der Berechnungen x (Kerne).

Jeder Kern ist in der Lage, x Berechnungen pro Sekunde durchzuführen, vorausgesetzt, die Arbeitslast ist parallel, und in einem linearen Programm haben Sie nur 1 Kern.

  1. Die Taktrate ist eher eine Zählung der Anzahl der Zyklen, die der Prozessor in einer Sekunde durchläuft. Solange alle Kerne mit derselben Geschwindigkeit ausgeführt werden, bleibt die Geschwindigkeit jedes Taktzyklus gleich, unabhängig davon, wie viele Kerne vorhanden sind . Mit anderen Worten, Hz = (Core1Hz + Core2Hz + ...) / Kerne.

Ich denke, es ist ein Trugschluss zu denken, dass 4 x 3 GHz = 12 GHz, wenn man die mathematischen Ergebnisse berücksichtigt, aber Sie vergleichen Äpfel mit Orangen und die Summen stimmen einfach nicht, GHz kann nicht einfach für jede Situation addiert werden. Ich würde es auf 4 x 3GHz = 4 x 3GHz ändern.


Nice post .. Konnte nicht mehr als 1+ stimmen :-(
Gopalakrishnan Subramani

Amdahls Gesetz ist jedoch ein Programmierproblem, das durch Sperren verursacht wird, und kein Hardwareproblem. Wenn Sie nicht synchronisieren müssen, kann jeder Core Anweisungen so schnell wie möglich ausführen. Man könnte ein paralleles Programm entwerfen (ein einfaches), das perfekt zwischen den Kernen aufgeteilt ist. Würden Hardware-Hersteller nicht für diesen Rohwert werben?
Justin Meiners

Zur Verdeutlichung verstehe ich, warum dies die Frage beantwortet, warum 4 Kerne bei 3 GHz in der Praxis nicht so schnell sind wie 12 GHz, aber nicht der Teil, wie die Taktrate für Multicores berechnet wird.
Justin Meiners

@JustinMeiners Taktrate pro Kern ist einfach die Taktrate, mit der der Kern läuft. Es gibt keine magische Berechnung, die einen einzelnen Kern mit Multicore gleichsetzt. Mehrere Kerne bedeuten lediglich, dass Sie mehrere separate Aufgaben gleichzeitig ausführen können. Amdahls Gesetz gilt aufgrund von Software. Die Synchronisierung und das Sperren, die erforderlich sind, verhindern, dass eine Aufgabe in Hardware genauso wie in Software "perfekt" ist. Gemeinsam genutzte Caches und Speicher führen zu Konflikten und Sperren.
Mokubai

@Mokubai Nur um zu verdeutlichen, wenn ein Hersteller die Taktrate auflistet, läuft jeder einzelne Kern mit der Geschwindigkeit, richtig?
Justin Meiners

6

Andere machten aus technischer Sicht ein gutes Argument. Ich werde stattdessen ein paar einfache Analogien anführen, die hoffentlich erklären, warum 4 * 3GHz nicht 1 * 12GHz entspricht.

Zum Beispiel kann eine Frau in neun Monaten ein Baby gebären. Können neun Frauen in einem Monat ein Baby gebären? Nein, weil die Schwangerschaft nicht parallelisiert werden kann (zumindest auf diesem technologischen Niveau).

Hier ist noch eines: In einem Wasserkraftwerk, das ich kürzlich besucht habe, wurde einer der Generatoren aufgerüstet. Sie mussten den Stator des Generators per Schiff transportieren. Ein Sechstel des Stators konnte per LKW transportiert werden, aber sie mussten den gesamten Stator transportieren. Also mussten sie ein Schiff benutzen, nicht sechs Lastwagen.

Ein anderer Fall könnte der genaue Zeitpunkt von Ereignissen sein. Manchmal werden Computerprozessoren als präzise Zeitgeber verwendet (obwohl dies aufgrund des variablen Takts bei den meisten Prozessoren nicht mehr empfohlen wird. Stattdessen sollte ein hochpräziser Ereigniszeitgeber verwendet werden). Wenn wir davon ausgehen, dass wir einen Prozessor mit relativ stabilem 12-GHz-Takt haben, können wir damit die Zeit in einer viel höheren Auflösung messen als bei einem Prozessor mit 3-GHz-Takt. Egal wie viele 3GHz-Kerne wir haben, wir werden nicht in der Lage sein, die Auflösung des 12GHz-Kerns zu erreichen. Das ist wie bei 4 Uhren mit 7-Segment-Anzeigen, bei denen jede Uhr nur die korrekte Uhrzeit in Stunden anzeigt. Unabhängig davon, wie genau sie Stunden anzeigen, können Sie sie nicht zum Messen von Zeitintervallen in einem Sekundenbereich verwenden.


Nützliche Antwort für weniger technisch Gesinnte. Auch ich mag Analogien :)
aff

3

Ich bin kein Experte auf diesem Gebiet, aber ich habe einen Abschluss in Computertechnik. In der Theorie (dies ist eine sehr konzeptuelle Antwort), ein Vierkern 3 GHz jeder Prozessor kann das Äquivalent eines 12 GHz - Prozessor sein , wenn beispielsweise vier Sätze von Berechnungen gab es für ein einzelnes Ergebnis benötigt. Das nennt man Parallelverarbeitung.

Nehmen wir zur Vereinfachung der Logik an, wir sprechen von einem Dual-Core-Prozessor. Wenn eine Reihe von Berechnungen wäre, sagen Sie:

a = b + 1;

c = d + 1;

dann könnten diese beiden Berechnungen auf separaten Kernen ausgeführt werden, und ein xGHz-Prozessor würde einem Single-Core-2 * xGHz-Prozessor entsprechen. Dies liegt daran, dass die beiden Berechnungen, obwohl sie mit x-Geschwindigkeit ausgeführt werden, gleichzeitig ausgeführt werden. Während der Single-Core-Prozessor sie mit 2 * x Geschwindigkeit aber nacheinander erledigen könnte. Wenn die beiden CPUs diesen Code zur gleichen Zeit ausführen, werden sie zur gleichen Zeit beendet. Wäre der Code jedoch:

a = b + 1;

c = a + 1;

Dann würde der Dual-Core-Prozessor doppelt so lange brauchen wie der Single-Core-Prozessor, da der Wert von a im zweiten Befehl vom ersten Befehl abhängt und daher nicht parallel ausgeführt werden kann. So kann manche Software Multi-Thread-Prozessoren nutzen.

Theoretisch kann ein 12-GHz-Single-Core-Prozessor immer so schnell (oder schneller) laufen wie ein 3GHz-Quad-Core-Prozessor, aber nicht umgekehrt.


Beachten Sie, dass diese Berechnungen nur dann schneller sind, wenn es sich um Multithread-Berechnungen handelt und selbst dann ein geringer Overhead entsteht. Aber ja, obwohl es möglich ist, einen Single-Core-Prozessor zu entwickeln, der so viele Berechnungen ausführen kann, ist dies aufgrund von Hitze und anderen Faktoren einfach nicht plausibel.
Phoshi

Diese Antwort ist aus zwei Gründen irreführend. Erstens machen moderne Kerne mehr als eine Sache gleichzeitig. Zweitens geht die Antwort davon aus, dass die Kerngeschwindigkeit der Arbeitsgeschwindigkeit entspricht. Ein 12-GHz-Single-Core-Prozessor arbeitet nicht so schnell wie ein 3GHz-Quad-Core-Prozessor, wenn der Single-Core-Prozessor wesentlich mehr Taktzyklen benötigt, um die gleiche Arbeit auszuführen. (Was es wäre, da ein 12-GHz-Prozessor viel längere Pipelines benötigen würde.)
David Schwartz

2

Dies ist eine komplizierte Frage zu beantworten, aber die kurze Antwort lautet: Nein

In realen Anwendungen sind vier 3 GHz-Prozessoren aufgrund von Ineffizienzen nicht so schnell wie ein einzelner 12 GHz-Prozessor. Sie können sehr nahe beieinander liegen, entsprechen jedoch in Bezug auf die Rechenleistung NICHT einem einzelnen Prozessor.

Der Grund dafür liegt in der geringen Ineffizienz bei Programmen, die auf mehreren Prozessoren ausgeführt werden können. Unter der Annahme, dass das betreffende Programm parallel ausgeführt werden kann, treten immer noch Probleme mit verschiedenen Kernen auf, die um andere Ressourcen wie RAM oder sogar Probleme bei der Cache- und Thread-Synchronisierung konkurrieren. Es gibt auch immer Teile von Programmen, die nicht parallelisiert werden können und auf einem einzelnen Kern ausgeführt werden müssen.

Sehen Sie sich diesen Artikel an: http://en.wikipedia.org/wiki/Amdahl%27s_law


Sie haben Recht und Unrecht. Vier 3-GHz-Prozessoren sind wahrscheinlich SCHNELLER als ein einzelner 12-GHz-Prozessor in "echten" Anwendungen. Heutzutage verwenden immer mehr Programme Multithreading. Der von Ihnen angegebene Link bezieht sich auf eine theoretische Einzelthread-Anwendung. Ein einzelner Prozessor mit 12 GHz hat nur einen Thread, so dass die Multi-Threading-Vorteile eines "echten" Programms verloren gehen würden. Die Branche strebt nicht nach langsameren Kernen anstatt nach weniger schnelleren Kernen, nur weil die Vorteile der Multi-Core-Technologie die Vorteile der schnellen Single-Core-Technologie bei weitem überwiegen.
Ubiquibacon

3
@typoknig: Das stimmt nicht ganz. Ein 6-GHz-Single-Core-Prozessor würde eine Multithread-Anwendung mit etwa der gleichen Geschwindigkeit wie ein 3GHz-Dual-Core-Prozessor ausführen, vorausgesetzt, die App nutzt alle Threads voll aus (was sie höchstwahrscheinlich nicht tut, wenn es sich um einen "echten" Thread handelt Weltanwendung ", aber das ist ein separates Argument). Wir sehen keine 12-GHz-Prozessoren, weil es mit der aktuellen Technologie zu schwierig ist, nicht weil es langsamer ist.
Sasha Chedygov

4
@typoknig: Ich habe einige Multithread-Programme programmiert und glaube mir, wenn ich einen einzelnen 12-GHz-Prozessor hätte, würde ich das stattdessen verwenden. Die Single-Thread-Programmierung ist 10x einfacher und effizienter als die Multi-Thread-Programmierung. Der eigentliche Grund, warum die Branche Muticore-Prozessoren von Twords in Bewegung setzt, liegt nicht darin, dass sie schneller sind, sondern darin, dass wir einzelne CPUs nicht schneller laufen lassen können! Dies wurde mit der Netburst-Technologie von Intel bereits in den P4-Tagen aufgezeigt. Sie schätzten mindestens 10-GHz-Prozessoren, bis die Quantenphysik ihnen ins Gesicht schlug und "no noob!" Sagte.
Gefälschter

2
@typokning: Der F22 verwendet eine Reihe von PowerPC-Prozessoren, um 10 Milliarden Anweisungen pro Sekunde zu erzielen, ganz anders als 10 GHz! Es ist so, als würde man sagen, dass Ihr Radion HD5970 mit 4600 GHz arbeitet. Es ist für 4.6 TFLOPS geeignet, aber nur, weil es sehr parallel ist.
Gefälschter

1
@typoknig: Sie verstehen den Unterschied zwischen CPU-Frequenz und IPS (Anweisungen pro Sekunde) eindeutig nicht, sie sind nicht ein und dasselbe. Bitte lesen Sie: en.wikipedia.org/wiki/Instructions_per_second
Faken

2

Es scheint, dass wir nicht sagen können, dass 4 Kerne bei 3 GHz als 12 GHz bezeichnet werden können.

Verschiedene Einschränkungen wie gemeinsamer Speicher, Cache-Konflikte und andere Ressourcen sind allen Kernen gemeinsam, sodass die parallele Ausführung von Code auf diesen Kernen nicht so effizient ist wie die Ausführung auf 12-GHz-Prozessoren (obwohl es schwierig ist, einen solchen Prozessor zu erstellen) ).

Außerdem habe ich irgendwo gelesen, dass die Geschwindigkeit, die wir erreichen werden, nur 40% beträgt, wenn wir die auf dem Chip (CMP) eingebetteten Transistoren verdoppeln. Dies gibt auch einen wichtigen Hinweis zu diesem Thema.


1

Was die ausgeführten Taktzyklen anbelangt, führt ein Mehrkernprozessor x * coresArbeitszyklen pro Sekunde aus. Üblicherweise werden die Taktraten für einen einfacheren Vergleich auf der Basis der einzelnen Kerne aufgeführt (wie würden Sie andernfalls einen 4-GHz-Dual-Core-Chip mit 2 GHz / Kern mit einem 4-GHz-Quad-Core-Chip mit 1 GHz / Kern vergleichen?).

Leider wird das Problem komplex, wenn Sie versuchen, verschiedene Prozessoren in realen Anwendungen zu vergleichen.

Erstens verfügen die meisten Mehrkernprozessoren über Ressourcen, die von den Kernen gemeinsam genutzt werden (z. B. CPU-Cache). Sie müssen sich den Zugriff auf diesen Cache teilen, damit nicht beide Kerne Daten mit voller Geschwindigkeit speichern oder lesen können. Dies wird bei Mehrkern-CPUs häufig dadurch verringert, dass mehrere gemeinsam genutzte Caches vorhanden sind (z. B. haben die meisten Vierkern-Chips zwei gemeinsam genutzte Caches, die jeweils von zwei Kernen gemeinsam genutzt werden), um die Wahrscheinlichkeit eines Engpasses bei einer gemeinsam genutzten Ressource besser aufzuteilen.

Zweitens, und vielleicht weniger bekannt in der Non-Techie-Welt, ist das Vergleichen von Taktraten manchmal wie das Vergleichen von Äpfeln und Orangen. Verschiedene CPUs erledigen in einem Taktzyklus unterschiedlich viel Arbeit. Das heißt, Sie haben 1 GHz im Vergleich zu 1,2 GHz, klingt gut, aber der 1 GHz-Chip kann in einem bestimmten Zeitintervall tatsächlich mehr Arbeit erledigen. Der Pentium 4 fuhr diesen Punkt nach Hause und führte zum Megahertz-Mythos (von dem ich nicht wusste, dass er einen Namen hatte, bis ich diesen Beitrag schrieb).


Taktraten werden nicht "pro Kern" aufgeführt. Geschwindigkeiten sind niemals "pro" irgendetwas. Wenn ein Auto 50 Meilen pro Stunde fährt, beträgt die Geschwindigkeit 50 Meilen pro Stunde. Wenn zwei Autos 50 Meilen pro Stunde fahren, beträgt die Geschwindigkeit immer noch 50 Meilen pro Stunde. Die Idee einer "Geschwindigkeit pro Auto" ist bedeutungslos und inkohärent.
David Schwartz

1

Zwei Autos mit jeweils 50 Meilen pro Stunde summieren sich nicht auf 100 Meilen pro Stunde. So einfach ist das wirklich. Die Taktrate eines Prozessors ist kein Maß für die Geschwindigkeit, mit der gearbeitet wird, sondern ein Maß für die Geschwindigkeit, mit der die Uhr tickt.

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.