Maison / Skype / Quels sont les cœurs du processeur. Qu'est-ce qui affecte le nombre de cœurs de processeur ? Processeur multicœur. Multicœur virtuel ou Hyper-Threading

Quels sont les cœurs du processeur. Qu'est-ce qui affecte le nombre de cœurs de processeur ? Processeur multicœur. Multicœur virtuel ou Hyper-Threading

Mais avec la conquête de nouveaux pics dans les indicateurs de fréquence, il est devenu plus difficile de l'augmenter, car cela a affecté l'augmentation du TDP des processeurs. Par conséquent, les développeurs ont commencé à augmenter la largeur des processeurs, à savoir ajouter des cœurs, et le concept de multicœur est apparu.

Il y a littéralement 6-7 ans, les processeurs multicœurs étaient pratiquement inconnus. Non, beaucoup processeurs nucléaires de la même société IBM existait auparavant, mais l'apparition du premier processeur double cœur pour ordinateurs de bureau, n'a eu lieu qu'en 2005, et cela s'appelait Processeur Pentium D. En outre, l'Opteron dual-core d'AMD est sorti en 2005, mais pour les systèmes de serveur.

Dans cet article, nous n'approfondirons pas les faits historiques en détail, mais discuterons des processeurs multicœurs modernes comme l'une des caractéristiques du CPU. Et le plus important - nous devons comprendre ce que ce multicœur donne en termes de performances pour le processeur et pour vous et moi.

Performances accrues avec le multicœur

Le principe de l'augmentation des performances du processeur grâce à plusieurs cœurs est de scinder l'exécution des threads (tâches diverses) en plusieurs cœurs. En résumé, presque tous les processus en cours d'exécution sur votre système ont plusieurs threads.

Je ferai tout de suite une réservation sur le fait que le système d'exploitation peut virtuellement créer de nombreux threads pour lui-même et tout faire en même temps, même si le processeur est physiquement monocœur. Ce principe implémente le même multitâche Windows (par exemple, écouter de la musique et taper en même temps).


Prenons par exemple programme antivirus. Nous aurons un thread scannant l'ordinateur, l'autre - mettant à jour la base de données antivirus (nous avons tout simplifié afin de comprendre le concept général).

Et considérez ce qui se passera dans deux cas différents :

a) Processeur monocœur.Étant donné que deux threads s'exécutent en même temps, nous devons créer pour l'utilisateur (visuellement) cette simultanéité d'exécution. Le système d'exploitation fait des choses délicates :il y a un switch entre l'exécution de ces deux threads (ces switchs sont instantanés et le temps est en millisecondes). C'est-à-dire que le système a "effectué" un peu la mise à jour, puis est brusquement passé à l'analyse, puis à la mise à jour. Ainsi, pour vous et moi, il semble que ces deux tâches soient menées simultanément. Mais qu'est-ce qui est perdu ? Bien sûr, les performances. Examinons donc la deuxième option.

b) Le processeur est multicœur. Dans ce cas, ce changement ne se produira pas. Le système enverra clairement chaque thread à un noyau séparé, ce qui, par conséquent, nous permettra de nous débarrasser du passage de thread à thread qui nuit aux performances (idéalisons la situation). Deux threads s'exécutent simultanément, c'est le principe du multi-core et du multi-threading. En fin de compte, nous effectuerons des analyses et des mises à jour beaucoup plus rapidement sur un processeur multicœur que sur un processeur monocœur. Mais il y a un hic - tous les programmes ne prennent pas en charge le multicœur. Tous les programmes ne peuvent pas être optimisés de cette façon. Et tout se passe loin d'être aussi parfait que nous l'avons décrit. Mais chaque jour, les développeurs créent de plus en plus de programmes dont le code est parfaitement optimisé pour une exécution sur des processeurs multicœurs.

Les processeurs multicœurs sont-ils nécessaires ? Raisonnabilité au quotidien

À choix du processeur pour un ordinateur (à savoir, en pensant au nombre de cœurs), il convient de déterminer les principaux types de tâches qu'il effectuera.

Pour améliorer les connaissances dans le domaine du matériel informatique, vous pouvez lire le matériel sur prises de processeur .

Le point de départ peut être appelé processeurs double cœur, car cela n'a aucun sens de revenir à des solutions monocœur. Mais les processeurs dual-core sont différents. Ce n'est peut-être pas le Celeron "le plus" frais, ou il peut s'agir d'un Core i3 sur Ivy Bridge, tout comme AMD - Sempron ou Phenom II. Naturellement, en raison d'autres indicateurs, leurs performances seront très différentes, vous devez donc tout examiner de manière exhaustive et comparer le multicœur avec les autres. caractéristiques du processeur.

