Pipeline (architecture des processeurs)
Le pipeline d'instructions est une technique utilisée dans la conception des microprocesseurs, microcontrôleurs et unités centrales modernes pour augmenter leur débit d'instructions (le nombre d'instructions pouvant être exécutées dans une unité…
Le pipeline d'instructions est une technique utilisée dans la conception des microprocesseurs, microcontrôleurs et unités centrales modernes pour augmenter leur débit d'instructions (le nombre d'instructions pouvant être exécutées dans une unité de temps).
L'idée principale est de diviser (appelé "split") le traitement d'une instruction du CPU, tel que défini par le microcode de l'instruction, en une série d'étapes indépendantes de micro-opérations (également appelées "microinstructions", "micro-op" ou "µop"), avec un stockage à la fin de chaque étape. Cela permet à la logique de contrôle des unités centrales de traiter les instructions à la vitesse de traitement de l'étape la plus lente, ce qui est beaucoup plus rapide que le temps nécessaire pour traiter l'instruction en une seule étape.
Le terme pipeline fait référence au fait que chaque étape porte une microinstruction unique (comme une goutte d'eau), et que chaque étape est liée à une autre étape (analogie ; similaire aux conduites d'eau).
La plupart des processeurs modernes sont commandés par une horloge. L'unité centrale est constituée en interne de logique et de mémoire (flip-flops). Lorsque le signal de l'horloge arrive, les flip-flops stockent leur nouvelle valeur ; la logique a alors besoin d'un certain temps pour décoder les nouvelles valeurs des flip-flops. Puis l'impulsion d'horloge suivante arrive et les flip-flops stockent d'autres valeurs, et ainsi de suite. En décomposant la logique en plus petits morceaux et en insérant des bascules entre les morceaux de logique, le temps requis par la logique (pour décoder les valeurs jusqu'à la génération de sorties valides en fonction de ces valeurs) est réduit. De cette façon, la période d'horloge peut être réduite.
Par exemple, le pipeline RISC est divisé en cinq étapes avec un ensemble de flip-flops entre chaque étape comme suit :
- Instruction de recherche
- Instruction de décodage et de recherche de registre
- Exécuter
- Accès à la mémoire
- S'inscrire et se rétracter
Les processeurs à tuyauterie sont constitués en interne d'étages (modules) qui peuvent fonctionner de manière semi-indépendante sur des microinstructions séparées. Chaque étage est relié par des bascules à l'étage suivant (comme une "chaîne") de sorte que la sortie de l'étage est une entrée pour un autre étage jusqu'à ce que le travail de traitement des instructions soit terminé. Une telle organisation des modules internes du processeur réduit le temps de traitement global de l'instruction.
Une architecture sans pipeline n'est pas aussi efficace car certains modules de l'unité centrale sont inactifs alors qu'un autre module est actif pendant le cycle d'instruction. Le pipe-line ne supprime pas complètement le temps d'inactivité d'une unité centrale en pipe-line, mais le fait de faire fonctionner les modules de l'unité centrale en parallèle augmente le débit des instructions.
On dit qu'un pipeline d'instructions est entièrement pipeliné s'il peut accepter une nouvelle instruction à chaque cycle d'horloge. Un pipeline qui n'est pas entièrement pipeliné a des cycles d'attente qui retardent la progression du pipeline.
Galerie d’images
1 Image
Avantages et inconvénients de la canalisation
Avantages de la canalisation :
- Le temps de cycle du processeur est réduit, ce qui augmente le débit d'instructions. Le pipeline ne réduit pas le temps nécessaire pour achever une instruction ; il augmente au contraire le nombre d'instructions pouvant être traitées simultanément ("en une fois") et réduit le délai entre les instructions achevées (appelé "débit").
Plus un processeur a d'étapes de pipeline, plus il peut traiter d'instructions "en même temps" et moins il y a de retard entre les instructions terminées. Chaque microprocesseur universel prédominant fabriqué aujourd'hui utilise au moins 2 étapes de pipeline jusqu'à 30 ou 40 étapes. - Si l'on utilise le pipelining, l'unité arithmétique et logique du CPU peut être conçue plus rapidement, mais sera plus complexe.
- En théorie, le pipeline augmente les performances sur un noyau non pélagique d'un facteur du nombre d'étages (en supposant que la fréquence d'horloge augmente également du même facteur) et le code est idéal pour l'exécution du pipeline.
- Les processeurs en pipeline fonctionnent généralement à une fréquence d'horloge plus élevée que celle de la RAM (à partir des technologies de 2008, les RAM fonctionnent à une fréquence plus basse que celle des processeurs), ce qui augmente les performances globales des ordinateurs.
Inconvénients de la canalisation :
Le pipe-line présente de nombreux inconvénients, bien que les concepteurs d'unités centrales et de compilateurs utilisent de nombreuses techniques pour surmonter la plupart d'entre eux ; voici une liste des inconvénients les plus courants :
- La conception d'un processeur non îloté est plus simple et moins coûteuse à fabriquer, le processeur non îloté n'exécute qu'une seule instruction à la fois. Cela permet d'éviter les retards de branche (dans le Pipelining, chaque branche est retardée) ainsi que les problèmes lorsque des instructions en série sont exécutées simultanément.
- Dans un processeur en pipeline, l'insertion de flip-flops entre les modules augmente la latence des instructions par rapport à un processeur non en pipeline.
- Un processeur non îloté aura un débit d'instructions défini. Les performances d'un processeur en pipeline sont beaucoup plus difficiles à prévoir et peuvent varier considérablement selon les programmes.
- De nombreuses conceptions comprennent des pipelines de 7, 10, 20, 31 étages et même plus ; un inconvénient d'un long pipeline est que lorsqu'un programme se ramifie, il doit être entièrement rincé (dégagé). Le débit plus élevé des pipelines est insuffisant lorsque le code exécuté contient de nombreuses branches : le processeur ne peut pas savoir à l'avance où lire l'instruction suivante, et doit attendre que l'instruction de branche se termine, laissant le pipeline derrière lui vide. Cet inconvénient peut être réduit en prédisant si l'instruction de branchement conditionnel se branchera en fonction de l'activité précédente. Une fois le branchement résolu, l'instruction suivante doit parcourir tout le pipeline avant que son résultat ne soit disponible et que le processeur ne reprenne son "travail". Dans ces cas extrêmes, les performances d'un processeur en pipeline peuvent être pires que celles d'un processeur non en pipeline.
- Malheureusement, toutes les instructions ne sont pas indépendantes. Dans un pipeline simple, l'exécution d'une instruction peut nécessiter 5 étapes. Pour fonctionner à plein régime, ce pipeline devra exécuter 4 instructions indépendantes ultérieures pendant que la première se termine. Chacune de ces 4 instructions peut dépendre de la sortie de la première instruction, ce qui fait que la logique de contrôle du pipeline attend et insère un blocage ou un cycle d'horloge gaspillé dans le pipeline jusqu'à ce que la dépendance soit résolue. Heureusement, des techniques telles que la transmission peuvent réduire considérablement les cas où un blocage est nécessaire.
- Les programmes auto-modifiants peuvent ne pas s'exécuter correctement sur une architecture en pipeline lorsque les instructions modifiées sont proches des instructions en cours d'exécution. Cela peut être dû au fait que les instructions peuvent déjà se trouver dans la file d'attente d'entrée de Prefetch, de sorte que la modification peut ne pas prendre effet pour l'exécution prochaine des instructions. Les caches d'instructions aggravent encore le problème.
- Les risques : Lorsqu'un programmeur (ou un compilateur) écrit du code en assembleur, il suppose généralement que chaque instruction est exécutée avant que l'instruction suivante ne soit exécutée. Lorsque cette hypothèse n'est pas validée par le pipeline et qu'elle entraîne un comportement incorrect du programme, la situation est connue sous le nom de "danger". Il existe
diverses techniques pour résoudre les dangers ou contourner les problèmes, comme l'avance et le retard (en insérant un blocage ou un cycle d'horloge perdu).
Exemples
Pipeline générique
À droite, un pipeline générique à quatre étages :
- Allez chercher
- Décoder
- Exécuter
- Retour
La case grise supérieure est la liste des instructions en attente d'exécution ; la case grise inférieure est la liste des instructions qui ont été exécutées ; et la case blanche centrale est le pipeline.
L'exécution est la suivante :
| Heure | Exécution |
| 0 | Quatre instructions sont en attente d'exécution |
| 1 |
|
| 2 |
|
| 3 |
|
| 4 |
|
| 5 |
|
| 6 |
|
| 7 |
|
| 8 |
|
| 9 | Toutes les instructions sont exécutées |
Bulle
Lorsqu'il y a un "hoquet" (interruption) dans l'exécution, une "bulle" se crée dans le pipeline dans laquelle rien d'utile ne se produit. Dans le cycle 2, la récupération de l'instruction violette est retardée et l'étape de décodage du cycle 3 contient maintenant une bulle. Tout ce qui se trouve derrière l'instruction violette est également retardé, mais tout ce qui se trouve devant l'instruction violette continue à être exécuté.
Il est clair que par rapport à l'exécution ci-dessus, la bulle donne un temps d'exécution total de 8 ticks d'horloge au lieu de 7.
Les bulles sont comme des stalles (retards), dans lesquelles rien d'utile ne se passe pour la récupération, le décodage, l'exécution et la reprise. C'est comme un code NOP (abréviation de No OPeration).
Exemple 1
Une instruction typique pour ajouter deux nombres pourrait être ADD A, B, C, qui additionne les valeurs trouvées dans les emplacements mémoire A et B, puis place le résultat dans l'emplacement mémoire C. Dans un processeur en pipeline, le contrôleur de pipeline diviserait cela en une série de tâches similaires :
Les emplacements "R1" et "R2" sont des registres dans l'unité centrale. Les valeurs stockées dans les emplacements mémoire "A" et "B" sont chargées (copiées) dans ces registres, puis ajoutées, et le résultat est stocké dans un emplacement mémoire "C".
Dans cet exemple, le pipeline est constitué de trois étapes : chargement, exécution et stockage. Chacune de ces étapes est appelée "étapes du pipeline".
Sur un processeur non îloté, une seule étape peut fonctionner à la fois, de sorte que l'instruction entière doit être terminée avant que l'instruction suivante puisse commencer. Sur un processeur en pipeline, toutes les étapes peuvent travailler en même temps sur des instructions différentes. Ainsi, lorsque cette instruction est au stade de l'exécution, une deuxième instruction sera au stade du décodage et une troisième au stade de la récupération.
Exemple 2
Pour mieux comprendre le concept, nous pouvons examiner un pipeline théorique en trois étapes :
| Scène | Description |
| Charger | Lire les instructions de mémoire |
| Exécuter | Exécution de l'instruction |
| Boutique | Stocker le résultat dans la mémoire et/ou les registres |
et une liste de pseudo-codes d'assemblage à exécuter :
C'est ainsi qu'il serait exécuté :
| Horloge 1 | ||
| Charger | Exécuter | Boutique |
| CHARGER |
|
|
L'instruction LOAD est récupérée en mémoire.
| Horloge 2 | ||
| Charger | Exécuter | Boutique |
| MOVE | CHARGER |
|
L'instruction LOAD est exécutée, tandis que l'instruction MOVE est récupérée en mémoire.
| Horloge 3 | ||
| Charger | Exécuter | Boutique |
| AJOUTER | MOVE | CHARGER |
L'instruction LOAD est en phase de stockage, où son résultat (le nombre 40) sera stocké dans le registre A. Entre-temps, l'instruction MOVE est en cours d'exécution. Comme elle doit déplacer le contenu de A vers B, elle doit attendre la fin de l'instruction LOAD.
| Horloge 4 | ||
| Charger | Exécuter | Boutique |
| STORE | AJOUTER | MOVE |
L'instruction STORE est chargée, tandis que l'instruction MOVE se termine et que l'instruction ADD est en train de calculer.
Et ainsi de suite. Notez que, parfois, une instruction dépendra du résultat d'une autre (comme notre exemple MOVE). Lorsque plusieurs instructions font référence à un emplacement particulier pour un opérande, soit en le lisant (en entrée) soit en l'écrivant (en sortie), l'exécution de ces instructions dans un ordre différent de l'ordre original du programme peut conduire à la situation de danger (mentionnée ci-dessus).
Pages connexes
- Pipeline (informatique)
- Le calcul parallèle
- Parallélisme au niveau de l'enseignement
Questions et réponses
Q : Qu'est-ce que le pipelining d'instructions ?
R : Le pipelining d'instructions est une technique utilisée dans la conception des microprocesseurs, microcontrôleurs et CPU modernes pour augmenter le débit d'instructions en divisant le traitement d'une instruction CPU en une série d'étapes indépendantes avec un stockage à la fin de chaque étape.
Q : Comment fonctionne le pipelining ?
R : Le pipelining fonctionne en décomposant la logique en plus petits morceaux et en insérant des flip flops entre les morceaux de logique, ce qui réduit le temps nécessaire à la logique pour décoder les valeurs jusqu'à générer des sorties valides en fonction de ces valeurs. Cela permet des périodes d'horloge plus rapides.
Q : Quels sont quelques exemples de pipelines ?
R : Un exemple de pipeline est le pipeline RISC, qui est divisé en cinq étapes avec un ensemble de flip flops entre chaque étape.
Q : Comment le pipelining augmente-t-il le débit d'instructions ?
R : Le pipelining augmente le débit d'instructions en permettant aux modules du CPU de travailler en parallèle, ce qui réduit le temps d'inactivité pendant un cycle d'instruction et augmente le temps de traitement global.
Q : Tous les pipelines sont-ils entièrement pipelinés ?
R : Non, tous les pipelines ne sont pas entièrement pipelinés ; certains pipelines ont des cycles d'attente qui retardent la progression dans le pipeline.
Articles liés
Auteur
AlegsaOnline.com Pipeline (architecture des processeurs) Leandro Alegsa
URL: https://fr.alegsaonline.com/art/47500

