Also bisher habe ich HT in der Praxis nur bei Serveranwendungen als nützlich empfunden. Da hat man viele parallele Zugriffe die voneinander unabhängig sind und da bringen eben auch viele parallele Threads was.
Software muss erstmal anständig mit der zahl der Threads skalieren, das ist für manche Problemstellungen auch durchaus machbar, aber z.B. für MPI-Applikationen bringt es einiges wenn jede CPU in etwa gleich schnell ist und die Speicheranbindung aller CPUs ebenfalls identisch ist. Es gibt immer mal wieder Punkte in der Software in der Daten abgeglichen werden müssen, da hilft es nicht wenn der eine Thread fertig ist und ein anderer gerademal bei der hälfte angekommen ist.
Dann wird halt gewartet. Oder ein anderer Thread springt auf die freie CPU und ruiniert die Cache-einträge.
Mein letzter Test hat ergeben, dass wenn ich auf einer dual 6core Xeon Maschine (12kerne) mit HT 24 Threads starte, ein Thread im schnitt doppelt so lange läuft. Also 0 gewinn was durchsatz angeht, dafür dauerts länger bis auch der letzte Thread fertig ist als wenn man 2x12 Threads nacheinander startet.
Das war eine FP intensive Single-Thread Anwendung, also ganz ohne Abhängigkeiten der Threads untereinander.
Es kann sein das in dem Fall Speicherbandbreite, Caches oder ähnliches verantwortlich sind für das Verhalten, aber mein Schluss daraus ist ganz einfach HT aus, solange ich nicht mehr CPU intensive Threads laufen habe als als Kerne vorhanden sind.
Die gleiche Anwendung habe ich auf einem 48kern AMD System getestet, da war der Durchsatz optimal wenn man 1-2 Kerne frei gelassen hat vermutlich für scheduler/IO/OS.
Für Serveraufgaben wo auch mal mehrere 100 Threads laufen können die oft nichts anderes tun als auf Daten warten kann HT ein Segen sein.