Pourquoi les nouvelles générations de processeurs sont-elles plus rapides à la même vitesse d'horloge?

38

Pourquoi, par exemple, un Core i5 dual core à 2,66 GHz serait-il plus rapide qu'un Core 2 Duo à 2,66 GHz, qui est également dual core?

Est-ce à cause d'instructions plus récentes capables de traiter des informations en moins de cycles d'horloge? Quels autres changements architecturaux sont impliqués?

Cette question revient souvent et les réponses sont généralement les mêmes. Ce message est destiné à fournir une réponse définitive et canonique à cette question. N'hésitez pas à modifier les réponses pour ajouter des détails supplémentaires.

Agz
la source
Wow, les deux percées et David sont d'excellentes réponses ... Je ne sais pas lequel choisir comme correct: P
agz
Aussi meilleur jeu d'instructions et plus de registres. Par exemple, MMX (très ancien maintenant) et x86_64 (quand AMD a inventé x86_64, ils ont ajouté quelques améliorations de compatibilité, en mode 64 bits. Ils ont compris que la comparabilité serait de toute façon brisée).
ctrl-alt-delor
Pour de réelles améliorations importantes de l'architecture x86, un nouveau jeu d'instructions est nécessaire, mais si cela était fait, il ne s'agirait plus d'un x86. Ce serait un PowerPC, mips, Alpha,… ou ARM.
ctrl-alt-delor

Réponses:

30

Ce n'est généralement pas à cause d'instructions plus récentes. C'est simplement parce que le processeur nécessite moins de cycles d'instruction pour exécuter les mêmes instructions. Cela peut être dû à un grand nombre de raisons:

  1. Les grandes caches signifient moins de temps perdu à attendre de la mémoire.

  2. Plus d'unités d'exécution signifie moins de temps d'attente pour commencer à exécuter une instruction.

  3. Une meilleure prédiction de branche signifie moins de temps perdu à exécuter de manière spéculative des instructions qui n'ont jamais réellement besoin d'être exécutées.

  4. Les améliorations de l'unité d'exécution signifient moins de temps d'attente pour terminer les instructions.

  5. Des pipelines plus courts signifient que les pipelines se remplissent plus rapidement.

Etc.

David Schwartz
la source
Je crois que l’architecture de base a un pipeline de 14 à 15 étages ( réf ) et que le pont Nehalem / Sandy a environ un pipeline de 14-17 étages ( réf ).
Percée
Les canalisations plus courtes sont plus faciles à garder pleines et réduisent les pénalités associées à la purge des canalisations. Les pipelines plus longs permettent généralement des vitesses d'horloge plus élevées.
David Schwartz
C’est ce que je veux dire, je pense que la profondeur du pipeline elle-même est restée la même ou a augmenté . Également dans les manuels de développement Intel 64 et IA-32 , la dernière mention d’un changement de pipeline se trouve dans le vol. 1, ch. 2.2.3 / 2.2.4 (les microarchitectures Intel Core / Atom).
Percée
2
L'effort pour augmenter les vitesses d'horloge s'est traduit par des canalisations plus longues. Cela est devenu ridicule (jusqu'à 31 étapes!) Vers la fin de l'ère NetBurst. De nos jours, c’est une décision technique délicate qui présente des avantages et des inconvénients dans les deux sens.
David Schwartz
également l' amélioration de la prévision branche, la demande de modes / optimisation / MUX améliorations unitaires, la miniaturisation (chaleur réduite) et die-conception (amélioration des chemins / circuits d' une filière, etc), ...
Shaun Wilson
40

Concevoir un processeur offrant des performances élevées va bien au-delà d’une simple augmentation du taux d’horloge. Il existe de nombreuses autres manières d'augmenter les performances, activées par la loi de Moore et essentielles à la conception de processeurs modernes.

