Ordinateurs

Comment Windows utilise-t-il plusieurs cœurs de processeur ? – ExtrêmeTech

Un lecteur nous a récemment contactés et a posé une question qui mérite une réponse dans un article.

Comment Windows (et peut-être tous les systèmes d’exploitation) tire-t-il parti de plusieurs cœurs ? Alternativement, si cette fonction est intégrée au matériel, comment les cœurs savent-ils quelles applications exécuter et quand ? Je suppose que plus de cœurs sont meilleurs, mais comment cela fonctionne-t-il exactement ? Et existe-t-il des moyens de configurer des applications/Windows pour mieux tirer parti de plus de cœurs ?

Lorsque vous allumez un PC, avant même que le système d’exploitation ne soit chargé, votre CPU et la « poignée de main » de la carte mère, faute d’un meilleur terme. Votre processeur transmet certaines informations sur ses propres caractéristiques de fonctionnement à l’UEFI de la carte mère, qui utilise ensuite ces informations pour initialiser la carte mère et démarrer le système. Si l’UEFI ne peut pas identifier correctement votre processeur, votre carte mère ne démarre généralement pas. Le nombre de cœurs de votre processeur est l’une des caractéristiques signalées à la fois à l’UEFI et au système d’exploitation.

L’un des composants critiques du système d’exploitation s’appelle le planificateur. Le planificateur consiste en la méthode utilisée par le système d’exploitation pour affecter le travail aux ressources, telles que le CPU et le GPU, qui terminent ensuite ce travail. L’« unité » de travail — le plus petit bloc de travail géré par le planificateur du système d’exploitation — s’appelle un thread. Si vous vouliez faire une analogie, vous pourriez comparer un fil à une étape sur une chaîne de montage. Une étape au-dessus du fil, nous avons le processus. Les processus sont des programmes informatiques exécutés dans un ou plusieurs threads. Dans cette analogie d’usine simplifiée, le processus est l’ensemble de la procédure de fabrication du produit, tandis que le fil est chaque tâche individuelle.

Problème: Les processeurs ne peuvent exécuter qu’un seul thread à la fois. Chaque processus nécessite au moins un thread. Comment améliorer les performances de l’ordinateur ?

La solution: Horloge CPU plus rapide.

Pendant des décennies, Dennard Scaling a été le cadeau qui a continué à donner. La loi de Moore a déclaré que nous serions capables d’emballer des transistors dans un espace de plus en plus petit, mais Dennard Scaling est ce qui leur a permis d’atteindre des vitesses d’horloge de plus en plus élevées sur des tensions plus basses.

Si l’ordinateur fonctionne assez rapidement, son incapacité à gérer plus d’un thread à la fois devient beaucoup moins problématique. Bien qu’il existe un ensemble distinct de problèmes qui ne peuvent pas être calculés en moins de temps que la durée de vie prévue de l’univers sur un ordinateur classique, il y en a beaucoup, beaucoup, de nombreux problèmes qui peuvent être calculés très bien de cette façon.

À mesure que les ordinateurs devenaient plus rapides, les développeurs ont créé des logiciels plus sophistiqués. La forme la plus simple de multithreading est le multithreading à gros grains, dans lequel le système d’exploitation passe à un thread différent plutôt que de rester assis à attendre les résultats d’un calcul. Cela est devenu important dans les années 1980, lorsque les horloges du processeur et de la RAM ont commencé à se séparer, la vitesse de la mémoire et la bande passante augmentant toutes deux beaucoup plus lentement que la vitesse d’horloge du processeur. L’avènement des caches signifiait que les processeurs pouvaient conserver de petites collections d’instructions à proximité pour un traitement immédiat des chiffres, tandis que le multithreading garantissait que le processeur avait toujours quelque chose à faire.

Psssssst :  Une fuite indique que le socket AM5 d'AMD ne prendra pas en charge PCIe 5.0 au lancement

Point important : tout ce dont nous avons discuté jusqu’à présent s’applique aux processeurs monocœur. Aujourd’hui, les termes multithreading et multiprocessing sont souvent utilisés familièrement pour signifier la même chose, mais cela n’a pas toujours été le cas. Le multitraitement symétrique et le multithreading symétrique sont deux choses différentes. Pour faire simple :

CMS = Le CPU peut exécuter plus d’un thread simultanément, en programmant un deuxième thread qui peut utiliser les unités d’exécution non utilisées actuellement par le premier thread. Intel appelle cette technologie Hyper-Threading, AMD l’appelle simplement SMT. Actuellement, AMD et Intel utilisent SMT pour augmenter les performances du processeur. Les deux sociétés l’ont historiquement déployé de manière stratégique, en l’offrant sur certains produits mais pas sur d’autres. De nos jours, la majorité des processeurs des deux sociétés proposent SMT. Dans les systèmes grand public, cela signifie que vous avez la prise en charge du nombre de cœurs de processeur * 2 threads, ou 8C/16T, par exemple.

SMP = Multitraitement symétrique. Le processeur contient plus d’un cœur de processeur (ou utilise une carte mère multi-socket). Chaque cœur de processeur n’exécute qu’un seul thread. Le nombre de threads que vous pouvez exécuter par cycle d’horloge est limité au nombre de cœurs dont vous disposez. Écrit comme 6C/6T.

Hyper-Threading

L’Hyper-Threading est généralement un point positif pour les puces Intel.

