Quali ragioni potrebbe avere un programmatore per disattivare l'hyperthreading?


13

La mia azienda ha appena acquistato nuovi computer per sostituire i vecchi computer Windows XP da 2 GB. Qualcuno del mio team ha notato che sono arrivati ​​con l'hyperthreading disabilitato e ha detto a tutti di riavviare e accenderlo. C'è un vantaggio nella programmazione su una macchina con hyperthreading disabilitato?


1
Quale modello di CPU Intel stai utilizzando, ad esempio Core i5 o i7?
JB King

@JBK Bella domanda, non lo so, non ho una di quelle macchine da solo.
apre il

Su un vecchio notebook Pentium 4, per ridurre il calore e il rumore della ventola e forse far durare la batteria ancora qualche minuto. Non è una risposta perché dovrebbe essere una storia antica e non dovrebbe valere nel tuo caso.
Steve314,

Nel gioco Lucasarts Grim Fandango il motore del suono si è trovato in una condizione di gara quando correva con hyperthreading.

Risposte:


14

Sì, ho lavorato su un'app che ha funzionato meglio durante l'esecuzione su una macchina con HT disabilitato .

Quello che è successo è che il codice originale avrebbe creato il doppio dei thread quando eseguito su una macchina hyperthreaded (che supponeresti fosse una specie dell'intero punto di HT). Tuttavia, il throughput di tali thread era molto sensibile alla quantità di cache disponibile per il thread. Con il doppio dei thread in lotta per una quantità fissa di cache, la cache disponibile per thread era troppo bassa e si verificava un thrashing: ci sarebbero stati molti più errori nella cache, molti più accessi alla memoria principale e le prestazioni avrebbero avuto un impatto sostanziale rispetto alla corsa con meno thread e più cache per thread (che è quello che hai se hai eseguito l'app su un computer con HT disabilitato).