Les fréquences d'horloge ne peuvent pas augmenter indéfiniment.

  • À première vue, il peut sembler qu’un processeur exécute simplement un flux d’instructions l’une après l’autre, avec des performances accrues grâce à des fréquences d’horloge plus élevées. Cependant, augmenter la fréquence d'horloge ne suffit pas. La consommation d'énergie et la puissance calorifique augmentent à mesure que les fréquences d'horloge augmentent.

  • Avec des fréquences d'horloge très élevées, une augmentation significative de la tension du cœur du processeur devient nécessaire. Étant donné que le TDP augmente avec le carré du noyau en V , nous atteignons finalement un point où une consommation excessive d'énergie, de chaleur et de refroidissement empêche une nouvelle augmentation de la fréquence d'horloge. Cette limite a été atteinte en 2004, à l’époque du Pentium 4 Prescott . Bien que les améliorations récentes de l'efficacité énergétique aient aidé, des augmentations significatives de la fréquence d'horloge ne sont plus possibles. Voir: Pourquoi les fabricants de CPU ont-ils cessé d'augmenter la vitesse d'horloge de leurs processeurs?

Graphique des vitesses d'horloge de stock dans les PC passionnés d'avant-garde au fil des ans.
Graphique des vitesses d'horloge de stock dans les PC passionnés d'avant-garde au fil des ans. Source de l'image

  • Dans la loi de Moore , une observation stipulant que le nombre de transistors sur un circuit intégré double tous les 18 à 24 mois, principalement en raison de la réduction de la taille des matrices , a été mise en œuvre par une variété de techniques qui augmentent les performances. Ces techniques ont été affinées et perfectionnées au fil des ans, ce qui a permis d’exécuter plus d’instructions sur une période donnée. Ces techniques sont discutées ci-dessous.

Des flux d'instructions apparemment séquentiels peuvent souvent être parallélisés.

  • Bien qu'un programme puisse simplement consister en une série d'instructions à exécuter successivement, ces instructions, ou des parties de celles-ci, peuvent très souvent être exécutées simultanément. C'est ce qu'on appelle le parallélisme d'instruction (ILP) . Exploiter l'ILP est essentiel pour atteindre des performances élevées, et les processeurs modernes utilisent de nombreuses techniques pour le faire.

Pipelining divise les instructions en morceaux plus petits qui peuvent être exécutés en parallèle.

  • Chaque instruction peut être décomposée en une séquence d’étapes, chacune exécutée par une partie distincte du processeur. Le traitement en pipeline des instructions permet à plusieurs instructions de suivre ces étapes l'une après l'autre sans avoir à attendre que chaque instruction se termine complètement. Le pipelining permet des fréquences d'horloge plus élevées: en ayant une étape de chaque instruction terminée dans chaque cycle d'horloge, il faudrait moins de temps pour chaque cycle que si des instructions entières devaient être complétées une à la fois.

  • Le pipeline RISC classique comprend cinq étapes: la récupération d'instruction, le décodage d'instruction, l'exécution d'instruction, l'accès à la mémoire et l'écriture différée. Les processeurs modernes décomposent l'exécution en beaucoup plus d'étapes, produisant un pipeline plus profond avec plus d'étapes (et augmentant les fréquences d'horloge réalisables car chaque étape est plus petite et prend moins de temps), mais ce modèle devrait fournir une compréhension de base du fonctionnement du traitement en pipeline.

Schéma d'un pipeline d'instruction en cinq étapes
Source de l'image

Cependant, le pipeline peut présenter des risques qui doivent être résolus pour assurer une exécution correcte du programme.

  • Étant donné que différentes parties de chaque instruction sont exécutées en même temps, il est possible que des conflits se produisent qui interfèrent avec une exécution correcte. Ceux-ci s'appellent des dangers . Il existe trois types de dangers: les données, les contraintes structurelles et les contrôles.

  • Les risques de données surviennent lorsque les instructions lisent et modifient les mêmes données au même moment ou dans le mauvais ordre, ce qui peut entraîner des résultats incorrects. Les risques structurels surviennent lorsque plusieurs instructions doivent utiliser une partie particulière du processeur en même temps. Les risques de contrôle surviennent lorsqu'une instruction de branchement conditionnel est rencontrée.

  • Ces dangers peuvent être résolus de différentes manières. La solution la plus simple consiste à bloquer le pipeline, en suspendant temporairement l'exécution d'une ou de plusieurs instructions dans le pipeline pour garantir des résultats corrects. Ceci est évité autant que possible car cela réduit les performances. Pour les risques liés aux données, des techniques telles que le transfert d’opérandes sont utilisées pour réduire les blocages. Les risques de contrôle sont gérés par la prédiction de branche , ce qui nécessite un traitement spécial et est traité dans la section suivante.