Le multithreading dans un contexte monocœur courant signifiait « À quelle vitesse votre processeur peut-il basculer entre les threads », et non « Votre processeur peut-il exécuter plusieurs threads en même temps ? »

« Votre système d’exploitation pourrait-il exécuter plus d’une application à la fois sans planter? » était aussi une demande fréquente.

Psssssst :  Les bancs d'essai d'Ice Lake brossent un tableau complexe pour le dernier processeur d'Intel

Optimisation de la charge de travail et le système d’exploitation

Les processeurs modernes, y compris les puces x86 construites il y a 20 ans, implémentent ce que l’on appelle Out of Order Execution, ou OoOE. Tous les cœurs de processeur hautes performances modernes, y compris les « gros » cœurs de smartphone de big.Little, sont des conceptions OoOE. Ces processeurs réordonnent les instructions qu’ils reçoivent en temps réel, pour une exécution optimale.

Le CPU exécute le code que le système d’exploitation lui envoie, mais le système d’exploitation n’a rien à voir avec l’exécution réelle du flux d’instructions. Ceci est géré en interne par le CPU. Les processeurs x86 modernes réorganisent les instructions qu’ils reçoivent et convertissent ces instructions x86 en micro-opérations plus petites, de type RISC. L’invention d’OOE a aidé les ingénieurs à garantir certains niveaux de performances sans compter entièrement sur les développeurs pour écrire un code parfait. Permettre au processeur de réorganiser ses propres instructions améliore également les performances multithread, même dans un contexte monocœur. N’oubliez pas que le processeur passe constamment d’une tâche à l’autre, même lorsque nous n’en sommes pas conscients.

Le processeur, cependant, ne fait aucune de ses propres planifications. Cela dépend entièrement du système d’exploitation. L’avènement des processeurs multithreads ne change rien à cela. Lorsque la première carte grand public à double processeur est sortie (l’ABIT BP6), les amateurs de multicœur devaient exécuter Windows NT ou Windows 2000. La famille Win9X ne prenait pas en charge le traitement multicœur.

La prise en charge de l’exécution sur plusieurs cœurs de processeur nécessite que le système d’exploitation effectue toutes les mêmes tâches de gestion de la mémoire et d’allocation des ressources qu’il utilise pour empêcher différentes applications de planter le système d’exploitation, avec des bandes de garde supplémentaires pour empêcher les processeurs de s’entrechoquer.

Un moderne processeur multicœur n’a pas d' »unité de planificateur principal » qui attribue le travail à chaque cœur ou distribue autrement les charges de travail. C’est le rôle du système d’exploitation.

Pouvez-vous configurer manuellement Windows pour mieux utiliser les cœurs ?

En règle générale, non. Il y a eu une poignée de cas spécifiques dans lesquels Windows devait être mis à jour afin de tirer parti des fonctionnalités intégrées à un nouveau processeur, mais cela a toujours été quelque chose que Microsoft devait effectuer seul.

Les exceptions à cette politique sont rares, mais il y en a quelques-unes :

Les nouveaux processeurs nécessitent parfois des mises à jour du système d’exploitation pour que le système d’exploitation tire pleinement parti des capacités du matériel. Dans ce cas, il n’y a pas vraiment d’option manuelle, sauf si vous voulez installer manuellement la mise à jour.

Psssssst :  AMD va pousser l'overclocking de la mémoire DDR5 avec la technologie EXPO - High-teK.ca

L’AMD 2990WX fait en quelque sorte exception à cette politique. Le processeur fonctionne assez mal sous Windows car Microsoft n’a pas envisagé l’existence d’un processeur avec plus d’un nœud NUMA, et il n’utilise pas très bien les ressources du 2990WX. Dans certains cas, il existe des moyens éprouvés d’améliorer les performances du 2990WX grâce à l’affectation manuelle des threads, bien que je recommande franchement de passer à Linux si vous en possédez un, juste pour une tranquillité d’esprit générale sur le problème.

Le 3990X est un même Suite valeur aberrante théorique. Étant donné que Windows 10 limite les groupes de processeurs à 64 threads, vous ne pouvez pas consacrer plus de 50 % des ressources d’exécution du 3990X à une seule charge de travail, à moins que l’application n’implémente un planificateur personnalisé. C’est pourquoi le 3990X n’est pas vraiment recommandé pour la plupart des applications – il fonctionne mieux avec les moteurs de rendu et autres applications professionnelles qui ont franchi cette étape.

En dehors des systèmes à plus grand nombre de cœurs, où certains réglages manuels pourraient théoriquement améliorer les performances car Microsoft n’a pas encore vraiment optimisé pour ces cas d’utilisation, non, vous ne pouvez rien faire pour vraiment optimiser la façon dont Windows répartit les charges de travail. Pour être honnête, vous ne voulez vraiment pas qu’il y en ait. Les utilisateurs finaux ne devraient pas avoir à se soucier de l’attribution manuelle des threads pour des performances optimales, car la configuration optimale changera en fonction des tâches que les processeurs traitent à un moment donné. La tendance à long terme dans la conception du CPU et du système d’exploitation est vers une coopération plus étroite entre le CPU et le système d’exploitation afin de mieux faciliter la gestion de l’alimentation et les modes turbo.

Note de l’éditeur : Merci à Bruce Borkosky pour la suggestion d’article.

Maintenant lis:

Bouton retour en haut de la page