
Ich habe Tests zwischen CPUz und OCCT durchgeführt. Mir ist aufgefallen, dass die CPU-Temperatur nie über 70 °C steigt, wenn ich CPUz so einstelle, dass die CPU mit mehreren Threads belastet wird. Wenn ich dagegen OCCT ausführe, um die CPU zu belasten, steigt die Temperatur sofort über 75 °C und bricht den Test manchmal sogar bei 85 °C ab.
Was passiert hier? Ich habe immer gedacht, dass Grafikkarten viele Kerne haben, die einzeln beansprucht werden müssen, CPUs dagegen einfach sind. Eine einfache For-Schleife kann eine CPU zu 100 % belasten. Eine Reihe von For-Schleifen, die auf mehreren Threads ausgeführt werden, können jeden Kern belasten. Wie kommt es, dass OCCT meine CPU so viel stärker aufheizt? Was kann sie tun, was CPUz nicht kann?
Einige Hintergrundinformationen: Die CPU ist Intel Core i7-4790k. Turbo Boost ist aktiviert, aber ich glaube, es bleibt bei 5% hängen, wenn einer der Prozesse läuft
Antwort1
Die CPU-Auslastung ist ein Maß dafür, wie viele Ressourcen der CPU zur Verfügung stehen. Es können jedoch viele unterschiedliche Befehlstypen verarbeitet werden, und alle haben unterschiedliche Verarbeitungs- und Speicheranforderungen.
Eine speicherintensive Aufgabe kann dazu führen, dass die CPU beim Abrufen von Daten aus dem Speicher ins Stocken gerät und dadurch die effektiveAnweisungDurchsatz, während die CPU weiterhin „benutzt“ ist.
Außerdem gibt es viele verschiedene Teile der CPU, die unterschiedlich gesättigt sein können.
Von WikichipsSandy Bridge uArch:
Sie sehen, dass wir über ein anfängliches Frontend für den Befehlsdecoder verfügen, das bei komplexen und vielfältigen Befehlsströmen möglicherweise Schwierigkeiten hat, den Rest der Pipeline voll zu halten.
Wenn dunurWenn Sie ganzzahlige Additionen haben, können Sie 3 der Kernausführungseinheiten verwenden, da die CPU über 3 INT ALU-Einheiten verfügt. Wenn Sie nur Gleitkommamultiplikationen haben, können Sie nur die einzelne FPU MUL-Einheit (Multiplikation) verwenden.
Die CPU fungiert auch als Pipeline. Während eine Einheit in einer Ausführungseinheit verwendet wird, können Sie möglicherweise einen Vorgang planenim nächsten Zyklus. Das bedeutet, dass ein vielfältiger Befehlsstrom die Ressourcen besser nutzen kann, da eine nicht verwendete Einheit in derselben EU, aber mit einem anderen Befehlstyp geplant werden kann. Unterschiedliche Befehle haben auch unterschiedliche Ausführungszeiten und einen größeren oder kleineren Satz zugehöriger Schaltkreise zur Ausführung. Eine einfache Addition kann ein oder zwei Taktzyklen dauern, während ein Gleitkommabefehl länger dauern und mehr Schaltkreise umfassen kann. Eine längere Dauer kann einen höheren Stromverbrauch bedeuten, ebenso wie eine größere Schaltkreisfläche. Alternativ kann eine längere Dauer des Befehls bedeuten, dass die Front-End-Planungsschaltkreise pausieren und kurzzeitig weniger Strom verbrauchen, während sie auf verfügbare Ausführungseinheiten warten, während die kleineren, schnelleren Befehle insgesamt mehr Schaltkreise verbrauchen, wenn Sie andere Teile der CPU mit einbeziehen.
Als Ergebnis zu machenvollFür die Verwendung der CPU benötigen Sie einen vielfältigen Befehlsstrom, und was eine CPU beansprucht, beansprucht eine andere aufgrund unterschiedlicher Anordnung und Anzahl der Ausführungseinheiten und ihrer Fähigkeiten möglicherweise nicht im vollen Umfang.
Mit modernen Power-Gating-Methoden können Ausführungseinheiten auf „Low Power“ geschaltet werden und tragen so nicht oder nur deutlich weniger zur Wärmeabgabe des Geräts bei.
Caches tragen ebenfalls zum Stromverbrauch bei. Die Verwendung des Caches bedeutet, dass Anweisungen und Daten schneller abgerufen und somit ausgeführt werden können als eine Routine mit einem Datensatz im Speicher, der zu groß für einen Cache ist.
Infolgedessen können unterschiedliche Programme oder Befehlsströme zu unterschiedlichem Spitzenstromverbrauch und damit zu unterschiedlichen Temperaturen führen.
Architekturunterschiede zwischen Prozessorgenerationen und sogar innerhalb der gleichen Generation können sich auswirken, da Cache-Größen, Prozessoroptionen und unterschiedliche Befehlsverfügbarkeit eine Rolle spielen können.
Antwort2
Ich verstehe, dass Sie wissen möchten, warum die Ausführung eines Multithread-Crunch-Tests die CPU nicht so stark erhitzt wie ein Monothread-Test.
Die einfache Erklärung ist, dass der Turbo-Boost daran schuld ist, da er deaktiviert ist, wenn die CPU mehrere Kerne gleichmäßig beansprucht. Er wird nur aktiviert, wenn ein Kern stark beansprucht wird (und zwar nur ein Kern).
Wenn der Turbo-Boost aktiv ist, wird mehr Leistung an den Kern mit erhöhtem Leistungsbedarf umgeleitet, wodurch die Leistung der anderen Kerne reduziert und diese somit verlangsamt werden.
Der geboostete Kern läuft dann mit einer höheren Geschwindigkeit und erwärmt sich stärker als ein nicht geboosteter Kern. Dies wird vom Sensor erfasst, der dann die Temperatur dieses einen Kerns als die der gesamten CPU meldet.
Antwort3
Die CPU-"Auslastung" (oder -Nutzung) ist ein Aktivitätsmonitor, der angibt, wie viel Prozent der CPU-Zeit für "nützliche" Aktivitäten und wie viel Prozent für "Leerlaufzeit" aufgewendet werden. Das Betriebssystem bestimmt, was eine "nützliche" Aktivität und was "Leerlaufzeit" ist.
Bei null Prozent CPU-Auslastung plant das Betriebssystem während dieses Zeitintervalls keine Benutzerprozesse.
Bei 50 % CPU-Auslastung hat das Betriebssystem etwa die Hälfte des Zeitintervalls für Benutzerprozesse eingeplant und die andere Hälfte dieses Zeitintervalls wurde in der Leerlaufschleife verbracht. Selbst wenn nur ein Benutzerprozess vorhanden ist, kann dieser möglicherweise nicht 100 % der CPU-Auslastung nutzen, da dieser Prozess nicht CPU-intensiv ist und neu eingeplant werden muss, während beispielsweise auf den Abschluss eines E/A-Vorgangs gewartet wird. Bei
100 % CPU-Auslastung hat das Betriebssystem das gesamte Zeitintervall für Benutzerprozesse eingeplant.
Beachten Sie, dass die CPU eigentlich immer beschäftigt ist (wenn sie eingeschaltet ist), d. h., sie führt immer Anweisungen aus. Wenn kein (Benutzer-)Prozess zur Ausführung bereit ist, muss der OS-Scheduler seine Leerlaufschleife ausführen.
Die CPU-Temperatur ist eine Folge des Stromverbrauchs der CPU-Schaltkreise. Je mehr Transistoren geschaltet werden, desto mehr Strom wird benötigt und verbraucht, und die CPU-Temperatur steigt.
Dieser Stromverbrauch wird nicht durch die CPU-„Last“ angezeigt, die lediglich ein zeitbasierter Aktivitätsmonitor ist.
Ein Prozess kann die CPU (zeitlich) „beschäftigen“, indem er einfach Daten (z. B. Lade- und Speicheranweisungen) im Speicher kopiert oder verschiebt (was keine signifikante zusätzliche Strombelastung über den Leerlauf hinaus darstellt).
Ein anderer rechenintensiver Prozess könnte dagegen Berechnungen durchführen (z. B. Multiplikations- und Divisionsanweisungen), die viele andere Schaltkreise in der CPU nutzen, wie z. B. die ALU (Arithmetik-/Logikeinheit) und die FPU (Gleitkommaeinheit).
Mit anderen Worten: Es ist der Befehlsmix (also die Befehlstypen), den der Prozess ausführt, der den Stromverbrauch und den daraus folgenden Temperaturpegel bestimmt.
Das Betriebssystem ist nicht in der Lage, diesen Stromverbrauch zu messen, und meldet lediglich eine zeitbasierte Aktivitätsmessung mithilfe der CPU-Last- und Temperatursensoren.
Antwort4
Ich gebe Ihnen ein Beispiel. Nehmen Sie zwei Schleifen:
for (i = 0; i < 1000000000; ++i) {
x += a [i];
}
Und
for (i = 0; i < 1000000000; ++i) {
x += a [i];
y += a [i];
z += a [i];
}
In der ersten Schleife muss der Prozessor warten, bis die vorherige Addition abgeschlossen ist, bevor er mit der nächsten Addition beginnen kann. Wenn die Addition eine Latenz von 3 Zyklen hat, führt der Prozessor alle 3 Zyklen eine Addition aus. Die CPU-Auslastung beträgt 100 %, aber die CPU leistet tatsächlich nicht so viel Arbeit.
In der zweiten Schleife gibt es ebenfalls alle drei Zyklen eine Iteration, aber da die Additionen unabhängig sind, führt der Prozessor alle drei Zyklen drei Additionen aus und leistet damit dreimal mehr Arbeit. Die CPU-Auslastung beträgt immer noch 100 %, aber dreimal mehr Arbeit erzeugt viel mehr Wärme.
Daher entsteht mehr Wärme bei Code, der in jedem Zyklus mehr der verfügbaren Rechenressourcen nutzt.