15Aug

Comment calculez-vous la vitesse du processeur sur les processeurs multicœurs?

L'avènement des processeurs multi-cœurs économiques grand public soulève la question pour de nombreux utilisateurs: comment calculer efficacement la vitesse réelle d'un système multicœur? Est-ce qu'un système 3Ghz 4-core vraiment 12Ghz? Continuez à lire pendant que nous enquêtons.

Question d'aujourd'hui &La session de réponse nous vient avec l'aimable autorisation de SuperUser, une subdivision de Stack Exchange, un groupement de lecteurs communautaires de sites Web Q & A.

La question

SuperUser lecteur NReilingh était curieux de savoir comment la vitesse du processeur pour un système multi-core est réellement calculé:

Est-il correct de dire, par exemple, qu'un processeur à quatre coeurs fonctionnant chacun à 3GHz est en fait un processeur en cours d'exécutionà 12GHz?

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

A l'époque je savais que c'était de la foutaise pour des raisons que je trouve évidentes pour la plupart des gens, mais je viens de voir un commentaire sur ce site à l'effet "6 cœurs x 0.2GHz = 1.2Ghz" et ça m'a fait réfléchirs'il y a une vraie réponse à cela.

Donc, c'est une question plus ou moins philosophique / technique sur la sémantique du calcul de la vitesse d'horloge. Je vois deux possibilités:

  1. Chaque noyau 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 le nombre de cycles parcourus par le processeur en l'espace d'une seconde, aussi longtemps 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œursexister. En d'autres termes, Hz =( core1Hz + core2Hz +. ..) / cœurs.

Alors, quelle est la manière appropriée de désigner la vitesse d'horloge totale et, plus important encore, est-il même possible d'utiliser la nomenclature de la vitesse monocœur sur un système multicœur?

La réponse

SuperUser contributeurs Mokubai aide à éclaircir les choses. Il écrit:

La raison principale pour laquelle un processeur quad-core 3GHz n'est jamais aussi rapide qu'un simple core 12GHz est de faire avec la façon dont la tâche s'exécutant sur ce processeur fonctionne, c'est-à-dire mono-thread ou multi-thread. La loi d'Amdahl est importante en considérant 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 faite précisément étape par étape comme( un programme grossièrement simple)

10: a = a + 1 20: goto 10

Ensuite, la tâche dépend fortement du résultatde la passe précédente et ne peut pas exécuter plusieurs copies de lui-même sans altérer la valeur de 'a', car chaque copie obtiendrait la valeur de 'a' à des moments différents et la réécrit différemment. Cela limite la tâche à un seul thread et donc la tâche ne peut jamais être exécutée sur un seul core à un moment donné, si elle devait fonctionner sur plusieurs cœurs, alors 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é en 4 programmes distincts comme le premier et fonctionner en même temps, chacun capable d'utiliser efficacement la pleine puissance de l'un des noyaux sans aucun problème de synchronisation, c'est là qu'intervient la loi d'Amdahl.

Donc, si vous avez une seule application filetée qui effectue des calculs de force brute, le processeur 12GHz gagnera haut la main, si vous pouvez en quelque sorte diviser la tâche en plusieurs parties et multi-threads, 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 monotone qui travaille dur, le système peut sembler léthargique car la plupart du temps pourrait être utilisé par une tâche et les autres tâches ne s'exécutent que par petites rafales entre les tâches principales, ce qui entraîne un système qui semble lent ou pudique. Sur un système multi-core, la tâche lourde obtient un noyau et toutes les autres tâches jouent sur les autres noyaux, faisant leur travail rapidement et efficacement.

L'argument de "6 cœurs x 0.2GHz = 1.2Ghz" est de la foutaise dans toutes les situations sauf quand les tâches sont parfaitement parallèles et indépendantes. Il y a un bon nombre de tâches qui sont hautement parallèles, mais elles nécessitent encore une certaine forme de synchronisation. Handbrake est un trancoder 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 finis.

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

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

  1. La vitesse d'horloge est plutôt un compte du nombre de cycles parcourus par le processeur en l'espace d'une seconde, aussi longtemps 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œursexister. En d'autres termes, Hz =( core1Hz + core2Hz +. ..) / cœurs.

Je pense qu'il est fallacieux de penser que 4 x 3GHz = 12GHz, bien que les maths fonctionnent, mais vous comparez les pommes aux oranges et les sommes ne sont pas justes, GHz ne peut pas simplement être additionné pour chaque situation. Je voudrais le changer à 4 x 3GHz = 4 x 3GHz.

Avoir quelque chose à ajouter à l'explication? Sonnez dans les commentaires. Vous voulez lire plus de réponses d'autres utilisateurs de Stack Exchange? Découvrez le fil de discussion complet ici.