Le mode Hyper V affecte les performances de l'ordinateur. L'Hyper-Threading, qu'est-ce que c'est ? Comment activer l'Hyper-Threading ? Comment fonctionne l'hyper-threading

"...Et nous sommes fiers et notre ennemi est fier
Main, oublie la paresse. Voyons,
qui a quelles bottes au bout
va enfin s'agenouiller..."
© film "D"Artagnan et les Trois Mousquetaires"

Il y a quelque temps, l'auteur s'est permis de « râler un peu » sur le nouveau paradigme d'Intel Hyper Threading. Il faut reconnaître à Intel que la perplexité de l'auteur n'est pas passée inaperçue. Par conséquent, l'auteur s'est vu proposer de l'aide pour découvrir ( comment les dirigeants de l'entreprise ont délicatement évalué) situation « réelle » avec la technologie Hyper Threading. Eh bien, le désir de découvrir la vérité ne peut qu’être loué. N'est-ce pas vrai, cher lecteur ? Voilà du moins à quoi ressemble l’un des truismes : c'est vrai que c'est bien. Eh bien, nous allons essayer d'agir conformément à cette phrase. Par ailleurs, un certain nombre de nouvelles informations sont effectivement apparues.

Tout d’abord, formulons ce que nous savons exactement sur la technologie Hyper Threading :

1. Cette technologie est conçue pour augmenter l’efficacité du processeur. Le fait est que, selon les estimations d'Intel, seulement 30 % fonctionnent la plupart du temps ( À propos, il s'agit d'un chiffre plutôt controversé ; les détails de son calcul sont inconnus ;) de tous les actionneurs du processeur. D'accord, c'est assez offensant. Et le fait que l'idée soit née d'« additionner » d'une manière ou d'une autre les 70 % restants semble tout à fait logique ( De plus, le processeur Pentium 4 lui-même, dans lequel cette technologie sera implémentée, ne souffre pas de performances par mégahertz excessives.). L’auteur est donc obligé d’admettre que cette idée est tout à fait judicieuse.

2. L'essence de la technologie Hyper Threading est que pendant l'exécution d'un « thread » d'un programme, les périphériques d'exécution inactifs peuvent commencer à exécuter un autre « thread » du programme ( ou "fils" un autre programmes). Ou, par exemple, lors de l'exécution d'une séquence de commandes, attendez les données de la mémoire pour exécuter une autre séquence.

3. Naturellement, lors de l'exécution de différents « threads », le processeur doit en quelque sorte distinguer quelles commandes appartiennent à quel « thread ». Cela signifie qu'il existe un mécanisme ( une marque), grâce auquel le processeur distingue à quel « thread » appartiennent les commandes.

4. Il est également clair que, étant donné le petit nombre de registres à usage général dans l'architecture x86 ( total 8), chaque thread possède son propre ensemble de registres. Cependant, ce n’est plus une nouveauté ; cette limitation architecturale a été contournée depuis un certain temps grâce au « renommage de registre ». Autrement dit, il existe bien plus de registres physiques que de registres logiques. Il y en a 40 dans le processeur Pentium III. Ce nombre est sûrement plus élevé pour le Pentium 4 ; sauf pour des considérations de "symétrie":-) l'opinion est qu'il y en a environ des centaines. Aucune information fiable sur leur nombre n’a pu être trouvée. Selon des données non encore confirmées, ils seraient au nombre de 256. Selon d'autres sources, un autre chiffre. En général, incertitude totale... À propos, la position d'Intel sur ce la raison est complètement incompréhensible :-( L'auteur ne comprend pas ce qui a causé un tel secret.

5. On sait également que dans le cas où plusieurs « threads » réclament les mêmes ressources, ou où l'un des « threads » attend des données, afin d'éviter une baisse de performances, le programmeur doit insérer une « pause » spéciale. commande. Naturellement, cela nécessitera une autre recompilation des programmes.

6. Il est également clair qu'il peut y avoir des situations où les tentatives d'exécution simultanée de plusieurs « threads » entraîneront une baisse des performances. Par exemple, étant donné que la taille du cache L2 n'est pas infinie et que les « threads » actifs tenteront de charger le cache, il est possible qu'une telle « lutte pour le cache » conduise à un effacement et un rechargement constants de données dans le cache de deuxième niveau.

7. Intel affirme qu'en optimisant les programmes pour cette technologie, le gain atteindra jusqu'à 30 %. ( Ou plutôt, Intel affirme que sur les applications serveur et les systèmes actuels, jusqu'à 30 %) Hum... C’est une incitation plus que suffisante à l’optimisation.

Eh bien, nous avons formulé quelques fonctionnalités. Essayons maintenant de réfléchir à quelques implications ( dans la mesure du possible, sur la base des informations dont nous disposons). Que pouvons-nous dire ? Eh bien, tout d’abord, nous devons examiner de plus près ce qui nous est proposé exactement. Ce fromage est-il vraiment « gratuit » ? Tout d'abord, voyons comment se déroulera exactement le traitement « simultané » de plusieurs « threads ». Au fait, que veut dire Intel par le mot « thread » ?

L'auteur a l'impression ( peut-être erroné), qui dans ce cas fait référence à un fragment de programme qu'un système d'exploitation multitâche attribue pour exécution à l'un des processeurs d'un système matériel multiprocesseur. "Attendez!" le lecteur attentif dira « c’est une des définitions ! Et rien dedans donné L'auteur ne revendique pas l'originalité dans cette question. J'aimerais savoir ce qu'Intel était "original" :-). Eh bien, prenons cela comme une hypothèse de travail.

Ensuite, un certain thread est exécuté. Pendant ce temps, le décodeur de commandes ( d'ailleurs, complètement asynchrone et non inclus dans les fameux 20 étapes de Net Burst) effectue l'échantillonnage et le déchiffrement ( avec toutes les interdépendances)V microinstructions. Ici, il est nécessaire de clarifier ce que l'auteur entend par le mot « asynchrone » - le fait est que le résultat de « l'effondrement » des commandes x86 dans les micro-instructions se produit dans le bloc de décryptage. Chaque instruction x86 peut être décodée en une, deux ou plusieurs micro-instructions. Parallèlement, au stade du traitement, les interdépendances sont clarifiées et les données nécessaires sont fournies via le bus système. En conséquence, la vitesse de fonctionnement de ce bloc dépendra souvent de la vitesse d'accès aux données depuis la mémoire et, dans le pire des cas, sera déterminée par celle-ci. Il serait logique de le « détacher » du pipeline dans lequel s'effectuent en fait les micro-opérations. Cela a été fait en plaçant un bloc de décryptage avant cache de traces. Qu’essayons-nous de réaliser avec cela ? Et avec l'aide de ce « réarrangement des blocs », nous obtenons une chose simple : s'il y a des micro-instructions à exécuter dans le cache de trace, le processeur fonctionne plus efficacement. Naturellement, cette unité fonctionne à la fréquence du processeur, contrairement au Rapid Engine. À propos, l'auteur a eu l'impression que ce décodeur ressemble à un tapis roulant d'une longueur allant jusqu'à 10 à 15 étapes. Ainsi, depuis la récupération des données du cache jusqu'à l'obtention du résultat, il y a apparemment environ 30 35 étapes ( y compris le pipeline Net Burst, voir Microdesign Resources August2000 Rapport sur les microprocesseurs Volume14 Archive8, page12).

L'ensemble de micro-instructions résultant, ainsi que toutes les interdépendances, s'accumule dans un cache de trace dans le même cache, qui contient environ 12 000 microopérations. Selon des estimations approximatives, la source d'une telle estimation est la structure de la micro-instruction P6 ; le fait est qu'il est fondamentalement peu probable que la longueur des instructions change radicalement ( Considérant que la longueur de la micro-instruction avec les champs de service est d'environ 100 bits) la taille du cache de trace est obtenue à partir de 96 Ko à 120 Ko!!! Cependant! Dans ce contexte, un cache de données de taille 8 Le KB a l'air en quelque sorte asymétrique :-)… et pâle. Bien entendu, à mesure que la taille augmente, les délais d’accès augmentent ( par exemple, en augmentant à 32 Ko, les délais au lieu de deux cycles d'horloge seront de 4). Mais la vitesse d'accès à ce cache de données est-elle vraiment si importante qu'une augmentation de la latence de 2 cycles d'horloge ( dans le contexte de la longueur totale de l'ensemble du convoyeur) rend une telle augmentation de volume non rentable ? Ou s’agit-il simplement d’une réticence à augmenter la taille des cristaux ? Mais ensuite, en passant à 0,13 microns, la première étape a été d'augmenter ce cache particulier ( pas un cache de deuxième niveau). Ceux qui doutent de cette thèse devraient retenir le passage du Pentium au Pentium MMX grâce à l'augmentation du cache de premier niveau doublé Presque tous les programmes ont bénéficié d'une augmentation de performance de 10 à 15 %. Que dire de cette augmentation ? quadruple (d'autant plus que les vitesses des processeurs ont augmenté jusqu'à 2 GHz et le facteur de multiplication de 2,5 à 20)? Selon des informations non confirmées, dans la prochaine modification du noyau Pentium4 (Prescott), le cache de premier niveau sera augmenté à 16 ou 32 Ko. Le cache de deuxième niveau augmentera également. Cependant, pour le moment, tout cela n’est que rumeurs. Franchement, la situation est un peu floue. Bien que, faisons une réserve, l'auteur admet pleinement qu'une telle idée est entravée par une certaine raison spécifique. A titre d'exemple, certaines exigences liées à la géométrie de la disposition des blocs ou un banal manque d'espace libre à proximité du convoyeur ( il est clair qu'il faut situer le cache de données plus près de l'ALU).

Sans nous laisser distraire, examinons le processus plus en détail. Le pipeline est en cours d'exécution et permet aux équipes actuelles d'utiliser l'ALU. Il est clair que FPU, SSE, SSE2 et autres sont inactifs. Pas de chance, Hyper Threading entre en jeu. Remarquant que les micro-instructions sont prêtes avec les données pour le nouveau thread, l'unité de renommage de registre alloue une partie des registres physiques au nouveau thread. D'ailleurs, deux options sont possibles : un bloc de registres physiques est commun à tous les threads, ou séparé pour chacun. À en juger par le fait que dans la présentation Hyper Threading d'Intel, le bloc de renommage du registre n'est pas répertorié car les blocs qui doivent être modifiés sont sélectionnés ; Est-ce bon ou mauvais? Du point de vue des technologues, c'est clairement une bonne chose, car cela permet d'économiser des transistors. Du point de vue des programmeurs, ce n'est pas encore clair. Si le nombre de registres physiques est réellement de 128, alors avec un nombre raisonnable de threads, la situation de « pénurie de registres » ne peut pas se produire. Puis ils ( microinstructions) sont envoyés au planificateur, qui, en fait, les envoie au dispositif d'exécution ( si ce n'est pas occupé) ou "en file d'attente" si cet actionneur n'est pas disponible actuellement. Idéalement, on obtient ainsi une utilisation plus efficace des actionneurs existants. A cette époque moi-même CPU du point de vue du système d'exploitation ressemble à deux processeurs "logiques". Hm... Est-ce que tout est vraiment si clair ? Regardons la situation de plus près : un équipement ( tels que les caches, Rapid Engine, le module de prédiction de transition) sont communs aux deux processeurs. D'ailleurs, précision de la prédiction de transitionà partir de là, très probablement, légèrement va souffrir. Surtout si les threads exécutés simultanément ne sont pas connectés les uns aux autres. Et une partie ( par exemple, le planificateur de séquences de microinstructions MIS, une sorte de ROM contenant un ensemble de séquences préprogrammées d'opérations courantes et une table de renommage des registres RAT [alias]) les blocs doivent être distingués par différents threads exécutés sur des processeurs « différents ». Le long du chemin ( de la communauté du cache) il s'ensuit que si deux threads sont gourmands en cache ( c'est-à-dire que l'augmentation du cache a un grand effet), Que l'utilisation d'Hyper Threading peut même réduire la vitesse. Cela se produit parce qu'à l'heure actuelle, un mécanisme « compétitif » de lutte pour le cache a été mis en œuvre : le thread « actif » pour le moment déplace le thread « inactif ». Cependant, le mécanisme de mise en cache pourrait apparemment changer. Il est également clair que la vitesse ( au moins pour l'instant) diminuera dans les applications dans lesquelles il a diminué en SMP honnête. À titre d'exemple, SPEC ViewPerf affiche généralement de meilleurs résultats sur les systèmes monoprocesseur. Par conséquent, les résultats seront probablement inférieurs sur un système avec Hyper Threading que sans. En fait, les résultats des tests pratiques d’Hyper Threading peuvent être consultés sur .

À propos, des informations ont été divulguées sur Internet selon lesquelles ALU dans Pentium 4 16 bits. Au début, l'auteur était très sceptique quant à de telles informations - disent-ils, qu'en pensaient les envieux :-). Et puis la publication de telles informations dans le Micro Design Report m’a fait réfléchir : et si c’était vrai ? Et, bien que les informations à ce sujet ne soient pas directement liées au sujet de l'article, il est difficile de résister :-). Pour autant que l'auteur ait « suffisamment compris », le fait est que l'ALU est bien en 16 bits. J'insiste ALU seulement. Cela n'a rien à voir avec la capacité en bits du processeur lui-même. Ainsi, en un demi-temps ( ça s'appelle tic, tic) ALU ( double fréquence, comme vous vous en souvenez) ne calcule que 16 bits. Les 16 seconds sont calculés sur le demi-temps suivant. Par conséquent, en passant, il est facile de comprendre la nécessité de rendre l'ALU deux fois plus rapide - cela est nécessaire pour un « broyage » rapide des données. Ainsi, 32 bits complets sont calculés dans un cycle d'horloge complet. En fait, apparemment, 2 cycles sont nécessaires en raison de la nécessité de « coller » et de « décoller » les embouts, mais cette question doit être clarifiée. En fait, les fouilles (sur lesquelles vous pouvez écrire un poème séparé) ont donné ce qui suit : chaque ALU est divisée en 2 moitiés de 16 bits. Le premier demi-cycle traite 16 bits deux les nombres et la forme portent des bits pour les autres moitiés. L'autre moitié termine le traitement à ce moment-là précédent Nombres. Deuxième tick, la première moitié de l'ALU traite 16 bits de suivant paires de nombres et forme leurs transferts. La seconde moitié traite les 16 bits supérieurs première paire nombres et obtient un résultat 32 bits prêt. Le délai de réception d'un résultat est de 1 cycle d'horloge, mais ensuite à chaque demi-cycle d'horloge, 1 résultat de 32 bits sort. Assez spirituel et efficace. Pourquoi ce modèle ALU particulier a-t-il été choisi ? Apparemment, avec une telle organisation, Intel fait d’une pierre plusieurs coups :

