Intel CPU Multi Threading - Leistungsbremse für normale Programme?

MainboardFreund

Neuling
Thread Starter
Mitglied seit
09.04.2008
Beiträge
41
Ich besitze einen 6-Kerner von Intel und mir ist etwas unangenehm aufgestoßen. Vorher hatte ich nur normale Prozessoren, wo jeder Kern einen Thread hatte. Normale Programme haben ihn zu 25% ausgelastet, also einen Kern beansprucht. Meine neue Workstation besitzt einen aktuellen 6-Kerner. Dort gibt es 12 Threads, also 2 pro Kern. Mir ist aufgefallen, dass meine Programme nur noch mit 8% Auslastung arbeiten. 100/8 macht ca 12, was auf die volle Auslastung eines Threads schließen lässt. Das würde theoretisch heißen, dass nur ein Kern zu 50% ausgelastet ist oder mache ich da einen Denkfehler? Wäre es also ratsam im UEFI oder BIOS diese Funktion zu deaktivieren?
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Vielleicht kann das besagte Programm (welches?) einfach nicht mit mehr als mit einem Thread umgehen? Hast du mal geschaut, wie sich die 8% verteilen? Sind die auf nur einem Thread?
 
Und wenn die neue CPU weitaus stärker ist (SNB EP statt vll einem Yorkfield), dann ist freilich auch die Last geringer per Core.
 
Mir ging es hier um Programme, die tatsächlich nur einen Kern benutzen können. Sagen wir mal, Programm X lastet einen Kern von einem alten Yorkfield 100% aus. Dann müsste doch 100% bei einem Thread bzw. 8% 6-Kern-Leistung nur ein halber Kern beansprucht werden, oder?
 
Ein Prozess lastet einen Kern eigentlich nie wirklich voll aus, was daran liegt, dass moderne Prozessoren aus vielen spezialisierten Teilen besteht, die selten gleichzeitig benötigt werden. Mit Hyperthreading werden sonst ungenutzte Bereiche eines Kerns für andere Prozesse nutzbar gemacht. Dadurch wird aber nicht die doppelte Leistung erzielt, weil sich gewisse Operationen bei mehreren Threads nicht parallelisieren lassen. Man kann also auch nicht automatisch sagen, dass ein Prozess einen Kern mit HT nur zu 50% auslastet, eine genau Angabe ist allerdings sehr schwierig.

Der Yorkfield beherrscht kein HT, dort liegen also gewisse Teile des Kern oftmals brach.
 
Mir ging es hier um Programme, die tatsächlich nur einen Kern benutzen können. Sagen wir mal, Programm X lastet einen Kern von einem alten Yorkfield 100% aus. Dann müsste doch 100% bei einem Thread bzw. 8% 6-Kern-Leistung nur ein halber Kern beansprucht werden, oder?

6 Kerne mit HT: 12 Threads: 100/12=8,5%. Also ein ganzer Thread, nicht ein halber. Warum die Last geringer per Core sein soll wie y33H@ schreibt, erschließt sich mir nicht. Ich denke, sie sollte gleich hoch sein und dafür ist die neue CPU mit mehr Takt bzw. IPC halt schneller fertig.
 
Es werden seit XP SP3 oder so immer zuerst die "realen" Cores mit Threads ausgelastet. Dabei ist die Leistung gleich hoch wie bei ausgeschaltetem HT. Erst wenn alle realen Cores ausgelastet sind, können dann noch freie Ressourcen mit den zusätzlichen Threads genutzt werden. Es ergibt sich insgesamt durch die zusätzliche Nutzung der ansonsten ungenutzten Ressourcen ein Leistungsplus von etwa 20-25% (ohne jetzt allzu genau zu sein). Auf Single-Threaded Software hat HT keinen Einfluss.