La prévision de branche est utilisée pour résoudre les risques de contrôle qui peuvent perturber l’ensemble du pipeline.

  • Les risques de contrôle, qui surviennent lorsqu’on rencontre une branche conditionnelle , sont particulièrement graves. Les branches introduisent la possibilité que l'exécution se poursuive ailleurs dans le programme plutôt que simplement l'instruction suivante du flux d'instructions, selon qu'une condition donnée est vraie ou fausse.

  • Etant donné que l'instruction suivante à exécuter ne peut pas être déterminée tant que la condition de branche n'est pas évaluée, il est impossible d'insérer des instructions dans le pipeline après une branche en l'absence. Le pipeline est donc vidé ( purgé ), ce qui peut gaspiller presque autant de cycles d'horloge que d'étapes dans le pipeline. Les branches ont tendance à apparaître très souvent dans les programmes, de sorte que les risques de contrôle peuvent sérieusement affecter les performances du processeur.

  • La prévision de branche résout ce problème en devinant si une branche sera prise. La manière la plus simple de procéder consiste simplement à supposer que les branches sont toujours prises ou jamais prises. Cependant, les processeurs modernes utilisent des techniques beaucoup plus sophistiquées pour une précision de prédiction plus élevée. En substance, le processeur garde une trace des branches précédentes et utilise ces informations de différentes manières pour prédire la prochaine instruction à exécuter. Le pipeline peut ensuite être alimenté avec des instructions provenant du bon emplacement en fonction de la prédiction.

  • Bien sûr, si la prédiction est fausse, les instructions passées après la branche doivent être abandonnées, ce qui aura pour effet de purger le pipeline. En conséquence, la précision du prédicteur de branche devient de plus en plus critique à mesure que les pipelines s'allongent. Les techniques de prédiction de branche spécifiques sortent du cadre de cette réponse.

Les caches sont utilisés pour accélérer les accès à la mémoire.

  • Les processeurs modernes peuvent exécuter des instructions et traiter des données bien plus rapidement que leur accès en mémoire principale. Lorsque le processeur doit accéder à la RAM, l'exécution peut rester bloquée pendant de longues périodes jusqu'à ce que les données soient disponibles. Pour atténuer cet effet, de petites zones de mémoire haute vitesse appelées caches sont incluses dans le processeur.

  • En raison de l'espace limité disponible sur la puce du processeur, la taille des caches est très limitée. Pour tirer le meilleur parti de cette capacité limitée, les caches ne stockent que les données les plus récemment ou les plus fréquemment consultées ( localité temporelle ). Comme les accès de mémoire ont tendance à être regroupés dans des zones particulières ( de la localité spatiale ), des blocs de données près de ce qui est récemment accédé sont également stockées dans le cache. Voir: Localité de référence

  • Les caches sont également organisés en plusieurs niveaux de taille variable pour optimiser les performances, car les caches plus grands ont tendance à être plus lents que les caches plus petits. Par exemple, un processeur peut disposer d'un cache de niveau 1 (L1) d'une taille de 32 Ko seulement, tandis que son cache de niveau 3 (L3) peut avoir une taille de plusieurs mégaoctets. La taille du cache, ainsi que l' associativité du cache, qui affecte la manière dont le processeur gère le remplacement des données sur un cache complet, ont un impact significatif sur les gains de performances obtenus via un cache.

Une exécution dans le désordre réduit les blocages dus aux dangers en permettant l'exécution préalable d'instructions indépendantes.

  • Toutes les instructions d'un flux d'instructions ne dépendent pas les unes des autres. Par exemple, well a + b = cdoit être exécuté avant c + d = e, a + b = cil d + e = fest indépendant et peut être exécuté en même temps.

  • L'exécution dans le désordre profite de ce fait pour permettre l' exécution d'autres instructions indépendantes alors qu'une instruction est bloquée. Au lieu d'exiger que les instructionssoient exécutées l'une après l'autre en parallèle, un matériel de planification est ajouté pour permettre l'exécution d'instructions indépendantes dans n'importe quel ordre. Les instructions sont envoyées à une fileattente d'instruction et délivrés à la partie appropriée du processeur lorsque les données requises sont disponibles. Ainsi, les instructions bloquées dans l'attente des données d'une instruction précédente n'attachent pas d'instructions ultérieures indépendantes.