1. Il est clair qu'un pipeline de 16 bits de large est plus facile à overclocker qu'un pipeline de 32 bits de large, simplement en raison de la présence de diaphonie et

2. Apparemment, Intel considérait que les opérations de calcul d'entiers étaient suffisamment fréquentes pour accélérer l'ALU, et non, par exemple, le FPU. Il est probable que lors du calcul des résultats d'opérations sur des nombres entiers, des tableaux ou des schémas de « carry-accumulé » soient utilisés. À titre de comparaison, une table de 32 bits contient 2E32 adresses, c'est-à-dire 4 gigaoctets. Deux tables 16 bits font 2x64 Ko ou 128 kilo-octets, sentez la différence ! Et l'accumulation de traits d'union dans deux parties de 16 bits se produit plus rapidement que dans une seule partie de 32 bits.

3. Économise les transistors et... la chaleur. Après tout, ce n’est un secret pour personne que toutes ces astuces architecturales sont passionnantes. Apparemment, c'était assez grand (et peut-être maison) problème que vaut Thermal Monitor, par exemple, en tant que technologie ! Après tout, une telle technologie en tant que telle n’est pas vraiment nécessaire ; c’est bien sûr bien qu’elle existe. Mais soyons honnêtes : un simple blocage suffirait pour une fiabilité suffisante. Étant donné qu'une technologie aussi complexe était prévue, cela signifie que cette option a été sérieusement envisagée lorsque de tels changements de fréquence en cours de route étaient l'un des modes de fonctionnement normaux. Ou peut-être le principal ? Ce n'est pas pour rien qu'il y avait des rumeurs selon lesquelles le Pentium 4 était prévu avec un nombre d'actionneurs beaucoup plus important. Le problème de la chaleur aurait alors dû simplement devenir le problème principal. Ou plutôt, selon les mêmes rumeurs, le dégagement de chaleur aurait dû atteindre 150 W. Et puis il est très logique de prendre des mesures pour garantir que le processeur ne fonctionne « à pleine capacité » que dans les systèmes où un refroidissement normal est assuré. De plus, la plupart des boîtiers d'origine « chinoise » ne brillent pas par un design réfléchi du point de vue du refroidissement. Hum.... Nous avons parcouru un long chemin :-)

