désactiver l'hyperthreading sur un PC Dell multi-core

1

J'ai un ordinateur de bureau Dell exécutant Windows 7 Professionnel. Je pense que le processeur est un Intel Core i7-2600

Récemment, un expert en informatique spécialisé dans les clusters Linux examinait mon ordinateur de bureau et a dit spontanément que ma machine avait 8 threads. Il a dit que cela signifiait que la machine avait 4 noyaux: 2 fils par noyau. J'ignorais que la machine avait plus d'un noyau.

Maintenant que je sais que la machine a apparemment quatre cœurs, j'espère pouvoir exécuter peut-être trois modèles simultanément, un modèle sur chacun des trois cœurs.

Quelqu'un a suggéré que je "désactive l'hyperthreading" afin de "pouvoir utiliser tout le cœur par modèle". Sinon, il a écrit "ça tourne à la moitié de la vitesse".

J'exécute beaucoup de modèles avec le programme R et l'ordinateur qui m'aidait m'a indiqué qu'un de mes fichiers de script R affichait un message indiquant qu'il utilisait 7 des 8 threads. Donc, étant donné que le fichier R utilisait 2 threads par cœur avec trois des cœurs, peut-être que désactiver l'hyperthreading n'augmenterait pas la vitesse de calcul dans mon cas?

Si désactiver l'hyperthreading augmenterait la vitesse de calcul des scripts R, comment pourrais-je faire cela?

J'ai un peu cherché sur Internet et j'ai trouvé une discussion à ce sujet sur ce forum:

http://answers.microsoft.com/en-us/windows/forum/windows_7-performance/disable-hyperthreading-when-windows-7-already/80dd6c15-76b7-4534-b691-3e3a37ffad75

Un commentaire sur ce forum qui me concerne est l'affirmation que:

"Le plus gros problème pour ceux qui veulent arrêter HT, est que beaucoup de fabricants d'ordinateurs (HP, Dell) n'autorisent pas les acheteurs de leurs ordinateurs l'option du BIOS à arrêter HT. Et depuis que Windows regarde le HT paramétrer dans le BIOS pour déterminer s’il faut gérer HT, c’est un cas d’immobilité, et aucune possibilité de passer à la vitesse supérieure. "

Étant donné que mon ordinateur est un ordinateur Dell, je ne suis peut-être pas en mesure de désactiver l'hyper-threading.

J'ai aussi trouvé ce post sur Superuser:

Désactiver l'hyperthreading dans le registre Windows 7

Une des réponses semblait particulièrement utile, mais complexe, en ce qui concerne les hexadécimaux et l’ordinateur en question était un HP. Je ne sais pas si cela compte.

Il semble y avoir beaucoup d’autres articles ici sur les hyperthreads, mais celui qui précède se rapproche le plus de la situation que j’ai lue.

Désolé si cette question est un doublon. Si je dois fournir des informations supplémentaires ou clarifier mes préoccupations, je le ferai avec plaisir.

Mark Miller
la source
Fondamentalement, vous pouvez simplement ignorer cela. HT ne sera utilisé que lorsque c'est bénéfique. S'il y a quatre threads ou moins en cours d'exécution, chacun aura son propre noyau. Si plus de quatre threads sont en cours d'exécution, certains d'entre eux fonctionneront plus lentement, mais ils dureront une fraction de temps supérieure. C'est une victoire nette, sinon HT n'existerait pas.
David Schwartz
@DavidSchwartz dépend de l'application - J'ai un programme limité à 8 cœurs qui, si HT est activé, sélectionne 4 cœurs physiques et 4 cœurs virtuels sur mon PC à 8 cœurs et laisse la moitié des cœurs physiques inactifs. Dans ce scénario, désactiver HT m'a donné une accélération d'environ 80%. (désolé pour la nécromancie des threads)
Fly du
@SimonWaldman Je ne suis pas sûr de ce qu'est un "programme limité à 8 cœurs". Normalement, les programmes ne sélectionnent pas les cœurs, contrairement au planificateur de système d'exploitation. On dirait que le programme est juste en panne - s'il doit sélectionner des cœurs, il doit comprendre comment le faire sainement.
David Schwartz
@DavidSchwartz est un programme qui n'utilisera que 8 cœurs sauf si vous payez plus pour une licence qui en permet plus. J'imagine qu'il serait peut-être plus correct de dire qu'il n'utilisera que 8 threads.
Flyto
@SimonWaldman Odd. S'il utilise uniquement 8 threads, le planificateur doit les planifier, préférant les cœurs qui ne partagent pas les ressources d'exécution par rapport aux cœurs qui le font. Vous ne devriez pas avoir ce problème à moins que le planificateur de votre système d'exploitation ne comprenne pas l'hyper-threading, que votre BIOS ignore l'ordre d'attribution des processeurs ou que le programme choisisse spécifiquement de se connecter à des cœurs virtuels de manière stupide.
David Schwartz