La soluzione definitiva consisteva nel fare in modo che l'app controllasse meglio la piattaforma HW e prendesse in considerazione le dimensioni della cache e la quantità di cache considerata necessaria per thread al momento di decidere quanti thread creare. In ogni caso il problema è rapidamente scomparso con la successiva generazione di CPU, che ha raddoppiato la dimensione della cache (e da allora abbiamo iniziato a vedere un modesto vantaggio da HT). Tuttavia, l'intero episodio ha lasciato un'eredità lunga e duratura di raccomandare l'HT sempre disabilitato su qualsiasi piattaforma su cui il nostro SW funzionava, e il jerk " che la macchina non ha l'HT abilitato ha? " Risposte a qualsiasi problema di prestazioni. (Penso che il problema fondamentale sia la maggior parte dei non geek, semplicemente non capisco cosa sia effettivamente l'HT.)


11

Non conosco i dettagli tecnici, ma a quanto pare se un'app (o il sistema operativo) non è ottimizzata per l'hyper-threading, l'hyper-threading può effettivamente ridurre le prestazioni.

Anche Intel consiglia di spegnerlo in questo caso:

I seguenti sistemi operativi desktop non sono consigliati per l'uso con la tecnologia Hyper-Threading. Se si utilizza uno dei seguenti sistemi operativi desktop, si consiglia di disabilitare la tecnologia Hyper-Threading nel programma di installazione del BIOS di sistema: [...]

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

Quindi forse il produttore (o il fornitore) ha voluto stare attento.


È anche noto che alcuni giochi funzionano più lentamente rispetto a quando l'hyperthreading è disattivato.
Klaim

4
Sarebbe interessante se fossero preoccupati per le prestazioni dei giochi giocati al lavoro.
dietbuddha

Su un sistema multi-core, due thread potrebbero essere allocati su due hyperthread sullo stesso core, lasciando tutti gli altri core inattivi e offrendo prestazioni molto inferiori rispetto al mettere ciascun thread su un core diverso. Fino a quando i sistemi operativi non saranno consapevoli della differenza tra un diverso core e diversi hyperthread sullo stesso core ...
Steve314

1
@ Steve314: Questo era certamente il caso di Windows 2000 (e disabilitare HT era sicuramente una buona idea se lo stavi eseguendo) ma Windows XP doveva essere a conoscenza di HT (vedi ad esempio download.microsoft.com/download/5/7/ 7 / ... ) e non cadere in una tale trappola. Presumo che una logica simile sia stata integrata in Linux da una versione del kernel.
giorno

6

Molto probabilmente, l'OEM era solo conservatore. Gli OEM spesso vengono forniti con featuer avanzati disabilitati (come HT, bit No-Execute, vt, ecc.) Disattivati. Il motivo è che alcune rare circostanze potrebbero far fallire quelle impostazioni e le persone che vogliono effettivamente le funzionalità possono attivarle altrettanto facilmente.

Inoltre, alcuni rari bug nei sistemi operativi hanno portato a potenziali problemi di sicurezza quando alcune funzionalità sono abilitate. la tecnologia di virtualizzazione, ad esempio, una volta aveva un tale problema. Quindi, è solo il venditore ad essere conservatore.

L'hyperthreading è generalmente utile per i desktop interattivi, come le macchine di programmazione. Tuttavia, alcune persone potrebbero voler disattivarlo se le tue app verranno eseguite su server senza HT. Solo per ridurre le potenziali differenze hardware.


2
Questo è quasi sempre il caso delle macchine con HT disattivate. Massima compatibilità e salvataggio del fornitore da un'inondazione di strane chiamate di supporto.
Patrick Hughes,

5

L'hyperthreading non aggiunge nuovi core alla CPU. Hai ancora un'unità aritmetica / logica, un'unità in virgola mobile (...) per core. Quindi, se hai più thread / processi che fanno cose molto diverse, HTT può migliorare le prestazioni. Ma se hai più thread che fanno più o meno le stesse cose (non inusuali nelle applicazioni di crunching dei numeri), le prestazioni possono effettivamente soffrire gravemente di HTT.


2

Forse problemi di coerenza della cache nel codice multithreading di massa? Se si dispone di cache CPU discrete, è teoricamente possibile che due thread abbiano gli stessi dati memorizzati nella cache e modificarli contemporaneamente con valori diversi. Se a un certo punto hai una cache unificata tra le CPU e la memoria principale (L2 o L3), probabilmente c'è qualche meccanismo in atto che lo impedirà, ma su CPU di fascia bassa con cache più piccole, forse no.

In alternativa, potrebbe essere possibile che l'abilitazione dell'hyperthreading su chip che non lo supportino lanci un codice durante il POST, quindi il fornitore del BIOS lo lascia solo perché non sanno che tipo di CPU avrà il sistema.


Immagino che esista un meccanismo per risolvere questo problema di coerenza, ma potrebbe avere una penalità significativa per le prestazioni. IIRC, una determinata pagina di memoria non può essere caricata liberamente in qualsiasi pagina di cache - in genere esiste un meccanismo di questo indirizzo-mappe-a-una-di-poche-pagine. Forse è possibile che due thread combattano su alcune pagine della cache, lasciando il resto inutilizzato? (forse anche con multi-core, anche se presumibilmente con meno rischi).
Steve314,

0

Un motivo per non disattivare l'hyperthreading su una macchina sviluppatore è che potrebbe nascondere alcuni sottili bug multi-threading. Ma questo vale davvero solo per una macchina single-core single-processor. Il multi-core esporrà, semmai, più bug multi-threading durante i test.

OTOH, dubito che vedrai un processore single-core con hyperthreading disabilitato per impostazione predefinita. Il mio voto è sulla risposta di Sleskes.


0

Molti vecchi software sono stati scritti su macchine single core e potrebbero esserci dei bug durante l'esecuzione su una macchina multicore. Probabilmente l'istruzione doveva davvero dire "Questo non funziona nelle macchine multicore", è solo che per molto tempo l'hyperthreading è stata l'unica macchina multi-core che avresti visto di uso comune.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.