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

Contenu supprimé Contenu ajouté
mAucun résumé des modifications
Ligne 13 :
==Les 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. Auet lieubloque de bloquertout le pipeline. àMais l'étapeau d'émissionlieu ende casbloquer dele dépendancespipeline, pourquoi ne pas utiliser des instructions indépendantes dans la suite du programme ? Pour que cela fonctionne, onil est obligé de faire en sortefaut 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, chaqueappelées mémoiredes étant composéefenêtres d'entrées dédiées à uneinstruction (''instruction chacunewindows'').
 
[[File:OOO Issue.png|centre|vignette|upright=2.5|Exécution dans le désordre avec une fenêtre d'instruction]]
Ligne 19 :
===La fenêtre d'instruction===
 
Le cas le plus simple n'utilise qu'une seule mémoire tampon : la '''fenêtre d'instruction'''. LAvec elle, l'unité d'émission va alors :
* détecterdétecte les dépendances ;
* mettremet en attente les instructions qui doivent l'être ;
* répartirrépartit 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 calculaval. Ainsi, lL'é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.]]
Ligne 32 :
===Le compactage des fenêtres d’instruction===
 
À chaque cycle, les instructions décodées vont êtresont 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.
 
Autre problème : quand il faut choisir quelle instruction émettre, il y a toujours plusieurs candidats. Si on choisit mal, des instructions restent en attente trop longtemps parce que d'autres instructions plus jeunes leur passent devant. Pour éviter cela, les instructions les plus vielles, les plus anciennes, sont prioritaires. Pour cela, on peut utiliser une FIFO un peu spéciale pour la fenêtre d'instruction. Si les ajouts d'instruction se font dans l'ordre, les instructions ne quittent pas forcément la fenêtre d'instruction dans l'ordre imposé par une FIFO : les instructions restent triées dans leur ordre d'ajout, même s'il y a des vides entre elles. Dans ces condition, il est préférable que le compactage conserve l'ordre FIFO des instructions. Dans ces conditions, l'instruction la plus ancienne est celle qui est située à l'adresse la plus faible : le circuit de sélection peut donc être fabriqué avec des encodeurs, et est relativement simple.