81 votes

Pourquoi avons-nous des processeurs dont tous les cœurs ont la même vitesse et non des combinaisons de vitesses différentes ?

En général, si vous achetez un nouvel ordinateur, vous déterminez le processeur à acheter en fonction de la charge de travail prévue. Les performances des jeux ont tendance à être déterminées par la vitesse d'un seul cœur, tandis que les applications telles que le montage vidéo sont déterminées par le nombre de cœurs.

En ce qui concerne ce qui est disponible sur le marché, tous les processeurs semblent avoir à peu près la même vitesse, les principales différences étant le nombre de threads ou de cœurs.

Par exemple :

  • Intel Core i5-7600K, fréquence de base 3,80 GHz, 4 cœurs, 4 threads
  • Intel Core i7-7700K, fréquence de base 4,20 GHz, 4 cœurs, 8 threads
  • AMD Ryzen 5 1600X, fréquence de base 3,60 GHz, 6 cœurs, 12 threads
  • AMD Ryzen 7 1800X, fréquence de base 3,60 GHz, 8 cœurs, 16 threads

Alors pourquoi ce schéma d'augmentation des cœurs avec tous les cœurs ayant la même vitesse d'horloge ?

Pourquoi n'avons-nous pas de variantes avec des vitesses d'horloge différentes ? Par exemple, deux "gros" cœurs et beaucoup de petits cœurs.

À titre d'exemple, au lieu de quatre cœurs à 4 GHz (c'est-à-dire 4x4 GHz ~ 16 GHz maximum), que diriez-vous d'une unité centrale avec deux cœurs fonctionnant à 4 GHz et quatre cœurs fonctionnant à 2 GHz (c'est-à-dire 2x4,0 GHz + 4x2,0 GHz ~ 16 GHz maximum). La seconde option ne serait-elle pas aussi performante pour les charges de travail monofilaires, mais potentiellement meilleure pour les charges de travail multifilaires ?

Je pose cette question de manière générale - pas spécifiquement sur les processeurs que j'ai énumérés ci-dessus, ou sur une charge de travail spécifique. Je suis simplement curieux de savoir pourquoi le modèle est tel qu'il est.

88voto

Dj S Points 101

C'est ce qu'on appelle le multitraitement hétérogène ( HMP ) et est largement adopté par les appareils mobiles. Dans les appareils basés sur ARM qui mettent en œuvre grand.petit Par exemple, certains cœurs fonctionnent rapidement mais consomment beaucoup d'énergie (architecture plus rapide et/ou horloges plus élevées), tandis que d'autres sont économes en énergie mais lents (architecture plus lente et/ou horloges plus basses). C'est utile parce que la consommation d'énergie a tendance à augmenter de façon disproportionnée à mesure que vous augmentez les performances, une fois que vous avez dépassé un certain point. L'idée ici est d'obtenir des performances lorsque vous en avez besoin et une autonomie de batterie lorsque vous n'en avez pas besoin.

Sur les plates-formes de bureau, la consommation d'énergie est un problème beaucoup moins important, ce qui n'est pas vraiment nécessaire. La plupart des applications s'attendent à ce que chaque cœur ait des caractéristiques de performance similaires, et la planification des processus pour les systèmes HMP est beaucoup plus complexe que la planification pour les systèmes SMP traditionnels. (Windows 10 a techniquement un support pour HMP, mais il est principalement destiné aux appareils mobiles qui utilisent ARM big.LITTLE).

De plus, la plupart des processeurs des ordinateurs de bureau et des ordinateurs portables d'aujourd'hui sont no limité thermiquement ou électriquement au point que certains cœurs doivent fonctionner plus rapidement que d'autres, même pour de courtes périodes. On s'est heurté à un mur sur la vitesse à laquelle on peut fabriquer des cœurs individuels. Ainsi, le remplacement de certains cœurs par des cœurs plus lents ne permettra pas aux autres cœurs de fonctionner plus rapidement.

