Quali motivi potrebbe avere un programmatore per voler disattivare l'hyperthreading?

12

La mia azienda ha appena acquistato nuovi computer per sostituire le vecchie macchine Windows XP da 2 GB. Qualcuno nel mio team ha notato che sono venuti con l'hyperthreading disabilitato e ha detto a tutti di riavviarsi e accenderlo. C'è un vantaggio nella programmazione su una macchina con hyperthreading disabilitato?

    
posta Pops 31.03.2011 - 16:26
fonte

7 risposte

14

Sì, ho lavorato a un'app che ha ottenuto risultati migliori durante l'esecuzione su un computer con HT disattivato .

Quello che è successo è che il codice originale creerebbe il doppio di thread quando si esegue su una macchina hyperthreaded (che si suppone sia una specie dell'intero punto di HT). Tuttavia, la velocità effettiva di questi thread era molto sensibile alla quantità di cache disponibile per il thread. Con il doppio di thread che lottavano per una quantità fissa di cache, la cache disponibile per thread era troppo bassa e si verificava thrashing: ci sarebbero stati più cari di cache, molti più accessi alla memoria principale e le prestazioni hanno avuto un notevole successo rispetto alla corsa con meno thread e più cache per thread (che è quello che hai ottenuto se avevi eseguito l'app su un computer con HT disabilitato).

La soluzione definitiva era 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 è scomparso rapidamente con la generazione successiva di CPU, che ha raddoppiato la dimensione della cache (e in effetti abbiamo iniziato a vedere un modesto vantaggio da HT). Tuttavia, l'intero episodio ha lasciato un'eredità lunga e duratura di consigliare HT sempre disabilitato su qualsiasi piattaforma su cui il nostro SW è andato avanti, e "istante" quella macchina non ha HT abilitato ? "risposte a qualsiasi problema di prestazioni. (Penso che il problema fondamentale sia la maggior parte dei non geek semplicemente non capisco cosa sia in realtà HT.)

    
risposta data 22.07.2011 - 20:47
fonte
11

Non conosco i dettagli tecnici, ma apparentemente 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 disattivarlo in questo caso:

The following desktop operating systems are not recommended for use with Hyper-Threading Technology. If you are using one of the following desktop operating systems, it is advised that you should disable Hyper-Threading Technology in the system BIOS Setup program: [...]

(Fonte: link )

Quindi forse il produttore (o il fornitore) voleva stare attento.

    
risposta data 31.03.2011 - 16:38
fonte
6

Più che probabile, l'OEM era semplicemente conservatore. Gli OEM vengono spesso spediti con funzioni avanzate disabilitate (come HT, No-Execute bit, vt, ecc.) Disattivate. La ragione è che alcune circostanze rari potrebbero far fallire queste impostazioni e le persone che effettivamente vogliono le funzionalità possono accenderle con la stessa facilità.

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 problema simile. Quindi, è solo il venditore a essere prudente.

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

    
risposta data 31.03.2011 - 18:06
fonte
5

L'hyperthreading non aggiunge nuovi core alla CPU. Hai ancora un'unità aritmetica / logica, un'unità a 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 raro nelle applicazioni di crunch numerico), le prestazioni possono soffrire molto male da HTT.

    
risposta data 23.07.2011 - 16:41
fonte
2

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

In alternativa, è possibile che l'abilitazione di hyperthreading su chip che non la supportano genererà un codice durante il POST, quindi il fornitore del BIOS lo lascia semplicemente perché non sa quale tipo di CPU avrà il sistema.

    
risposta data 31.03.2011 - 18:29
fonte
0

Un motivo per cui non per disattivare l'hyperthreading su una macchina per sviluppatori è che potrebbe nascondere alcuni piccoli bug multi-thread. Ma questo si applica solo su un processore single-core a processore singolo. Multi-core esporrà, semmai, più bug multi-threading durante i test.

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

    
risposta data 22.07.2011 - 16:54
fonte
0

Un sacco di vecchi software è stato scritto su macchine a core singolo, e potrebbe aver avuto bug in esso durante l'esecuzione su una macchina multicore. Probabilmente l'istruzione aveva lo scopo di dire "Questo non funziona con macchine multicore", è solo che per molto tempo l'hyperthreading era l'unica macchina multi-core che si vedrebbe nell'uso comune.

    
risposta data 23.07.2011 - 11:14
fonte

Leggi altre domande sui tag