Comment un processeur peut-il exécuter plus d'IPS que sa fréquence? [dupliquer]


14

C'est quelque chose que je n'arrive pas à comprendre. Presque tous les processeurs modernes sont capables d'exécuter plus d'instructions par seconde que sa fréquence.

Je peux comprendre pourquoi les processeurs de classe inférieure peuvent exécuter moins d'IPS que sa fréquence. Par exemple, l' ATmega328 exécute environ 16 MIPS à 16 MHz (ou du moins c'est ce que l'on m'a dit), et le Z80 exécute 0,5 MIPS à 4 MHz. Mais alors, le Pentium 4 Extreme peut exécuter plus de 9 GIPS à seulement 3,2 GHz. Cela représente environ trois instructions par cycle d'horloge!

Comment cela se fait-il et pourquoi cela n'est-il pas implémenté dans des processeurs plus petits, tels que les microcontrôleurs AVR ?

J'ai trouvé toutes mes informations, à l'exception de l'ATmega328, d' ici .


3
Jetez un coup d'œil à Wikipedia pour les mots à la mode comme pipeline, architecture super scalaire, exécution hors service, multithreading simultané, multicœur, extension vectorielle (SSE, ..., AVX), mise en cache, etc. Dans l'ensemble, la valeur de l'IPC peut être inférieure à 1,0.
Paebbels

7
Vous vouliez dire 9 GIPS pour le Pentium 4, pas MIPS, n'est-ce pas?
Calimo

5
Auto-promotion: comment un processeur peut-il fournir plus d'une instruction par cycle? a été demandé sur l'Echange de pile de génie électrique (ma réponse a été acceptée et peut-être trop élevée)
Paul A. Clayton

Je me suis toujours demandé, ne devrais-je pas voter quelque chose s'il est déjà aussi élevé que je pense qu'il devrait l'être? Ou toujours un vote positif si je pense que l'effort et la qualité d'un article méritent une récompense?
Peter Cordes du

@PeterCordes Il existe différentes philosophies de vote. Certains prétendent que «utile» est le seul critère, d'autres considèrent le mérite relatif (pour les réponses). J'ai tendance à considérer le décompte absolu des votes (les badges postaux "agréable", "bon", "excellent" impliquent que cela devrait être pris en compte) ainsi que le décompte relatif des votes (ce qui aide à répondre au classement). Étonnamment, Meta.SE ne semble pas avoir grand-chose sur ce sujet et " Comment dois-je voter? " N'a même pas de réponse!
Paul A. Clayton

Réponses:


23

Cela est dû à une combinaison de fonctionnalités des processeurs modernes.

La première chose qui contribue à un IPS élevé est le fait que les processeurs modernes disposent de plusieurs unités d'exécution qui peuvent fonctionner indépendamment. Dans l'image ci-dessous (empruntée à Wikipedia: Intel Core Microarchitecture ), vous pouvez voir en bas qu'il y a huit unités d'exécution (affichées en jaune) qui peuvent toutes exécuter des instructions simultanément. Toutes ces unités ne peuvent pas sécuriser les mêmes types d'instruction, mais au moins 5 d'entre elles peuvent effectuer une opération ALU et il y a trois unités capables SSE.

entrez la description de l'image ici

Combiner cela avec un long pipeline d'instructions qui peut efficacement empiler des instructions prêtes pour que ces unités exécutent des instructions ( hors service , si nécessaire) signifie qu'un processeur moderne peut avoir un grand nombre d'instructions à la volée à tout moment donné.

Chaque instruction peut prendre quelques cycles d'horloge à exécuter, mais si vous pouvez efficacement paralléliser leur exécution, vous pouvez vous donner un coup de pouce massif à IPS au détriment de la complexité du processeur et de la sortie thermique.

Garder ces gros pipelines pleins d'instructions nécessite également un grand cache qui peut être pré-rempli d'instructions et de données. Cela contribue à la taille de la matrice et à la quantité de chaleur produite par le processeur.

La raison pour laquelle cela n'est pas fait sur des processeurs plus petits est qu'elle augmente considérablement la quantité de logique de contrôle requise autour des cœurs de traitement, ainsi que la quantité d'espace requis et également la chaleur générée. Si vous voulez un petit processeur à faible puissance et très réactif, vous voulez un pipeline court sans trop de choses "supplémentaires" entourant les cœurs fonctionnels réels. Donc, généralement, ils minimisent le cache, le limitent à un seul de chaque type d'unité requis pour traiter les instructions et réduisent la complexité de chaque partie.

Ils pourraient rendre un petit processeur aussi complexe que un processeur plus grand et atteindre des performances similaires, mais les besoins en puissance et en refroidissement seraient alors augmentés de façon exponentielle.


Je n'ai jamais su qu'il y avait des unités d'exécution spécialisées, et plus d'une d'entre elles. Mais tout de même, ce serait bien d'avoir un Arduino superscalaire. Cela ne me dérangerait pas les exigences d'alimentation et de refroidissement si cela signifiait plus de débit. Merci d'avoir répondu.
Jaca

1
Si vous voulez un processeur superscalaire, utilisez-en un. Mais les Arduinos occupent un créneau pour les personnes qui se soucient des exigences d'alimentation et de refroidissement (ainsi que des coûts et de la complexité) des processeurs superscalaires.
David Schwartz

4

Ce n'est pas difficile à imaginer. Un cycle suffit pour commuter plusieurs milliers de transistors. Tant que les instructions sont alignées en parallèle, un cycle peut être suffisant pour toutes les exécuter.

Mieux que d'essayer de l'expliquer moi-même, voici un bon point de départ .


3

Pour être un peu plus fondamental que la réponse de Mokubai:

Les processeurs superscalaires analysent le flux d'instructions pour les dépendances de données (et autres) entre les instructions. Les instructions qui ne dépendent pas les unes des autres peuvent s'exécuter en parallèle.

Les processeurs de bureau x86 typiques récupèrent 16 ou 32B d'instructions à chaque cycle d'horloge. Les conceptions Intel depuis Core2 peuvent émettre jusqu'à 4 instructions par cycle. (Ou 5, s'il y a une comparaison et une branche qui peuvent fusionner en macro).

