![]()
Précédent : Panorama Remonter :
Fondements
scientifiques Suivant : Simulation de processeurs et
collecte
Mots clés : prédiction de branchement, exécution spéculative .
Pour atteindre un niveau de performance élevé sur les processeurs superscalaires de large degré qui devraient apparaitre vers l'an 2000, il est nécessaire de charger des instructions non-contiguës en mémoire, mais aussi de rompre les chaînes de dépendances entre instructions par la prédiction de valeurs.
Les pipelines d'exécution des processeurs sont de plus en plus longs: 12 cycles sur l'Intel Pentium II. Les processeurs sont capables d'exécuter plusieurs instructions par cycle. Le séquencement des instructions devrait être interrompu à chaque instruction de branchement en attendant le calcul effectif de la condition et/ou de la cible: hors sur beaucoup d'applications, plus d'une instruction sur 5 ou 6 est un branchement.
Sur tous les processeurs superscalaires actuels, des
mécanismes de prédictions de branchement sont mis en
uvre pour continuer le séquencement spéculatif des
instructions après un branchement sans attendre sa résolution: la
cible et la direction du branchement sont prédites. En cas de
mauvaise prédiction, les instructions séquencées (et parfois même
déjà exécutées) doivent être annulées et le séquencement est
repris sur le chemin réellement utilisé par l'application. Étant
donné la très lourde pénalité payée en cas de mauvaise prédiction
de branchement, la performance effective d'un processeur dépend
de la précision de la prédiction. Des schémas de prédiction de
plus en plus sophistiqués sont donc mis en
uvre dans les processeurs. Parmi les informations utilisées
pour prédire un branchement, on peut citer l'adresse du
branchement, l'historique des derniers branchements exécutés,
l'historique des derniers passages dans ce branchement [Yeh93], ... Cependant les recherches
continuent dans plusieurs directions, parmi lesquelles on peut
citer, la réduction des interférences sur les tables de
prédictions de branchement [[8]] et la prédiction des
branchements indirects [CHP97].
Les processeurs actuels exécutent les instructions de manière spéculative et dans le désordre. La génération actuelle de processeurs peut exécuter jusqu'à 4, parfois 6, instructions par cycle. Il est d'ores et déjà possible d'implémenter des processeurs pouvant lancer 10 voire 16 instructions par cycle. Cependant l'obtention de telles performances ne peut pas être envisagée en utilisant les mécanismes de séquencement actuels: seules des instructions consécutives sont chargées, alors que sur beaucoup d'applications, plus d'une instruction sur 5 ou 6 est un branchement. Pour permettre de réduire ce goulôt d'étranglement, il est nécessaire de prédire plusieurs branchements par cycle [[9]].
Une autre difficulté surgit avec la possibilité d'exécuter un grand nombre d'instructions indépendantes en parallèle. Souvent les applications n'exhibent pas ces instructions indépendantes: or l'exécution d'un programme doit respecter les dépendances entre les instructions. La prédiction de branchement est un premier accroc à ce respect des dépendances: toute instruction postérieure à un branchement est dépendante de ce branchement; cette dépendance est «cassée» par la prédiction, mais les instructions sont validées dans l'ordre du programme. Récemment, il a été noté que le même principe pouvait être appliqué pour aussi «casser» les dépendances de données sur les programmes: on peut ainsi prédire le résultat d'une instruction ou d'un calcul d'adresse [LS96,SVS96].