Désactiver l'hyperthreading dans le registre Windows 7

18

Certains bios n'ont pas la possibilité de désactiver l'hyperthreading du processeur, y a-t-il un moyen de le désactiver dans le registre Windows 7? Ou un outil ou un logiciel?

Je connais l'onglet de démarrage msconfig (options avancées) et la désactivation des processeurs là-bas, je ne sais pas s'il désactive les cœurs complets ou les hyperthreads, ou comment le dire.

Windows 7 32 bits ou 64 bits

ÉDITER:

Supposons qu'il s'agit d'un dual core ou plus avec hyperthreading.

Dans le Gestionnaire de périphériques, il affiche 4 processeurs sur mon processeur Intel i5, et vous ne pouvez pas non plus les désactiver, dang.

Moab
la source
5
Je pense que c'est la question impossible du mois.
Moab
Vous ne pouvez vraiment pas le désactiver dans le BIOS? Est-ce la dernière version?
KCotreau
2
C'est un PC HP, bien connu pour les bios paralysés, peu importe la version.
Moab
1
Les puces i5 ne sont pas toutes créées égales, certaines ont 4 cœurs physiques et l'hyper-threading désactivés, tandis que certaines ont 2 cœurs et l'hyper-threading activés - généralement les blocs-notes utilisent l'hyper-threading et les puces de bureau sont plus susceptibles d'être une variante à quatre cœurs. Utilisez-vous un ordinateur de bureau ou un ordinateur portable et connaissez-vous le modèle i5?
Dustin G.
Je ne m'inquiéterais pas trop de l'hyperthreading. Il a connu de grandes améliorations depuis le P4. De nos jours, il n'aspire pas les performances.
surfasb

Réponses:

3

À partir de la fiche technique du processeur Intel Core, volume 1 , page 38:

Technologie Intel Hyper-Threading

[...] Cette fonction doit être activée à l'aide du BIOS et nécessite la prise en charge du système d'exploitation.

En effet, l'hyperthreading est un matériel physique réel sur la puce du processeur et peut donc être activé / désactivé uniquement au niveau matériel .

Si vous savez quelle application ne fonctionne pas bien avec l'hyperthreading, vous pouvez utiliser un outil comme StartAffinity si vous avez XP.

Si vous utilisez Windows 7, une startcommande intégrée peut le faire. Utilisez la commande suivante pour lancer un processus avec une affinité de processeur particulière (encore une fois, l' /AFFINITYargument n'a été ajouté que dans Windows 7):

start /AFFINITY <mask> "C:\yourprogram.exe" 

<mask>doit être remplacé par le masque hexadécimal pour les processeurs que vous souhaitez exécuter (le masque de processeur est juste un masque binaire activant / désactivant cette affinité, donc 00000101 active CPU0 et CPU2, et 00000010 active uniquement CPU1).

Pour calculer la valeur hexadécimale, vous pouvez soit convertir le masque binaire, soit prendre la somme de 2 à la puissance des cœurs sur lesquels vous souhaitez exécuter le programme (à partir de 0), et convertir cette valeur en hexadécimal.

Par exemple, si j'ai un système à quatre cœurs et que je souhaite uniquement que le processus s'exécute sur CPU0 et CPU2, j'ajouterais 2 0 + 2 2 = 1 + 4 = 5. Convertissez 5 en hexadécimal, ce qui n'est que 5, et définissez cela comme votre <mask>. Vous pouvez également convertir simplement 00000101 en hexadécimal. Si vous ne savez pas comment convertir ces bases, vous pouvez simplement utiliser cette table de conversion .

Percée
la source
Je comprends l'affinité, mais cela ne désactivera pas un hyperthread, seulement un noyau complet. Je ne pense pas qu'il soit possible à l'intérieur du système d'exploitation de désactiver uniquement l'hyperthreading, uniquement dans le bios, mais certains bios n'ont pas cette option, principalement sur les PC HP, j'espérais que quelqu'un pourrait me prouver le contraire.
Moab
1
Chaque noyau physique apparaît dans le système d'exploitation comme deux logiques. Si vous désactivez l'un de ces cœurs logiques , vous désactivez efficacement l'hyperthreading, car les instructions ne sont envoyées qu'à l' un des deux cœurs logiques, de sorte qu'aucune hyperthreading n'est réellement effectuée - la file d'attente d'instructions est directement envoyée au noyau physique.
Percée
Je comprends, mais cela ne désactive que l'hyperthreading pour ce cœur. J'ai besoin des deux handicapés.
Moab
1
@Moab Ensuite, vous activez simplement tous les cœurs pairs ou impairs pour désactiver tous les autres, en utilisant les masques que j'ai énumérés ci-dessus. Donc, si vous avez quatre cœurs logiques, utilisez 00000101 ou 5 en hexadécimal comme masque hexadécimal pour définir uniquement CPU0 et CPU2 comme activés. Si vous avez 8 cœurs logiques, votre masque de bits serait 01010101 ou 55 en hexadécimal (pour activer uniquement CPU0, 2, 4 et 6).
Percée
2
@Moab peu importe techniquement, tant que vous désactivez tous les autres cœurs. Chaque ensemble de deux cœurs logiques constitue les gestionnaires de threads pour un seul cœur physique.
Percée
2

La désactivation de l'hyper-threading est une affaire réservée au BIOS.

Je suppose que vous souhaitez désactiver l'hyper-threading parce que vous avez une application qui n'est pas optimisée pour cette fonctionnalité et peut avoir des performances réduites?

En ce qui concerne la numérotation des CPU, les cœurs physiques sont impairs - donc dans un système HT à double cœur, les cœurs 1 et 3 seraient les "vrais" CPU. Si vous sélectionnez 2 cœurs dans msconfig, les processeurs 1 et 2 seraient activés pour que vous ayez un processeur physique et logique (HT) actif - cela ne vous serait pas avantageux si vous rencontrez des problèmes avec un logiciel qui a des problèmes avec HT.

Dustin G.
la source
Oui mais ... vous pouvez utiliser le Gestionnaire des tâches pour définir l'affinité avec les CPU 1 et 3.
Ben Voigt
Dustin G, c'est ce que je pensais, mais trouver des articles à ce sujet est presque impossible. Merci.
Moab
0

Sous Windows, le moyen le plus simple consiste à modifier l'affinité d'Explorer.exe, car chaque processus lancé à partir de celui-ci héritera du masque d'affinité. C'est encore loin d'être parfait mais au moins vous ne faites cela qu'une seule fois par session.

E. Attia
la source
Je ne suis pas sûr que cela réponde à la question, car l'affinité du processus n'est pas la même chose que l'hyperthreading.
Doktoro Reichard
Heureusement, les choses ne sont pas basées sur ce que vous êtes sûr ou non mais sur la façon dont elles sont spécifiées dans MSDN (par exemple) msdn.microsoft.com/en-us/library/windows/desktop/… GetLogicalProcessorInformation donne aux affinités du processus l'usinage physique / logique processeurs (c'est une façon exacte). Sur les systèmes d'hyperthreading avec des noyaux à 2 logiques SMT (tels que l'hyperthreading) Le noyau # 0 est le bit 0 et 1, le noyau # 1 bit 2 et 3 du masque d'affinité, etc. (c'est une manière empirique). Je vous serais reconnaissant si vous pouviez éviter de voter pour des choses sur lesquelles vous n'avez que des intuitions ...
E. Attia