Passer au contenu

L’architecture Epic retrouve le parallélisme perdu

L’architecture processeur développée par Intel et HP permet de multiplier par quatre les performances en calculant toutes les variables, qu’elles soient pertinentes ou non.

En combinant les superpipelines d’instructions à dix étages (lire DM&R n?’ 423) et les architectures superscalaires (lire DM&R n?’ 425), les processeurs de dernière génération parviennent à exécuter simultanément quarante instructions. Le bon fonctionnement du système exige de longues séquences d’instructions de calcul prévisibles, pour que le processeur puisse anticiper leur lecture dans les caches, ainsi que leur décodage. Ces séquences doivent être indépendantes pour pouvoir être exécutées simultanément. Malheureusement, les instructions de saut et les lectures en mémoire font s’écrouler ce bel échafaudage. Dans un programme C classique compilé, on rencontre, en moyenne, une instruction de saut toutes les six instructions. Ce sont donc plus de trente instructions par cycle que le processeur est, en fait, dans l’incapacité de traiter.

La prédication double le nombre d’instructions

Pour résoudre les problèmes liés aux sauts, les concepteurs de l’IA-64 ont choisi… de les supprimer. Dans les premiers Risc, l’idée consistait à exécuter systématiquement les instructions suivant un saut. Cette technique, dite du branchement différé, est efficace, mais nécessite de disposer d’instructions à exécuter après le saut, ce qui n’est pas toujours le cas. Dans un saut conditionnel, par exemple, les instructions qui précèdent se contentent souvent de calculer une valeur logique (vrai ou faux) indiquant s’il faut ou non réaliser ce saut. Or, en anticipant les instructions suivant le saut, on risque d’exécuter des instructions incorrectes. On parle alors d’exécution spéculative. Si la bonne branche du saut est prise, on a gagné du temps. En cas d’échec, le résultat des instructions non pertinentes est simplement oublié. Il est possible d’aller plus loin en supprimant le saut. Cette technique est mise en ?”uvre dans IA-64. Baptisée ” prédication ” (de ” prédicat “, qui désigne un test), elle consiste à toujours exécuter les deux branches du saut, les instructions de la mauvaise branche, conditionnées par un bit de prédicat (résultat du test), restant sans effet. Ce type de technique permet de doubler le nombre d’instructions à exécuter, la moitié étant inutile. Il devient possible alors d’exécuter quatre ou cinq fois plus d’instructions.
Avant d’en arriver là, les ingénieurs ont commencé par résoudre un problème lié aux processeurs classiques. Faute d’être explicitement parallèle, ces derniers ne prennent pas en compte, ou perdent, le parallélisme existant dans les programmes. Ce parallélisme, s’il existe lors des premières étapes de compilation, est perdu lors du processus de traduction du programme en langage machine. Dans les approches classiques, même si le compilateur sait que deux instructions sont indépendantes, il doit les sérialiser, choisir un ordre d’exécution. Pour éviter cela, l’IA-64 s’inspire de l’architecture VLIW.
Dans l’architecture VLIW, chaque mot d’instruction très long, par exemple 128 bits, correspond à plusieurs instructions du programme (4 x 32 bits, en général) à exécuter simultanément. Un compilateur qui n’essayerait pas de grouper les instructions indépendantes produirait un programme peu efficace, et beaucoup plus gros que nécessaire. Ayant délégué le problème de la mise en parallèle au logiciel, les circuits d’un VLIW sont plus simples que ceux d’un superscalaire, donc potentiellement plus rapides et plus faciles à faire évoluer.

Les problèmes de compatibilité binaire des VLIW sont résolus


Avec IA-64, comme dans un VLIW, les instructions restent groupées en mots de 128 bits, baptisés clusters, mais elles ne regroupent que trois instructions au lieu des quatre pour atteindre les 128 bits requis. À savoir 3 x 41 bits plus cinq indiquant le type d’instructions. L’Itanium traite un cluster par cycle. À l’avenir, plusieurs clusters pourront être traités simultanément, combinant les avantages du VLIW et du superscalaire. L’IA-64 résout ainsi le problème de compatibilité binaire des VLIW, où le format des instructions change avec le nombre d’unités parallèles.

🔴 Pour ne manquer aucune actualité de 01net, suivez-nous sur Google Actualités et WhatsApp.


CHRISTOPHE GROSJEAN