PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : HT - ein kompletten Kern mit einem Thread auslasten


Ulf
2012-02-27, 17:57:26
Hallo,

ich arbeite unter Linux mit einem i7 2630QM. Der hat 4 Kerne und kann durch HT 8 Threads gleichzeitig bearbeiten.

Wenn ein Thread die maximale Rechenleistung benötigt, sollte doch 25% der CPU ausgelastet sein, es ist allerdings nur ein Achtel der CPU ausgelastet. Ist der Kern, auf dem der Thread läuft, dann durch HT wirklich nur zur Hälfte ausgelastet?
Oder wird das von Linux (z.B. Top) nur falsch angezeigt?

AnarchX
2012-02-27, 18:54:52
Ein Thread lastet den Kern soweit aus wie möglich. Dass kann nahe 100% sein, aber auch deutlich darunter, je nach Anwendung.

Anwendungen die stärker von HT profitieren, lassen mit ihren einzelnen Threads meist ein Teil der Ressourcen eines Kerns brach liegen.

Hier gibt es noch ein paar weiterführende Infos: http://de.wikipedia.org/wiki/Simultaneous_Multithreading

PatkIllA
2012-02-27, 19:05:16
Die Anzeige wird einfach der Anteil von idle zu belegt sein die der Scheduler pro logischem Kern hat. Auch wenn ein Thread für komplette Auslastung eines Kerns erreicht liegt trotzdem ein Großteil der Einheiten brach.

xxMuahdibxx
2012-02-27, 19:52:10
8 Threads = 12,5 % Leistung der CPU pro Thread ....

4 Kerne = 25 % Leistung ...

Bei dir wird ein Thread voll ausgelastet mehr halt nicht .

Ulf
2012-02-28, 11:09:03
Um etwas genauer zu werden, habe ich das kurz selber getestet:

Aufgabe war es, eine Berechnung (Wurzeln, Logarithmus, Multiplikationen) sehr oft auszuführen.

Nachfolgend ist die Zeit aufgelistet, die die CPU gebraucht hat, wenn das in einem, zwei, vier oder acht Threads berechnet wurde:

threads: 1
time: 73.6964 sec
----
threads: 2
time: 38.039 sec
----
threads: 4
time: 20.5514 sec
----
threads: 8
time: 16.3596 sec
----


Linux zeigte mir ziemlich genau eine Auslastung von 100/#Threads % an. Bis zu vier Threads scheint sich das schön aufzuteilen. Dass es nicht ganz linear ist, scheint an TurboBoost zu liegen.
Allerdings nutzt 1 Thread tatsächlich nicht nur 1/8 der Leistung, sondern etwas weniger als ein Kern.

Lohnt sich dann aber HyperThreading überhaupt? Welche Anwendung läuft denn mit 8 Threads und lastet die CPU komplett aus? Fast alle meine Anwendungen sind single-Thread Anwendungen. Wenn man mal annimmt, dass durch 4 Threads im Vergleich zu 8 Threads (s.o.) ca 4 Sekunden flöten gehen und das hochrechnet, würde eine single-Thread Anwendung ohne HT nur 58,6 Sekunden benötigen, oder anders gesagt: single-Thread Anwendungen sind bis zu 20% langsamer auf HT-CPUs! Ok, das ist jetzt vllt etwas gewagt und bezieht sich nur auf die obigen Ergebnisse. Aber kommt das in etwa hin?
Oder muss man das anders formulieren: die gleiche CPU ohne HT würde bei einem Thread genauso 74 Sekunden benötigen, die HT-CPU ist aber dann bei 8 Threads schneller?

mr coffee
2012-02-28, 11:54:53
Oder muss man das anders formulieren: die gleiche CPU ohne HT würde bei einem Thread genauso 74 Sekunden benötigen, die HT-CPU ist aber dann bei 8 Threads schneller?

Genau so ist es. Im Endeffekt hilft HT bei massiv parallelen Berechnungen die 4 "echten" Kerne besser auszulasten und so hast du einen Geschwindigkeitsvorteil.

Ulf
2012-02-28, 13:00:36
Ok, danke!