Prime95, Coretemp, Threads und Stromsparmodus

alex_bo

Lt. Commander
Registriert
Dez. 2011
Beiträge
1.132
Hallo,

ich möchte mich für den Titel entschuldigen, leider ist mir nichts Sinnvolleres eingefallen.

Es geht um Folgendes:

Ich habe mir das Tool Core Temp heruntergeladen, um bei Prime95 die Kerntemperaturen meiner CPU zu überwachen. Dabei ist mir aufgefallen, dass das Tool auch die Auslastung der einzelnen Kerne anzeigt. Nun habe ich bei Prime einen einzelnen Worker gestartet und dabei ist mir aufgefallen, dass es nicht so ist wie ich in meiner kindlichen Naivität vermutet hatte. Nämlich dass ein Kern zu Hundert Prozent ausgelastet wird, während die anderen Kerne komplett abgeschaltet werden. Ich dachte immer, dass darauf die Sparsamkeit von SB beruht.
Stattdessen laufen alle Kerne parallel und kommen insgesamt circa, lässt sich leider schwer sagen, auf '100% eines Kerns'. (zB core0 26%, core1 19%, core2 24%, core3 31%)

Nun die Frage: Wenn sowieso durch den einen Thread/Worker alle Kerne angesteuert werden, wieso werden dann nicht alle Kerne 100% ausgelastet ? Das wäre doch logisch, um diese eine Aufgabe schnellstmöglich zu bewältigen. Ich gehe mal davon aus, dass Prime95 quasi unendlich viel Last/Aufgaben nachschieben kann.

Desweiteren ist mir daraufhin aufgefallen, dass im normalen Windows idle-Betrieb alle Kerne immer wieder angesteuert werden. Es also nicht so ist wie ich vermutete, dass 3 Kerne abgeschaltet und die Powergates geschlossen werden und der verbliebene Kern den geringen aufkommenden Workload (Systemprozesse, Firefox etc.) bewältigt.

Stimmt die Anzeige nur nicht oder was ist da los? Ist am Ende mein Bios falsch eingestellt oder defekt?

Kann mir dazu jemand was sagen, eventuell auch nen Link zu nem Fachartikel geben, ich habe leider nichts gefunden.

Vielen Dank für eure Hilfe.
 
Zuletzt bearbeitet:
Ok das erklärt warum immer wieder Kerne im Idle aufgeweckt werden, obwohl 'der Wache' nicht annähernd ausgelastet ist: Um die Reaktionszeit gering zu halten. Aber was ist mit dem Prime95 Worker ?

Ich verstehe warum es technisch Sinn macht einen Prozess zu splitten und auf Kerne aufzuteilen, was ich nicht verstehe ist, warum die Kerne dann nicht mehr belastet werden, sondern Quasi künstlich einen Kern simulieren. Also wenn es möglich ist, den einen Worker auf mehrere Kerne zu verteilen, warum nutzt er diese Kerne dann nicht komplett ?
 
Zuletzt bearbeitet:
Weil der Programmierer des jeweiligen Programms zu faul war :P Es muss Multithreadet programmiert sein damit es mehrere Kerne nutzen kann.
Aber das können dir andere sicher besser erklären hab von Programmierung nicht viel ahnung. Habs eine weile versucht zu lernen aber zuviel aufwand zuwenig ergebniss.:)
Warum es technisch nicht möglich ist einen Thread zu splitten und damit alle Kerne voll auszulasten kann ich dir nicht sagen.
 
Ok, danke dir trotzdem für deine Mühe.

Das ist ja gerade das, was ich nicht verstehe: Laut der Anzeige WIRD der Prozess gesplittet und auf alle Kerne aufgeteilt, nur dass die sich quasi alle stur stellen und ihm insgesamt nur soviel Rechnpower zur Verfügung stellen wie er bekommen würde, würde er nur auf einem Kern laufen.

Ich gehe mittlerweile davon aus, dass einfach die Anzeige nicht stimmt. Das macht einfach keinen Sinn so.
 
Zuletzt bearbeitet:
Ich vermute man will damit verhindern das ein teil des Threads zu schnell abläuft oder das für die Berechnung die Ergebnisse vom anderen Teil des Threads notwendig sind. (wie du selbst gemerkt hast kann ein Thread ja nicht absolut gleichmässig aufgeteilt werden)
Aber mal sehen was andere sagen.
 
Zuletzt bearbeitet:
Rechne mal und schau in TaskManager.
1Kern =100%=25% Prime
Teilst diesen auf 4 Kerne auf,kommst auf 4x25%
Nix anderes ist es bei Prime wenn du nur einen einzelnen Worker Startest.

Startest z.b. 2 Worker,so werden die Kerne alle 4 zu 50% belastet und so weiter.
Willst nur ein Kerne Verwenden musst ne feste Zuweisung machen.
 
Zuletzt bearbeitet:
wenn du bei prime einstellst, dass du nur 1 thread startest...startet prime eben auch nur einen thread der einen kern zu 100% auslasten würde

der scheduler von windows verteilt diese auslastung aber eben auf alle verfügbaren kerne, somit hast du zB 25% gesamtauslastung bei nem quad
die leute die sich das system ausgedacht haben werden sich auch schon was dabei gedacht haben...spontan würde mir da einfallen, dass bei sprungvorhersagen auch mal was schief gehen kann und man so einfach auf den nächsten kern switcht ud sich so das leeren der pipeline spart

es ist aufjedenfall alles okay und es wird auch alles richtig angezeigt, wenn du willst dass nur 1 kern ausgelastet wird, dann musst du das manuell im taskmanager zuweisen

mit der programmierung hats hier in dem fall übrigens nix zu tun, die prime-threads sind schon so aufgebaut, dass sie unabhängig voneinander laufen
 
