Meine Firma hat gerade neue Computer gekauft, um alte 2 GB Windows XP-Computer zu ersetzen. Jemand in meinem Team bemerkte, dass Hyperthreading deaktiviert war, und forderte alle auf, den Computer neu zu starten und einzuschalten. Hat die Programmierung auf einem Computer mit deaktiviertem Hyperthreading einen Vorteil?
13
Antworten:
Ja, ich habe an einer App gearbeitet, die auf einem Computer mit deaktiviertem HT eine bessere Leistung erbringt .
Was geschah, war, dass der ursprüngliche Code auf einem Hyperthread-Computer doppelt so viele Threads erstellt hat (was Sie als den ganzen Punkt von HT ansehen würden). Der Durchsatz dieser Threads war jedoch sehr abhängig von der Menge an Cache, die dem Thread zur Verfügung stand. Da doppelt so viele Threads um eine festgelegte Menge an Cache kämpften, war der pro Thread verfügbare Cache zu niedrig und es kam zu einer Überlastung: Es gab viel mehr Cache-Ausfälle, viel mehr Hauptspeicherzugriffe und die Leistung war erheblich schlechter als beim Ausführen mit weniger Threads und mehr Cache pro Thread (was Sie erhalten, wenn Sie die App auf einem Computer mit deaktiviertem HT ausführen).
Die ultimative Lösung bestand darin, die App die HW-Plattform besser überprüfen zu lassen und die Cache-Größe und die Menge an Cache zu berücksichtigen, die pro Thread für erforderlich gehalten wird, wenn entschieden wird, wie viele Threads erstellt werden sollen. In jedem Fall verschwand das Problem schnell mit der nachfolgenden Generation von CPUs, die die Cache-Größe verdoppelte (und wir sahen dann tatsächlich einen bescheidenen Vorteil von HT). Jedoch ließ die ganze Folge ein lange und zu empfehlen HT dauerhaftes Vermächtnis immer deaktiviert wird jede Plattform , um unsere SW lief auf und reflex „ dass Maschine HT hat es nicht hat aktiviert? “ Antworten auf jedes Performance - Problem. (Ich denke, das grundlegende Problem ist, dass die meisten Nicht-Geeks einfach nicht verstehen, was HT eigentlich ist.)
quelle
Ich kenne die technischen Details nicht, aber anscheinend kann Hyper-Threading die Leistung verringern , wenn eine App (oder das Betriebssystem) nicht für Hyper-Threading optimiert ist .
Sogar Intel empfiehlt, es in diesem Fall auszuschalten:
(Quelle: http://www.intel.com/support/processors/sb/CS-017343.htm )
Vielleicht wollte der Hersteller (oder der Lieferant) vorsichtig sein.
quelle
Höchstwahrscheinlich war der OEM nur konservativ. OEMs werden häufig mit deaktivierten erweiterten Funktionen (wie HT, No-Execute-Bit, VT usw.) ausgeliefert. Der Grund dafür ist, dass einige seltene Umstände dazu führen können, dass diese Einstellungen fehlschlagen, und Personen, die die Funktionen tatsächlich benötigen, können sie genauso einfach aktivieren.
Außerdem haben einige seltene Fehler in Betriebssystemen zu potenziellen Sicherheitsproblemen geführt, wenn einige Funktionen aktiviert sind. Beispielsweise hatte die Virtualisierungstechnologie einmal ein solches Problem. Es ist also nur der Verkäufer, der konservativ ist.
Hyperthreading ist im Allgemeinen für interaktive Desktops wie Programmiergeräte nützlich. Einige Benutzer möchten es möglicherweise deaktivieren, wenn Ihre Apps auf Servern ohne HT ausgeführt werden. Nur um mögliche Hardwareunterschiede zu verringern.
quelle
Hyperthreading fügt der CPU keine neuen Kerne hinzu. Sie haben noch eine Arithmetik / Logik-Einheit, eine Gleitkomma-Einheit (...) pro Kern. Wenn Sie also mehrere Threads / Prozesse haben, die sehr unterschiedliche Aufgaben ausführen, kann HTT die Leistung verbessern. Wenn Sie jedoch mehrere Threads haben, die mehr oder weniger das Gleiche tun (nicht selten bei Anwendungen zur Zahlenverarbeitung), kann HTT die Leistung erheblich beeinträchtigen.
quelle
Vielleicht Probleme mit der Cache-Kohärenz in massivem Multithread-Code? Wenn Sie diskrete CPU-Caches haben, ist es theoretisch möglich, dass zwei Threads dieselben Daten im Cache haben und sie gleichzeitig mit unterschiedlichen Werten ändern. Wenn Sie irgendwann einen einheitlichen Cache zwischen den CPUs und dem Hauptspeicher haben (entweder L2 oder L3), gibt es wahrscheinlich einen Mechanismus, der dies verhindert, aber bei CPUs der unteren Klasse mit kleineren Caches möglicherweise nicht.
Alternativ kann es möglich sein, dass das Aktivieren von Hyperthreading auf Chips, die es nicht unterstützen, während des POST einen Code auslöst, sodass der BIOS-Anbieter ihn einfach weglässt, da er nicht weiß, über welche Art von CPU das System verfügt.
quelle
Ein Grund , Hyperthreading auf einem Entwicklercomputer nicht zu deaktivieren, besteht darin, dass darin möglicherweise einige subtile Multithreading-Fehler versteckt sind. Dies gilt jedoch nur für eine Single-Core-Single-Prozessor-Maschine. Multi-Core wird, wenn überhaupt, mehr Multi-Threading-Fehler beim Testen aufdecken.
OTOH, ich bezweifle, dass Sie einen Single-Core-Prozessor mit standardmäßig deaktiviertem Hyperthreading sehen werden. Meine Stimme ist auf Sleskes Antwort.
quelle
Eine Menge alter Software wurde auf Single-Core-Rechnern geschrieben und hatte möglicherweise Fehler, wenn sie auf einem Multicore-Rechner ausgeführt wurde. Wahrscheinlich sollte die Anweisung wirklich lauten: "Dies funktioniert nicht auf Multicore-Computern". Hyperthreading war nur für lange Zeit die einzige wahrscheinliche Multicore-Maschine, die Sie üblicherweise verwenden würden.
quelle