Die prozentuale Angabe in Windows ist kein reales Maß. Ein vollausgelasteter Thread kommt auf 8% = 100/12, obwohl nicht die Performance von 12 cores anliegt, sondern von etwa 8-10 cores. Real geht die Auslastung daher Richtung 10-12% beim ersten ausgelasteten Thread. Erst ab ca. 60% Auslastung kommen die zusätzlichen Threads ins Spiel. Das Ganze ist daher etwas asymmetrisch.

Lass Dich nicht verwirren, das hat alles seine Richtigkeit und die CPU profitiert definitiv von HT, mit dem korrekten Scheduler gibt es keine Slowdown-Effekte durch das verwenden "virtueller" cores. Nur der Windows-Hardwaremanager kann dies nicht abbilden, er unterscheidet in der Darstellung nicht zwischen zusätzlichem Thread und echtem Core...
 
Warum die Last geringer per Core sein soll wie y33H@ schreibt, erschließt sich mir nicht. Ich denke, sie sollte gleich hoch sein und dafür ist die neue CPU mit mehr Takt bzw. IPC halt schneller fertig.

Naja, aber das würde zu Grunde legen, dass jedes Programm sequentiell endet. Es gibt ja Programmteile, die über einen bestimmten Zeitraum eine bestimmte Aufgabe erfüllen, hier würde die Auslastung der CPU einfach nur sinken, weil sich die neuere CPU dafür weniger "anstrengen" muss. Die Welt besteht ja nicht nur aus SuperPi. ;)
 
Ich fand das nur komisch, weil die theoretische Auslastung 16-17% hätte sein müssen. Meine reinen "Single-Prozesse" beißen sich alle bei 8% fest. Selbst wenn ich mehrere gleichzeitig laufen lasse, liegen alle je bei 8%.
 
Warum denn 16-17%? Du hast 12 Threads, und 100% geteilt durch 12 (singlethreaded, nur einen Thread belastend) gibt nicht 16-17, sondern 8,5.
 
Ich glaube, er versteht nicht so recht, wie die Auslastungsanzeige funktioniert.

Du hast 6 Cores, jeder Core ist in der Lage 2 Rechenaufgaben zur gleichen Zeit auszuführen. Damit hast du 12 Threads (Rechenaufgaben) im Taskmanager(TM).

Jetzt ist es so, dass eine Rechenaufgabe alleine auf einem Core schneller ist als 2x die selbe Aufgabe auf logischen Unterteilungen des Core.
Nehmen wir also an, dass die Rechnung auf nem Core 10secs braucht, dann braucht diese selbe Aufgabe(2x ausgeführt) auf den logischen Parts dann jeweils 15secs. (ein Teil der Recheneinheiten, die bei der 1. Version aktiv waren, werden für die 2. Rechnung benötigt und daher abgezogen; die Werte sind mal Beispielhaft)

Und jetzt kommt der Trick. Beide Rechnungen lasten ja den jeweiligen Part des Prozessors voll aus. Der TM registirert das und stellt fest, dass der Core mit seinen 2 logischen Parts jeweils die Rechenaufgabe haben und dabei ihre ganze Kraft (CPU Zeit) dafür aufwenden müssen. Der TM gibt damit jeweils eine Last von 100% auf dem Teilen aus, also 2x der coole Graph mit Vollanschlag.

2/12 sind also unter vollast. Das sind 1/6=16,6667%. Diese Last würde für 15Secs anliegen, dann wäre der Graph wieder bei 0. Das gilt für 2 Rechnungen.

Nun hast du aber nur eine Rechnung (singlethread). Auch diese Rechnung zieht den Core, aber diesmal nur einen logischen Part, wieder auf vollast. Dass der Core dabei alle Recheneinheiten für diese Aufgabe nutzen kann, ist dabei unerheblich. Fakt ist, dass diese Rechnung wieder Vollast für den Core ist und damit die gesamte CPU Zeit in Anspruch nimmt. Im TM sieht das dann so aus, dass ein Graph auf 100% geht und der Rest bei 0 bleibt.

