Revisiting Wide Superscalar Microarchitecture
Abstract
Depuis plusieurs décennies, la fréquence des processeurs à usage général n’a
cessé d’augmenter grâce aux transistors de plus en plus rapides et aux microarchitectures
avec des pipelines plus profonds. Cependant il y a environ 10 ans,
à cause des courants de fuite et de la température, la finesse de gravure des processeurs
a atteint sa limite physique. Depuis lors, la fréquence des processeurs
n’a pas augmenté. Au lieu d’augmenter la fréquence du processeur, les fabricants
ont intégré plus de coeurs sur une seule puce, agrandi la hiérarchie de caches et
amélioré l’efficacité énergétique.
Mettre plus de coeurs sur une seule puce a augmenté le rendement de la puce
et bénéficie aux applications parallèles. Cependant, avoir plus de coeurs ne suffit
pas. Il est également important d’accélérer les processeurs individuellement.
En outre, la réduction de la consommation énergétique est devenue un objectif
majeur lors de la conception d’une micro-architecture pour la haute performance.
Certaines fonctionnalités ont été introduites dans les unités superscalaires
principalement pour réduire la consommation énergétique. Un exemple de fonctionnalité
est le tampon de boucles (“loop buffer”), qui est maintenant mis en
oeuvre dans plusieurs micro-architectures superscalaires. Le but d’un tampon de
boucle est d’économiser l’énergie dans le bloc avant du microprocesseur (cache
d’instructions, prédicteur de branchements, décodeur, etc.) lors de l’exécution
d’une boucle avec un corps assez petit pour tenir dans cette mémoire tampon
spécifique.
Pendant l’exécution d’une boucle, les instructions décodées sont fournies au
bloc arrière directement depuis le tampon de boucle: le cache d’instructions, les
tables de prédiction de branchement, et la plupart de la logique du bloc avant
peuvent être en mode horloge fermée (clock gated), ce qui réduit la consommation
énergétique de la partie avant.
Si la fréquence du processeur reste constante, la seule possibilité laissée libre
pour l’amélioration des performances des applications séquentielles dans les
futurs processeurs est d’augmenter l’exploitation du parallélisme d’instructions
(ILP). Certaines améliorations des micro-architectures (e.g., une meilleure prédiction
de branchement) améliorent simultanément la performance et l’efficacité
énergétique. Cependant, améliorer l’exploitation du parallélisme d’instructions
a généralement un coût: augmentation de la surface de silicium, de la consommation
d’énergie, des efforts de conception, etc. Par conséquent, la microarchitecture
est modifiée lentement, incrément par incrément.
En effet, les fabricants de processeurs ont fait des efforts continus afin d’exploiter
davantage l’ ILP avec de meilleurs prédicteurs de branchements, de meilleurs préchargeurs
de données, de plus grandes fenêtres d’instructions, ajout de registres
physiques, et ainsi de suite. Par exemple, la micro-architecture Intel Nehalem
peut émettre 6 micro-opérations par cycle à partir d’un tampon d’exécution (issue
buffer) de 36 entrées, tandis que les plus récentes micro-architectures Intel
Haswell peuvent émettre 8 micro-opérations par cycle à partir d’un tampon de
60 entrées.
Cette thèse décrit ce que devraient être les unités superscalaires dans les 10
ans à venir et explore la possibilité d’exploiter le comportement des boucles afin
de réduire la consommation énergétique au-delà du bloc avant. Certaines propositions
ont été publiées notamment sur les accélérateurs de boucles et sur les unités
superscalaires à bloc arrière non conventionnel. Il est soutenu que la taille de la
fenêtre d’instructions peut être augmentée en combinant le regroupement (clustering)
et la spécialisation des registres d’écriture (register write specialization).
Une différence majeure avec les précédentes études sur les micro-architectures
en grappe (Figure 1) est l’utilisation de grappes larges (wide issue clusters), contrairement
aux études passées qui étaient principalement axées sur des petites
grappes (narrow issue cluster). Le passage de petites grappes à des grappes
larges n’est pas qu’un changement quantitatif, mais a aussi un impact qualitatif
sur le problème de regroupement, et en particulier sur la politique de pilotage
(steering policy). De précédentes études sur les politiques de pilotage ont montré
que, tout en réalisant un bon équilibrage de charge, la réduction des communications
inter-groupe est un problème difficile. L’une des conclusions d’une décennie
de travaux sur les politiques de pilotage est que les plus simples tel que Mod-3
génèrent une perte significative du nombre d’instructions par cycle (IPC), alors
que les politiques de pilotage qui minimisent la perte IPC sont trop complexes
pour les implémentations matérielles.
De facto, cette étude montre que considérer des grappes larges a un impact
dramatique sur les performances de Mod-N, l’une des politiques de pilotage les
plus simples. Mod-N envoie N instructions consécutives à une grappe, puis les N
prochaines à une autre grappe, et ainsi de suite de façon circulaire. Baniasadi et
Moshovos ont constaté que, pour les petites grappes, la valeur optimale de N est
en général très faible et préconisent une politique Mod-3. Il semblerait qu’après
l’article de Baniasadi et Moshovos, personne n’ait considéré la politique Mod-N
autre que Mod-3.
Force est de constater qu’avec des grappes larges, si la fenêtre d’instructions
est assez grande et compte tenu d’un délai inter-groupe réaliste, la valeur optimale
de N est beaucoup plus grande que trois, généralement plusieurs dizaines. Grâce
à la localité des données dépendantes, une politique Mod-64 conduit à beaucoup
moins de communications inter-grappe qu’une politique Mod-3. En conséquence,
Mod-64 tolère plus les retards inter-grappe que Mod-3. En outre, environ 40% des
valeurs produites par une grappe n’ont pas besoin d’être transmises à une autre
grappe, ce qui permet de réduire l’énergie dépensée dans les communications
inter-grappe.
La seconde contribution propose deux optimisations indépendantes et orthogonales
concernant la consommation énergétique et exploitant les boucles. La première
optimisation détecte les micro-opérations redondantes produisant le même
résultat à chaque itération puis supprime définitivement ces micro-opérations. La
seconde optimisation se concentre sur la diminution de l’énergie consommée des
micro-opérations de chargement (load), en détectant les situations où un chargement
n’a pas besoin d’accéder à la file d’attente des enregistrements (store queue)
ou n’a pas besoin d’accéder au cache de données de niveau 1 (DL1).
Les optimisations proposées ont un impact négligeable sur la performance de
calcul, elles concernent essentiellement la consommation énergétique.
Origin : Files produced by the author(s)
Loading...