« Fonctionnement d'un ordinateur/Exécution dans le désordre » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 12 :
[[File:Pipeline d'un processeur utilisant le scoreboarding.png|centre|vignette|upright=2|Pipeline d'un processeur utilisant le scoreboarding.]]
 
==FenêtresLes fenêtres d’instruction==
 
Le scoreboard est capable de fournir des gains proches de 10 à 30 % suivant les programmes. Mais celui-ci a toutefois un léger défaut : si deux instructions consécutives ont une dépendance structurelle ou WAW, l'instruction attend dans l'étage d'émission. Au lieu de bloquer le pipeline à l'étape d'émission en cas de dépendances, pourquoi ne pas utiliser des instructions indépendantes dans la suite du programme ? Pour que cela fonctionne, on est obligé de faire en sorte que l'étage d'émission mette en attente les instructions, sans bloquer le pipeline (chose que fait le scoreboard). Généralement, cette mise en attente se fait en utilisant une ou plusieurs mémoires spécialisées, chaque mémoire étant composée d'entrées dédiées à une instruction chacune.
 
[[File:OOO Issue.png|centre|vignette|upright=2|OOO Issue]]
 
===FenêtreLa fenêtre d'instruction===
 
Le cas le plus simple n'utilise qu'une seule mémoire tampon : la '''fenêtre d'instruction'''. L'unité d'émission va alors :
 
* détecter les dépendances ;
* mettre en attente les instructions qui doivent l'être ;
* répartir les instructions sur les unités de calcul.
 
[[File:Fenêtre d'instruction.png|centre|vignette|upright=2|Fenêtre d'instruction.]]
 
Sur certains processeurs, la répartition des instructions sur les unités de calcul est prise en charge par un circuit séparé de l'étage d'émission, les deux étant séparés par une mémoire tampon. On doit ainsi utiliser plusieurs fenêtres d'instruction, souvent une par unité de calcul. Ainsi, l'émission se contente de répartir les instructions sur les unités de calcul, la détection des dépendances étant prise en charge par les fenêtres d'instruction. Ces fenêtres d'instruction spécialisées sont parfois appelées des '''stations de réservation'''. Le premier avantage des stations de réservation est qu'elles sont plus petites qu'une grosse fenêtre d'instruction. L'autre avantage, c'est qu'il est possible de démarrer l'exécution de plusieurs instructions simultanément : une instruction par station de réservation, contre une par fenêtre d'instruction. Mais les stations de réservation sont souvent sous-utilisées, partiellement remplies, contrairement aux fenêtres d'instruction. Dans ce qui va suivre, j'utiliserai le terme « fenêtre d'instruction » pour parler des stations de réservation, ainsi que de la fenêtre d'instruction.
 
[[File:Processeur avec plusieurs fenêtres d'instruction.png|centre|vignette|upright=2|Processeur avec plusieurs fenêtres d'instruction.]]
 
===Le compactage des fenêtres d’instruction===
===Compactage===
 
À chaque cycle, les instructions décodées vont être ajoutées dans la fenêtre d'instruction, dans des entrées vides. Vu que les instructions quittent celle-ci dans le désordre, ces vides sont dispersés dans la fenêtre d'instruction, ce qui pose problème pour déterminer où placer les nouvelles instructions. La solution la plus triviale consiste à conserver une liste des vides, mise à jour à chaque insertion ou émission d'instruction. Une autre solution consiste à éliminer les vides en compactant la fenêtre d'instruction à chaque cycle d'horloge. Des circuits se chargent de détecter les vides et de regrouper les instructions en un unique bloc. Il faut signaler que certaines processeurs arrivent à se passer de cette étape de compactage, mais au prix de fenêtres d'instruction nettement plus complexes.