Comment calculer la vitesse d'horloge dans les processeurs multicœurs?

23

Est-il exact de dire, par exemple, qu'un processeur à quatre cœurs fonctionnant chacun à 3 GHz est en fait un processeur fonctionnant à 12 GHz?

Une fois, je suis entré dans un argument "Mac contre PC" (qui n'est d'ailleurs pas l'objet de ce sujet ... qui était de retour au collège) avec une connaissance qui a insisté sur le fait que les Mac n'étaient annoncés que comme des machines 1 GHz parce qu'ils étaient des G4 biprocesseurs fonctionnant chacun à 500 MHz.

À l'époque, je savais que c'était du bain de lait pour des raisons qui, je pense, sont évidentes pour la plupart des gens, mais je viens de voir un commentaire sur ce site Web à l'effet de "6 cœurs x 0,2 GHz = 1,2 GHz" et cela m'a fait réfléchir à nouveau si il y a une vraie réponse à cela.

Il s'agit donc d'une question technique plus ou moins philosophique / profonde sur la sémantique du calcul de la vitesse d'horloge. Je vois deux possibilités:

  1. Chaque cœur fait en fait x calculs par seconde, donc le nombre total de calculs est x (cœurs).
  2. La vitesse d'horloge est plutôt un décompte du nombre de cycles que le processeur traverse en l'espace d'une seconde, de sorte que tant que tous les cœurs fonctionnent à la même vitesse, la vitesse de chaque cycle d'horloge reste la même quel que soit le nombre de cœurs. . En d'autres termes, Hz = (core1Hz + core2Hz + ...) / cores.
NReilingh
la source
Beaucoup de réponses ici expliquent bien pourquoi, par exemple, un processeur quadricœur à 2 GHz n'est pas nécessairement égal à un processeur monocœur à 8 GHz. Cependant, j'ai du mal à deviner comment les vitesses de processeur multicœur doivent être prises en compte pour décider de l'adéquation d'un système à une application qui répertorie une vitesse et un nombre de cœurs spécifiques dans ses exigences? (Par exemple: Borderlands 2 nécessite un processeur double cœur 2,4 GHz. Devrions-nous nous attendre à ce qu'un quadricœur à vitesse plus faible ou à un cœur simple plus rapide fasse aussi bien?) Est-ce (ou pourrait-il) être répondu ici, ou devrait-il s'agir d'une question distincte?
Iszi
@Iszi Cela devrait être une autre question, mais il est probable que Borderlands soit optimisé pour plus d'un thread s'ils incluent le "dual core" dans leurs exigences. Dans ce cas, un processeur monocœur ne serait pas recommandé, mais il n'est pas clair s'il peut tirer parti de> 2 cœurs.
NReilingh
Il est important de se rappeler que la vitesse d'horloge et le nombre de cœurs ne déterminent pas uniquement la «vitesse» du processeur. Par exemple, les tailles et la vitesse du cache affectent le temps que le processeur passe à attendre les instructions et les données. De plus, les instructions par cycle (d'une certaine manière, «efficacité», bien que distinctes et liées à l'efficacité énergétique) affecteront également la vitesse des calculs. Différents processeurs prendront des temps différents pour exécuter la même instruction.
Bob

Réponses:

35

La raison principale pour laquelle un processeur quad-core 3GHz n'est jamais aussi rapide qu'un simple core 12GHz est liée à la façon dont la tâche s'exécutant sur ce processeur, c'est-à-dire à un seul thread ou à plusieurs threads. La loi d'Amdahl est importante lorsque l'on considère les types de tâches que vous exécutez.

Si vous avez une tâche qui est intrinsèquement linéaire et doit être effectuée avec précision étape par étape, comme (un programme extrêmement simple)

10: a = a + 1
20: goto 10

Ensuite, la tâche dépend fortement du résultat de la passe précédente et ne peut pas exécuter plusieurs copies d'elle-même sans corrompre la valeur de 'a'car chaque copie obtiendrait la valeur de 'a'à des moments différents et l'écrirait différemment. Cela limite la tâche à un seul thread et donc la tâche ne peut être exécutée que sur un seul cœur à un moment donné, si elle devait s'exécuter sur plusieurs cœurs, la corruption de synchronisation se produirait. Cela le limite à la moitié de la puissance cpu d'un système dual core, ou 1/4 dans un système quad core.

Prenez maintenant une tâche telle que:

10: a = a + 1
20: b = b + 1
30: c = c + 1
40: d = d + 1
50: goto 10

Toutes ces lignes sont indépendantes et pourraient être divisées en 4 programmes distincts comme le premier et s'exécuter en même temps, chacun étant capable d'utiliser efficacement la pleine puissance de l'un des cœurs sans aucun problème de synchronisation, c'est là que la loi d'Amdahl entre en elle.

Donc, si vous avez une application à thread unique effectuant des calculs de force brute, le processeur à 12 GHz gagnerait haut la main, si vous pouvez en quelque sorte diviser la tâche en parties distinctes et multithread, les 4 cœurs pourraient s'approcher, mais pas tout à fait, la même performance, selon la loi d'Amdahl.

La principale chose qu'un système multi-CPU vous donne est la réactivité. Sur une machine à cœur unique qui travaille dur, le système peut sembler lent car la plupart du temps peut être utilisé par une tâche et les autres tâches ne s'exécutent que par courtes rafales entre les tâches plus importantes, ce qui donne un système qui semble lent ou saccadé . Sur un système multicœur, la tâche lourde obtient un cœur et toutes les autres tâches jouent sur les autres cœurs, faisant leur travail rapidement et efficacement.

L'argument de «6 cœurs x 0,2 GHz = 1,2 GHz» est un déchet dans toutes les situations, sauf lorsque les tâches sont parfaitement parallèles et indépendantes. Il existe un bon nombre de tâches qui sont très parallèles, mais elles nécessitent encore une certaine forme de synchronisation. Handbrake est un trancodeur vidéo qui est très bon pour utiliser tous les processeurs disponibles, mais il nécessite un processus de base pour garder les autres threads remplis de données et collecter les données avec lesquelles ils sont effectués.

  1. Chaque cœur fait en fait x calculs par seconde, donc le nombre total de calculs est x (cœurs).

Chaque cœur est capable de faire x calculs par seconde, en supposant que la charge de travail est parallèle appropriée, sur un programme linéaire, tout ce que vous avez est 1 cœur.

  1. La vitesse d'horloge est plutôt un décompte du nombre de cycles que le processeur traverse en l'espace d'une seconde, de sorte que tant que tous les cœurs fonctionnent à la même vitesse, la vitesse de chaque cycle d'horloge reste la même quel que soit le nombre de cœurs. . En d'autres termes, Hz = (core1Hz + core2Hz + ...) / cores.

Je pense que c'est une erreur de penser que 4 x 3GHz = 12GHz, à condition que les calculs fonctionnent, mais vous comparez des pommes avec des oranges et les sommes ne sont tout simplement pas correctes, le GHz ne peut pas simplement être additionné pour chaque situation. Je le changerais en 4 x 3GHz = 4 x 3GHz.

Mokubai
la source
Nice post .. Impossible de voter plus de 1+ :-(
Gopalakrishnan Subramani
Mais la loi d'Amdahl est un problème de programmation, causé par le verrouillage, pas un problème matériel. Si vous n'avez pas besoin de synchroniser, chaque cœur peut exécuter des instructions aussi vite que possible. On pourrait concevoir un programme parallèle (simple) qui serait parfaitement réparti entre les cœurs. Les fabricants de matériel n'annonceraient-ils pas cette valeur brute?
Justin Meiners
Pour clarifier, je comprends pourquoi cela répond à la question de savoir pourquoi 4 cœurs à 3 GHz ne sont pas aussi rapides, en pratique, que 12 GHz, mais ce n'est pas la partie de la façon dont la vitesse d'horloge est calculée pour les multicœurs.
Justin Meiners
La vitesse d'horloge @JustinMeiners par cœur est simplement la vitesse d'horloge à laquelle le cœur fonctionne. Il n'y a pas de calcul magique qui assimile un seul cœur au multicœur. Plusieurs cœurs signifient simplement que vous pouvez exécuter simultanément plusieurs tâches distinctes. La loi d'Amdahls s'applique en raison du logiciel, la synchronisation et le verrouillage nécessaires empêcheront une tâche d'être "parfaite" dans le matériel autant que dans le logiciel. Les caches et la mémoire partagés provoquent des conflits et des verrous.
Mokubai
@Mokubai Juste pour clarifier, lorsqu'un fabricant répertorie la vitesse d'horloge, chaque cœur individuel fonctionne à la vitesse, n'est-ce pas?
Justin Meiners
6

D'autres ont avancé un bon argument d'un point de vue technique. Je vais plutôt faire quelques analogies simples qui, je l'espère, expliqueront pourquoi 4 * 3GHz n'est pas équivalent à 1 * 12GHz.

Par exemple, une femme peut fabriquer un bébé en neuf mois. Est-ce que neuf femmes pourront fabriquer un bébé en un mois? Non, car la gestation ne peut pas être parallélisée (enfin, du moins à ce niveau technologique).

En voici une autre: dans une centrale hydroélectrique que j'ai récemment visitée, l'un des générateurs était en cours de modernisation. Ils ont dû transporter le stator du générateur par bateau. Un sixième du stator pouvait être transporté par camion, mais ils devaient transporter le stator entier; ils ont donc dû utiliser un navire, pas six camions.

Un autre cas pourrait être le moment précis des événements. Parfois, les processeurs informatiques sont utilisés comme temporisateurs précis (bien que la pratique ne soit plus recommandée, en raison de l'horloge variable sur la plupart des processeurs. Un temporisateur d'événements de haute précision doit être utilisé à la place). Si nous supposons que nous avons un processeur avec une horloge de 12 GHz relativement stable, nous pouvons l'utiliser pour mesurer le temps avec une résolution beaucoup plus élevée que sur un processeur avec une horloge de 3 GHz. Peu importe le nombre de cœurs 3GHz que nous avons, nous ne pourrons pas atteindre la résolution du cœur 12GHz. C'est comme avoir 4 horloges avec des affichages à 7 segments où chaque horloge affiche simplement l'heure correcte en heures. Peu importe la façon dont ils affichent correctement les heures, vous ne pouvez pas les utiliser pour mesurer des intervalles de temps dans une plage d'une seconde.

AndrejaKo
la source
Réponse utile pour les moins techniques. Aussi, j'aime les analogies :)
aff
3

Je ne suis pas un expert en la matière, mais j'ai un diplôme en génie informatique. En théorie (il s'agit d'une réponse hautement conceptuelle), un processeur quadricœur à 3 GHz peut être l'équivalent d'un processeur à 12 GHz si, par exemple, quatre ensembles de calculs étaient nécessaires pour un résultat final unique. C'est ce qu'on appelle le traitement parallèle.

Pour simplifier la logique, disons que nous parlons d'un processeur dual core. Si un ensemble de calculs était, dites:

a = b + 1;

c = d + 1;

ensuite, ces deux calculs pourraient être exécutés sur des cœurs séparés, et un processeur xGHz serait équivalent à un processeur 2 * xGHz monocœur. En effet, les deux calculs, bien que effectués à une vitesse x, seraient traités en même temps. Alors que le processeur simple cœur pouvait les faire à une vitesse 2 * x mais l'un après l'autre. Si les deux CPU exécutaient ce code en même temps, ils finiraient en même temps. Cependant, si le code était:

a = b + 1;

c = a + 1;

ensuite, le processeur dual-core prendrait deux fois plus de temps que le processeur single-core car dans la seconde instruction, la valeur de a dépend de la première instruction et ne peut donc pas être exécutée en parallèle. C'est ainsi que certains logiciels peuvent tirer parti des processeurs multithreads.

Ainsi, en théorie, un processeur monocœur à 12 GHz peut toujours fonctionner aussi rapidement (ou plus rapidement) qu'un processeur quadricœur à 3 GHz, mais pas l'inverse.

blastawaythewall
la source
Notez que ces calculs ne seront plus rapides que s'ils sont mutlithreadés, et même alors, il y a un léger surcoût. Mais oui, bien qu'il soit possible de faire un processeur monocœur capable de faire autant de calculs, ce n'est tout simplement pas plausible en raison de la chaleur et d'autres choses.
Phoshi
Cette réponse est trompeuse pour deux raisons. Premièrement, les cœurs modernes font plus d'une chose à la fois. Deuxièmement, la réponse suppose que la vitesse de base est la même que la vitesse à laquelle le travail est effectué. Un processeur monocœur à 12 GHz ne fonctionnera pas aussi vite qu'un processeur quadricœur à 3 GHz si le processeur monocœur a besoin de beaucoup plus de cycles d'horloge pour accomplir le même travail. (Ce qui serait le cas, car un processeur 12 GHz aurait besoin de pipelines beaucoup plus longs.)
David Schwartz
2

C'est une question compliquée à répondre, mais la réponse courte est: Non

Dans les applications du monde réel, quatre processeurs 3Ghz ne seront pas aussi rapides qu'un seul processeur 12Ghz en raison d'inefficacités. Ils peuvent être très proches, mais ils n'égaleront PAS un seul processeur en termes de puissance de traitement.

La raison à cela réside dans les petites inefficacités lorsqu'il s'agit de programmes pouvant s'exécuter sur plusieurs processeurs. En supposant que le programme en question puisse fonctionner en parallèle, nous rencontrerons toujours des problèmes avec différents cœurs en concurrence les uns contre les autres pour d'autres ressources telles que la RAM ou même des problèmes de synchronisation de cache et de thread. En outre, il existe toujours des parties de programmes qui ne peuvent pas être parallélisées et doivent s'exécuter sur un seul cœur par lui-même.

Jetez un œil à cet article: http://en.wikipedia.org/wiki/Amdahl%27s_law

Faken
la source
Vous avez raison et tort. Quatre processeurs 3 GHz seront probablement PLUS RAPIDES qu'un seul processeur 12 GHz dans des applications "réelles". De nos jours, de plus en plus de programmes utilisent le multi-threading, le lien que vous avez donné fait référence à une application théorique à un seul thread. Un seul processeur à 12 GHz n'a qu'un seul thread, de sorte que les avantages du multi-threading qu'un programme "du monde réel" a à offrir seraient perdus. L'industrie ne va pas vers des cœurs plus lents au lieu de moins de cœurs plus rapides simplement parce que les avantages de la technologie multicœur l'emportent de loin sur les avantages de la technologie rapide à cœur unique.
ubiquibacon
3
@typoknig: Ce n'est pas tout à fait vrai. Un processeur monocœur à 6 GHz exécuterait une application multithread à peu près à la même vitesse qu'un processeur bicœur à 3 GHz, en supposant que l'application tire pleinement parti de chaque thread (ce qu'elle ne fait probablement pas s'il s'agit d'un "réel"). application mondiale ", mais c'est un argument distinct). Nous ne voyons pas de processeurs 12 GHz parce que c'est trop difficile avec la technologie actuelle, pas parce que c'est plus lent.
Sasha Chedygov
4
@typoknig: J'ai programmé des programmes mutithread et croyez-moi, si j'avais un seul processeur 12Ghz, j'utiliserais ça à la place. La programmation monothread est 10 fois plus simple et beaucoup plus efficace que la programmation multithread. La vraie raison pour laquelle l'industrie déplace les processeurs Twords Muticore n'est pas parce qu'ils sont plus rapides, c'est parce que nous ne pouvons pas faire fonctionner les CPU individuels plus rapidement! Cela a été décrit avec la technologie netburst d'Intel dans les jours p4. Ils ont estimé les processeurs 10 GHz, au moins, c'est-à-dire jusqu'à ce que la physique quantique les frappe au visage et dise "non noob!"
Faken
2
@typokning: Le F22 utilise une gamme de processeurs powerPC pour atteindre 10 milliards d'instructions par seconde, ce qui est très différent de 10 GHz! C'est comme dire que votre Radion HD5970 fonctionne à 4600 GHz. Il est capable de 4.6 TFLOPS mais uniquement parce qu'il est très parallèle.
Faken
1
@typoknig: Vous ne comprenez clairement pas la différence entre la fréquence CPU et IPS (instructions par seconde), ils ne sont pas les mêmes. Veuillez lire: en.wikipedia.org/wiki/Instructions_per_second
Faken
2

Il semble que nous ne pouvons pas dire que 4 cœurs à 3 GHz peuvent être considérés comme 12 GHz.

Diverses contraintes comme la mémoire partagée, la contention du cache et d'autres ressources sont également communes à tous les cœurs, donc exécuter un morceau de code en parallèle sur ces cœurs ne sera pas aussi efficace que de l'exécuter sur des processeurs 12 Ghz (bien qu'il soit difficile de construire un tel processeur ).

J'ai également lu quelque part que si nous doublons les transistors intégrés à la puce (CMP), la vitesse que nous allons obtenir n'est que de 40%. Cela fournit également un indice significatif sur ce sujet.

Harmeet Singh
la source
1

En ce qui concerne les cycles d'horloge exécutés, oui, un processeur multicœur effectue des x * corescycles de travail par seconde. Classiquement, les vitesses d'horloge sont répertoriées sur une base par cœur pour une comparaison plus facile (sinon, comment compareriez-vous facilement une puce double cœur 4GHz fonctionnant à 2 GHz / cœur par rapport à une puce quadricœur 4 GHz fonctionnant à 1 GHz / cœur?).

Malheureusement, le problème devient complexe lorsque vous essayez de comparer différents processeurs dans des applications réelles.

Premièrement, la plupart des processeurs multicœurs ont des ressources partagées entre les cœurs (par exemple, le cache du processeur). Ils doivent partager l'accès à ce cache, de sorte que les deux cœurs ne peuvent pas stocker ou lire des données à pleine vitesse. Ceci est souvent atténué dans les CPU à plusieurs cœurs en ayant plusieurs caches partagés (par exemple, la plupart des puces quadricœurs ont 2 caches, chacune partagée par une paire de cœurs), afin de mieux diviser les chances d'un goulot d'étranglement sur une ressource partagée.

Deuxièmement, et peut-être moins connu dans le monde non-technophile, la comparaison des vitesses d'horloge peut parfois être comme comparer des pommes et des oranges. Différents processeurs accomplissent une quantité de travail différente en un seul cycle d'horloge, donc dire que vous avez 1 GHz contre 1,2 GHz semble excellent, mais la puce 1 GHz peut en fait faire plus de travail dans un intervalle de temps donné. Le Pentium 4 a conduit ce point chez lui, conduisant au mythe Megahertz (dont je ne savais pas qu'il avait un nom inventé avant d'écrire ce post).

Jimmy
la source
Les vitesses d'horloge ne sont pas répertoriées "par cœur". Les vitesses ne sont jamais "par" quoi que ce soit. Si une voiture roule à 50 miles par heure, la vitesse est de 50 miles par heure. Si deux voitures roulent à 50 miles par heure, la vitesse est toujours de 50 miles par heure. L'idée d'une "vitesse par voiture" est dénuée de sens et incohérente.
David Schwartz
1

Deux voitures qui parcourent chacune 50 miles par heure n'additionnent pas à 100 miles par heure. C'est aussi simple que ça. La vitesse d'horloge d'un processeur n'est pas une mesure de la vitesse à laquelle le travail est effectué, c'est une mesure de la vitesse à laquelle l'horloge tourne.

David Schwartz
la source