Schéma d'exécution en dérangement
Source de l'image

  • Plusieurs structures de données nouvelles et étendues sont nécessaires pour exécuter une exécution dans le désordre. La file d'instructions susmentionnée, la station de réservation , est utilisée pour conserver des instructions jusqu'à ce que les données nécessaires à l'exécution deviennent disponibles. Le tampon de nouvelle commande (ROB) est utilisé pour suivre l'état des instructions en cours, dans l'ordre dans lequel elles ont été reçues, afin que les instructions soient complétées dans le bon ordre. Un fichier de registres qui dépasse le nombre de registres fournis par l'architecture elle-même est nécessaire pour renommer les registres , ce qui permet d'éviter que des instructions autrement indépendantes ne deviennent dépendantes en raison de la nécessité de partager l'ensemble limité de registres fourni par l'architecture.

Les architectures Superscalar permettent l'exécution simultanée de plusieurs instructions d'un flux d'instructions.

  • Les techniques décrites ci-dessus ne font qu'augmenter les performances du pipeline d'instructions. Ces techniques seules ne permettent pas de terminer plus d'une instruction par cycle d'horloge. Cependant, il est souvent possible d'exécuter des instructions individuelles au sein d'un flux d'instructions en parallèle, par exemple lorsqu'elles ne dépendent pas les unes des autres (comme indiqué dans la section sur l'exécution dans le désordre ci-dessus).

  • Les architectures superscalaires tirent parti de ce parallélisme au niveau des instructions en permettant d'envoyer des instructions à plusieurs unités fonctionnelles à la fois. Le processeur peut avoir plusieurs unités fonctionnelles d'un type particulier (telles que des ALU entières) et / ou différents types d'unités fonctionnelles (telles que des unités à virgule flottante et des unités entières) auxquelles des instructions peuvent être envoyées simultanément.

  • Dans un processeur superscalaire, les instructions sont planifiées comme dans une conception en désordre, mais il existe maintenant plusieurs ports d'émission , ce qui permet d'émettre et d'exécuter différentes instructions en même temps. Les circuits de décodage d'instructions étendues permettent au processeur de lire plusieurs instructions à la fois dans chaque cycle d'horloge et de déterminer les relations entre elles. Un processeur moderne hautes performances peut programmer jusqu'à huit instructions par cycle d'horloge, en fonction de chaque instruction. C'est ainsi que les processeurs peuvent exécuter plusieurs instructions par cycle d'horloge. Voir: moteur d'exécution Haswell sur AnandTech

Schéma du moteur d'exécution Haswell
Source de l'image

  • Cependant, les architectures superscalaires sont très difficiles à concevoir et à optimiser. Vérifier les dépendances entre les instructions nécessite une logique très complexe dont la taille peut évoluer de façon exponentielle à mesure que le nombre d'instructions simultanées augmente. En outre, en fonction de l'application, il n'y a qu'un nombre limité d'instructions dans chaque flux d'instructions pouvant être exécutées en même temps. Par conséquent, les efforts pour exploiter davantage ILP souffrent de rendements décroissants.

Des instructions plus avancées sont ajoutées pour effectuer des opérations complexes en moins de temps.

  • À mesure que les budgets des transistors augmentent, il devient possible de mettre en œuvre des instructions plus avancées permettant d'effectuer des opérations complexes en une fraction du temps qu'elles prendraient autrement. Les exemples incluent les jeux d'instructions vectoriels tels que SSE et AVX qui effectuent des calculs sur plusieurs éléments de données en même temps et le jeu d'instructions AES qui accélère le cryptage et le décryptage des données.

  • Pour effectuer ces opérations complexes, les processeurs modernes utilisent des micro-opérations (μops) . Les instructions complexes sont décodées en séquences de μops, qui sont stockées dans un tampon dédié et programmées pour une exécution individuelle (dans la mesure permise par les dépendances de données). Cela donne plus de place au processeur pour exploiter ILP. Pour améliorer encore les performances, un cache µop spécial peut être utilisé pour stocker les μops récemment décodés, de sorte que les μops des instructions récemment exécutées puissent être recherchées rapidement.

  • Cependant, l'ajout de ces instructions n'améliore pas automatiquement les performances. Les nouvelles instructions peuvent augmenter les performances uniquement si une application est écrite pour les utiliser. L’adoption de ces instructions est entravée par le fait que les applications qui les utilisent ne fonctionneront pas sur les processeurs plus anciens qui ne les prennent pas en charge.


Comment ces techniques améliorent-elles les performances du processeur dans le temps?

  • Les pipelines se sont allongés au fil des années, réduisant le temps nécessaire à l'achèvement de chaque étape et permettant ainsi des fréquences d'horloge plus élevées. Cependant, entre autres choses, des pipelines plus longs augmentent la pénalité pour une prédiction de branche incorrecte, de sorte qu'un pipeline ne peut pas être trop long. Pour essayer d'atteindre des vitesses d'horloge très élevées, le processeur Pentium 4 utilisait de très longs pipelines, jusqu'à 31 étages à Prescott . Pour réduire les déficits de performances, le processeur essaierait d'exécuter des instructions même en cas d'échec, et continuerait d'essayer jusqu'à ce qu'elles réussissent . Cela entraînait une consommation d'énergie très élevée et réduisait les performances de l' hyper-threading . Les processeurs récents n'utilisent plus les pipelines aussi longtemps, en particulier depuis que la mise à l'échelle du taux d'horloge a atteint un mur;Haswell utilise un pipeline qui varie entre 14 et 19 étapes, et les architectures de faible puissance utilisent des pipelines plus courts (Intel Atom Silvermont en compte de 12 à 14).

  • La précision de la prévision de branche s'est améliorée avec des architectures plus avancées, réduisant la fréquence des purges de pipeline causées par une mauvaise prédiction et permettant à davantage d'instructions d'être exécutées simultanément. Compte tenu de la longueur des pipelines dans les processeurs actuels, cela est essentiel au maintien de performances élevées.

  • Avec l'augmentation des budgets de transistors, des caches plus grands et plus efficaces peuvent être incorporés dans le processeur, réduisant ainsi les blocages dus à l'accès à la mémoire. Les accès en mémoire peuvent nécessiter plus de 200 cycles sur les systèmes modernes, il est donc important de réduire au maximum le besoin d'accéder à la mémoire principale.

  • Les processeurs les plus récents sont mieux à même de tirer parti du protocole ILP grâce à une logique d’exécution superscalar plus avancée et à des conceptions «plus larges» qui permettent de décoder et d’exécuter simultanément plus d’instructions. L' architecture Haswell peut décoder quatre instructions et envoyer 8 micro-opérations par cycle d'horloge. L'augmentation des budgets de transistors permet d'inclure plus d'unités fonctionnelles telles que des ALU entières dans le cœur du processeur. Les structures de données clés utilisées dans les exécutions hors-service et superscalaires, telles que la station de réservation, le tampon de réapprovisionnement et le fichier de registres, sont développées dans de nouvelles conceptions, ce qui permet au processeur de rechercher une plus grande fenêtre d'instructions pour exploiter son ILP. Ceci est une force motrice majeure derrière l'augmentation des performances des processeurs actuels.

  • Des instructions plus complexes sont incluses dans les processeurs les plus récents, et un nombre croissant d'applications les utilisent pour améliorer les performances. Les progrès de la technologie du compilateur, notamment l'amélioration de la sélection des instructions et la vectorisation automatique , permettent une utilisation plus efficace de ces instructions.

  • Outre ce qui précède, une intégration plus poussée de composants précédemment externes au processeur, tels que le northbridge, le contrôleur de mémoire et les voies PCIe, réduit les temps d’entrée / sortie et la latence de la mémoire. Cela augmente le débit en réduisant les blocages causés par les retards dans l'accès aux données d'autres périphériques.

bwDraco
la source
6
Cela pourrait faire un bon article de blog.
Mokubai
L'amélioration de l'efficacité énergétique est également un facteur compte tenu du pouvoir mur.
Paul A. Clayton
Il ne s'agit plus de la rapidité de l'horloge, mais du nombre d'instructions pouvant être traitées par cycle d'horloge. Si un processeur dispose de la bande passante pour traiter 4 fois plus de données de la mémoire au cache, ce processeur est effectivement 4x plus rapide, même si son horloge est plus lente. C'est pourquoi AMD a tant de mal à faire correspondre les performances des produits Intel
Ramhound
18

La référence absolue est définitive les Intel 64 et IA-32 Architectures Logicielles Manuels de développement . Ils détaillent les changements entre les architectures et constituent une excellente ressource pour comprendre l'architecture x86.

Je vous recommande de télécharger les volumes combinés 1 à 3C (premier lien de téléchargement sur cette page). Le volume 1 chapitre 2.2 contient les informations souhaitées.


Les différences générales que je vois énumérées dans ce chapitre et qui vont des microarchitectures de Core à Nehalem / Sandy Bridge sont les suivantes:

  • prédiction de branche améliorée, récupération plus rapide d'une mauvaise prédiction
  • Technologie HyperThreading
  • contrôleur de mémoire intégré, nouvelle recherche de cache
  • traitement plus rapide des exceptions en virgule flottante (Sandy Bridge uniquement)
  • Amélioration de la bande passante LEA (Sandy Bridge uniquement)
  • Extensions d'instructions AVX (Sandy Bridge uniquement)

La liste complète se trouve dans le lien fourni ci-dessus (Vol. 1, Ch. 2.2).

Percée
la source
0

Tout ce qui a été dit précédemment est vrai, mais dans une certaine mesure. Ma réponse est courte: les processeurs de nouvelle génération sont "plus rapides" principalement parce qu'ils ont des caches plus grands et mieux organisés . C'est le facteur majeur dans les performances de l'ordinateur. Pour plus de considérations quantitatives, voir " Linux Magazine: ce qui conditionne les performances dans le HPC "

En bref, pour la plupart des applications courantes (comme dans la collection SPEC), le facteur limitant est la mémoire. Lorsqu'un calcul continu réel est en cours d'exécution, les caches sont tous chargés avec des données, mais chaque cache manquant entraîne le blocage et l'attente du canal d'exécution du processeur. Le problème est que, quel que soit le niveau de sophistication du pipeline de processeurs ou de meilleures instructions, le parallélisme au niveau des instructions reste assez limité (à l'exception de certains cas de prélecture hautement optimisés). Une fois qu'une dépendance critique est trouvée, tout parallélisme se termine par cinq à dix horloges de processeur, alors qu'il faut des centaines d'horloges de processeur pour expulser un caheline et en charger un nouveau depuis la mémoire principale. Donc, le processeur attend ne rien faire. Ce concept s’applique également aux multicœurs.

Donc, si vous voulez un PC "plus rapide", achetez-le avec un processeur disposant du plus grand cache possible.

Ale..chenski
la source
-1

Parce qu’ils améliorent énormément les instructions, chaque processeur (horloge) peut faire en incluant des unités d’exécution plus élevées (unités de calcul), ce qui permet d’améliorer le CIP, mais aussi de réduire le cache, la RAM, le décodage, la récupération des temps de latence, opérations hors service et prédiction de branche, après quoi ajouter plus de cache tout en ayant une latence plus faible. Cache de bande passante plus élevé. Ajoutez de nouvelles instructions maintenant et encore. Réduire les cycles demandés par instruction (CPI)

Les vitesses d'horloge ne sont qu'une partie des performances d'un processeur, un composant essentiel, mais malheureusement, les nœuds de la méthode ont heurté un mur pendant une dizaine d'années, rien ne peut aller au-delà de 5,0 à 5,2 GHz en dépit de la qualité du refroidissement par eau , sans recourir à la neige carbonique ni à l'azote liquide.

Mandar Shewale
la source