Welche Gründe könnte ein Programmierer haben, wenn das Hyperthreading ausgeschaltet werden soll?


13

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?


1
Welches Intel-CPU-Modell verwenden Sie, z. B. Core i5 oder i7?
JB King

@JBK Gute Frage, ich weiß nicht, ich habe selbst keine dieser Maschinen.
Pops

Auf einem alten Pentium 4-Notebook, um Hitze und Lüftergeräusche zu reduzieren und den Akku möglicherweise ein paar Minuten länger zu halten. Keine Antwort , weil es sollte eine alte Geschichte Sache sein, und soll nicht in Ihrem Fall zutreffen.
Steve314

Im Lucasarts-Spiel Grim Fandango geriet die Sound-Engine beim Laufen mit Hyperthreading in einen Rennzustand.

Antworten:


14

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.)


11

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:

Die folgenden Desktop-Betriebssysteme werden für die Verwendung mit der Hyper-Threading-Technologie nicht empfohlen. Wenn Sie eines der folgenden Desktop-Betriebssysteme verwenden, wird empfohlen, die Hyper-Threading-Technologie im System-BIOS-Setup-Programm zu deaktivieren: [...]

(Quelle: http://www.intel.com/support/processors/sb/CS-017343.htm )

Vielleicht wollte der Hersteller (oder der Lieferant) vorsichtig sein.


Es ist auch bekannt, dass manche Spiele langsamer laufen als wenn Hyperthreading deaktiviert ist.
Klaim

4
Es wäre interessant, wenn sie sich Gedanken über die Leistung von Spielen machen würden, die bei der Arbeit gespielt werden.
Dietbuddha

Auf einem System mit mehreren Kernen können zwei Threads zwei Hyperthreads auf demselben Kern zugewiesen werden, wodurch alle anderen Kerne im Leerlauf bleiben und eine wesentlich geringere Leistung erzielt wird, als wenn jeder Thread auf einem anderen Kern abgelegt wird. Bis Betriebssysteme den Unterschied zwischen einem anderen Kern und verschiedenen Hyperthreads auf demselben Kern
bemerken

1
@ Steve314: Das war sicherlich der Fall bei Windows2000 (und das Deaktivieren von HT war definitiv eine gute Idee, wenn Sie das ausführen), aber Windows XP sollte HT-fähig sein (siehe z. B. download.microsoft.com/download/5/7/ 7 /… ) und nicht in eine solche Falle tappen. Ich gehe davon aus, dass eine ähnliche Logik von einer Version des Kernels in Linux eingebaut wurde.
22.

6

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.


2
Dies ist fast immer bei Maschinen der Fall, bei denen HT ausgeschaltet ist. Maximale Kompatibilität und Schutz des Anbieters vor einer Flut seltsamer Supportanrufe.
Patrick Hughes

5

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.


2

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.


Meine Vermutung - es gibt einen Mechanismus, um dieses Kohärenzproblem zu lösen, aber es kann erhebliche Leistungseinbußen nach sich ziehen. IIRC, eine bestimmte Seite des Speichers kann nicht frei in eine beliebige Cache-Seite geladen werden - normalerweise gibt es einen Mechanismus, bei dem diese Adresse einer dieser wenigen Seiten zugeordnet wird. Vielleicht ist es möglich, dass zwei Threads über ein paar Cacheseiten streiten und den Rest ungenutzt lassen? (vielleicht sogar mit Multi-Core, wenn auch vermutlich mit weniger Risiko).
Steve314

0

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.


0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.