Bien qu'il existe quelques processeurs de bureau dont un ou deux cœurs sont capables de fonctionner plus rapidement que les autres, cette capacité est actuellement limitée à certains processeurs Intel très haut de gamme (comme la technologie Turbo Boost Max 3.0) et n'implique qu'un léger gain de performance pour les cœurs qui peuvent fonctionner plus rapidement.


S'il est certainement possible de concevoir un processeur x86 traditionnel avec à la fois de grands cœurs rapides et des cœurs plus petits et plus lents pour optimiser les charges de travail fortement chargées, cela ajouterait une complexité considérable à la conception du processeur et il est peu probable que les applications le prennent en charge correctement.

Prenons le cas d'un processeur hypothétique avec deux Lac Kaby (Core de 7e génération) et huit cœurs lents. Goldmont (Atom). Vous disposerez d'un total de 10 cœurs, et les charges de travail à forte intensité de threads optimisées pour ce type de processeur pourront bénéficier d'un gain de performance et d'efficacité par rapport à un processeur normal à quatre cœurs. Lac Kaby processeur. Cependant, les différents types de cœurs ont des niveaux de performance très différents, et les cœurs lents ne prennent même pas en charge certaines des instructions prises en charge par les cœurs rapides, telles que AVX . (ARM évite ce problème en exigeant que les noyaux big et LITTLE supportent les mêmes instructions).

Encore une fois, la plupart des applications multithread basées sur Windows supposent que chaque cœur a le même ou presque le même niveau de performance et peut exécuter les mêmes instructions, donc ce type d'asymétrie est susceptible d'entraîner des performances moins qu'idéales, peut-être même des plantages si elle utilise des instructions non prises en charge par les cœurs lents. Bien qu'Intel puisse modifier les cœurs lents pour ajouter un support d'instructions avancées afin que tous les cœurs puissent exécuter toutes les instructions, cela ne résoudrait pas les problèmes de support logiciel pour les processeurs hétérogènes.

Une autre approche de la conception d'applications, plus proche de ce à quoi vous pensez probablement dans votre question, consisterait à utiliser le GPU pour l'accélération des parties hautement parallèles des applications. Cela peut être fait en utilisant des API comme OpenCL y CUDA . En ce qui concerne la solution monopuce, AMD promeut la prise en charge matérielle de l'accélération GPU dans ses APU, qui combinent un CPU traditionnel et un GPU intégré de haute performance sur la même puce, comme le montre le tableau ci-dessous. Architecture des systèmes hétérogènes mais elle n'a pas été beaucoup utilisée par l'industrie en dehors de quelques applications spécialisées.

69voto

harrymc Points 394411

Ce que vous demandez est pourquoi les systèmes actuels utilisent Multiprocesseur symétrique plutôt que Multiprocesseur asymétrique .

Les multiprocesseurs asymétriques étaient utilisés autrefois, lorsqu'un ordinateur était énorme et réparti sur plusieurs unités.

Les processeurs modernes sont moulés en une seule unité, dans une seule puce, où il est beaucoup plus simple de ne pas de ne pas mélanger des CPU de différents types, puisqu'ils partagent tous le même bus et la même RAM.

Il y a aussi la contrainte de l'horloge qui régit les cycles de l'unité centrale et l'accès à la RAM. Cela devient impossible lorsque l'on mélange des CPU de différentes vitesses différentes. Des ordinateurs expérimentaux sans horloge ont existé et étaient même plutôt rapides. rapides, mais la complexité du matériel moderne a imposé une architecture plus simple. architecture plus simple.

Par exemple, les cœurs Sandy Bridge et Ivy Bridge ne peuvent pas fonctionner à des vitesses différentes en même temps puisque le bus de cache L3 fonctionne à la même vitesse d'horloge que les cœurs, donc pour éviter les problèmes de synchronisation, ils doivent tous soit fonctionner à cette vitesse, soit être parqués/arrêtés (lien : L'architecture Sandy Bridge d'Intel dévoilée ). (Également vérifié dans les commentaires ci-dessous pour Skylake).