Du hast also 1/12 = 8,33%. Der Unterschied ist, dass diese Last dann nur für 10Secs anzieht.

Der TM kann nicht erkennen, wieviele Teile des Cores denn nun wirklich rechnen, das geht ihn auch nichts an. Das einzige was er sieht, ist die Rückmeldung, dass dieser Thread grade voll läuft und es keine Pausen für diesen Core gibt.

Dein Problem ist, dass du denkst, dass bei der Belegung nur eines logischen Parts der CPU die CPU sämtlichen internen Bestandteile für eine Rechnung nehmen kann und dies der TM auch mitbekommt(und der TM dann eigentlich anzeigen müßte, dass log. Part 1 und log. Part 2 auf Vollast laufen), dies ist nicht der Fall. Hat ein Core also 100% Rechenkraft, so wird bei einer Rechnung zB nur 66% dieser Kraft genutzt, die anderen kann er nicht nutzen. Hat man nun eine 2. Aufgabe zum Rechnen, geht der Core hin und nutzt diesen Rest auch noch. Hier kommt sind es dann aber nicht 66%+33% sondern eben zB 50%+50%.

Geht man also davon aus, dass ein Core 66% seiner Rechenkraft für einen Thread nutzen kann, so sind das bei 6 Core 11% der Gesamtkraft und eben nicht 17%, denn diese würden bedeuten, dass er 100% seiner Recheneinheiten für einen Thread nutzen könnte.
(die Werte sind Beispielwerte)

Nur obliegt diese Verwalten der internen Recheneinheiten allein der CPU und der internen Verwaltung. Das ist nicht einsehbar vom Betriebssystem. Das einzige was das BS sieht, dass es ggf. schneller fertig ist. Nur kann der TM das nicht über längere Zeiten loggen, sondern immer nur Momentanwerte ausgeben.

Daher sind das eben 1/12 der verfügbaren Threads.

Ich hoffe das erleuchtet dich.
 
Zuletzt bearbeitet:
Warum denn 16-17%? Du hast 12 Threads, und 100% geteilt durch 12 (singlethreaded, nur einen Thread belastend) gibt nicht 16-17, sondern 8,5.

Ich habe mich dumm ausgedrückt. Es ging mir um die Anzeige des Prozess. Die Rechnung mit den 100/8 habe ich weiter oben schon selbst gemacht. Mir ging es erstmal nur um die Zahl. Sagen wir mal, ich habe einen alten Quad Xeon, der nur einen Thread pro Kern hat und einen Quad Sandy Bridge mit 8 Threads. Ich mache mit meinem Programm auf dem XEON eine normale Rechenoperation und dieser zeigt dann unter Prozesse glatt 25% an. Bei dem Sandy Bridge allerdings nur zwischen 12-13, sprich ein Thread auf Anschlag.

Ich habe mir underclocker2k4's Beitrag durchgelesen und noch nicht komplett verstanden. Die Frage, die sich mir in der oben liegenden Situation stellt ist, ob der Xeon bei einer Single-Operation schneller ist als der Sandy Bridge oder Windows die Prozentanzeige einfach nur falsch anzeigt, weil der eine Thread mehr Leistung addressiert bekommt, da der zweite Thread nichts zu tun hat.

Ich bedanke mich auf jeden Fall schon einmal für die Ausführliche Hilfe, finde ich wirklich klasse.
 
Von welchem Xeon sprichst du denn konkret?
Die quad Xeons, von denen du wahrscheinlich sprichst, sind alles CPUs mit HT, nur ist dieses deaktiviert. Die laufen also mit angezogener Handbremse. Die letzten großen CPUs, die wirklich kein HT inkludiert hatten, sind aus der P4 Zeit und das ist nun schon ein paar Jahrhunderte her.

Nur weil das weniger in Windows anzeigt, heißt dass nicht, dass da weniger los ist.

