web-dev-qa-db-fra.com

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

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, j’ai eu un argument "Mac contre PC" (ce n’est en fait pas le sujet de ce sujet ... qui était de retour au collège) avec une connaissance qui a insisté sur le fait que les Mac étaient uniquement annoncés comme des machines 1Ghz parce qu’ils étaient des G4 biprocesseurs fonctionnant chacun à 500 MHz.

À l'époque, je savais qu'il s'agissait d'une foutaise pour des raisons qui, à mon avis, étaient évidentes pour la plupart des gens, mais je viens de voir un commentaire sur l'effet de "6 cœurs x 0.2GHz = 1.2Ghz" et cela m'a fait réfléchir à nouveau pour savoir 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 noyau effectue en fait x calculs par seconde, le nombre total de calculs est donc x (cœurs).
  2. La vitesse d'horloge est plutôt un décompte du nombre de cycles parcourus par le processeur en l'espace d'une seconde. Par conséquent, tant que tous les cœurs fonctionnent à la même vitesse, la vitesse de chaque cycle reste la même quel que soit le nombre de cœurs. . En d'autres termes, Hz = (core1Hz + core2Hz + ...)/cores.
23
NReilingh

La raison principale pour laquelle un processeur quad-core 3GHz n’est jamais aussi rapide qu’un processeur simple à 12 GHz tient à la façon dont la tâche exécutée sur ce processeur fonctionne, c’est-à-dire mono-thread ou multi-thread. La loi d'Amdahl est importante lorsque vous envisagez les types de tâches que vous exécutez.

Si vous avez une tâche qui est intrinsèquement linéaire et qui doit être effectuée précisément, étape par étape, telle que (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 altérer la valeur de 'a', car chaque copie obtiendrait la valeur de 'a' à des moments différents et serait réécrite différemment. Cela limite la tâche à un seul thread et par conséquent, la tâche ne peut être exécutée que sur un seul cœur à la fois. Si elle était exécutée sur plusieurs cœurs, la corruption de synchronisation risquerait alors de se produire. Cela le limite à la moitié de la puissance du processeur d'un système dual core ou à 1/4 dans un système quad core.

Maintenant, prenez 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 peuvent être scindées en 4 programmes distincts comme le premier et exécutés en même temps, chacun pouvant utiliser efficacement toute la puissance d’un des cœurs sans problème de synchronisation, c’est là que La loi d'Amdahl entre en jeu.

Donc, si vous avez une seule application filetée effectuant des calculs de force brute, le processeur unique à 12 GHz gagnerait haut la main, si vous pouviez en quelque sorte scinder la tâche en plusieurs parties et en multithread, les 4 cœurs pourraient se rapprocher, mais pas tout à fait, la même performance, selon la loi d'Amdahl.

La réactivité est l’essentiel d’un système multi-processeurs. Sur une seule machine centrale qui travaille fort, 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 tranches minces entre les tâches plus importantes, ce qui donne un système qui semble lent ou saccadé. . Sur un système multi-cœur, la tâche lourde prend un noyau et toutes les autres tâches sont exécutées sur les autres noyaux, effectuant leur travail rapidement et efficacement.

L'argument de "6 cœurs x 0.2GHz = 1.2Ghz" est nul dans toutes les situations, sauf lorsque les tâches sont parfaitement parallèles et indépendantes. Il existe un bon nombre de tâches hautement parallèles, mais elles nécessitent toujours une forme de synchronisation. Handbrake est un trancoder vidéo qui sait très bien utiliser tous les processeurs disponibles, mais qui nécessite un processus de base pour que les autres threads soient pleins de données et collectés. les données qu'ils ont fait avec.

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

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

  1. La vitesse d'horloge est plutôt un décompte du nombre de cycles parcourus par le processeur en l'espace d'une seconde. Par conséquent, tant que tous les cœurs fonctionnent à la même vitesse, la vitesse de chaque cycle 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 = 12 GHz, bien que les calculs soient efficaces, mais vous comparez des pommes à 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.

36
Mokubai

D'autres ont présenté un bon argument du point de vue technique. Je ferai plutôt quelques analogies simples qui, j'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 mise en parallèle (enfin, du moins à ce niveau technologique).

En voici un autre: dans une centrale hydroélectrique que j'ai visitée récemment, 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 tout le stator; 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 des minuteries précises (bien que la pratique ne soit plus recommandée à cause de l’horloge variable de la plupart des processeurs. Il est préférable d’utiliser une minuterie haute précision). Si nous supposons que nous avons un processeur avec une horloge 12GHz 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 3GHz. Peu importe le nombre de cœurs 3GHz que nous avons, nous ne pourrons pas atteindre la résolution du cœur 12GHz. Cela revient à avoir 4 horloges avec des affichages à 7 segments, chaque horloge affichant simplement l'heure exacte en heures. Même s’ils affichent les heures correctement, vous ne pouvez pas les utiliser pour mesurer des intervalles de temps d’une seconde.

6
AndrejaKo

Je ne suis pas un expert sur le sujet, mais j'ai un diplôme en génie informatique. En théorie (c'est une réponse très conceptuelle), un quad-core 3GHz chaque processeur peut équivaut à un processeur 12 GHz si, par exemple, quatre ensembles de calculs sont nécessaires pour un même résultat final. C'est ce qu'on appelle le traitement parallèle.