Mais tout cela n’est que théorie. Existe-t-il aujourd’hui des processeurs qui utilisent cette technologie ? Manger. C'est Xeon ( Prestonie) et XeonMP. De plus, il est intéressant de noter que XeonMP diffère de Xeon en prenant en charge jusqu'à 4 processeurs ( les chipsets comme IBM Summit prennent en charge jusqu'à 16 processeurs, la technique est à peu près la même que dans le chipset ProFusion) et la présence d'un cache de troisième niveau de 512 Ko et 1 Mo, intégré au noyau. Au fait, pourquoi ont-ils intégré le cache de troisième niveau ? Pourquoi le cache de premier niveau n’est-il pas augmenté ?? Il doit y avoir une raison raisonnable... Pourquoi n'ont-ils pas augmenté le cache de deuxième niveau ? La raison est peut-être que Advanced Transfer Cache nécessite une latence relativement faible. Et l’augmentation de la taille du cache entraîne une augmentation des latences. Par conséquent, le cache de troisième niveau pour le cœur et le cache de deuxième niveau sont généralement « représentés » comme un bus. Juste un pneu :-). Les progrès sont donc évidents : tout a été fait pour que les données soient introduites dans le noyau le plus rapidement possible ( et, en même temps, le bus mémoire était moins chargé).

Eh bien, il s'avère qu'il n'y a pas de goulots d'étranglement particuliers ? Pourquoi l'auteur ne peut-il pas « se plaindre » ? Un processeur - et le système d'exploitation en voit deux. Bien! Deux processeurs et l'OS en voit 4 ! Beauté! Arrêt! Quel type de système d'exploitation fonctionne-t-il avec 4 processeurs ? Les systèmes d'exploitation de Microsoft qui comprennent le coût de plus de deux processeurs complètement différent argent. Par exemple, 2000 Professional, XP Professional, NT4.0 ne comprennent que deux processeurs. Et, étant donné que pour l'instant cette technologie est destinée au marché des postes de travail ( et serveurs) et n'est disponible que dans les processeurs correspondants - cela s'avère tout simplement sacrément offensant. Aujourd'hui, nous ne pouvons utiliser des processeurs dotés de cette technologie qu'en achetant une carte à double processeur et en installant un CPU. Plus on avance, plus cela devient étrange, comme disait Alice au pays des merveilles…. Autrement dit, une personne désireuse d'utiliser cette technologie est simplement obligée d'acheter les versions Server et Advanced Server des systèmes d'exploitation actuels. Oh, et le processeur « gratuit » est un peu cher... Il convient peut-être d'ajouter qu'Intel « communique » actuellement activement avec Microsoft, essayant de lier la politique de licence à physique processeur. Au moins selon le document, les nouveaux systèmes d'exploitation de Microsoft seront concédés sous licence par processeur physique. Au moins WindowsXP dispose d'une licence basée sur le nombre de processeurs physiques.

Bien entendu, vous pouvez toujours vous tourner vers des systèmes d’exploitation d’autres fabricants. Soyons honnêtes : ce n'est pas une très bonne solution pour sortir de la situation actuelle... On peut donc comprendre l'hésitation d'Intel, qui a longtemps réfléchi à l'opportunité d'utiliser ou non cette technologie.

Eh bien, n’oublions pas une conclusion assez importante : L’utilisation de l’Hyper Threading peut entraîner à la fois des gains et des pertes de performances. Eh bien, puisque nous avons déjà parlé de perdre, essayons de comprendre ce qu’il faut pour gagner : et pour gagner, il faut qu’ils connaissent cette technologie :

  1. BIOS de la carte mère
  2. Système opérateur (!!!)
  3. En fait, l'application elle-même

Permettez-moi de m'attarder sur ce point plus en détail ; le fait est que le problème n'est pas le BIOS. Nous avons discuté du système d'exploitation un peu plus tôt. Mais dans les threads qui, par exemple, attendent des données de la mémoire, vous devrez entrer une commande spéciale pause, afin de ne pas ralentir le processeur ; Après tout, en l'absence de données, le thread est capable de bloquer certains actionneurs. Et pour insérer cette commande, il faudra recompiler les applications - ce n'est pas bien, mais, grâce à Intel, tout le monde a récemment commencé à s'y habituer :-). Ainsi, le principal ( d'après l'auteur) l'inconvénient de la technologie Hyper Threading est la nécessité d'une compilation régulière. Le principal avantage de cette approche est une telle recompilation en cours de route ( et probablement plus visible :-) augmentera les performances des systèmes « honnêtes » à double processeur et cela ne peut qu’être salué. D'ailleurs, il existe déjà des études expérimentales qui confirment que dans dans la plupart des cas, des programmes optimisés pour SMP, bénéficiez de l'Hyper Threading de 15% à 18%. C'est plutôt bien. D'ailleurs, vous pouvez également voir dans quels cas l'Hyper Threading entraîne une baisse des performances.

