13.08.2012 Views

Fonctionnement d'un ordinateur depuis zéro

Fonctionnement d'un ordinateur depuis zéro

Fonctionnement d'un ordinateur depuis zéro

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Partie 7 : Le parallélisme d'instruction et les processeurs modernes 337/343<br />

instructions indépendantes, sous certaines conditions. Le processeur a beaucoup de travail à faire dans ces conditions. Il doit<br />

notamment vérifier quelles sont les instructions indépendantes, comme sur les processeurs superscalaires In Order. Qui plus est,<br />

il doit trouver comment répartir au mieux les instructions sur les différentes unités de calcul en modifiant l'ordre des instructions.<br />

Ce qui n'est pas simple du tout ! Mais les performances s'en ressentent : on peut exécuter un plus grand nombre d'instructions<br />

simultanées. Pour pouvoir démarrer l’exécution de plusieurs instructions simultanément en utilisant l'Out Of Order , notre<br />

processeur va devoir être un peu modifié. Voyons un peu ce que l'on va devoir changer !<br />

Instruction window<br />

Je viens à l'instant de dire que notre processeur se chargeait de charger plusieurs instructions <strong>depuis</strong> la mémoire en même temps.<br />

Sur un processeur superscalaire In Order, ces instructions peuvent très bien rester dans l'unité de décodage et y attendre un peu<br />

que les instructions précédentes soient exécutées. Le séquenceur se charge alors de tout.<br />

Mais sur un processeur Out Of Order , notre processeur va devoir accéder à chaque cycle à ces instructions mises en attente<br />

pour vérifier si elles peuvent être exécutées. Pour cela, les instructions préchargées (et éventuellement décodées) seront placées<br />

dans une sorte de mémoire tampon, qui stockera les instructions en attente de traitement. L'unité chargée de répartir les<br />

instructions et de vérifier leurs dépendances sera reliée à cette mémoire tampon et pourra donc manipuler ces instructions comme<br />

il le souhaite. Cette mémoire tampon s'appelle l'instruction window.<br />

Cette instruction window est gérée différemment suivant le processeur. On peut par exemple la remplir au fur et à mesure que les<br />

instructions sont exécutées et quittent donc celle-ci. Ou on peut attendre que celle-ci soit vide pour la remplir intégralement en<br />

une fois. Les deux façons de faire sont possibles.<br />

Vous remarquerez que j'ai placé les unités du séquenceur sur le schéma. Mais le décodeur d'instruction peut être placé de l'autre<br />

coté de l'instruction window. En fait, celles-ci peuvent se retrouver des deux cotés de l'instruction window. On peut en effet<br />

décoder les instructions avant leur passage dans l'instruction window : c'est ce qui se fait surement dans vos processeurs x86<br />

actuels et dans la majorité des processeurs utilisant la micro-programmation horizontal (pour ceux qui ont oubliés, allez voir ici :<br />

le chapitre sur la micro-architecture <strong>d'un</strong> processeur de ce tutoriel). Mais on peut aussi se débrouiller pour faire autrement, en<br />

plaçant les unités de décodage après l'instruction window.<br />

Scheduler<br />

Pour exécuter plusieurs instructions en simultané, il suffira de rajouter un circuit qui se chargera de lire le contenu de cet<br />

instruction window, et qui décidera quelles sont les instructions à exécuter. Ce circuit, le Scheduler, regardera quelles sont les<br />

instructions dans cet instruction window qui sont indépendantes et décidera alors de les répartir sur les unités de calcul<br />

inutilisées au besoin.<br />

www.siteduzero.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!