Par exemple, le Core i3 sur Ivy Bridge dispose de la technologie Hyper-Treading, qui permet de traiter 4 threads simultanément (le système d'exploitation voit 4 cœurs logiques, au lieu de 2 physiques). Et le même Celeron ne s'en vante pas.

Mais revenons directement aux réflexions sur les tâches requises. Si un ordinateur est nécessaire pour Bureau de travail et surfer sur Internet, alors un processeur dual-core lui suffit.

En ce qui concerne les performances de jeu, vous avez besoin de 4 cœurs ou plus pour être à l'aise dans la plupart des jeux. Mais ici, le piège apparaît : tous les jeux n'ont pas de code optimisé pour les processeurs à 4 cœurs, et s'ils sont optimisés, ce n'est pas aussi efficace que nous le souhaiterions. Mais, en principe, pour les jeux, la solution optimale est précisément le 4e processeur principal.


Aujourd'hui, les mêmes processeurs AMD 8 cœurs sont redondants pour les jeux, c'est le nombre de cœurs qui est redondant, mais les performances ne sont pas à la hauteur, mais ils ont d'autres avantages. Ces mêmes 8 cœurs aideront beaucoup dans les tâches où un travail puissant avec une charge multithread de haute qualité est nécessaire. Cela inclut, par exemple, le rendu (calcul) de la vidéo ou l'informatique du serveur. Par conséquent, pour de telles tâches, 6, 8 cœurs ou plus sont nécessaires. Et bientôt, les jeux pourront charger 8 cœurs ou plus avec une haute qualité, donc à l'avenir, tout est très rose.

N'oubliez pas qu'il existe encore de nombreuses tâches qui créent une charge à un seul thread. Et vous devriez vous poser la question : ai-je besoin de ce 8 cœurs ou non ?

Pour résumer un peu, je voudrais souligner une fois de plus que les avantages du multicœur se manifestent lors de travaux multithreads de calcul "lourds". Et si vous ne jouez pas à des jeux avec des exigences exorbitantes et que vous ne faites pas de types de travail spécifiques qui nécessitent une bonne puissance de calcul, alors dépenser de l'argent sur des processeurs multicœurs coûteux n'a tout simplement pas de sens (

Quel est l'avantage des processeurs dual core ?

Lors de l'achat d'un ordinateur portable, vous avez sans doute remarqué que certains d'entre eux portent des étiquettes : " Intel Core 2 Duo" ou "AMD Turion 64 x2". Ces étiquettes indiquent que les ordinateurs portables sont basés sur la technologie de traitement double cœur.

Processeurs double cœur

Les processeurs double cœur font référence au type de systèmes constitués de deux cœurs de processeur indépendants combinés dans un circuit intégré (IC) ou, comme le disent les professionnels, dans une seule puce. De tels systèmes combinent deux cœurs dans un processeur. Une technologie similaire a d'abord été appliquée à ordinateur personnel et à la maison console de jeu, mais très vite, il a été adapté à l'environnement informatique mobile. Des ordinateurs portables dotés d'une technologie similaire sont disponibles auprès d'AMD et d'Intel.

Les processeurs double cœur ont une structure différente de celle des processeurs double cœur. Ils font référence à un système où deux processeurs sont combinés dans un circuit intégré. Et les processeurs à double cœur, à leur tour, font référence à un système où deux processeurs indépendants (chacun avec sa propre matrice) sont directement connectés à carte mère.

Chacun des processeurs d'un système double cœur possède un cache intégré (cache principal) qui leur donne leur propre potentiel de récupération et de traitement rapides et efficaces des instructions fréquemment utilisées. De plus, le cache de deuxième niveau est situé sur le même circuit intégré. Le cache secondaire du chipset Intel Mobile Core 2 Duo est partagé entre deux processeurs. Dans le chipset Turion AMD 64x2, chacun des deux processeurs dispose d'un cache dédié - 512 Ko pour chaque cœur. Le cache de second niveau est une réserve pour le boîtier. si le primaire ne suffit pas.

Avantages de la technologie double cœur

Les avantages les plus importants de ces processeurs sont la vitesse et l'efficacité. Le traitement des commandes et la récupération des données sont assurés par deux processeurs ; ainsi, de meilleures performances sont obtenues sans chauffer les processeurs. Le fait que ces deux processeurs disposent de leur propre cache principal facilement accessible garantit également des performances rapides. De plus, en particulier dans le cas du processeur Intel Core 2 Duo où le cache secondaire est divisé, l'intégralité du cache secondaire peut être utilisée par l'un ou les deux processeurs en même temps si nécessaire.

En un mot, un ordinateur portable avec un processeur double cœur fonctionne plus rapidement et fonctionne plus froid, tout en offrant un meilleur multitâche. Les processeurs double cœur consomment moins d'énergie que les processeurs double cœur.

Un autre avantage de l'utilisation de processeurs double cœur dans les ordinateurs portables est le poids et la taille plus légers, ce qui rend portable plus pratique, tout en offrant des performances de type PC.

Il est important de noter qu'avec les programmes plus anciens, si vous n'exécutez qu'un seul programme à la fois, vous ne bénéficierez d'aucun des avantages des processeurs double cœur. Les programmes plus anciens n'étaient pas conçus pour cette technologie, ils ne pouvaient donc utiliser qu'un seul cœur. Cependant, dans ce cas, l'avantage du multitâche demeure. Si plusieurs programmes sont ouverts en même temps, un processeur à deux cœurs offrira des performances plus rapides qu'un seul cœur.

Le temps passe et de plus en plus de développeurs Logiciel créer leurs programmes en tenant compte des processeurs dual-core ; ainsi, les utilisateurs pourront dans un proche avenir profiter de tous les avantages de ces processeurs.

Trouvé un problème de limite d'horloge désagréable. Ayant atteint le seuil des 3 GHz, les développeurs sont confrontés à une augmentation significative de la consommation électrique et de la dissipation thermique de leurs produits. Le niveau de technologie en 2004 ne permettait pas de réduire de manière significative la taille des transistors dans un cristal de silicium, et la sortie de cette situation était une tentative non pas d'augmenter la fréquence, mais d'augmenter le nombre d'opérations effectuées par cycle. Ayant adopté l'expérience plates-formes de serveur, où la disposition multiprocesseur avait déjà été testée, il a été décidé de combiner deux processeurs sur une seule puce.

Beaucoup de temps s'est écoulé depuis lors, des processeurs à deux, trois, quatre, six et même huit cœurs sont apparus en accès large. Mais la principale part de marché est toujours occupée par les modèles à 2 et 4 cœurs. AMD essaie de changer la situation, mais leur architecture Bulldozer n'a pas répondu aux attentes et les huit cœurs budgétaires ne sont toujours pas très populaires dans le monde. D'où la questionquel est le meilleur : processeur 2 ou 4 cœurs, est toujours d'actualité.

Différence entre processeur 2 et 4 cœurs

Au niveau matériella principale différence entre un processeur à 2 cœurs et un à 4 cœursest le nombre de blocs fonctionnels. Chaque cœur, en fait, est un processeur séparé, équipé de ses propres nœuds de calcul. 2 ou 4 de ces processeurs sont interconnectés par un bus interne à haut débit et un contrôleur de mémoire commun pour interagir avec la RAM. D'autres nœuds fonctionnels peuvent également être partagés : dans la plupart des processeurs modernes, la mémoire cache des premier (L1) et deuxième (L2) niveaux, les blocs de calculs d'entiers et les opérations en virgule flottante sont individuels. Le cache L3, qui est relativement volumineux, est unique et disponible pour tous les cœurs. Séparément, nous pouvons noter l'AMD FX déjà mentionné (ainsi que le processeur Athlon et l'APU de la série A): ils partagent non seulement la mémoire cache et le contrôleur, mais également les unités à virgule flottante: chacun de ces modules appartient simultanément à deux cœurs.

Schéma AMD Athlon Quad-Core

Du point de vue de l'utilisateurdifférence entre un processeur 2 et 4 cœursest le nombre de tâches que le processeur peut traiter en un cycle d'horloge. Avec la même architecture, la différence théorique sera de 2 fois pour 2 et 4 cœurs, ou de 4 fois pour 2 et 8 cœurs, respectivement. Ainsi, avec le fonctionnement simultané de plusieurs processus, une augmentation du nombre devrait entraîner une augmentation de la vitesse du système. Après tout, au lieu de 2 opérations, un processeur quadricœur peut en effectuer quatre à la fois.

Pourquoi les processeurs Dual Core sont populaires

Il semblerait que si une augmentation du nombre de cœurs entraîne une augmentation des performances, alors dans le contexte des modèles à quatre, six ou huit cœurs, les processeurs double cœur n'ont aucune chance. Cependant, le leader mondial du marché des CPU, Intel, met à jour chaque année sa gamme de produits et sort de nouveaux modèles avec seulement quelques cœurs (Core i3, Celeron, Pentium). Et cela dans le contexte du fait que même dans les smartphones et les tablettes, les utilisateurs regardent ces processeurs avec méfiance ou mépris. Pour comprendre pourquoi les modèles les plus populaires sont des processeurs à deux cœurs, plusieurs facteurs principaux doivent être pris en compte.

Intel Core i3 - les processeurs 2 cœurs les plus populaires pour les PC domestiques

Problème de compatibilité. Lors de la création d'un logiciel, les développeurs s'efforcent de le faire fonctionner à la fois sur les nouveaux ordinateurs et sur les modèles existants de CPU et de GPU. Compte tenu de la variété sur le marché, il est important de s'assurer que le jeu fonctionne correctement sur deux cœurs et huit. La plupart des PC domestiques existants sont équipés d'un processeur double cœur, c'est pourquoi la prise en charge de ces ordinateurs reçoit le plus d'attention.

Complexité de la parallélisation des tâches. Pour garantir l'utilisation efficace de tous les cœurs, les calculs effectués pendant le programme doivent être divisés en threads égaux. Par exemple, une tâche qui peut utiliser de manière optimale tous les cœurs en dédiant un ou deux processus à chacun d'eux est la compression simultanée de plusieurs vidéos. Avec les jeux, c'est plus difficile, car toutes les opérations qui y sont effectuées sont interconnectées. Malgré le fait que le travail principal est effectué par GPU cartes vidéo, c'est le CPU qui prépare les informations pour la formation d'une image 3D. Faire en sorte que chaque cœur traite sa propre portion de données, puis la transmette au GPU de manière synchrone avec les autres, est assez difficile. Plus vous devez traiter de threads de calcul simultanés, plus il est difficile d'implémenter la tâche.

Continuité des technologies. Les développeurs de logiciels utilisent les développements existants pour leurs nouveaux projets, qui sont soumis à des modernisations répétées. Dans certains cas, cela vient du fait que ces technologies sont enracinées dans le passé depuis 10 à 15 ans. Un développement basé sur un projet vieux de dix ans est à contrecœur, sinon complètement repensé pour une optimisation parfaite. Il en résulte une incapacité du logiciel à utiliser rationnellement les capacités matérielles du PC. HARCELEUR. Call of Pripyat, sorti en 2009 (à l'apogée des processeurs multicœurs), est construit sur un moteur de 2001, il ne peut donc pas charger plus d'un cœur.

HARCELEUR. utilise pleinement un seul cœur d'un processeur à 4 cœurs

La situation est la même avec le populaire RPG en ligne World of Tanks : le moteur Big World sur lequel il est basé a été créé en 2005, lorsque les processeurs multicœurs n'étaient pas encore perçus comme la seule voie de développement possible.

World of Tanks ne sait pas non plus comment répartir uniformément la charge sur les noyaux

Difficultés financières. Une conséquence de ce problème est le point précédent. Si vous créez chaque application à partir de zéro, sans utiliser les technologies existantes, sa mise en œuvre coûtera des sommes fabuleuses. Par exemple, le coût de développement de GTA V était de plus de 200 millions de dollars. Dans le même temps, certaines technologies n'étaient toujours pas créées «de toutes pièces», mais empruntées à des projets précédents, puisque le jeu a été écrit pour 5 plates-formes à la fois (Sony PS3, PS4, Xbox 360 et One, ainsi que PC).

GTA V est optimisé pour le multicœur et peut charger uniformément le processeur

Toutes ces nuances ne permettent pas d'utiliser pleinement le potentiel des processeurs multicœurs dans la pratique. Interdépendance des producteurs Matériel et les développeurs de logiciels crée un cercle vicieux.

Quel processeur est le meilleur : 2 ou 4 cœurs

Évidemment, avec tous les avantages, le potentiel des processeurs multicœurs reste encore inexploité jusqu'au bout. Certaines tâches ne savent pas du tout comment répartir uniformément la charge et fonctionnent dans un seul thread, d'autres le font avec une efficacité médiocre et seule une petite fraction du logiciel interagit pleinement avec tous les cœurs. D'où la questionqui meilleur processeur, 2 ou 4 conducteurs, acheter, nécessite un examen attentif de la situation actuelle.

Il existe sur le marché des produits de deux fabricants : Intel et AMD, qui diffèrent par leurs caractéristiques de mise en œuvre. Advanced Micro Devices met traditionnellement l'accent sur le multi-cœurs, alors qu'Intel hésite à franchir ce pas et n'augmente le nombre de cœurs que si cela n'entraîne pas une baisse des performances spécifiques par cœur (ce qui est très difficile à éviter).

L'augmentation du nombre de cœurs réduit les performances globales de chacun d'eux.

En règle générale, les performances théoriques et pratiques globales d'un processeur multicœur sont inférieures à celles d'un processeur similaire (construit sur la même microarchitecture, avec le même processeur technique) avec un seul cœur. Cela est dû au fait que les noyaux utilisent des ressources partagées, et ce n'est pas de la meilleure façon affecte la vitesse. Ainsi, vous ne pouvez pas simplement acheter un puissant processeur quad ou hexa-core en espérant qu'il ne sera certainement pas plus faible qu'un processeur dual-core de la même série. Dans certaines situations, ce sera, d'ailleurs, de manière tangible. Un exemple est d'exécuter de vieux jeux sur un ordinateur avec un processeur AMD FX à huit cœurs : le FPS est parfois inférieur à celui d'un PC similaire, mais avec un processeur quadricœur.

Le multicœur est-il nécessaire aujourd'hui

Cela signifie-t-il que de nombreux cœurs ne sont pas nécessaires ? Malgré le fait que la conclusion semble logique - non. Les tâches quotidiennes légères (comme surfer sur le Web ou travailler avec plusieurs programmes en même temps) répondent positivement à une augmentation du nombre de cœurs de processeur. C'est pour cette raison que les fabricants de smartphones se concentrent sur la quantité, réduisant les performances spécifiques en arrière-plan. Opera (et d'autres navigateurs sur Moteur chromé), Firefox lance chaque onglet ouvert en tant que processus séparé, respectivement, plus il y a de cœurs - plus la transition entre les onglets est rapide. Gestionnaires de fichiers, programmes de bureau, les joueurs - en eux-mêmes ne sont pas gourmands en ressources. Mais si vous devez fréquemment basculer entre eux, un processeur multicœur améliorera les performances du système.

Le navigateur Opera attribue un processus distinct à chaque onglet

Intel en est conscient, car la technologie HuperThreading, qui permet au cœur de traiter le deuxième thread en utilisant des ressources inutilisées, est apparue à l'époque du Pentium 4. Mais elle ne compense pas totalement le manque de performances.

Le processeur à 2 cœurs avec Huper Threading apparaît comme 4 cœurs dans le Gestionnaire des tâches

Les créateurs de jeux, quant à eux, rattrapent progressivement leur retard. L'émergence de nouvelles générations de consoles Sony Play Station et Microsoft Xbox a incité les développeurs à accorder plus d'attention au multicœur. Les deux consoles sont basées sur des puces AMD à huit cœurs, de sorte que les programmeurs n'ont plus à consacrer beaucoup d'efforts à l'optimisation lors du portage d'un jeu sur un PC. Avec la popularité croissante de ces consoles, ceux qui ont été déçus par l'achat de l'AMD FX 8xxx ont pu pousser un soupir de soulagement. Les processeurs multicœurs gagnent activement des positions sur le marché, comme le montrent les critiques.

Une des étapes de l'amélioration de l'architecture de von Neumann est la parallélisation des threads ( Fil de discussion Niveau Parallélisme, TLP). Distinguer multithreading simultané (Simultané Multithreading, CMS) et multithreading au niveau de la puce (ébrécher- niveau Multithreading, CMT). Les deux approches diffèrent principalement dans leur idée de ce qu'est un thread. Un représentant typique CMS est la soi-disant technologie HTT (Hyper- enfilage La technologie).

P les premiers représentants de l'architecture CMP sont devenus des processeurs conçus pour être utilisés dans les serveurs. C'était un simple tandem, dans de tels dispositifs, deux noyaux indépendants étaient en fait placés sur un substrat (Fig. 8,). Le développement de ce schéma est d'abord devenu une structure avec un cache commun - mémoire fig. 9, puis une structure avec multithreading dans chaque cœur.

Les avantages des processeurs multicœurs sont les suivants.

    Simplicité (naturellement relative) de conception et de réalisation. Après avoir développé un noyau efficace, il peut être reproduit dans un cristal, complétant l'architecture avec les composants système nécessaires.

    La consommation d'énergie est sensiblement réduite. Si, par exemple, vous placez deux cœurs sur une puce et les faites fonctionner à une fréquence d'horloge qui fournit des performances égales à celles d'un "frère" à un seul cœur, puis comparez la consommation d'énergie des deux, vous constaterez que la puissance la consommation diminue plusieurs fois, puisqu'elle croît presque proportionnellement aux fréquences carrées.

En général, si vous regardez attentivement les figures 8 et 9, vous pouvez voir qu'il n'y a pas de différence fondamentale entre, disons, un système à 2 processeurs et un ordinateur avec un processeur à 2 cœurs. Les problèmes sont les mêmes. Et l'un des premiers est le système d'exploitation correspondant.

Façons d'organiser le travail des sous-traitants

Le principal stimulant du développement de l'architecture informatique est l'augmentation de la productivité. L'un des moyens d'augmenter la productivité des ordinateurs est la spécialisation (à la fois les éléments individuels d'un ordinateur et la création de systèmes informatiques spécialisés).

La spécialisation des processeurs a commencé dans les années 60, lorsque le processeur central des gros ordinateurs a été libéré du fonctionnement routinier des informations d'entrée-sortie. Cette fonction a été transférée au processeur d'E / S, qui communique avec les périphériques.

Une autre façon d'améliorer les performances consiste à s'éloigner de l'architecture série de von Neumann et à se concentrer sur le parallélisme. M. Flynn a attiré l'attention sur le fait qu'il n'y a que deux raisons qui donnent lieu au parallélisme de calcul - l'indépendance des flux de commandes qui existent simultanément dans le système et la déconnexion des données traitées dans un flux de commandes. Si la première raison du parallélisme du processus de calcul est bien connue (il s'agit de multitraitement simple), alors nous nous attarderons plus en détail sur le parallélisme des données, car dans la plupart des cas, il existe caché aux programmeurs et est utilisé par un cercle restreint de professionnels. .

L'exemple le plus simple de parallélisme de données est une séquence de deux commandes : A=B+C ; D=E*F ;

Si nous suivons strictement le principe de von Neumann, la deuxième opération ne peut être lancée pour exécution qu'après l'achèvement de la première opération. Cependant, il est évident que l'ordre d'exécution de ces instructions n'a pas d'importance - les opérandes A, B et C de la première instruction n'ont aucun rapport avec les opérandes D, E et F de la deuxième instruction. En d'autres termes, les deux opérations sont parallèles précisément parce que les opérandes de ces instructions ne sont pas liés. Vous pouvez donner de nombreux exemples d'une séquence de trois commandes ou plus avec des données non liées qui conduiront à une conclusion sans ambiguïté : presque tous les programmes contiennent des groupes d'opérations sur des données parallèles.

Un autre type de parallélisme de données se produit généralement dans les programmes de traitement de données cycliques. Par exemple, lors de l'ajout des éléments de deux tableaux, une commande peut traiter un grand tableau (plusieurs flux) de données. De telles instructions sont appelées vecteur, et le processeur qui implémente ce mode est appelé vecteur. Vous pouvez donner la définition suivante : « Un processeur vectoriel est un processeur qui permet l'exécution parallèle d'opérations sur des tableaux de données (vecteurs). Il se caractérise par une architecture spéciale construite sur un groupe d'éléments de traitement parallèles et est conçu pour le traitement d'images, de matrices et de tableaux de données.

Il existe plusieurs classifications du parallélisme logiciel assez proches dans le sens, dont la classification la plus reconnue est considérée comme basée sur six niveaux (Fig. 10). Les trois premiers niveaux de parallélisme sont occupés par de grands objets de programme - travaux, programmes et procédures de programme indépendants. Les instructions, boucles et opérations non liées forment les niveaux inférieurs de parallélisme. Si nous combinons un tel classement avec les catégories de M. Flyn "flux de commandes parallèles" et "flux de données parallèles", alors nous pouvons voir que le parallélisme de niveau supérieur est principalement atteint grâce à de nombreux flux de commandes indépendants, et le niveau inférieur le parallélisme doit son existence principalement à des flux de données non liés.

Canalisations et structures de canalisations

O jour de moyens efficaces améliorer les performances des ordinateurs est le pipelining. Sur la fig. Onze un) le traitement dans un seul bloc universel est illustré, et sur la Fig. 11 b) et dans)- dans le convoyeur. L'idée du traitement par pipeline est de diviser la fonction implémentée par le bloc fonctionnel universel (FB) entre plusieurs blocs spécialisés. Tous les blocs fonctionnels du pipeline doivent fonctionner à la même vitesse (au moins en moyenne). En pratique, ce dernier est rarement atteint et, par conséquent, les performances du pipeline sont réduites, car la période de réception des données d'entrée est déterminée par le temps de traitement maximal dans chaque bloc fonctionnel. Pour compenser les fluctuations du temps de fonctionnement du FB, des registres tampons sont inclus entre eux. Une technique plus universelle consiste à inclure des dispositifs de stockage tampon de type FIFO (Fig. 11 dans). Une autre différence doit être notée entre les chiffres. b) et dans). En structure dans) il n'y a pas de ligne de synchronisation SI. Cela ne signifie pas qu'il ne peut pas être dans une structure similaire, juste qu'il existe deux types de pipelines : synchrone avec une ligne de synchronisation commune et asynchrone, sans un. Les premiers sont aussi appelés avec gestion des commandes, et les seconds avec gestion des données. Les tableaux systoliques sont un exemple de pipelines asynchrones.