Voir la belle réponse de Mobukai pour les liens et les détails sur la façon dont les processeurs dans la pratique se chargent d'extraire autant de parallélisme au niveau des instructions que dans le code qu'ils exécutent.

Voir également http://www.realworldtech.com/sandy-bridge/ et des articles similaires pour d'autres architectures CPU pour une explication approfondie de ce qui se cache sous le capot.


-2

Les réponses précédentes montrent comment on obtient plus d'instructions exécutées par la définition du processeur "instruction" et on imagine que c'est réellement l'intention du questionneur.

Mais une autre source peut être que chaque "instruction" est en fait une certaine quantité de données traitées comme une instruction entrée par le processeur. Si le comptage de sa source ne compte que ce que le processeur considère comme des instructions, ce qui suit n'ajoute rien. Mais si sa source compte tout ce qu'un humain appellerait une «instruction», alors: Ajoutez que toutes les instructions ne sont pas aussi longues physiquement que toutes les autres instructions (une peut être de 12 octets, une autre peut être de 56 octets, etc.). Donc, s'il charge 64 octets de matériel à chaque cycle comme "une instruction" (ou autant d'instructions complètes que possible avant de frapper 64 octets) et que l'un contient six instructions dans ces 64 octets, alors six instructions (comme vous et moi pourrions les considérer ) sera terminé au cours de ce cycle.

Étant donné que de nombreuses instructions très basiques (notre définition "sensée") sont des restes des premiers jours avec des longueurs d'instructions de 8 octets, et que les instructions très basiques sont, par définition, peut-être utilisées de manière disproportionnée, cela irait très loin pour avoir plus "d'instructions" exécutées que la fréquence ne semble le permettre.


C'est un peu proche de la façon dont les processeurs fonctionnent réellement, mais la récupération de plusieurs insns de machine par cycle n'est qu'une partie du fonctionnement d'un processeur superscalaire. (et les longueurs d'insns moyennes ressemblent plus à 4 octets, pour x86.) Les pipelines profonds signifient que les instructions récupérées maintenant peuvent ne pas terminer leur exécution pendant 15 cycles (ou beaucoup plus longtemps si elles sont bloquées par un échec de cache, mais des instructions non dépendantes pourraient continuez à exécuter.) Votre explication ne décrit pas du tout une conception en pipeline. Pas clair non plus sur ce que vous pensez être la différence entre un 8086 8bit add al, blet un 80386 add eax, ebx.
Peter Cordes

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.