Hallo zusammen! Ich wollte mal fragen, ob ich es richtig verstehe, dass in meinem Fall hyperthreading stört…
Und zwar benutze ich eine Simulationssoftware, die bis zu 4 Threads gleichzeitig verwenden kann. Meine CPU ist ein i7 mit 4 Kernen und 8 Threads durch hyperthreading. Wenn die Simulation läuft, ist meine CPU zu 50% durch diese ausgelastet.
Wenn ich hyperthreading jetzt ausschalte, wird dann damit die CPU zu 100% verwendet, weil die 4 Threads exakt auf die 4 Kerne passen, oder habe ich da etwas übersehen? Das sollte ja die Rechenzeit etwa halbieren.
Wenn ich hyperthreading jetzt ausschalte, wird dann damit die CPU zu 100% verwendet, weil die 4 Threads exakt auf die 4 Kerne passen
Ja, wird dann so aussehen.
Das sollte ja die Rechenzeit etwa halbieren.
Nein. Du gehst von 4C/8T (4 cores / 8 threads) und 4 threads im Programm auf 4C/4T und 4 threads im Programm. Es wird prinzipiell nicht schneller, du belegst jetzt halt 4 von 4 threads und nicht mehr 4 von 8.
Ja gut, dass ich hier frage. Die Sache ist halt, dass jeder thread des Programms 12,5 der CPU auslasten, da ist dann ja noch was frei…
Und wenn du Hyperthreading ausschaltest entfernst du diese frei Kapazität statt sie zu nutzen.
Ich kann sie ja so oder so nicht nutzen.
Ich glaube einfach, dass ich noch nicht so ganz verstanden habe, was hyperthreading tatsächlich tut. Ich dachte bisher, dass damit quasi ein Kern seine Rechleistung auf zwei Aufgaben parallel aufteilt und daher nur dann vollständig verwendet wird, wenn ausreichend viele Aufgaben anstehen. Da die Simulation nur 4 threads unterstützt, dachte ich, dass dadurch die halbe CPU ungenutzt ist.
Ist wohl noch so und ich probiere es einfach mal aus.
Hyperthreading ist im Prinzip ein Mittelding zwischen einem und zwei Cores, ein paar Teile der Hardware sind doppelt vorhanden, die meisten nicht. Das ganze ist sehr hilfreich wenn man z.B. weniger CPU-lastige Tasks hat da man dann ohne erst aufwändig Context-Switch in Software machen zu müssen die gleiche Hardware für einen zweiten Task verwenden kann während der erste auf z.B. ein Laden von Daten aus dem RAM wartet und wenn die Daten dann da sind kann der erste weiter arbeiten während der zweite z.B. gerade seine Daten an die Festplatte schickt usw.
Hyperthreading macht nicht aus 4 Kernen plötzlich 8. Es erlaubt lediglich mehr oder weniger 2 Aufgaben gleichzeitig auf einem Kern laufen zu lassen was im Bestfall ~20% extra Leistung für einen recht geringen Hardware Aufwand bringt. Also auch wenn HT aktiviert ist, sollte ein Programm mit 4 Threads die CPU mehr oder weniger vollständig auslasten können. Es gibt allerdings einige Programme, die immer noch nicht gut mit HT klar kommen, also zb zwei Hauptaufgaben über HT auf dem selben Kern laufen lassen und so letztlich langsamer laufen als ohne HT. Sollte aber bei moderner Software wirklich selten sein, HT gibt es schließlich seit über 20 Jahren.
Das könnte hier der Fall sein, denn jeder thread macht 12,5% der CPU Nutzung aus…
Als erstes würde ich hinterfragen, wie diese Auslastung bestimmt wird, auf die du da schaust. Das hängt ziemlich sicher von der jeweiligen Monitoring Anwendung ab.
Windows task Manager… bisher hat das immer Sinn ergeben, wenn ich Benchmarks laufen lasse, die alles auslasten, geht der auf 100% hoch.
50% wenn du 4 Cores zu 100% und 4 Cores zu 0% ausnutzt ergibt doch auch Sinn. Und 12.5% für jeden der Threads die jeweils 1/8 deiner Cores voll auslasten.
So einfach und pauschal kann man das nicht sagen.
Am einfachsten wäre ein Praxis Test.
Simulieren einen Fall einfach Mal mit mal ohne HT.
Beachte jedoch, in der Praxis sind leistungsabfälle in meinen Augen wahrscheinlicher, da ja auch novh andere Prozesse auf dem Gerät laufen müssen die dann mit der Anwendung stärker konkurrieren
Ich werde es wohl testen müssen. Ja davon gehe ich aus, der Rechner wird während der Simulation wohl nicht nutzbar sein.
Du meinst, deine CPU verwendet nicht die hälfte der Threads von allen kernen, sondern alle Threads von der hälfte der Kerne? (im rendern mit alten CAD-Systemen leider auch noch verbreitet)
Solltest du unter Windoof unterwegs sein, kannst du Testweise das auch einfach “erzwingen”, indem du im Task-Manager unter Details - rechtsklick auf Dienst - Zugehörigkeit festlegen, und dann nur die geraden angewählt lässt. Dann hast du weiterhin HT Threads für alles andere offen.
Du hast es so formuliert, wie ich es nicht konnte! So firm bin ich was diese Themen betrifft dann doch nicht.
Habe das mal ausprobiert und die 4 Dienste der Reihe nach CPU 0,2,4 und 6 zugeordnet, allerdings hat sich da nichts geändert, immer 12,5% Auslastung. Wenn ich zwei Dienste auf die gleiche CPU lege, geht die Auslastung pro Dienst auf 6,2% runter, das ergibt dann auch Sinn.
Mein BIOS ist passwortgeschützt und die IS will nicht, dass ich daran rumspiele, also bleibt es halt so, wie es ist.
Trotzdem danke für den Input und ich habe etwas gelernt!
Das klingt dann doch fast so, als ob deine Software schon alles richtig macht und jeden Kern, wenngleich nicht alle Threads belegt. Dann mag der Task Manager zwar nur 50% anzeigen, aber defacto ist sind alle deine Kerne bereits ausgelastet/beschäftigt.
Ich dachte halt, dass bei ausgeschaltetem HT jeder Kern die doppelte Leistung bringt, weil er halt weniger threads bearbeiten muss. Das scheint aber nicht der Fall zu sein…
Zusätzlich zu dem Gesagten bedenke auch, dass Deine Software nicht alleine läuft. Du hast auch noch verschiedene Aufgaben vom Betriebssystem, die parallel zu der Simulation laufen.