À pipeline n'est pas toujours une chaîne linéaire de blocs. Parfois c'est bénéfique blocs fonctionnels ils seront interconnectés non pas séquentiellement, mais selon un schéma plus complexe conformément à la logique de traitement, tandis que certains blocs de la chaîne peuvent être sautés, tandis que d'autres peuvent former des structures cycliques. La structure d'un pipeline non linéaire capable de calculer deux fonctions X et Y, et un schéma dans lequel les fonctions X et Y nécessitent certains blocs fonctionnels est illustré à la Fig. 12

  • Didacticiel

Dans cet article, je vais essayer de décrire la terminologie utilisée pour décrire les systèmes capables d'exécuter plusieurs programmes en parallèle, c'est-à-dire multi-cœur, multi-processeur, multi-thread. Différents types le parallélisme dans le processeur IA-32 est apparu à des moments différents et dans un ordre quelque peu incohérent. Il est facile de s'embrouiller dans tout cela, d'autant plus que les systèmes d'exploitation prennent soin de masquer les détails des programmes d'application moins sophistiqués.

Le but de l'article est de montrer qu'avec toute la variété des configurations possibles de systèmes multiprocesseurs, multicœurs et multithreads pour les programmes qui s'y exécutent, des opportunités se créent à la fois pour l'abstraction (en ignorant les différences) et pour la prise en compte des spécificités ( la possibilité d'apprendre la configuration par programmation).

Avertissement sur les signes ®, ™, dans l'article

Mon commentaire explique pourquoi les employés de l'entreprise devraient utiliser les marques de droit d'auteur dans les communications publiques. Dans cet article, ils devaient être utilisés assez souvent.

CPU

Bien sûr, le terme le plus ancien, le plus couramment utilisé et le plus ambigu est "processeur".

À monde moderne le processeur est celui (package) que l'on achète dans une belle boite Retail ou pas très belle package OEM. Une entité indivisible insérée dans un socket sur une carte mère. Même s'il n'y a pas de connecteur et qu'il ne peut pas être retiré, c'est-à-dire s'il est étroitement soudé, il s'agit d'une puce.

Les systèmes mobiles (téléphones, tablettes, ordinateurs portables) et la plupart des ordinateurs de bureau ont un seul processeur. Les postes de travail et les serveurs disposent parfois de deux processeurs ou plus sur la même carte mère.

Prise en charge multiple CPU dans un système nécessite de nombreux changements dans sa conception. Au minimum, il faut assurer leur connexion physique (prévoir plusieurs sockets sur la carte mère), résoudre les problèmes d'identification du processeur (voir plus loin dans cet article, ainsi que ma note précédente), de coordination des accès mémoire et de délivrance des interruptions ( le contrôleur d'interruption doit être capable d'acheminer les interruptions sur plusieurs processeurs) et, bien sûr, le support du système d'exploitation. Malheureusement, je n'ai pas trouvé de mention documentée du moment où le premier système multiprocesseur a été créé sur des processeurs Intel, mais Wikipedia affirme que Sequent Computer Systems les a déjà fournis en 1987 en utilisant des processeurs Intel 80386. Une prise en charge généralisée de plusieurs puces dans un système devient disponible à commencer par le Pentium Intel®.

S'il y a plusieurs processeurs, chacun d'eux a son propre connecteur sur la carte. Dans le même temps, chacun d'eux dispose de copies indépendantes complètes de toutes les ressources, telles que les registres, les périphériques d'exécution, les caches. Ils partagent une mémoire commune - RAM. La mémoire peut y être connectée de diverses manières et plutôt non triviales, mais il s'agit d'une histoire distincte qui dépasse le cadre de cet article. L'important est que dans tous les cas, les programmes exécutables doivent créer l'illusion d'une mémoire partagée homogène, accessible depuis tous les processeurs du système.


Prêt à décoller! Carte mère Intel® D5400XS pour PC de bureau

Noyau

Historiquement, le multicœur de l'Intel IA-32 est apparu plus tard que l'Intel® HyperThreading, mais il vient ensuite dans la hiérarchie logique.

Il semblerait que s'il y a plus de processeurs dans le système, alors ses performances sont plus élevées (sur les tâches qui peuvent utiliser toutes les ressources). Cependant, si le coût des communications entre eux est trop élevé, alors tout le gain du parallélisme est tué par de longs délais dans le transfert des données communes. C'est exactement ce que l'on observe dans les systèmes multiprocesseurs - à la fois physiquement et logiquement, ils sont très éloignés les uns des autres. Pour communiquer efficacement dans de telles conditions, il faut inventer des bus spécialisés tels que Intel® QuickPath Interconnect. La consommation d'énergie, la taille et le prix de la solution finale, bien sûr, ne diminuent pas de tout cela. Une intégration élevée des composants devrait venir à la rescousse - les circuits exécutant des parties d'un programme parallèle doivent être rapprochés les uns des autres, de préférence sur une seule puce. En d'autres termes, un processeur doit organiser plusieurs noyaux, identiques les uns aux autres en tout, mais travaillant indépendamment.

Les premiers processeurs multicœurs IA-32 d'Intel ont été introduits en 2005. Depuis lors, le nombre moyen de cœurs dans les plates-formes de serveur, de bureau et maintenant mobiles n'a cessé d'augmenter.

Contrairement à deux processeurs monocœur dans le même système, qui ne partagent que la mémoire, deux cœurs peuvent également partager des caches et d'autres ressources responsables de l'interaction avec la mémoire. Le plus souvent, les caches du premier niveau restent privés (chaque cœur a le sien), tandis que les deuxième et troisième niveaux peuvent être soit partagés, soit séparés. Cette organisation du système réduit le délai de livraison des données entre cœurs voisins, surtout s'ils travaillent sur une tâche commune.


Micrographie d'un quad-core Processeur Intel nom de code Nehalem. Des cœurs séparés, un cache L3 partagé, ainsi que des liens QPI vers d'autres processeurs et un contrôleur de mémoire partagé sont mis en évidence.

hyperthread

Jusqu'en 2002 environ, la seule façon d'obtenir un système IA-32 capable d'exécuter deux programmes ou plus en parallèle était d'utiliser spécifiquement des systèmes multiprocesseurs. L'Intel® Pentium® 4, ainsi que la gamme Xeon au nom de code Foster (Netburst), ont été introduits nouvelle technologie- hyperthreads ou hyperthreads, - Intel® HyperThreading (ci-après HT).

Il n'y a rien de nouveau sous le soleil. HT est un cas particulier de ce que l'on appelle dans la littérature le multithreading simultané (SMT). Contrairement aux "vrais" cœurs, qui sont des copies complètes et indépendantes, dans le cas de HT, seule une partie des nœuds internes est dupliquée dans un processeur, principalement responsable du stockage de l'état architectural - les registres. Les nœuds exécutifs chargés d'organiser et de traiter les données restent au singulier, et à tout moment sont utilisés par au plus un des threads. Comme les cœurs, les hyperthreads partagent des caches entre eux, mais à partir de quel niveau dépend du système spécifique.

Je n'essaierai pas d'expliquer tous les avantages et les inconvénients des conceptions SMT en général et des conceptions HT en particulier. Le lecteur intéressé peut trouver une discussion assez détaillée de la technologie dans de nombreuses sources, et bien sûr sur Wikipédia. Cependant, je noterai le point important suivant, qui explique les restrictions actuelles sur le nombre d'hyperthreads en production réelle.

Limites de thread
Dans quels cas la présence de multicœur "malhonnête" sous forme de HT est-elle justifiée ? Si un thread d'application n'est pas en mesure de charger tous les nœuds d'exécution à l'intérieur du noyau, ils peuvent alors être "empruntés" à un autre thread. Ceci est typique pour les applications qui ont un "goulot d'étranglement" non pas dans les calculs, mais dans l'accès aux données, c'est-à-dire, générant souvent des échecs de cache et devant attendre que les données soient livrées à partir de la mémoire. Pendant ce temps, le noyau sans HT sera forcé de rester inactif. La présence de HT vous permet de basculer rapidement les nœuds d'exécution libres vers un autre état architectural (car il est juste dupliqué) et d'exécuter ses instructions. Il s'agit d'un cas particulier d'une astuce appelée masquage de la latence, lorsqu'une longue opération, au cours de laquelle des ressources utiles sont inactives, est masquée par l'exécution parallèle d'autres tâches. Si l'application a déjà un degré élevé d'utilisation des ressources du noyau, la présence de l'hyperthreading ne permettra pas l'accélération - des noyaux "honnêtes" sont nécessaires ici.

Scénarios typiques pour les applications de bureau et de serveur conçues pour les architectures de machines usage général, ont le potentiel de parallélisme implémenté avec HT. Cependant, ce potentiel est rapidement "épuisé". Peut-être pour cette raison, sur presque tous les processeurs IA-32, le nombre d'hyperthreads matériels ne dépasse pas deux. Dans des scénarios typiques, le gain résultant de l'utilisation de trois hyperthreadings ou plus serait faible, mais la perte de taille de puce, de consommation d'énergie et de coût est importante.

Une autre situation est observée dans des tâches typiques effectuées sur des accélérateurs vidéo. Ces architectures se caractérisent donc par l'utilisation de la technologie SMT avec un plus grand nombre de threads. Étant donné que les coprocesseurs Intel® Xeon Phi (introduits en 2010) sont idéologiquement et généalogiquement assez proches des cartes vidéo, ils peuvent avoir quatre hyperthreading sur chaque cœur - une configuration unique à l'IA-32.

processeur logique

Parmi les trois « niveaux » de parallélisme décrits (processeurs, cœurs, hyperthreadings), certains, voire tous, peuvent manquer dans un système particulier. Ceci est influencé Paramètres du BIOS(le multicœur et le multithreading sont désactivés indépendamment), des considérations de microarchitecture (par exemple, HT était absent de l'Intel® Core™ Duo, mais a été ramené avec la sortie de Nehalem) et des événements système (les serveurs multiprocesseurs peuvent éteignez les processeurs défaillants en cas de dysfonctionnement et continuez à voler) sur le reste). Comment ce zoo de simultanéité à plusieurs niveaux est-il visible pour le système d'exploitation et, en fin de compte, pour les applications ?

De plus, pour plus de commodité, nous désignons le nombre de processeurs, de cœurs et de threads dans un système par un triple ( X, y, z), où X est le nombre de processeurs y est le nombre de cœurs dans chaque processeur, et z est le nombre d'hyperthreads dans chaque cœur. Ci-après, je ferai référence à ce trio topologie- un terme établi qui n'a pas grand-chose à voir avec la section des mathématiques. Travailler p = xyz définit le nombre d'entités nommées processeurs logiques systèmes. Il définit le nombre total de contextes de processus d'application indépendants dans un système à mémoire partagée s'exécutant en parallèle que le système d'exploitation doit prendre en compte. Je dis "forcé" car il ne peut pas contrôler l'ordre d'exécution de deux processus qui se trouvent sur des processeurs logiques différents. Cela s'applique également aux hyperthreads : bien qu'ils s'exécutent "séquentiellement" sur le même cœur, l'ordre spécifique est dicté par le matériel et n'est pas visible ou contrôlé par les programmes.

Le plus souvent, le système d'exploitation cache aux applications finales les caractéristiques de la topologie physique du système sur lequel il s'exécute. Par exemple, les trois topologies suivantes : (2, 1, 1), (1, 2, 1) et (1, 1, 2) - le système d'exploitation sera représenté par deux processeurs logiques, bien que le premier ait deux processeurs, le second a deux cœurs et le troisième n'a que deux threads.


les fenêtres Gestionnaire des tâches montre 8 processeurs logiques ; mais combien cela coûte-t-il en processeurs, cœurs et hyperthreads ?


Le top Linux montre 4 processeurs logiques.

Ceci est très pratique pour les créateurs d'applications appliquées - ils n'ont pas à gérer des fonctionnalités matérielles souvent insignifiantes pour eux.

Définition logicielle de la topologie

Bien sûr, l'abstraction de la topologie en un seul nombre de processeurs logiques crée dans certains cas suffisamment de motifs de confusion et d'incompréhension (dans des conflits Internet houleux). Les applications informatiques qui souhaitent tirer le meilleur parti des performances du matériel nécessitent un contrôle précis de l'emplacement de leurs threads : plus proches les uns des autres sur des hyperthreads adjacents, ou inversement, plus éloignés sur différents processeurs. La vitesse de communication entre les processeurs logiques au sein du même cœur ou processeur est beaucoup plus rapide que la vitesse de transfert de données entre les processeurs. Possibilité d'hétérogénéité dans l'organisation mémoire vive complique aussi l'image.

Les informations sur la topologie du système dans son ensemble, ainsi que la position de chaque processeur logique dans l'IA-32, sont disponibles à l'aide de l'instruction CPUID. Depuis l'avènement des premiers systèmes multiprocesseurs, le schéma d'identification du processeur logique a été étendu à plusieurs reprises. A ce jour, certaines parties sont contenues dans les feuilles 1, 4 et 11 du CPUID. Laquelle des feuilles à surveiller peut être déterminée à partir du schéma fonctionnel suivant, extrait de l'article :

Je ne m'ennuierai pas ici avec tous les détails des différentes parties de cet algorithme. S'il y a un intérêt, alors la prochaine partie de cet article pourra y être consacrée. Je renverrai le lecteur intéressé à, dans lequel cette question est analysée le plus en détail possible. Ici, je vais d'abord décrire brièvement ce qu'est APIC et comment il se rapporte à la topologie. Envisagez alors de travailler avec la feuille 0xB (onze dans décimal), qui pour le moment est le dernier mot en "apico-building".

ID APIC
L'APIC local (contrôleur d'interruption programmable avancé) est un dispositif (qui fait maintenant partie du processeur) chargé de travailler avec les interruptions provenant d'un processeur logique spécifique. Chaque processeur logique a son propre APIC. Et chacun d'eux dans le système doit avoir valeur unique APICIDE. Ce numéro est utilisé par les contrôleurs d'interruption pour l'adressage lors de la livraison des messages, et par tout le monde (comme le système d'exploitation) pour identifier les processeurs logiques. La spécification de ce contrôleur d'interruption a évolué du PIC Intel 8259 au Dual PIC, APIC et xAPIC vers x2APIC.

À l'heure actuelle, la largeur du nombre stocké dans l'ID APIC a atteint les 32 bits complets, bien que dans le passé, elle était limitée à 16, et même plus tôt à seulement 8 bits. Aujourd'hui, les vestiges de l'ancien temps sont dispersés dans tout le CPUID, mais les 32 bits de l'ID APIC sont renvoyés dans CPUID.0xB.EDX. Chaque processeur logique exécutant indépendamment l'instruction CPUID renverra une valeur différente.

Clarification des liens familiaux
La valeur d'ID APIC en elle-même ne dit rien sur la topologie. Pour savoir quels deux processeurs logiques sont à l'intérieur du même processeur physique (c'est-à-dire qu'ils sont "frères" d'hyperthreads), lesquels sont à l'intérieur du même processeur et lesquels sont des processeurs complètement différents, vous devez comparer leurs valeurs d'ID APIC. Selon le degré de relation, certains de leurs éléments correspondront. Ces informations sont contenues dans les sous-listes CPUID.0xB, qui sont codées avec un opérande dans ECX. Chacun d'eux décrit la position du champ de bits de l'un des niveaux de topologie dans EAX (plus précisément, le nombre de bits qui doivent être décalés dans l'ID APIC vers la droite pour supprimer les niveaux inférieurs de la topologie), ainsi comme type de ce niveau - hyperthread, core ou processor - dans ECX.

Les processeurs logiques au sein du même cœur correspondront à tous les bits d'ID APIC, à l'exception de ceux du champ SMT. Pour les processeurs logiques qui se trouvent dans le même processeur, tous les bits à l'exception des champs Core et SMT. Étant donné que le nombre de sous-feuilles pour CPUID.0xB peut augmenter, ce schéma permettra de supporter la description de topologies avec un plus grand nombre de niveaux, si le besoin s'en fait sentir dans le futur. De plus, il sera possible d'introduire des niveaux intermédiaires entre ceux existants.

Une conséquence importante de l'organisation de ce schéma est que dans l'ensemble de tous les identifiants APIC de tous les processeurs logiques du système, il peut y avoir des "trous", c'est-à-dire ils n'iront pas dans l'ordre. Par exemple, dans un processeur multicœur avec HT désactivé, tous les ID APIC peuvent s'avérer pairs, car le bit le moins significatif responsable de l'encodage du numéro d'hyperthread sera toujours zéro.

Notez que CPUID.0xB n'est pas la seule source d'informations sur les processeurs logiques disponibles pour le système d'exploitation. La liste de tous les processeurs à sa disposition, ainsi que leurs valeurs d'ID APIC, est encodée dans la table MADT ACPI.

Systèmes d'exploitation et topologie

Systèmes d'exploitation fournir des informations sur la topologie des processeurs logiques aux applications utilisant leurs propres interfaces.

Sous Linux, les informations de topologie sont contenues dans le pseudo-fichier /proc/cpuinfo, ainsi que la sortie de la commande dmidecode. Dans l'exemple ci-dessous, je filtre le contenu de cpuinfo sur un système quad-core non-HT, ne laissant que les entrées liées à la topologie :

Texte masqué

[courriel protégé]:~$ cat /proc/cpuinfo |grep "processor\|physical\ id\|siblings\|core\|cores\|apicid" processeur : 0 ID physique : 0 frères et sœurs : 4 ID de cœur : 0 cœurs de processeur : 2 apicid : 0 apicid initial : 0 processeur : 1 ID physique : 0 frères et sœurs : 4 ID de cœur : 0 cœurs de processeur : 2 apicid : 1 apicid initial : 1 processeur : 2 ID physique : 0 frères et sœurs : 4 ID de cœur : 1 cœurs de processeur : 2 apicid : 2 apicid initial : 2 processeur : 3 ID physique : 0 frères et sœurs : 4 ID de cœur : 1 cœurs de processeur : 2 apicid : 3 apicid initial : 3

Dans FreeBSD, la topologie est rapportée via le mécanisme sysctl dans la variable kern.sched.topology_spec en XML :

Texte masqué

[courriel protégé]:~$ sysctl kern.sched.topology_spec kern.sched.topology_spec : 0, 1, 2, 3, 4, 5, 6, 7 0, 1, 2, 3, 4, 5, 6, 7 0, 1 Groupe FILETAGEGroupe SMT 2, 3 Groupe FILETAGEGroupe SMT 4, 5 Groupe FILETAGEGroupe SMT 6, 7 Groupe FILETAGEGroupe SMT

Sous MS Windows 8, les informations de topologie peuvent être consultées dans le Gestionnaire des tâches.