Réponses:

3

Pourquoi n'y a-t-il pas d'option dans le BIOS?

Je suppose que la raison pour laquelle Dell et ses amis n’ajoutent pas souvent d’option pour désactiver cette option est qu’il s’agit rarement d’une bonne idée. En moyenne, cela ralentira votre ordinateur (ou, d'un point de vue différent, les ordinateurs de vos concurrents seront plus rapides).

Cela dit, regardons quelques exemples imaginaires:

Que fait HT?

1 noyau, pas d'hyper-threading

  • Un processus lié au processeur est en cours d'exécution et peut s'exécuter à une vitesse maximale. Permet d'appeler cette vitesse 1, ou 100%
  • 2 processus liés au processeur en cours d'exécution. Le processeur devra basculer entre les deux. La vitesse effective sur les deux processus est réduite de moitié environ. (La somme des deux vitesses est toujours égale au premier exemple.)
  • 3 processus liés au processeur en cours d'exécution. Le processeur devra basculer entre les trois. La vitesse effective sur les deux processus est d'environ un tiers. (La somme des deux vitesses est toujours la même (3 x 0,33 = 1).

2 noyaux, pas d'hyper-threading

  • 1 processus lié à l'UC * 0 est en cours d'exécution et peut s'exécuter à une vitesse maximale pour ce noyau. (vitesse 100%) (L'autre cœur est inactif).
  • 2 processus liés au processeur en cours d'exécution. Les deux peuvent fonctionner à la vitesse maximale pour leur noyau. (vitesse 200%)
  • 3 processus liés au processeur en cours d'exécution. Habituellement, vous obtenez 3 tâches exécutées avec une efficacité d'environ 2/3. (La somme des vitesses est toujours '2'. Environ 2 parce que vous perdez un peu à cause des frais généraux supplémentaires et des erreurs de cache). (vitesse 200%, ou peut-être 190%)

Maintenant, les noyaux avec hyper-threading. Ceux-ci agissent comme deux noyaux, mais pas deux noyaux complets. Ce que Intel définit comme l'hyper-threading a un peu changé au fil du temps, mais cela revient généralement à cela. Un processeur récupère les données de la mémoire et les calcule. S'il n'a pas besoin du bus de mémoire, une seconde partie de la CPU peut effectuer un travail limité. Étant donné que tout le matériel n'est pas dupliqué, vous ne disposez pas de deux cœurs complets. Cependant, avec un matériel supplémentaire limité (10%?), Vous gagnez en moyenne 30% de vitesse. *1

1 cœur, avec - 1 processus lié au processeur en cours d'exécution, pouvant s'exécuter à une vitesse maximale. (100%) - 2 processus liés à la CPU en cours d'exécution. Le processeur devra basculer entre les deux. Cependant, il a du matériel supplémentaire. La vitesse nette sera environ 30% plus rapide (disons, vitesse 133% pour un seul cœur)

Etc.

Voilà pour l'introduction à HT.

Ces% fictifs sont-ils réels?

Non. Tout d’abord, vous perdrez en efficacité à cause des frais généraux. (10 tâches sur une CPU ne s'exécutent pas plus lentement qu'une seule tâche sans commutateurs de contexte et avec tout le cache pour ses données).

Deuxièmement, j'ai totalement ignoré le turbo boost car cela compliquerait l'explication.

Qu'est-ce que mon ami voulait peut-être dire?

Regardons votre CPU 4 core 8 bandes comme ceci:
Core 1, CPU 1 (réel)
Core 1, CPU 2 (avec HT)
Core 2, CPU 3 (réel)
Core 2, CPU 4 (avec HT)
Core 3, CPU 5 (réel)
Core 3, CPU 6 (avec HT)
Core 4, CPU 7 (réel)
Core 4, CPU 8 (avec HT)

Si je lance deux tâches, je ne veux pas les deux sur CPU1 et CPU2 (car elles partagent un noyau réel) et le résultat net est près de la moitié de la vitesse possible. C'est peut-être ce que votre ami voulait dire.

Bien que vrai, je pense que vous n'avez pas besoin de vous inquiéter. Le planificateur de fenêtres est suffisamment intelligent pour allouer d’abord les processus aux processeurs 1,3,5,7 et seulement ensuite aux processeurs 2,4,6,8.



* 0 Un processus lié à la CPU est un processus limité par la CPU. Si un processus attend DiskIO et que la CPU est inactive, vous obtenez des résultats totalement différents.

* 1 Prenez ces chiffres avec un grain de sel. Ils ne sont pas précis. Ils varieront par génération de processeur et même par modèle de processeur. Ils varieront selon les programmes. Et ce que Intel appelle l'hyper-threading a changé depuis les premières générations de CPU. Cependant, ils donnent une idée approximative.

Hennes
la source