Windows zählt nicht, wieviele Recheneinheiten denn nun grad in der CPU laufen, sondern es sieht nur, ob ein Kern(log. PArt) grad volldampf hat, oder nicht. Wie schnell er wirklich ist, wird dort nicht dargestellt.
(10secs vs 15secs)
Daher ist der TM auch kein Benchmarktool, sondern nur so ne grobe Richtung.

Benchen=wieviel Zeit braucht eine standardisierte Rechnung=wie schnell ist das Teil

EDIT:
Du denkst, der TM kann erkennen, dass von 100mio Recheneinheiten grad 10mio in Benutzung sind, das ist nicht der Fall. Der TM kann nur sehen, dass grad eine Teil der CPU volle Last hat, ob er nun dafür eine oder 10mio Recheneinheiten für diese Aufgabe benutzen kann, geht daraus nicht hervor. In jedem Fall (1 oder 10mio) wäre die Anzeige 8,5%(bei nem 6coreHT).
 
Zuletzt bearbeitet:
Im Prinzip weiß ich jetzt das, was ich wollte. Die Anzeige im TM kan man knicken :) Ich weiß nicht ganz genau, was es für ein XEON ist. Im Prinzip auch fast egal, da es mir nur um die Anzeige ging. Der eine hat 4 Balken und der andere 8, obwohl beide 4 Kerne haben und theoretisch bei dem gleichen Programm unter Prozesse die selben Auslastungswerte stehen müssten, steht dort etwas anderes. Nur wenn die Werte nicht stimmen, dann ist es okay. Ich hatte bloß angst, dass der neue Prozessor schlechter ist als der Alte bei einfachen Operationen.

Beim Rendern hat der neue ganz klar um längen die Nase vorn, da alles ausgelastet wird, was da ist. Ich kenne es nämlich von den Nvidia Karten, dass die neuen z.T. schlechter bei Profiprogrammen abschneiden, wie die alten oder bei einigen SSDs die Firmware so geändert wird, dass große Dateien schneller kopiert werden auf Kosten von kleinen Paketen.
 
Zuletzt bearbeitet:
Für CPUs gibt es daher auch immer einen SingleThread Benchmark. Damit kann man erkenne, was die CPU mit einer Anwendung in Ausführung zu leisten vermag. Da kommt kein HT oder mutlicore zum Tragen. Wenn man zB 4 von diesen SingleThreads auf einem (aktuellen) Quad startet, dann zeigen alle das selbe an. Die CPU läuft aber trotzdem zu 50%, obwohl Beispielhalber 66% aller Recheneinheiten genutzt sind. Erst bei 8 Anwendungen kommt es vor, dass wirklich alles genutzt wird, was da ist. Also 100% im TM und auch 100% aller Recheneinheiten. (letzteres ist eine Wunschvorstellung, aber prinzipiell)

Den TM kann man auch nicht knicken, er zeigt wunderbar an, wieviel CPU Zeit für eine Anwendung drauf geht, das kann ein wichtiges Indiz sein. Du willst aber die Schnelligkeit einer CPU beurteilen, dafür gibt es und gab es passende Benchtools. Du hast nur das falsche Tool für deinen Wissensdurst genommen. (TM!=Benchmark)
 
Zuletzt bearbeitet:
Der eine hat 4 Balken und der andere 8, obwohl beide 4 Kerne haben und theoretisch bei dem gleichen Programm unter Prozesse die selben Auslastungswerte stehen müssten, steht dort etwas anderes. Nur wenn die Werte nicht stimmen, dann ist es okay. Ich hatte bloß angst, dass der neue Prozessor schlechter ist als der Alte bei einfachen Operationen.

Nein, einfach betrachtet hat ein Prozessor (Quadcore) mit HT 8 Kerne, also wenn nur ein Kern ausgelastet wird, sind das also 12,5 %. Dies entspricht bei einem Quadcore-Prozessor ohne HT 25 %.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh