Wie viel bringt Hyperthreading wirklich?

Alter.

Gehen wir also von einer Single-Threaded-Applikation aus.
Eine Single-Core CPU wird zu 100% ausgelastet.
Eine Dual-Core CPU hat EINEN ihrer Kerne zu 100% ausgelastet, ist also zu 50% ausgelastet.
Hat diese CPU nun HT, bedeutet dass lediglich, dass jeder Kern zur Performancesteigerung in zwei virtuelle Kerne aufgeteilt werden kann.
Die Dual-Core HT CPU würde nun ebenfalls nur einen physischen Kern zu 100% auslasten.
Da es sich ja schließlich eine Single-Threaded-Applikation handelt, läuft das Ganze natürlich auch nur auf einem virtuellen Kern. Der zweite virtuelle Kern des physisch zu 100% ausgelasteten Kerns ist dann auch nicht mehr zu berücksichtigen.

HT führt also keinesfalls zu Leistungseinbußen, alles bleibt beim alten. Es gibt nur die Chance, Programme mit mehreren Threads effizienter abzuarbeiten.
 
OK. Ein virtueller Kern lastet seinen übergeordneten physischen Kern zu 100 % aus. Hyperthreading wird sozusagen deaktiviert, da der physische Kern nun von nur einem seiner beiden virtuellen Kerne zu 100 % und nicht via Hyperthreading von seinen beiden virtuellen Kernen gleichmäßig, jeweils zu 50 % ausgelastet wird.

Danke,
 
Vereinfacht! kann man HT so erklären:

Du hast ein Rohr mit 10cm Durchmesser (maximale Leistung eines Kerns). Das Betriebssystem schickt nun Wasser (Daten) in schnellen, kurzen Stößen durch das Rohr. Da es kein kontinuierlicher Wasserfluss ist, hat die CPU kurzzeitige Pausen. HT simuliert nun einen zweiten Kern, den das OS ebenfalls mit schnellen, kurzen Wasserstößen versorgt. Der HT Controller sorgt nun dafür, dass beide Zuflüsse zusammengelegt werden, um den Raum zwischen den Wasserstößen zu füllen.

Bildlich:

SingleCore ohne HT = -- -- -- -- -- -- --
SingleCore mit HT = --------------------

Da HT dem OS als echte Kerne vorgegaukelt werden, müssen Programme nur mehr als einen Kern unterstützen, damit HT funktioniert. Speziell angepasste Programme sind nicht mehr nötig.

Vergleich:
Mein PC mit 3,5GHz i5 braucht für ein 2Std Video 176min zum Rendern.
Mein iMac mit 3,5GH i7 braucht für das selbe Video 58min. (unter BootCamp)

Alles ohne CUDA, reines Softwareencoding.
 
Ich hab sowas vor längerer Zeit mal getestet. Mein Programm, das eine Aufgabe einmal mit einem und einmal mit zwei threads löst, wurde nicht doppelt so schnell. Man sieht aber, daß die jeweils neuere oder leistungsfähigere CPU auch bei mehreren threads effizienter ist.


iMac Intel Core i7
iMac 12,1 @ 1 thread = 260 sec
iMac 12,1 @ 2 thread = 158 sec * 1.65 (39 %)

MacBook Pro Retina Intel Core i5
MacBook 10,2 @ 1 thread = 289 sec
MacBook 10,2 @ 2 thread = 201 sec * 1.43 (30 %)

MacBook weiß, Intel Core1Duo
MacBook 1,1 @ 1 thread = 529 sec
MacBook 1,1 @ 2 thread = 464 sec * 1.14 (12 %)
 
Die 12 % sind der Zeitvorteil wenn zwei threads gleichzeitig meine Testarbeit verrichten. Der Core1Duo hatte 2 Kerne. Jeder Kern kann einen thread bedienen, anders als bei neueren Dualcore CPU´s wie dem i5, wo jeder Kern 2 threads also vier bedienen kann. Ist doch ganz einfach. :)
 
Die 12 % sind der Zeitvorteil wenn zwei threads gleichzeitig meine Testarbeit verrichten. Der Core1Duo hatte 2 Kerne. Jeder Kern kann einen thread bedienen, anders als bei neueren Dualcore CPU´s wie dem i5, wo jeder Kern 2 threads also vier bedienen kann. Ist doch ganz einfach. :)

Tut aber nichts zur Sache, weil es um HT geht. Wenn deine Anwendung auf zwei physischen Kernen nur 12% schneller ist als auf einem physischen Kern, dann ist sie schlecht parallelisiert. Du musst die selbe Aufgabe sooft gleichzeitig laufen lassen wie du physische Kerne hast, dann noch mal in der Anzahl der logischen Kerne.
 
Es war nicht meine Absicht, die jeweilige CPU voll auszulasten. Ich wollte nur sehen, um wieviel die Aufgabe schneller erledigt wird, wenn zwei threads je die Hälfte der Arbeit bzw. zusammen die ganze Arbeit erledigen. ;)
 
Gehen wir also von einer Single-Threaded-Applikation aus.
Eine Single-Core CPU wird zu 100% ausgelastet.
Eine Dual-Core CPU hat EINEN ihrer Kerne zu 100% ausgelastet, ist also zu 50% ausgelastet.
Hat diese CPU nun HT, bedeutet dass lediglich, dass jeder Kern zur Performancesteigerung in zwei virtuelle Kerne aufgeteilt werden kann.
Die Dual-Core HT CPU würde nun ebenfalls nur einen physischen Kern zu 100% auslasten.
Da es sich ja schließlich eine Single-Threaded-Applikation handelt, läuft das Ganze natürlich auch nur auf einem virtuellen Kern. Der zweite virtuelle Kern des physisch zu 100% ausgelasteten Kerns ist dann auch nicht mehr zu berücksichtigen.
HT führt also keinesfalls zu Leistungseinbußen, alles bleibt beim alten. Es gibt nur die Chance, Programme mit mehreren Threads effizienter abzuarbeiten.
(Unterstreichung von mir.)

Ich könnte mir ja vorstellen dass das Hyperthreading mit einer gewissen Rechenleistung für das Management der beiden Threads erkauft wird.

Also ob dann wirklich noch die vollen 100% aus dem nutzlos gehyperthreadeten Kern herauskommen? Vielleicht eben doch nur 95%, oder so?
 
Nein, weil HT ein eigener kleiner Controller ist. Somit sind die Kerne der CPU immer voll da.
 
Es war nicht meine Absicht, die jeweilige CPU voll auszulasten. Ich wollte nur sehen, um wieviel die Aufgabe schneller erledigt wird, wenn zwei threads je die Hälfte der Arbeit bzw. zusammen die ganze Arbeit erledigen. ;)

Dann passt es aber noch weniger in den Zusammenhang. Ich weiß nicht, was du da hast berechnen lassen, aber ich würde fast vermuten, dass die Limitierung woanders als bei der CPU lag. So dass du durch die Mehrleistung der CPU beispielsweise die Transferrate des RAMs ausnutzen konntest. Aber in meinen Augen sagt das nichts darüber aus, wie gut Threads verarbeitet werden und erst recht nicht welchen Vorteil HT bringt, worum es ja geht.
 
Tut aber nichts zur Sache, weil es um HT geht. Wenn deine Anwendung auf zwei physischen Kernen nur 12% schneller ist als auf einem physischen Kern, dann ist sie schlecht parallelisiert. Du musst die selbe Aufgabe sooft gleichzeitig laufen lassen wie du physische Kerne hast, dann noch mal in der Anzahl der logischen Kerne.

Nein, sie ist garnicht parallelisiert, die 12% bessere Leistung bekommt er, weil das Betriebssystem jetzt auf den ersten Kern läuft und die Anwendung den zweiten Kern vollständig alleine nutzen kann.
 
Nein, sie ist garnicht parallelisiert, die 12% bessere Leistung bekommt er, weil das Betriebssystem jetzt auf den ersten Kern läuft und die Anwendung den zweiten Kern vollständig alleine nutzen kann.

Eine Anwendung kann auch vollständig den zweiten Kern alleine nutzen, wenn sie nur single-threaded ist, daran liegt das nicht. Die Threads stapeln sich ja nicht alle auf dem ersten Kern sondern werden dynamisch auf die verfügbaren Kerne verteilt. Unter Windows kann man Threads bestimmten Kernen zuordnen, nur dann können die miteinander konkurrieren während anderswo noch Kapazitäten frei wären.
 
Sorry, hatte da was nicht gelesen und daher falsch verstanden.

Mir ist klar das man nicht alle Aufgaben in mehrere Threads zerlegen kann aber 12% ist irgendwie sehr wenig.
 
Zuletzt bearbeitet:
Vielleicht kann noch mal eben jemand den Unterschied zwischen Multithreading und Hyperthreading erläutern. :eek:
 
Auszug aus Wikipedia:

Der Begriff Multithreading (auch Nebenläufigkeit, Mehrsträngigkeit oder Mehrfädigkeit genannt) bezeichnet das gleichzeitige Abarbeiten mehrerer Threads (Ausführungsstränge) innerhalb eines einzelnen Prozesses oder eines Tasks (ein Anwendungsprogramm).

Im Gegensatz zum Multitasking, bei dem mehrere unabhängige Programme voneinander abgeschottet quasi-gleichzeitig ausgeführt werden, sind die Threads eines Anwendungsprogramms nicht voneinander abgeschottet und können somit durch sogenannte Race Conditions Fehler verursachen, die durch Synchronisation vermieden werden müssen.

Hyper-Threading Technology (kurz HTT, üblicherweise nur Hyper-Threading genannt) ist die Implementierung von hardwareseitigem Multithreading in Intel-Prozessoren. Durch mehrere vollständige Registersätze und ein komplexes Steuerwerk werden intern parallel arbeitende Pipeline-Stufen mehreren parallelen Befehls- und Datenströmen zugeteilt. Hyper-Threading ist damit Parallelverarbeitung auf der Ebene des Simultaneous Multithreadings (SMT).

Zu beachten: Der „eigentliche“ Prozessorkern und der Hyper-Threading-Kern können verschiedene Prozesse bearbeiten, benötigen somit jeweils eigene Seitentabellen und implementieren Multiprocessing. Dennoch können sie auch verschiedene Threads desselben Prozesses bearbeiten und somit im selben Prozesskontext rechnen.
 
Hi,

Oder einfach ausgedrückt: Stell dir vor DU bist der Prozessor. Du machst irgendeine Arbeit. Sagen wir du bearbeitest Rechnungen. Eine nach der anderen. Jetzt ist der Stapel alle und nach 5 Minuten kommt jemand mit einem neuen Stapel. Die 5 Minuten in der du wartest. Könntest du was anderes machen. z.B. Sand schüppen ... oder ein Dach decken ... :)
Das geht halt so weit, bis es *keine* Wartezeiten mehr gibt. Bei 2 Threads kann das halt dazu führen das diese beide gleichzeitig genauso schnell abgearbeitet werden, als wenn du alleine mit ihnen beschäftigt wärst. Da die Zeiten sich im "single Thread" addieren ist es im "multi Thread" dann halt schneller. Du bist aber trotzdem nur einmal da und kannst auch nur einmal zu 100% ausgelastet werden.

Multithreading ist eigentlich nur das ein Prozess mehrere Aufgaben parallel ausführt.


Atti
 
Zurück
Oben Unten