Zuletzt bearbeitet:
Einen Thread nur einem Kern zuweisen mußt Du manuell im Taskmanager machen, sonst regelt, wie erwähnt, der Scheduler das.
Im Beispiel habe ich den Prime Thread dem 9 Thread der CPu zugewiesen.
 
Zuletzt bearbeitet:
Ok, also ich habe mir das ganze Mal durch den Kopf gehen lassen und bin zu dem Schluss gekommen, dass ich Recht hatte (aber eher zufällig): :D

alex_bo schrieb:
Ich gehe mittlerweile davon aus, dass einfach die Anzeige nicht stimmt.

Der Prime95 Worker ist ein Single-Thread Process. Er kann nicht mehrere Kerne gleichzeitig in Anspruch nehmen. Das Zauberwort hier ist 'gleichzeitig'. In der Anzeige sieht es so aus, als ob er auf mehreren Kernen laufen würde tut er aber nicht. Um die Temperatur gleichmässig zu halten (und vielleicht auch aus Performance-Gründen) wird er vom Prozessmanager die ganze Zeit im Millisekunden-Breich von einem Kern auf den nächsten geswitched. Da die Anzeige natürlich nicht so schnell reagiert, wird die Auslastung über ein zeitliches Mittel angegeben. Würde man das ganze in Zeitlupe betrachten, würde man sehen, dass ein Kern nach dem anderen zu 100% ausgelastet wird und sofort der Prozess wieder auf einen andren transferiert wird. Somit kann die CPU vollen Turbo fahren, ohne dass ein Kern überhitzt. Eigentlich voll clever. (Ich bin wahrscheinlich auch der einzige ders nicht verstanden hat :D)

Eins muss man den Intel-Fritzen lassen: Sie kennen den Weg der Samurai! :daumen:
 
Zuletzt bearbeitet:
Du hast mich neugierig gemacht und ich habe ein wenig nachgeforscht. Nach einiger Zeit bin ich auf dieses Pdf gestossen.
Es behandelt verschiedene Scheduling Strategien, unter anderem die von dir erwähnte Zyklische Scheduling Strategie.
Im Grunde liegst du richtig nur die Begründung ist falsch. Es geht nicht darum einen höheren Turbo fahren zu können sondern um den Prozessor bestmöglich auslasten zu können. Wie du ja schon bemerkt hast wird ein Thread nur für kurze Zeit einem Kern zugewiesen beispielsweise 10 Millisekunden, danach geht es zurück in die Warteschleife und wird es möglicherweise wieder einem anderen Kern zugeteilt. Nun fragt man sich ja warum man den einen Thread nicht einfach auf einem Kern laufen lässt bis es fertig ist. Nun angenommen es wird nicht gesplittet und wir haben einen Quadcore. Nun starten wir ein Programm dass alle vier Kerne benötigt beispielsweise Prime95. Es gäbe zwei Möglichkeiten.
Möglichkeit A:
Der Prozessor arbeitet solange bis die Aufgabe fertig ist. Nachteil: du könntest nichtmal den Mauszeiger bewegen weil der Prozessor keine neuen Aufgaben annimmt solange die letzte Aufgabe nicht fertig ist oder ein freier Kern zur verfügung steht.
Möglichkeit B:
Um beim Beispiel mit Prime und dem Mauszeiger zu bleiben: alle Kerne werden ausgelastet aber sobald du eine andere Aufgabe ausführen willst wie den Mauszeiger zu bewegen müsste Prime solange angehalten werden.
Nachteil: der Prozessor kann nicht richtig ausgelastet werden.


Um die CPU bestmöglich auszulasten gibt man einen Thread beispielsweise 10ms Zeit danach wird er angehalten und wieder in die Warteschleife geschickt. So hat jeder Thread die gleiche Priorität und du könntest selbst wenn Prime auf allen Kernen läuft noch andere Aufgaben nebenbei erledigen.
Beispielsweise läuft für 10ms Prime auf allen Kernen, die nächsten 10ms der Mauszeiger auf einem Kern und prime auf den anderen 3 Kernen. Danach wieder Prime auf allen Kernen.
 
Ah ok, damit ist die Frage beantwortet.

Ich glaube das Problem ist, dass man zu analog denkt. Man geht irgendwie unterbewusst von einer Art Massenträgheit aus und denkt somit, dass es Ineffizient wäre, einen Prozess zu stoppen und dann wieder neu zu starten. Dabei gibt es in Wirklichkeit gar keine Verzögerung, der erste freie Instruktions-Slot wird sofort besetzt.

Dann ist auch die 2. Frage beantwortet: Nämlich es ist so, dass im Idle tatsächlich immer 3 Kerne komplett abgeschaltet sind und einer ist aktiv. Aber dieser 'Aktive' wechselt alle paar Millisekunden. Man überschätzt auch hier wohl die Zeit, die der Kern braucht um "Hoch- und Runterzufahren".

Super, wieder was gelernt, vielen Dank.
 
richtig wen man sich alte rechner anschaut
gabs diese arbeits lags sogar weils einfach alles viel langsamer abging.

allerdings gibts da noch eine variable ^^
du könntest in eurem beispiel der mauszeiger
auch eine erhöte priorität zusprechen!

somit gibt es aufgabe eins die ca 20 minuten full last bräuchte! das tagesgeschäft.
dann gibt es zwischen aufgabe die zb 20 sec brauchen!

da es käse ist so lange zu warten schiebt man die kurz prozesse als priorität rein!

durch die verschiedene prioritäten kann man dann zb eine cpu max auslasten ohne das mauszeiger oder sonst was stockt!
 
Zurück
Oben