948 RSTI - TSI – 25/2006. Architecture des ordinateurs
espionnage de bus ne permet pas de connecter efficacement plus de 4 ou 8
processeurs. Le second facteur de l’échec relatif des machines parallèles est la
pauvreté du catalogue des applications parallèles. Cette pauvreté est liée à la
difficulté d’écrire des applications parallèles, à l’échec relatif de la parallélisation
automatique et aussi au problème de la poule et de l’œuf du développement de
logiciel pour les machines parallèles.
La responsabilité des microarchitectes
Nous, les architectes de microprocesseur, avons aussi une grande responsabilité
ou plutôt un grand mérite dans cet échec relatif des machines parallèles. L’industrie
électronique a apporté les transistors et la fréquence de fonctionnement. Nous avons
trouvé comment transformer ces transistors en performance dans un
monoprocesseur. Les spécialistes de compilation ont aussi apporté une grande
contribution.
Alors que le temps d’accès à la mémoire principale reste de l’ordre de 100 ns,
que la sémantique du programme est séquentielle, et que la durée de la vie d’une
instruction (de son chargement à sa validation) est de l’ordre de 10 à 20 ns, un
processeur haute performance est capable d’exécuter jusqu’à 4 instructions par cycle
de 0,3 ns. Ceci a été rendu possible par l’utilisation de plusieurs techniques de
microarchitecture.
Ainsi, tous les processeurs utilisent l’exécution pipeline, c’est-à-dire le
recouvrement de l’exécution d’instructions successives. Le parallélisme d’instruction
est aussi utilisé systématiquement : plusieurs instructions sont chargées à chaque
cycle, puis décodées et exécutées dès lors que les instructions sont indépendantes.
Afin de permettre un débit maximum au processeur, l’exécution des instructions est
réalisée dans un ordre différent de celui du programme, mais en respectant les
dépendances des instructions.
Cependant, nourrir le cœur d’exécution en instructions impose de connaître ces
instructions, mais la cible et la direction d’un branchement ne sont connues que très
tardivement dans le pipeline. Les branchements sont donc prédits. Les instructions
sont chargées, décodées et souvent même exécutées de manière spéculative avant
même de savoir si elles seront réellement utiles. De la même manière, afin de briser
les chaînes de dépendances, les (in)dépendances entre accès mémoire sont prédites
et des formes simplifiées de prédiction de résultats d’opération sont utilisées.
Enfin, la plus grande partie des transistors du composant est utilisée pour
construire une hiérarchie de caches permettant de donner l’illusion que la mémoire
répond en quelques cycles. Des mécanismes de préchargement matériels et logiciels
sont utilisés pour encore améliorer ce comportement de la mémoire.
Cet article des Editions Lavoisier est disponible en acces libre et gratuit sur tsi.revuesonline.com