[Certaines personnes ont interprété ma réponse comme voulant dire que que le mélange de CPUs est impossible. Pour leur bénéfice, je déclare : Le mélange de différents CPUs n'est pas au-delà de la technologie d'aujourd'hui, mais n'est pas fait - "pourquoi pas" est la question. Comme répondu ci-dessus, cela serait techniquement compliqué, donc plus coûteux et pour un gain financier trop faible ou nul, donc n'intéresse pas les fabricants.

Voici les réponses à certains commentaires ci-dessous :

Le Turbo Boost modifie la vitesse du CPU pour qu'il peut être modifié

Le turbo boost est fait en accélérant l'horloge et en changeant certains multiplicateurs, c'est exactement ce que les gens font quand ils overclockent, sauf que le matériel le fait pour nous. L'horloge est partagée entre les cœurs d'un même processeur, donc cela accélère uniformément l'ensemble du processeur et tous ses cœurs.

Certains téléphones ont plus d'un processeur à des vitesses différentes.

Ces téléphones sont généralement dotés d'un micrologiciel personnalisé et d'une pile logicielle associée à l chaque CPU, plutôt comme deux CPU distincts (ou comme CPU et GPU), et ils n'ont pas une vue unique de la mémoire système. Cette complexité est difficile à programmer et donc Le multiprocesseur asymétrique a été laissé dans le domaine mobile, car il nécessite un développement logiciel de bas niveau proche du matériel, ce qui est évité par les systèmes d'exploitation de bureau à usage général. C'est la raison pour laquelle on ne trouve pas de telles configurations dans les PC. (à l'exception du CPU/GPU si l'on étend suffisamment la définition).

Mon serveur avec 2x Xeon E5-2670 v3 (12 cœurs avec HT) a actuellement des cœurs à 1,3 GHz, 1,5 GHz, 1,6 GHz, 2,2 GHz, 2,5 GHz, 2,7 GHz, 2,8 GHz, 2,9 GHz, et bien d'autres vitesses.

Un cœur est soit actif, soit inactif. Tous les cœurs qui sont actifs au même moment fonctionnent à la même fréquence. Ce que vous voyez n'est qu'un artefact de chronométrage ou de calcul de moyenne. J'ai moi-même également remarqué que Windows ne parque pas un cœur pendant une longue période, mais plutôt qu'il parque/déparque séparément tous les cœurs bien plus rapidement que le taux de rafraîchissement de Resource Monitor, mais je ne sais pas la raison de ce comportement qui est probablement qui est probablement à l'origine de la remarque ci-dessus.

Les processeurs Intel Haswell ont des régulateurs de tension intégrés qui permettent d'obtenir des tensions et des fréquences individuelles pour chaque cœur.

Les régulateurs de tension individuels diffèrent de la vitesse d'horloge. Tous les cœurs ne sont pas identiques, certains sont plus rapides. Les cœurs les plus rapides reçoivent un peu moins de puissance, ce qui permet d'augmenter la puissance des cœurs les plus faibles. Les régulateurs de tension du cœur seront réglés aussi bas que possible afin de maintenir la vitesse d'horloge actuelle. L'unité de contrôle de l'alimentation de l'unité centrale régule les tensions et passe outre les demandes du système d'exploitation si nécessaire pour les cœurs qui diffèrent en qualité. Résumé : les régulateurs individuels servent à faire fonctionner tous les cœurs de manière économique à la même vitesse d'horloge, et non à régler la vitesse de chaque cœur.

46voto

Crunchy Points 26

Pourquoi n'avons-nous pas des variantes avec des vitesses d'horloge différentes ? Par exemple, 2 "gros" cœurs et beaucoup de petits cœurs.

Il est possible que le téléphone que vous avez dans votre poche présente exactement cette disposition - la ARM big.LITTLE fonctionne exactement comme vous l'avez décrit. Dans ce cas, il ne s'agit même pas d'une simple différence de vitesse d'horloge, il peut s'agir de types de cœurs totalement différents. En général, les cœurs les plus lents sont encore plus "idiots" (pas d'exécution hors ordre et autres optimisations du processeur).

