tl; dr
Des pipelines plus courts signifient des vitesses d'horloge plus rapides, mais peuvent réduire le débit. Voir aussi les réponses 2 et 3 en bas (elles sont courtes, je vous le promets).
Version plus longue:
Il y a quelques points à considérer ici:
- Toutes les instructions ne prennent pas le même temps
- Toutes les instructions ne dépendent pas de ce qui a été fait immédiatement (ou même de dix ou vingt) instructions
Un pipeline très simplifié (ce qui se passe dans les puces Intel modernes est au-delà de la complexité) comporte plusieurs étapes:
Rechercher -> Décoder -> Accès à la mémoire -> Exécuter -> Écriture -> Mise à jour du compteur de programme
À chaque -> il y a un coût de temps qui est engagé. De plus, à chaque tick (cycle d'horloge), tout se déplace d'une étape à l'autre, de sorte que votre étape la plus lente devient la vitesse de TOUTES les étapes (il faut vraiment que leur durée soit aussi semblable que possible).
Supposons que vous avez 5 instructions et que vous voulez les exécuter (photo prise sur wikipedia, ici la mise à jour de l'ordinateur n'est pas terminée). Cela ressemblerait à ceci:
Même si chaque instruction nécessite 5 cycles d'horloge, une instruction terminée sort du pipeline à chaque cycle. Si le temps nécessaire pour chaque étape est de 40 ns et de 15 ns pour les bits intermédiaires (en utilisant mon pipeline à six étages ci-dessus), il faudra 40 * 6 + 5 * 15 = 315 ns pour obtenir la première instruction.
En revanche, si je supprimais complètement le pipeline (tout en conservant le même principe), il ne faudrait que 240 ns pour obtenir la première instruction. (Cette différence de vitesse pour obtenir la "première" instruction s'appelle latence. Elle est généralement moins importante que le débit, qui correspond au nombre d'instructions par seconde).
La vraie différence cependant est que dans l'exemple en pipeline, je reçois une nouvelle instruction (après la première) toutes les 60 ns. Dans le cas d'un pipeline, il en faut 240 à chaque fois. Cela montre que les pipelines sont efficaces pour améliorer le débit.
Pour aller un peu plus loin, il semblerait qu’au stade de l’accès à la mémoire, il me faudra une unité supplémentaire (pour effectuer les calculs d’adresse). Cela signifie que si une instruction n'utilise pas l'étape meme de ce cycle, je peux faire une autre addition. Je peux donc effectuer deux étapes d’exécution (dont l’une en phase d’accès mémoire) sur un processeur en un seul clic (la planification est un cauchemar, mais n'y allons pas. En outre, la phase de mise à jour de l'ordinateur nécessitera également une unité d'addition en plus. le cas d'un saut, donc je peux faire trois additions exécuter des états en un tick). Grâce à un pipeline, il peut être conçu de sorte que deux instructions (ou plus) puissent utiliser différentes étapes (ou étapes de sauts de brouillard, etc.), permettant ainsi de gagner un temps précieux.
Notez que pour ce faire, les processeurs font beaucoup de "magie" ( exécution dans le désordre , prédiction de branche , etc.), mais cela permet à plusieurs instructions de sortir plus rapidement que sans pipeline (notez que les pipelines trop volumineux). sont très difficiles à gérer et entraînent des coûts plus élevés simplement en attendant entre les étapes). Le revers de la médaille est que si le pipeline est trop long, vous pouvez obtenir une vitesse d'horloge insensée, mais perdre l'essentiel des avantages initiaux (avoir le même type de logique pouvant exister à plusieurs endroits et être utilisé simultanément). ).
Réponse n ° 2
Les processeurs SIMD (à instructions multiples multiples) (comme la plupart des GPU) travaillent beaucoup sur de nombreuses informations, mais leur traitement prend plus de temps. La lecture de toutes les valeurs prend plus de temps (signifie une horloge plus lente, bien que ce décalage soit compensé par un bus beaucoup plus large), mais vous pouvez obtenir beaucoup plus d'instructions à la fois (instructions plus efficaces par cycle).
Réponse # 3:
Parce que vous pouvez "tricher" et allonger artificiellement le nombre de cycles de manière à pouvoir exécuter deux instructions à chaque cycle (réduire de moitié la vitesse d'horloge). Il est également possible de ne faire quelque chose que tous les deux ticks au lieu d'un (en donnant une vitesse d'horloge 2x, mais sans changer les instructions une seconde).