it-swarm.com.de

Wie berechne ich die Taktrate in Mehrkernprozessoren?

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 glaube, dass sie für die meisten offensichtlich sind, Schwachsinn ist, aber ich habe gerade einen Kommentar auf dieser Website mit dem Effekt "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 Taktfrequenz ist eher eine Zählung der Anzahl der Zyklen, die der Prozessor in einer Sekunde durchläuft. Solange alle Kerne mit derselben Geschwindigkeit laufen, bleibt die Geschwindigkeit jedes Taktzyklus gleich, unabhängig davon, wie viele Kerne vorhanden sind . Mit anderen Worten, Hz = (Core1Hz + Core2Hz + ...)/Kerne.
23
NReilingh

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, d. H. 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 abrufen 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 Programm kann die volle Leistung eines der Kerne ohne Synchronisationsprobleme effektiv nutzen. Hier 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, die sie enthalten sind fertig mit.

  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 Taktfrequenz ist eher eine Zählung der Anzahl der Zyklen, die der Prozessor in einer Sekunde durchläuft. Solange alle Kerne mit derselben Geschwindigkeit laufen, 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 glauben, dass 4 x 3 GHz = 12 GHz, sofern die Mathematik funktioniert, 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.

36
Mokubai

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

6
AndrejaKo

Ich bin kein Experte auf diesem Gebiet, aber ich habe einen Abschluss in Computertechnik. In der Theorie (dies ist eine sehr konzeptionelle Antwort) kann jeder Prozessor einen Quad-Core-3GHz entspricht einem 12-GHz-Prozessor, wenn beispielsweise vier Berechnungssätze für ein einzelnes Endergebnis erforderlich sind. 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;

in diesem Fall würde der Dual-Core-Prozessor doppelt so lange brauchen wie der Single-Core-Prozessor, da der Wert von a im zweiten Befehl von abhängt erste Anweisung und kann daher nicht parallel ausgeführt werden. 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.

3

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.

2
Harmeet Singh

Dies ist eine komplizierte Frage, 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 mehr als einem Prozessor ausgeführt werden können. Unter der Annahme, dass das betreffende Programm parallel ausgeführt werden kann, treten weiterhin Probleme mit unterschiedlichen Kernen auf, die um andere Ressourcen wie RAM oder sogar um Cache- und Thread-Synchronisierungsprobleme 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

2
Faken

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 nicht ein Maß für die Geschwindigkeit, mit der gearbeitet wird, sondern für die Geschwindigkeit, mit der die Taktrate tickt.

1
David Schwartz

Was die ausgeführten Taktzyklen betrifft, führt ein Mehrkernprozessor x * cores Arbeitszyklen pro Sekunde aus. Üblicherweise werden die Taktraten für einen einfacheren Vergleich auf Kernbasis aufgeführt (ansonsten wie würden Sie einen 4-GHz-Dual-Core-Chip mit 2 GHz/Kern leicht 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 Caches, die jeweils von einem Paar von Kernen gemeinsam genutzt werden), um die Chancen 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).

1
Jimmy