C'est une bonne idée, essentiellement pour économiser la batterie, mais elle a ses propres inconvénients ; la comptabilité pour déplacer les choses entre les différents processeurs est plus compliquée, la communication avec le reste des périphériques est plus compliquée et, surtout, pour utiliser efficacement ces cœurs, le planificateur de tâches doit être extrêmement intelligent (et souvent "deviner juste").

L'idéal est d'exécuter les tâches d'arrière-plan non critiques en termes de temps ou les tâches interactives relativement petites sur les "petits" cœurs et de ne réveiller les "gros" cœurs que pour les calculs longs et importants (où le temps supplémentaire passé sur les petits cœurs finit par consommer plus de batterie) ou pour les tâches interactives de taille moyenne, où l'utilisateur ressent une certaine lenteur sur les petits cœurs.

Cependant, l'ordonnanceur ne dispose que d'informations limitées sur le type de travail que chaque tâche est susceptible d'exécuter, et doit recourir à une certaine heuristique (ou à des informations externes, comme le fait de forcer un masque d'affinité sur une tâche donnée) pour décider où les ordonnancer. S'il se trompe, vous pouvez finir par perdre beaucoup de temps et d'énergie pour exécuter une tâche sur un cœur lent, et donner une mauvaise expérience à l'utilisateur, ou utiliser les "gros" cœurs pour des tâches de faible priorité, et ainsi gaspiller de l'énergie ou les détourner de tâches qui en auraient besoin.

De plus, sur un système multiprocesseur asymétrique, il est généralement plus coûteux de migrer des tâches vers un cœur différent que sur un système SMP, de sorte que l'ordonnanceur doit généralement faire une bonne estimation initiale au lieu d'essayer de fonctionner sur un cœur libre aléatoire et de le déplacer par la suite.


Le choix d'Intel consiste plutôt à avoir un nombre plus faible de cœurs identiques, intelligents et rapides, mais avec une mise à l'échelle très agressive de la fréquence. Lorsque le processeur est occupé, il monte rapidement en puissance jusqu'à la vitesse d'horloge maximale, effectue le travail le plus rapidement possible, puis réduit sa fréquence pour revenir au mode d'utilisation de l'énergie le plus faible. Cela n'impose pas de charge particulière au planificateur, et évite les mauvais scénarios décrits ci-dessus. Bien sûr, même en mode basse horloge, ces cœurs sont "intelligents", donc ils consommeront probablement plus que les cœurs big.LITTLE "stupides" à basse horloge.

14voto

Hennes Points 63532

Les performances dans les jeux ont tendance à être déterminées par la vitesse du cœur unique,

