Quelles raisons un programmeur peut-il vouloir pour désactiver l'hyperthreading?

13

Mon entreprise vient d'acheter de nouveaux ordinateurs pour remplacer les anciennes machines Windows XP de 2 Go. Un membre de mon équipe a remarqué qu'ils venaient avec l'hyperthreading désactivé et a dit à tout le monde de redémarrer et de l'allumer. Y a-t-il un avantage à programmer sur une machine avec l'hyperthreading désactivé?

Pops
la source
1
Quel modèle de CPU Intel utilisez-vous, par exemple Core i5 ou i7?
JB King
@JBK Bonne question, je ne sais pas, je n'ai pas moi-même une de ces machines.
Pops
Sur un vieil ordinateur portable Pentium 4, pour réduire la chaleur et le bruit du ventilateur, et peut-être faire durer la batterie quelques minutes de plus. Pas une réponse car cela devrait être une histoire ancienne et ne devrait pas s'appliquer dans votre cas.
Steve314
Dans le jeu Lucasarts Grim Fandango, le moteur sonore s'est retrouvé dans une condition de course lors de l'exécution avec hyperthreading.

Réponses:

14

Oui, j'ai travaillé sur une application qui fonctionnait mieux lors de l'exécution sur une machine avec HT désactivé .

Ce qui s'est passé, c'est que le code d'origine créait deux fois plus de threads lorsqu'il était exécuté sur une machine hyperthreadée (ce que vous supposeriez être une sorte de tout l'intérêt de HT). Cependant, le débit de ces threads était très sensible à la quantité de cache disponible pour le thread. Avec deux fois plus de threads se battant pour une quantité fixe de cache, le cache disponible par thread était trop faible et le thrash se produisait: il y aurait beaucoup plus de cache manquant, charge plus d'accès à la mémoire principale, et les performances ont pris un coup substantiel par rapport à l'exécution avec moins de threads et plus de cache par thread (c'est ce que vous obtenez si vous exécutez l'application sur une machine avec HT désactivé).

La solution ultime consistait à faire en sorte que l'application vérifie mieux la plate-forme matérielle et prenne en compte les tailles de cache et la quantité de cache nécessaire par thread pour décider du nombre de threads à créer. Dans tous les cas, le problème a rapidement disparu avec la génération suivante de CPU, qui a doublé la taille du cache (et nous avons en fait commencé à voir un avantage modeste de HT). Cependant, l'épisode entier a laissé un héritage long et durable de recommander que HT soit toujours désactivé sur n'importe quelle plate-forme sur laquelle notre SW a fonctionné, et le réflexe " cette machine n'a pas activé HT a-t-il? " Répond à tout problème de performance. (Je pense que le problème fondamental est que la plupart des non-geeks ne comprennent tout simplement pas ce qu'est réellement HT.)

timday
la source
11

Je ne connais pas les détails techniques, mais apparemment, si une application (ou le système d'exploitation) n'est pas optimisé pour l'hyper-threading, l'hyper-threading peut en fait diminuer les performances.

Même Intel recommande de le désactiver dans ce cas:

Les systèmes d'exploitation de bureau suivants ne sont pas recommandés pour une utilisation avec la technologie Hyper-Threading. Si vous utilisez l'un des systèmes d'exploitation de bureau suivants, il est conseillé de désactiver la technologie Hyper-Threading dans le programme de configuration du BIOS du système: [...]

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

Alors peut-être que le fabricant (ou le fournisseur) voulait être prudent.

sleske
la source
Il est également connu que certains jeux s'exécutent plus lentement que lorsque l'hyperthreading est désactivé.
Klaim
4
Ce serait intéressant s'ils étaient préoccupés par la performance des jeux joués au travail.
dietbuddha
Sur un système multicœur, deux threads peuvent être alloués à deux hyperthreads sur le même noyau, laissant tous les autres cœurs inactifs et offrant beaucoup moins de performances que de placer chaque thread sur un noyau différent. Jusqu'à ce que les systèmes d'exploitation prennent conscience de la différence entre un cœur différent et des hyperthreads différents sur le même cœur ...
Steve314
1
@ Steve314: C'était certainement le cas avec Windows 2000 (et désactiver HT était certainement une bonne idée si vous l'exécutiez) mais Windows XP était censé être HT (voir par exemple download.microsoft.com/download/5/7/ 7 /… ) et ne pas tomber dans un tel piège. Je suppose que la logique similaire a été intégrée à Linux à partir d'une version du noyau.
2011
6

Plus que probable, l'OEM était juste conservateur. Les OEM sont souvent livrés avec des fonctionnalités avancées désactivées (comme HT, Bit sans exécution, vt, etc.) désactivées. La raison en est que de rares circonstances peuvent entraîner l'échec de ces paramètres, et les personnes qui souhaitent réellement les fonctionnalités peuvent tout aussi facilement les activer.

En outre, certains bogues rares dans les systèmes d'exploitation ont entraîné des problèmes de sécurité potentiels lorsque certaines fonctionnalités sont activées. La technologie de virtualisation, par exemple, avait un jour un tel problème. Donc, c'est juste que le vendeur est conservateur.

L'hyperthreading est généralement utile pour les bureaux interactifs, comme les machines de programmation. Cependant, certaines personnes peuvent vouloir le désactiver si vos applications doivent s'exécuter sur des serveurs sans HT. Juste pour réduire les différences matérielles potentielles.

Erik Funkenbusch
la source
2
C'est presque toujours le cas pour les machines équipées de HT désactivée. Compatibilité maximale et sauvegarde du fournisseur d'un flot d'appels de support étranges.
Patrick Hughes
5

L'hyperthreading n'ajoute pas de nouveaux cœurs au CPU. Vous avez toujours une unité arithmétique / logique, une unité à virgule flottante (...) par cœur. Donc, si vous avez plusieurs threads / processus qui font des choses très différentes, HTT peut améliorer les performances. Mais si vous avez plusieurs threads faisant plus ou moins les mêmes choses (ce qui n'est pas rare dans les applications de calcul de nombre), les performances peuvent réellement souffrir gravement du HTT.

nikie
la source
2

Peut-être des problèmes de cohérence du cache dans le code massivement multithread? Si vous avez des caches CPU discrets, il est théoriquement possible que deux threads aient les mêmes données mises en cache et les modifient en même temps avec des valeurs différentes. Si vous avez un cache unifié à un moment donné entre les CPU et la mémoire principale (L2 ou L3), alors il y a probablement un mécanisme en place qui empêchera cela, mais sur les CPU bas de gamme avec des caches plus petits, peut-être pas.

Alternativement, il peut être possible que l'activation de l'hyperthreading sur des puces qui ne le prennent pas en charge lève un code pendant le POST, donc le fournisseur de BIOS le laisse simplement de côté car il ne sait pas quel type de CPU le système aura.

TMN
la source
Je suppose - il existe un mécanisme en place pour résoudre ce problème de cohérence, mais il peut avoir une pénalité de performance importante. IIRC, une page de mémoire particulière ne peut pas être chargée librement dans n'importe quelle page de cache - il existe généralement un mécanisme de cette adresse-correspond à une de ces quelques pages. Peut-être qu'il est possible que deux threads se battent sur quelques pages de cache, laissant le reste inutilisé? (peut-être même avec plusieurs cœurs, mais probablement avec moins de risques).
Steve314
0

Une raison pour ne pas désactiver l'hyperthreading sur une machine de développeur est qu'elle peut masquer quelques bogues subtils multithread. Mais cela ne s'applique vraiment qu'à une machine à processeur unique monocœur. Multi-core exposera, le cas échéant, plus de bogues multi-threading lors des tests.

OTOH, je doute que vous verrez un processeur monocœur avec hyperthreading désactivé par défaut. Mon vote porte sur la réponse de Sleskes.

Steve314
la source
0

Beaucoup d' anciens logiciels ont été écrits sur des machines à cœur unique et peuvent contenir des bogues lors de l'exécution sur une machine multicœur. L'instruction était probablement destinée à dire "cela ne fonctionne pas dans les machines multicœurs", c'est juste que pendant longtemps l'hyperthreading a été la seule machine multicœur probable que vous verriez couramment.

JohnB
la source