Et enfin, essayons d'imaginer ce qui pourrait changer ( améliorer) dans le développement ultérieur de cette idée. Il est bien évident que le développement de cette technologie sera directement lié au développement du cœur du Pentium 4. Imaginons donc des changements potentiels dans le cœur. Quelle est la prochaine étape de notre plan ? Technologie 0,09 micron, mieux connue sous le nom de 90 nm…. L'auteur est enclin à croire ( à l'heure actuelle), que le développement de cette famille de processeurs ira dans plusieurs directions à la fois :

  • Grâce à un processus technique plus « fin », la fréquence du processeur deviendra encore plus élevée.
  • Espérons que le cache de données sera augmenté. Au moins jusqu'à 32 Ko.
  • Ils créeront une ALU 32 bits « honnête ». Cela devrait améliorer la productivité.
  • Augmentez la vitesse du bus système ( mais c'est déjà dans un avenir proche).
  • Ils fabriqueront de la mémoire DDR double canal ( encore une fois, l'attente est relativement courte).
  • Peut-être qu'ils introduiront un analogue de la technologie x86-64, si cette technologie ( merci à AMD) prendra racine. Dans le même temps, l'auteur espère de toutes ses forces que cet analogue sera compatible avec x86-64. Arrêtez de créer des extensions incompatibles entre elles... Encore une fois, Jerry Sanders nous intéressera, dans lequel il déclare qu'AMD et Intel se sont mis d'accord l'année dernière sur des licences croisées pour tout sauf le bus système Pentium4. Cela signifie-t-il qu'Intel intégrera le x86-64 dans le prochain cœur Pentium4 (Prescott) et qu'AMD intégrera l'Hyper Threading dans ses processeurs ? Question interessante...
  • Peut-être que le nombre d'actionneurs sera augmenté. Certes, comme le précédent, il s'agit d'un point plutôt controversé, car il nécessite une refonte presque complète du noyau - et c'est un processus long et laborieux.

Je me demande si l'idée de l'Hyper Threading sera développée ? Le fait est que, quantitativement, il n’y a nulle part où se développer ; il est clair que deux processeurs physiques valent mieux que trois processeurs logiques. Oui, et le positionnement ne sera pas facile... Fait intéressant, Hyper Threading peut également être utile lors de l'intégration de deux ( ou plus) processeurs par puce. Eh bien, par changements qualitatifs, l'auteur veut dire que la présence d'une telle technologie dans les ordinateurs de bureau ordinaires conduira au fait qu'en fait la majorité des utilisateurs travailleront sur des machines [presque] à double processeur, ce qui est très bien. C’est bien car ces machines fonctionnent beaucoup plus facilement et réagissent mieux aux actions de l’utilisateur, même sous de lourdes charges. Du point de vue de l’auteur, c’est très bien.

Au lieu d'une postface

L'auteur doit admettre qu'en travaillant sur l'article, son attitude envers l'Hyper Threading a changé à plusieurs reprises. Au fur et à mesure que les informations étaient collectées et traitées, l'attitude est devenue soit généralement positive, soit vice versa :-). Pour le moment, nous pouvons écrire ce qui suit :

Il n'existe que deux façons d'améliorer les performances : augmenter la fréquence et augmenter les performances par horloge. Et si toute l'architecture Pentium4 est conçue pour le premier chemin, alors Hyper Threading n'est que le second. De ce point de vue, on ne peut que s’en féliciter. L'Hyper Threading a également plusieurs conséquences intéressantes, telles que : changer le paradigme de programmation, amener le multitraitement au grand public, augmenter les performances des processeurs. Cependant, il y a plusieurs « gros obstacles » sur ce chemin sur lesquels il est important de ne pas « rester coincé » : le manque de support normal des systèmes d'exploitation et, surtout, la nécessité de recompiler ( et dans certains cas, changer l'algorithme) applications afin qu'elles puissent profiter pleinement de l'Hyper Threading. De plus, la présence de l'Hyper Threading permettrait de véritablement faire tourner le système d'exploitation et les applications en parallèle, et non par « morceaux » un à la fois, comme c'est le cas actuellement. Bien sûr, à condition qu'il y ait suffisamment d'actionneurs gratuits.

L'auteur tient à souligner sa gratitude Maxime Lénia(alias CARC.A.S.S.) et Ilya Vaitsman(alias Stranger_NN) pour son aide répétée et inestimable dans la rédaction de l'article.
Je voudrais également remercier tous les participants au forum qui ont exprimé à plusieurs reprises de précieux commentaires.

Hyper-Threading (hyperthreading, 'hyperthreading', hyper threading - russe) - technologie développée par l'entreprise Intel, permettant au cœur du processeur d'exécuter plus d'un (généralement deux) threads de données. Depuis qu'il a été constaté qu'un processeur typique dans la plupart des tâches n'utilise pas plus de 70% de toute la puissance de calcul, il a été décidé d'utiliser une technologie qui permet, lorsque certaines unités de calcul sont inactives, de les charger du travail avec un autre thread. Cela vous permet d'augmenter les performances du noyau de 10 à 80% en fonction de la tâche.

Comprendre le fonctionnement de l'Hyper-Threading .

Disons que le processeur effectue des calculs simples et qu'en même temps le bloc d'instructions est inactif et SIMD extensions.

Le module d'adressage le détecte et y envoie des données pour un calcul ultérieur. Si les données sont spécifiques, alors ces blocs les exécuteront plus lentement, mais les données ne seront pas inactives. Ou bien ils les prétraiteront pour un traitement plus rapide par le bloc approprié. Cela donne des gains de performances supplémentaires.

Naturellement, le thread virtuel n'atteint pas le noyau à part entière, mais cela permet d'atteindre presque 100% efficacité de la puissance de calcul, chargeant presque tout le processeur de travail, l'empêchant d'être inactif. Avec tout ça, mettre en œuvre la technologie HT cela ne prend qu'environ 5% espace supplémentaire sur la puce, et les performances peuvent parfois être ajoutées à 50% . Cette zone supplémentaire comprend des blocs de registre supplémentaires et des prédictions de branchement, qui calculent en continu où la puissance de calcul peut actuellement être utilisée et y envoient des données à partir du bloc d'adressage supplémentaire.

Pour la première fois, la technologie est apparue sur les processeurs Pentium4, mais il n'y a pas eu d'augmentation significative des performances, car le processeur lui-même n'avait pas une puissance de calcul élevée. L'augmentation était au mieux 15-20% , et dans de nombreuses tâches, le processeur fonctionnait beaucoup plus lentement que sans HT.

Ralentir processeur en raison de la technologie Hyper-Threading, se produit si :

  • Cache insuffisant pour tout cela et il redémarre cycliquement, ralentissant le processeur.
  • Les données ne peuvent pas être traitées correctement par le prédicteur de branche. Se produit principalement en raison de manque d'optimisation pour certains logiciels ou prise en charge du système d'exploitation.
  • Cela peut également se produire en raison de dépendances de données, lorsque, par exemple, le premier thread nécessite des données immédiates du second, mais qu'il n'est pas encore prêt ou qu'il est en ligne pour un autre thread. Ou bien les données cycliques nécessitent certains blocs pour un traitement rapide, et elles sont chargées avec d'autres données. Il peut exister de nombreuses variantes de dépendance aux données.
  • Si le cœur est déjà fortement chargé et que le module de prédiction de branchement « insuffisamment intelligent » envoie toujours des données qui ralentissent le processeur (pertinent pour Pentium4).

Après Pentium4, Intel commencé à utiliser la technologie seulement à partir de Noyau i7 première génération, sautant la série 2 .

La puissance de calcul des processeurs est devenue suffisante pour la mise en œuvre complète de l'hyperthreading sans trop de dégâts, même pour les applications non optimisées. Plus tard, Hyper-Threading est apparu sur les processeurs de classe moyenne et même économiques et portables. Utilisé sur toutes les séries Noyau je (i3; i5; i7) et sur les processeurs mobiles Atome(pas du tout). Ce qui est intéressant, c'est que les processeurs dual-core avec HT, obtenez un gain de performances supérieur à celui des processeurs quadricœurs en utilisant Hyper-Threading, debout sur 75% quadrinucléaire à part entière.

Où la technologie HyperThreading est-elle utile ?

Il sera utile pour une utilisation en conjonction avec des programmes professionnels, graphiques, analytiques, mathématiques et scientifiques, des éditeurs vidéo et audio, des archiveurs ( Photoshop, Corel Draw, Maya, 3D's Max, WinRar, Sony Vegas & etc). Tous les programmes utilisant un grand nombre de calculs, HT sera certainement utile utile. Heureusement, dans 90% Dans certains cas, ces programmes sont bien optimisés pour son utilisation.

Hyper-Threading indispensable pour les systèmes de serveurs. En fait, il a été partiellement développé pour ce créneau. Grâce à HT, vous pouvez augmenter considérablement la puissance du processeur lorsqu'il y a un grand nombre de tâches. Chaque thread sera déchargé de moitié, ce qui a un effet bénéfique sur l'adressage des données et la prédiction des branches.

Beaucoup jeux d'ordinateur, avoir une attitude négative envers la présence Hyper-Threading, grâce à quoi le nombre d'images par seconde diminue. Cela est dû au manque d'optimisation de Hyper-Threading du côté du jeu. L'optimisation du système d'exploitation à elle seule ne suffit pas toujours, surtout lorsque l'on travaille avec des données inhabituelles, diverses et complexes.

Sur les cartes mères prenant en charge HT, vous pouvez toujours désactiver la technologie hyperthreading.

Bonjour les amateurs d'informatique et de matériel informatique.

Souhaitez-vous disposer d'un processeur hautes performances dans votre ordinateur, capable d'effectuer de nombreuses tâches simultanément à une vitesse fulgurante ? Qui refuserait, n'est-ce pas ? Ensuite, je vous propose de vous familiariser avec la technologie hyper threading : qu'est-ce que c'est et comment ça marche, vous l'apprendrez grâce à cet article.


Explication du concept

L'hyper-threading est traduit de l'anglais par « hyper-précision ». La technologie a reçu un nom si fort pour une raison. Après tout, le système d'exploitation utilise un processeur physique qui en est équipé comme deux cœurs logiques. Par conséquent, davantage de commandes sont traitées sans aucun impact sur les performances.

Comment est-ce possible? Du fait que le processeur :

  • Enregistre les informations sur plusieurs threads en cours d'exécution à la fois ;
  • Pour chaque processeur logique, il existe un ensemble de registres - des blocs de mémoire interne rapide, ainsi qu'un bloc d'interruption. Ce dernier est chargé d’exécuter séquentiellement les requêtes provenant de différents appareils.

A quoi cela ressemble-t-il en pratique ? Disons que le processeur physique traite désormais les commandes du premier processeur logique. Mais une sorte d'échec s'est produit dans ce dernier, et il doit, par exemple, attendre les données de la mémoire. Le physique ne perdra pas de temps et passera immédiatement au deuxième processeur logique.

À propos de l'amélioration de la productivité

En règle générale, l'efficacité d'un processeur physique ne dépasse pas 70 %. Pourquoi? Souvent, certains blocs ne sont tout simplement pas nécessaires pour accomplir une tâche particulière. Par exemple, lorsque le processeur effectue des actions de calcul triviales, le bloc d'instructions et les extensions SIMD ne sont pas utilisés. Il arrive qu'une panne se produise dans le module de prédiction de branchement ou lors de l'accès au cache.

Dans des situations comme celle-ci, l’Hyper-threading comble les « lacunes » avec d’autres tâches. Ainsi, l'efficacité de la technologie réside dans le fait que le travail utile n'est pas inactif et est confié à des appareils inactifs.

Apparence et mise en œuvre

On peut considérer que l'Hyper-threading a déjà fêté ses 15 ans. Après tout, il a été développé sur la base de la technologie Super-Threading, lancée en 2002 et qui a commencé à fonctionner dans les produits Xeon, puis la même année, elle a été intégrée au Pentium 4. Les droits d'auteur de ces technologies appartiennent à Intel.

HT est implémenté dans des processeurs fonctionnant sur la microarchitecture NetBurst, qui a des vitesses d'horloge élevées. Le support technologique a été implémenté dans les modèles des familles Core vPro, M et Xeon. Cependant, la série Core 2 (« Duo », « Quad ») n'est pas intégrée. Une technologie similaire dans son principe de fonctionnement est implémentée dans les processeurs Atom et Itanium.

Comment l'activer ? Vous devez non seulement disposer de l'un des processeurs ci-dessus, mais également d'un système d'exploitation prenant en charge la technologie et d'un BIOS offrant la possibilité d'activer et de désactiver HT. Sinon, mettez à jour le BIOS.

Avantages et inconvénients de l'Hyper-threading

Vous avez peut-être déjà conclu certains des avantages de la technologie à partir des informations ci-dessus. Je vais leur ajouter quelques mots supplémentaires :

  • Fonctionnement stable de plusieurs programmes en parallèle ;
  • Temps de réponse réduit lorsque vous surfez sur Internet ou travaillez avec des applications.

Comme vous le comprenez, il y avait une difficulté dans la pommade. Il se peut qu'il n'y ait pas d'augmentation des performances pour les raisons suivantes :

  • Mémoire cache insuffisante. Par exemple, les processeurs i7 à 4 cœurs disposent de 8 Mo de cache, mais du même nombre de cœurs logiques. Nous n'obtenons que 1 Mo par cœur, ce qui n'est pas suffisant pour que la plupart des programmes effectuent des tâches informatiques. Pour cette raison, non seulement la productivité s’arrête, mais elle diminue même.

  • Dépendance aux données. Disons que le premier thread nécessite immédiatement des informations du second, mais qu'il n'est pas encore prêt ou qu'il est mis en file d'attente dans un autre thread. Il arrive également que les données cycliques aient besoin de certains blocs pour accomplir rapidement une tâche, mais qu'elles soient déjà occupées par d'autres travaux.
  • Surcharge du noyau. Il arrive que le noyau soit déjà surchargé, mais malgré cela, le module de prédiction lui envoie toujours des données, ce qui entraîne un ralentissement de l'ordinateur.

Où l’Hyper-threading est-il nécessaire ?

La technologie sera utile lors de l'utilisation de programmes gourmands en ressources : éditeurs audio, vidéo et photo, jeux, archiveurs. Ceux-ci incluent Photoshop, Maya, 3D's Max, Corel Draw, WinRar, etc.

Il est important que le logiciel soit optimisé pour fonctionner avec l'Hyper-threading. Sinon, des retards pourraient survenir. Le fait est que les programmes considèrent les cœurs logiques comme physiques, ils peuvent donc envoyer différentes tâches au même bloc.

Nous vous attendons pour visiter mon blog.

En février 2002, la technologie propriétaire d'Intel, Hyper-Threading, a fait ses débuts. Qu’est-ce que c’est et pourquoi est-ce devenu presque universel aujourd’hui ? La réponse à cette question et à d’autres seront discutées dans ce document.

Histoire de l'émergence de la technologie HT

Le premier processeur de bureau à prendre en charge le multithreading logique était le Pentium de quatrième génération. L'Hyper-Threading est une technologie qui a permis dans ce cas de traiter deux flux de données à la fois sur un seul cœur physique. De plus, cette puce était installée dans le socket du processeur PGA478, elle fonctionnait en mode informatique 32 bits et sa fréquence d'horloge était de 3,06 GHz. Avant cela, on ne le trouvait que dans les processeurs de serveur de la série XEON.

Après avoir obtenu de bons résultats dans ce créneau, Intel a décidé d'étendre HT au segment des ordinateurs de bureau. Par la suite, toute une famille de tels processeurs a été lancée au sein du PGA478. Après le lancement du socket LGA775, NT a été temporairement oublié. Mais avec le début des ventes du LGA1156, il a retrouvé un second souffle en 2009. Depuis lors, il est devenu un attribut obligatoire des solutions de processeurs Intel, tant dans le segment ultra-performant que dans les systèmes informatiques économiques.

Le concept de cette technologie

L'essence de la technologie Intel Hyper-Threading réside dans le fait que, grâce à des modifications minimes dans la disposition du microprocesseur, les développeurs garantissent qu'au niveau du système et du logiciel, le code est traité dans deux threads sur un cœur physique. Tous les éléments du module informatique restent inchangés, seuls des registres spéciaux et un contrôleur d'interruption repensé sont ajoutés.

Si, pour une raison quelconque, le module informatique physique commence à rester inactif, un deuxième thread de programme est lancé dessus, tandis que le premier attend la réception des données ou informations nécessaires. Autrement dit, si auparavant les temps d'arrêt dans le fonctionnement de la partie informatique des puces étaient assez fréquents, l'Hyper-Threading élimine presque complètement cette possibilité. Voyons ci-dessous ce qu'est cette technologie.

Au niveau matériel

Des exigences accrues sont imposées au matériel lors de l'utilisation de l'Hyper-Threading. La carte mère, le BIOS et le processeur doivent le prendre en charge. Au moins au sein du socket du processeur PGA478, cette compatibilité devait faire l'objet d'une attention particulière. Dans ce cas, tous les ensembles logiques du système n'étaient pas orientés vers l'utilisation de NT, tout comme les processeurs. Et même si une abréviation aussi convoitée était présente dans la nomenclature de la carte mère, cela ne signifiait pas du tout que les puces étaient correctement initialisées car il était nécessaire de mettre à jour le BIOS.

La situation dans ce cas a radicalement changé depuis LGA1156. Cette plateforme informatique a été initialement conçue pour l’utilisation de l’Hyper-Threading. Par conséquent, les utilisateurs n’ont rencontré aucun problème important lors de l’utilisation de ce dernier dans ce cas. Il en va de même pour les sockets de processeur suivants tels que LGA1155, LGA1151 et LGA1150.

Les sockets hautes performances LGA1366, LGA2011 et LGA2011-v3 pourraient se vanter d'une absence similaire de problèmes avec l'utilisation de HT. Pour couronner le tout, le concurrent direct d'Intel, AMD, a implémenté une technologie multitâche logique très similaire - SMT - dans la dernière génération de ses processeurs pour AM4. Il utilise un concept presque identique. La seule différence réside dans le nom.

Principaux composants du côté logiciel

Il convient de noter que même si NT est entièrement pris en charge par les ressources matérielles, il ne fonctionnera pas toujours correctement au niveau logiciel. Pour commencer, le système d'exploitation doit être capable de fonctionner simultanément avec plusieurs cœurs de calcul. Les versions obsolètes actuelles du logiciel système MS-DOS ou Windows 98 ne disposent pas de cette fonctionnalité. Mais dans le cas de Windows 10, aucun problème ne se pose et ce système d'exploitation est déjà initialement conçu pour de telles ressources matérielles d'un ordinateur personnel.

Voyons maintenant comment activer l'Hyper-Threading sous Windows. Pour ce faire, tous les logiciels d'application de contrôle nécessaires doivent être installés sur l'ordinateur. En règle générale, il s'agit d'un utilitaire spécial provenant du CD de la carte mère. Il dispose d'un onglet spécial où vous pouvez modifier les valeurs dans le BIOS en temps réel. Ceci, à son tour, conduit au fait que l'option Hyper-Threading passe à la position Activé et que des threads logiques supplémentaires sont activés, même sans redémarrer le système d'exploitation.

Technologie habilitante

De nombreux utilisateurs novices se posent assez souvent, au stade initial de l'utilisation d'un nouvel ordinateur, une question importante concernant l'Hyper-Threading : comment l'activer ? Il existe deux manières possibles de résoudre ce problème. L'un d'eux utilise le BIOS. Dans ce cas, vous devez procéder comme suit :

  • Lorsque vous allumez le PC, nous initialisons la procédure d'entrée dans le BIOS. Pour ce faire, maintenez simplement le bouton DEL enfoncé lorsque l'écran de test apparaît (dans certains cas, vous devez maintenir enfoncé F2).
  • Une fois l'écran bleu affiché, utilisez les touches de navigation pour accéder à l'onglet AVANCÉ.
  • Ensuite, nous trouvons l'élément Hyper-Threading dessus.
  • En face, vous devez définir la valeur sur Activé.

Le principal inconvénient de cette méthode est la nécessité de redémarrer l'ordinateur personnel pour effectuer cette opération. Une véritable alternative consiste à utiliser l’utilitaire de configuration de la carte mère. Cette méthode a été décrite en détail dans la section précédente. Et dans ce cas, il n'est pas du tout nécessaire d'entrer dans le BIOS.

Désactivation de NT

Par analogie avec les méthodes d'activation de NT, il existe deux manières de désactiver cette fonction. L'une d'entre elles ne peut être effectuée que lors de l'initialisation du système informatique. Ceci, à son tour, n’est pas tout à fait pratique en pratique. Les experts optent donc pour la deuxième méthode, qui repose sur l’utilisation d’un utilitaire informatique sur la carte mère. Dans le premier cas, les manipulations suivantes sont effectuées :

  1. Lors du chargement d'un ordinateur électronique, on entre dans le système d'entrées-sorties de base (son deuxième nom est BIOS) selon la méthode décrite précédemment.
  2. Utilisez les touches du curseur pour accéder à l'élément de menu Avancé.
  3. Ensuite, vous devez trouver l'élément de menu Hyper-Threading (dans certains modèles de cartes mères, il peut être désigné par HT). En face, à l'aide des boutons PG DN et PG UP, réglez la valeur sur Désactivé.
  4. Nous enregistrons les modifications démolies en utilisant F10.
  5. Quittez le BIOS et redémarrez l'ordinateur personnel.

Dans le second cas, lors de l'utilisation de l'utilitaire de diagnostic de la carte mère, il n'est pas nécessaire de redémarrer le PC. C'est son principal avantage. L'algorithme dans ce cas est identique. La différence est qu'il utilise un utilitaire spécial préinstallé du fabricant de la carte mère.

Auparavant, deux méthodes principales pour désactiver l'Hyper-Threading étaient décrites. Bien que le second d’entre eux soit nominalement considéré comme plus complexe, il est plus pratique car il ne nécessite pas de redémarrage de l’ordinateur.

Modèles de processeur prenant en charge NT

Initialement, comme indiqué précédemment, la prise en charge de l'Hyper-Threading n'était implémentée que dans les processeurs Pentium de la série 4 et uniquement dans la version PGA478. Mais déjà dans le cadre des plates-formes informatiques LGA1156 et ultérieures, la technologie évoquée dans ce document a été utilisée dans presque tous les modèles de puces possibles. Avec son aide, les processeurs Celeron sont passés d'une solution monocœur à une solution double thread. À leur tour, Penrium et i3 pourraient déjà traiter 4 flux de code avec son aide. Eh bien, les solutions phares de la série i7 sont capables de fonctionner simultanément avec 8 processeurs logiques.

Pour plus de clarté, nous présentons l'utilisation de NT au sein de la plate-forme informatique actuelle d'Intel - LGA1151 :

  • Les processeurs de la série Celeron ne prennent pas en charge cette technologie et ne disposent que de 2 unités de calcul.
  • Les puces de la ligne Pentium sont équipées de 2 cœurs et de quatre threads. En conséquence, NT est dans ce cas entièrement pris en charge.
  • Les processeurs plus puissants de la gamme Core i3 ont une disposition similaire : 2 modules physiques peuvent fonctionner dans 4 threads.
  • Comme la plupart des puces Celeron économiques, le Core i5 n'est pas équipé du support HT.
  • Les solutions phares i7 prennent également en charge HT. Seulement dans ce cas, au lieu de 2 vrais cœurs, il y a déjà 4 unités de traitement de code. À leur tour, ils peuvent déjà travailler dans 8 threads.

Hyper-Threading – qu'est-ce que cette technologie et quel est son objectif principal ? Il s'agit d'un multitâche logique, qui permet, grâce à des ajustements matériels minimes, d'augmenter les performances du système informatique dans son ensemble.

Dans quels cas cette technologie est-elle mieux utilisée ?

Dans certains cas, comme indiqué précédemment, NT augmente la vitesse à laquelle le processeur traite le code du programme. L'Hyper-Threading ne peut fonctionner efficacement qu'avec des logiciels chauds. Des exemples typiques sont les encodeurs vidéo et audio, les progiciels graphiques professionnels et les archiveurs. De plus, la présence d'une telle technologie peut améliorer considérablement les performances du système serveur. Mais avec une implémentation monothread du code du programme, la présence de l'Hyper-Threading est nivelée, c'est-à-dire que vous obtenez un processeur standard qui résout une tâche sur un seul cœur.

Avantages et inconvénients

La technologie Intel Hyper-Threading présente certains inconvénients. Le premier d’entre eux est l’augmentation du coût du processeur. Mais une plus grande vitesse et une meilleure disposition des puces de silicium augmenteront dans tous les cas le prix du processeur. En outre, l'augmentation de la surface de la base semi-conductrice du processeur entraîne une augmentation de la consommation d'énergie et de la température. La différence dans ce cas est insignifiante et ne dépasse pas 5 %, mais elle existe toujours. Il n'y a pas d'autres lacunes significatives dans ce cas.

Parlons maintenant des avantages. La technologie propriétaire NT d'Intel n'affecte pas les performances, c'est-à-dire qu'un tel ordinateur ne pourra pas descendre en dessous d'un certain seuil. Si le logiciel prend parfaitement en charge le calcul parallèle, il y aura alors une certaine augmentation de la vitesse et, bien sûr, de la productivité.

Les tests montrent que dans certains cas, l'augmentation peut atteindre 20 %. Les logiciels les plus optimisés dans ce cas sont divers transcodeurs de contenu multimédia, archiveurs et progiciels graphiques. Mais avec les jeux, tout ne va pas si bien. À leur tour, ils sont capables de fonctionner sur 4 threads et, par conséquent, les puces phares ne sont pas en mesure de surpasser les solutions de processeur de niveau intermédiaire dans ce cas.

Une alternative moderne d'AMD

La technologie Hyper-Threading n’est pas la seule de ce type aujourd’hui. Elle a une vraie alternative. Avec la sortie de la plateforme AM4, AMD lui a proposé un digne concurrent sous la forme de SMT. Au niveau matériel, ce sont des solutions identiques. Seul le produit phare d'Intel peut traiter 8 threads, et la puce AMD leader peut en traiter 16. Cette circonstance à elle seule indique que la deuxième solution est plus prometteuse.

Par conséquent, Intel est obligé d'ajuster de toute urgence ses plans de sortie de produits et de proposer des solutions de processeurs complètement nouvelles qui peuvent rivaliser avec les nouveaux arrivants d'AMD. Seulement aujourd'hui, ils n'ont pas encore été réorganisés. Par conséquent, si vous avez besoin d'une plate-forme informatique abordable, il est préférable de choisir le LGA1151 d'Intel. Si vous avez besoin d’une amélioration des performances, alors l’AM4 d’AMD serait préférable.

Il fut un temps où il était nécessaire d’évaluer les performances de la mémoire dans le contexte de la technologie Hyper-threading. Nous sommes arrivés à la conclusion que son influence n'est pas toujours positive. Lorsqu'un quantum de temps libre est apparu, il y a eu une volonté de poursuivre la recherche et de considérer les processus en cours avec une précision de cycles et de bits d'horloge machine, en utilisant un logiciel de notre propre conception.

Plateforme à l'étude

L'objet des expériences est un ordinateur portable ASUS N750JK doté d'un processeur Intel Core i7-4700HQ. Fréquence d'horloge 2,4 GHz, augmentée en mode Intel Turbo Boost jusqu'à 3,4 GHz. Installé 16 Go de RAM DDR3-1600 (PC3-12800), fonctionnant en mode double canal. Système d'exploitation – Microsoft Windows 8.1 64 bits.

Fig.1 Configuration de la plateforme étudiée.

Le processeur de la plate-forme à l'étude contient 4 cœurs qui, lorsque la technologie Hyper-Threading est activée, fournissent une prise en charge matérielle pour 8 threads ou processeurs logiques. Le firmware de la plateforme transmet ces informations au système d'exploitation via la table ACPI MADT (Multiple APIC Description Table). Étant donné que la plate-forme ne contient qu'un seul contrôleur RAM, il n'existe pas de table SRAT (System Resource Affinity Table), qui déclare la proximité des cœurs de processeur avec les contrôleurs de mémoire. Évidemment, l'ordinateur portable étudié n'est pas une plateforme NUMA, mais le système d'exploitation, dans un souci d'unification, le considère comme un système NUMA à un domaine, comme l'indique la ligne NUMA Nodes = 1. Un fait fondamental pour notre expériences est que le cache de données de premier niveau a une taille de 32 kilo-octets pour chacun des quatre cœurs. Deux processeurs logiques partageant un cœur partagent les caches L1 et L2.

Opération à l’étude

Nous étudierons la dépendance de la vitesse de lecture d'un bloc de données sur sa taille. Pour ce faire, nous choisirons la méthode la plus productive, à savoir la lecture d'opérandes de 256 bits à l'aide de l'instruction AVX VMOVAPD. Dans les graphiques, l'axe X indique la taille du bloc et l'axe Y indique la vitesse de lecture. Autour du point X, qui correspond à la taille du cache L1, on s'attend à voir un point d'inflexion, puisque les performances devraient chuter une fois que le bloc traité quitte les limites du cache. Dans notre test, dans le cas d'un traitement multi-thread, chacun des 16 threads initiés fonctionne avec une plage d'adresses distincte. Pour contrôler la technologie Hyper-Threading au sein de l'application, chaque thread utilise la fonction API SetThreadAffinityMask, qui définit un masque dans lequel un bit correspond à chaque processeur logique. Une valeur d'un seul bit permet au processeur spécifié d'être utilisé par un thread donné, une valeur nulle l'interdit. Pour 8 processeurs logiques de la plateforme étudiée, le masque 11111111b permet l'utilisation de tous les processeurs (Hyper-Threading est activé), le masque 01010101b permet l'utilisation d'un processeur logique dans chaque cœur (Hyper-Threading est désactivé).

Les abréviations suivantes sont utilisées dans les graphiques :

MBPS (mégaoctets par seconde)vitesse de lecture du bloc en mégaoctets par seconde;

CPI (horloges par instruction)nombre de cycles d'horloge par instruction;

TSC (compteur d'horodatage)Compteur de cycles du processeur.

Remarque : La vitesse d'horloge du registre TSC peut ne pas correspondre à la vitesse d'horloge du processeur lors de l'exécution en mode Turbo Boost. Ceci doit être pris en compte lors de l’interprétation des résultats.

Sur le côté droit des graphiques, un vidage hexadécimal des instructions qui composent le corps de la boucle de l'opération cible exécutée dans chacun des threads du programme, ou les 128 premiers octets de ce code, est visualisé.

Expérience n°1. Un fil



Figure 2 Lecture d'un seul thread

La vitesse maximale est de 213 563 mégaoctets par seconde. Le point d'inflexion se produit à une taille de bloc d'environ 32 kilo-octets.

Expérience n°2. 16 threads sur 4 processeurs, Hyper-Threading désactivé



Figure 3 Lecture en seize fils. Le nombre de processeurs logiques utilisés est de quatre

L'hyper-threading est désactivé. La vitesse maximale est de 797 598 mégaoctets par seconde. Le point d'inflexion se produit à une taille de bloc d'environ 32 kilo-octets. Comme prévu, par rapport à la lecture avec un seul thread, la vitesse a augmenté d'environ 4 fois, en fonction du nombre de cœurs fonctionnels.

Expérience n°3. 16 threads sur 8 processeurs, Hyper-Threading activé



Figure 4 Lecture en seize fils. Le nombre de processeurs logiques utilisés est de huit

L'hyper-threading est activé. La vitesse maximale est de 800 722 mégaoctets par seconde ; grâce à l'activation de l'Hyper-Threading, elle n'a presque pas augmenté. Le gros inconvénient est que le point d'inflexion se produit à une taille de bloc d'environ 16 kilo-octets. L'activation de l'Hyper-Threading a légèrement augmenté la vitesse maximale, mais la baisse de vitesse se produit désormais à la moitié de la taille du bloc - environ 16 kilo-octets, donc la vitesse moyenne a considérablement diminué. Ce n'est pas surprenant, chaque cœur possède son propre cache L1, alors que les processeurs logiques d'un même cœur le partagent.

conclusions

L’opération étudiée s’adapte assez bien sur un processeur multicœur. Raisons : chaque cœur contient son propre cache L1 et L2, la taille du bloc cible est comparable à la taille du cache et chaque thread fonctionne avec sa propre plage d'adresses. À des fins académiques, nous avons créé ces conditions dans un test synthétique, reconnaissant que les applications du monde réel sont généralement loin d’être une optimisation idéale. Mais l'activation de l'Hyper-Threading, même dans ces conditions, a eu un effet négatif : avec une légère augmentation de la vitesse de pointe, il y a une perte significative de la vitesse de traitement des blocs dont la taille varie de 16 à 32 kilo-octets.
mob_info