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é?
13
Réponses:
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.)
la source
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:
(Source: http://www.intel.com/support/processors/sb/CS-017343.htm )
Alors peut-être que le fabricant (ou le fournisseur) voulait être prudent.
la source
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.
la source
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.
la source
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.
la source
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.
la source
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.
la source