Pour simplifier la logique, supposons qu’il s’agisse d’un processeur dual core. Si un ensemble de calculs était, disons:

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 équivaudrait à un processeur monocœur 2 * xGHz. En effet, les deux calculs, bien que effectués à une vitesse x, seraient traités en même temps. Tandis que le processeur à noyau unique pouvait les faire à une vitesse 2 x x mais les unes après les autres. Si les deux processeurs 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;

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

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

3
blastawaythewall

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

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

De plus, j'ai lu quelque part que si nous doublions les transistors intégrés dans la puce (CMP), la vitesse d’accélération que nous allons obtenir n’est que de 40%. Cela fournit également un indice significatif sur ce sujet.

2
Harmeet Singh

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

En réalité, quatre processeurs 3Ghz ne seront pas aussi rapides qu'un seul processeur 12Ghz en raison de leur inefficacité. Ils peuvent être très proches, mais ils ne seront pas égaux à un seul processeur en termes de puissance de traitement.

Cela s'explique par les petites inefficacités liées aux programmes pouvant s'exécuter sur plusieurs processeurs. En supposant que le programme en question puisse être exécuté en parallèle, nous aurons toujours des problèmes avec différents cœurs en concurrence pour d'autres ressources telles que RAM ou même des problèmes de synchronisation de threads et de cache. De plus, il y a toujours des parties de programmes qui ne peuvent pas être parallélisées et qui doivent être exécutées sur un seul noyau.

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

2
Faken

Deux voitures à 50 km/h chacune ne font pas "100 km/h". 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é, mais une mesure de la vitesse à laquelle le chronomètre tourne.

1
David Schwartz

En ce qui concerne les cycles d'horloge exécutés, oui, un processeur multicœur effectue x * cores cycles de travail par seconde. Classiquement, les vitesses d'horloge sont répertoriées par cœur pour faciliter la comparaison (sinon, comment comparer facilement une puce double cœur 4 GHz 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, vous ne pouvez donc pas laisser les deux cœurs stocker ou lire des données à pleine vitesse. Ceci est souvent atténué dans les processeurs multicœurs par la présence de plusieurs caches partagés (par exemple, la plupart des processeurs quad-core ont 2 caches partagés par deux cœurs), afin de mieux diviser les chances d'un goulot d'étranglement sur une ressource partagée.

Deuxièmement, et peut-être moins dans le monde non technique, comparer les vitesses d'horloge peut parfois ressembler à comparer des pommes et des oranges. Différents processeurs accomplissent une quantité de travail différente en un seul cycle d'horloge. Par conséquent, dire que vous avez 1 GHz contre 1,2 GHz semble excellent, mais la puce à 1 GHz pourrait en réalité faire plus de travail dans un intervalle de temps donné. Le Pentium 4 a conduit ce point à la maison, menant au Myth Megahertz (que je ne savais pas avait un nom inventé avant d'écrire ce post).

1
Jimmy