15Aug
Das Aufkommen von kostengünstigen Consumer-Multi-Core-Prozessoren wirft für viele Anwender die Frage auf: Wie berechnet man effektiv die tatsächliche Geschwindigkeit eines Multicore-Systems? Ist ein 4-Core-3Ghz-System wirklich 12Ghz? Lesen Sie weiter, während wir untersuchen.
Die heutige Frage &Die Antwort-Sitzung kommt dank SuperUser zustande - einer Unterteilung von Stack Exchange, einer Community-Drive-Gruppierung von Q & A-Websites.
Die Frage
SuperUser reader NReilingh war gespannt, wie die Prozessorgeschwindigkeit für ein Multicore-System tatsächlich berechnet wird:
Stimmt beispielsweise, dass ein Prozessor mit vier Kernen, die jeweils mit 3GHz laufen, tatsächlich ein Prozessor istmit 12 GHz?
Ich bekam einmal einen "Mac vs. PC" -Argument( der übrigens NICHT der Schwerpunkt dieses Themas ist. .. das war wieder in der Mittelschule) mit einem Bekannten, der darauf bestand, dass Macs nur als 1Ghz-Maschinen beworben wurden, weil sie es warenDual-Prozessor-G4s jeweils mit 500 MHz.
Zu der Zeit wusste ich, dass das aus Gründen, die ich denke, für die meisten Menschen unangenehm ist, aber ich sah gerade einen Kommentar auf dieser Webseite mit dem Effekt "6 Kerne x 0.2GHz = 1.2Ghz" und das brachte mich wieder zum Nachdenkenob es eine echte Antwort darauf gibt.
Das ist also eine mehr oder weniger philosophische / tiefe technische Frage zur Semantik der Taktberechnung. Ich sehe zwei Möglichkeiten:
- Jeder Kern macht tatsächlich x Berechnungen pro Sekunde, also ist die Gesamtzahl der Berechnungen x( Kerne).
- Die Taktgeschwindigkeit ist eher eine Zählung der Anzahl der Zyklen, die der Prozessor innerhalb einer Sekunde durchläuft. Solange also alle Kerne mit der gleichen Geschwindigkeit laufen, bleibt die Geschwindigkeit jedes Taktzyklus gleich, unabhängig von der Anzahl der Kerneexistieren. Mit anderen Worten, Hz =( Kern1Hz + Kern2Hz +. ..) / Kerne.
Wie kann man also die Gesamttaktgeschwindigkeit bezeichnen und, was noch wichtiger ist, ist es sogar möglich, eine einkernige Geschwindigkeitsnomenklatur für ein Mehrkernsystem zu verwenden?
Die Antwort
SuperUser Mitwirkende Mokubai hilft, Dinge zu klären. Er schreibt:
Der Hauptgrund, warum ein Quad-Core-3GHz-Prozessor niemals so schnell ist wie ein 12-GHz-Single-Core, ist mit der Funktionsweise der auf diesem Prozessor laufenden Task zu tun, d. H. Single-threaded oder multi-threaded. Das Amdahl'sche Gesetz ist wichtig, wenn Sie die Arten von Aufgaben betrachten, die Sie ausführen.
Wenn Sie eine Aufgabe haben, die von Natur aus linear ist und genau Schritt für Schritt ausgeführt werden muss, wie zum Beispiel( ein sehr einfaches Programm)
10: a = a + 1 20: goto 10Dann hängt die Aufgabe stark vom Ergebnis abdes vorherigen Durchlaufs und kann nicht mehrere Kopien von sich selbst laufen lassen, ohne den Wert von "a" zu verfälschen, da jede Kopie den Wert von "a" zu verschiedenen Zeiten erhält und anders schreibt. Dies beschränkt die Aufgabe auf einen einzelnen Thread und somit kann die Task immer nur zu einem bestimmten Zeitpunkt auf einem einzelnen Kern laufen. Wenn sie auf mehreren Kernen laufen würde, würde die Synchronisationskorruption auftreten. Dies beschränkt es auf 1/2 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: gehe zu 10Alle diese Zeilen sind unabhängig und könntenin 4 separate Programme wie das erste aufgeteilt werden und gleichzeitig laufen, wobei jeder die volle Leistung eines der Kerne ohne Synchronisationsprobleme effektiv nutzen kann, hier kommt das Amdahl'sche Gesetz ins Spiel.
Wenn Sie also eine Single-Threaded-Anwendung haben, die Brute-Force-Berechnungen durchführt, würde der einzelne 12GHz-Prozessor leicht gewinnen. Wenn Sie die Aufgabe in separate Teile aufteilen können, könnten die 4 Kerne nahe kommen, aber nicht ganz erreichendie gleiche Leistung wie nach Amdahls Gesetz.
Die Hauptsache, die ein Multi-CPU-System Ihnen gibt, ist Reaktionsfähigkeit. Auf einer einzelnen Kernmaschine, die hart arbeitet, kann das System träge erscheinen, da die meiste Zeit von einer Aufgabe verwendet werden kann und die anderen Aufgaben nur in kurzen Ausbrüchen zwischen der größeren Aufgabe ausgeführt werden, was zu einem System führt, das träge oder ruckelig erscheint. Auf einem Mehrkernsystem erhält die schwere Aufgabe einen Kern und alle anderen Aufgaben spielen auf den anderen Kernen und erledigen ihre Aufgaben schnell und effizient.
Das Argument "6 Kerne x 0,2 GHz = 1,2 GHz" ist in jeder Situation ein Quatsch, außer wenn Aufgaben vollkommen parallel und unabhängig sind. Es gibt eine gute Anzahl von Aufgaben, die sehr parallel sind, aber sie erfordern immer noch eine Art von Synchronisation. Handbrake ist ein Video-Trancoder, der sehr gut alle verfügbaren CPUs verwendet, aber es erfordert einen Kernprozess, um die anderen Threads mit Daten gefüllt zu halten und die Daten zu sammeln, mit denen sie fertig sind.
- Jeder Kern führt tatsächlich x Berechnungen pro Sekunde durch, daher ist die Gesamtzahl der Berechnungen x( Kerne).
Jeder Kern ist in der Lage, x-Berechnungen pro Sekunde durchzuführen, unter der Annahme, dass die Auslastung parallel ist. Bei einem linearen Programm ist alles, was Sie haben, 1 Kern.
- Die Taktgeschwindigkeit ist eher eine Zählung der Anzahl der Zyklen, die der Prozessor innerhalb einer Sekunde durchläuft. Solange also alle Kerne mit der gleichen Geschwindigkeit laufen, bleibt die Geschwindigkeit jedes Taktzyklus gleich, unabhängig von der Anzahl der Kerneexistieren. Mit anderen Worten, Hz =( Kern1Hz + Kern2Hz +. ..) / Kerne.
Ich denke, es ist ein Irrtum zu denken, dass 4 x 3GHz = 12 GHz, gewährte die Mathematik funktioniert, aber Sie vergleichen Äpfel mit Orangen und die Summen sind einfach nicht richtig, kann nicht einfach für jede Situation zusammen. Ich würde es zu 4 x 3GHz = 4 x 3GHz ändern.
Haben Sie etwas zur Erklärung hinzuzufügen? Ton in den Kommentaren ab. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange Benutzern lesen? Sehen Sie sich den vollständigen Diskussionsfaden hier an.