Dans le passé (jeux de l'ère DOS) : Correct.
De nos jours, ce n'est plus vrai. De nombreux jeux modernes sont threadés et bénéficient de plusieurs cœurs. Certains jeux se contentent déjà de 4 cœurs et ce nombre semble augmenter avec le temps.

alors que des applications comme le montage vidéo sont déterminées par le nombre de cœurs.

C'est un peu vrai.

Nombre de cœurs * fois la vitesse du cœur * efficacité.
Si vous comparez un seul cœur identique à un ensemble de cœurs identiques, vous avez en grande partie raison.

En termes de ce qui est disponible sur le marché - tous les processeurs semblent avoir à peu près la même vitesse, les principales différences étant le nombre de threads ou de cœurs. plus de cœurs. Par exemple :

Intel Core i5 7600k, Fréq. de base 3,80 GHz, 4 cœurs Intel Core i7 7700k, Fréq. de base 4,20 GHz, 4 cœurs, 8 threads AMD Ryzen 1600x, Fréq. de base 3,60 GHz, 6 cœurs, 12 threads AMD Ryzen 1800x, Fréq. de base 3,60 GHz, 8 cœurs, 16 threads

Comparer différentes architectures est dangereux, mais ok...

Alors pourquoi cette tendance à l'augmentation du nombre de cœurs et à la multiplication des cœurs ? la même vitesse d'horloge ?

En partie parce que nous nous sommes heurtés à un obstacle. Augmenter la vitesse d'horloge signifie plus de puissance nécessaire et plus de chaleur générée. Plus de chaleur signifie encore plus de puissance nécessaire. Nous avons essayé de cette façon, le résultat a été l'horrible Pentium 4. Chaud et gourmand en énergie. Difficile à refroidir. Et pas même plus rapide que le Pentium-M intelligemment conçu (un P4 à 3.0GHz était à peu près aussi rapide qu'un P-mob à 1.7GHz).

Depuis lors, nous avons abandonné l'idée de pousser la vitesse d'horloge et avons préféré construire des solutions plus intelligentes. Une partie de ces solutions consiste à utiliser plusieurs cœurs plutôt que la vitesse d'horloge brute.

Par exemple, un seul cœur de 4 GHz peut consommer autant d'énergie et générer autant de chaleur que trois cœurs de 2 GHz. Si votre logiciel peut utiliser plusieurs cœurs, il sera beaucoup plus rapide.

Tous les logiciels ne peuvent pas le faire, mais les logiciels modernes le peuvent généralement.

Ce qui explique en partie pourquoi nous avons des puces avec plusieurs cœurs et pourquoi nous vendons des puces avec différents nombres de cœurs.

En ce qui concerne la vitesse d'horloge, je pense pouvoir identifier trois points :

  • Les processeurs à faible puissance sont utiles dans un certain nombre de cas où la vitesse brute n'est pas nécessaire. Par exemple, les contrôleurs de domaine, les configurations NAS, ... Pour ces cas, nous disposons de CPU à basse fréquence. Parfois même avec plus de cœurs (par exemple, un CPU basse vitesse 8x est utile pour un serveur web).
  • Pour le reste, nous sommes généralement proches de la fréquence maximale que nous pouvons atteindre sans que notre conception actuelle ne devienne trop chaude (disons 3 à 4GHz avec les conceptions actuelles).
  • Et en plus de ça, on fait du binning. Tous les CPU ne sont pas générés de la même manière. Certains processeurs ont un mauvais score ou un mauvais score dans une partie de leur puce, ces parties sont désactivées et sont vendues comme un produit différent.

L'exemple classique était une puce AMD à 4 cœurs. Si un cœur était cassé, il était désactivé et vendu comme une puce à 3 cœurs. Lorsque la demande pour ces 3 cœurs était élevée, même certains 4 cœurs étaient vendus comme la version 3 cœurs, et avec le bon hack logiciel, vous pouviez réactiver le 4e cœur.

Et cela ne se fait pas seulement avec le nombre de cœurs, cela affecte aussi la vitesse. Certaines puces fonctionnent plus vite que d'autres. Si elles sont trop chaudes, elles sont vendues comme des processeurs à faible vitesse (une fréquence plus faible signifie également moins de chaleur générée).

Et puis il y a la production et le marketing, et ça fait encore plus de dégâts.

Pourquoi n'avons-nous pas des variantes avec des vitesses d'horloge différentes ? par exemple, 2 "gros" cœurs et beaucoup de petits cœurs.

Nous le faisons. Dans les endroits où cela a un sens (par exemple, les téléphones mobiles), nous avons souvent un SoC avec une unité centrale à cœur lent (faible consommation), et quelques cœurs plus rapides. Cependant, dans un PC de bureau typique, cela ne se fait pas. Cela rendrait l'installation beaucoup plus complexe, plus coûteuse, et il n'y a pas de batterie à vider.

10voto

David Schwartz Points 60868

Pourquoi n'avons-nous pas de variantes avec des vitesses d'horloge différentes ? Par exemple, deux "gros" cœurs et beaucoup de petits cœurs.

À moins d'être extrêmement préoccupé par la consommation d'énergie, il serait insensé d'accepter tous les coûts associés à un cœur supplémentaire et de ne pas tirer le maximum de performances de ce cœur. La vitesse d'horloge maximale est déterminée en grande partie par le processus de fabrication, et la puce entière est fabriquée par le même processus. Quel serait donc l'avantage de rendre certains cœurs plus lents que ne le permet le processus de fabrication ?

Nous avons déjà des cœurs qui peuvent ralentir pour économiser de l'énergie. Quel serait l'intérêt de limiter leurs performances maximales ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X