590 likes | 704 Views
Processeurs Hautes Performances Panorama et Nouveaux Défis. André Seznec IRISA/INRIA http://www.irisa.fr/caps. Plan. Quelques données en 2000 Quel jeu d'instructions Le pipeline Le parallélisme d’instructions L’exécution spéculative La hiérarchie mémoire
E N D
Processeurs Hautes Performances Panorama et Nouveaux Défis André Seznec IRISA/INRIA http://www.irisa.fr/caps
Plan • Quelques données en 2000 • Quel jeu d'instructions • Le pipeline • Le parallélisme d’instructions • L’exécution spéculative • La hiérarchie mémoire • Le parallélisme de processus
Quelques repères (2000) • Fréquence : 400 Mhz à 1 Ghz • Durée d'une opération ALU: 1 cycle • Durée d'une opération flottante : 3 cycles • Lecture/écriture dans un registre : 1 cycle • souvent un chemin critique ... • Lecture/écriture du cache L1: 1-2 cycles • dilemme taille-associativité-temps d ’accès
Quelques repères (2000) • L'intégration : 0.25m, 0.18m, 0.125m (2001) • 10 à 20 millions de transistors de logique • Le reste en mémoire cache: jusqu'à 100 millions de transistors • 20 à 60 Watts • > 100 W bientôt • 400 à 600 broches • > 1000 bientôt
Quelques repères (sept 2000) • Processeurs x86 pour PC: • bas de gamme: 500 Mhz, <100 $ • haut de gamme: 1,1 Ghz, 700 $ • La mémoire DRAM : 1$ le Mbyte • La mémoire SRAM : 50$ le Mbyte
Compatibilité binaire • Une donnée économique : 300 000 000 de PCs ! • un nouveau jeu d'instructions: RISQUÉ !! • Le monde change (peut-être): • les processeurs enfouis, le multimédia • l'IA 64 arrive
Architecture 32 ou 64 bits • Architecture 32 bits: l'adresse virtuelle est de 32 bits • PowerPC, x86, • Architecture 64 bits : l'adresse virtuelle est de 64 bits. • MIPS III, Alpha, Ultrasparc, HP-PA 2.x, IA64 • En 2005: les jeux ? Word ? • LE MOUVEMENT EST INEXORABLE: • x86 la rupture?
Quel jeu d'instructions ? • CISC: x86 • RISC: Sparc, Mips, Alpha, PowerPC, HP-PA • EPIC: IA-64 • est-ce que c’est important ?
Les jeux d’instructions processeurs RISC • Une seule taille d'instruction : 32 bits • simplifie le décodage • adresse suivante • Architecture load/store • Modes d'adressage simples : basé et indexé • Instructions simples registre-registre • Avantage : se pipeline bien
RISC (2) • registres généraux + registres flottants • accès à la mémoire: de l'octet au mot de 64 bits ALIGNE • support limité à l’exécution spéculative: CMOV
Le jeu d’instructions CISC x86 • taille d’instruction variable • opérandes en mémoire ou en registres • code destructeur: on écrit l’un des opérandes • durée de certaines opérations imprévisibles
Le jeu d’instruction EPIC IA64 • EPIC IA64 = • RISC • + plus de registres (128 entiers, 128 flottants) • + 3 instructions codées en 128 bits • + 64 registres de prédicats • + dépendances gérées par le matériel • + (?) Advanced Loads • Idée: le compilateur gère le parallélisme d’instructions
IA 64 • L’angoisse de la page blanche !? • -Support matériel au pipeline logiciel • Rotating registers • Gestion de boucle • -Fenêtres de registres: à taille variable! • -Pas d’adressage basé • -adressage post-incrémenté • - (?) Advanced Loads
ISA: est-ce important ? • 32 ou 64 bits: • vers l’abandon (ou la mutation !) d’x86 • Les performances: • et x86 ? :=) • en flottant !! • à technologie égale ?
ISA: est-ce important (2) ? • x86: traduction en mOpérations • 4 cycles perdus ! • Ou utilisation d’un trace cache • x86 pas assez de registres flottants • Alpha 21264: 2 opérandes 1 résultat • le + performant des RISCs • Itanium: l ’IA 64 dans l’ordre • 800 Mhz en 0.18 m (pas encore disponible !) • Alpha 21164 700 Mhz 0.35m (1997)
Et alors ? • x86: + base installée, +poids d’Intel, -« doit» monter à 64 bits • IA64: + support à l ’exécution spéculative, +poids d’Intel • Alpha: + le plus « clean », -stratégie de Compaq • Sparc: = jeu d ’instructions, + SUN • Power(PC): complexe, =IBM et Motorola
L’angoisse de l’architecte • 400 mm2 de silicium • 3 générations de technologie en avant • que faire pour obtenir les performances ? • Pipeline • Parallélisme d’instruction • L’exécution spéculative • La hiérarchie mémoire • Le parallélisme de processus
Le pipeline: de plus en plus profond • Plus on stresse l'horloge, moins on en fait en un cycle. • 1 cycle = traversée d’une ALU + rebouclage • Communications intra-CPU de + en + longues: • plusieurs cycles pour traverser le composant • Le contrôle est de + en + complexe: • plus d’instructions en // • plus de spéculation
Quelques profondeurs de pipeline • 12-14 cycles sur l’Intel Pentium III • 10-12 cycles sur l’AMD Athlon • 7-9 cycles sur l’Alpha 21264 • 9 cycles sur l’UltraSparc • 10 cycles sur l’Itanium • 20 cycles sur Willlamette • Et ça ne va pas s’améliorer !!
Le //isme d’instructions • Superscalaire: • le droit de lancer les instructions en // est géré par matériel à l’exécution • Compatibilité binaire d’une génération sur l ’autre • TOUS LES PROCESSEURS SONT SUPERSCALAIRES
Le degré superscalaire • Difficile à définir: • « performance qu’on est certain de ne pas dépasser » • 4 inst / cycles sur presque tous les processeurs existants • 6 inst / cycles sur Itanium • 8 inst / cycles sur le (futur) Alpha 21464 • 16 -32 sur Alpha 21964 ?? En 2012 ? :=)
Superscalaire : les problèmes • Parallélisme d'instructions limité : 3 à 8 instructions par cycle • Le fichier de registres : • le nombre de ports augmentent • chemin critique • La fourniture des instructions aux UFs • La dépendances de données • Les branchements.
Exécution dans l’ordre ou dans le désordre • Respecter l’ordre du programme ou non: • Ah! Si toutes les latences étaient connues statiquement,… • Les « partisans » de l ’ordre: • UltraSparc 3, Itanium • Le compilateur doit faire le travail • Les « partisans » du désordre: • Alpha 21264, Pentium III, Athlon, Power (PC), HP-PA 8500
Pourquoi l’exécution dans l’ordre • simple à mettre en œuvre • moins de transistors • moins de temps de développement • horloge rapide (discutable) • pipeline moins profond • le compilateur « voit » tout: • la micro-architecture • le programme
Pourquoi l’exécution dans le désordre • l ’ILP statique est limité dans les codes non réguliers • le compilateur ne « voit » pas tout: • latences inconnues à la compilation • (in)dépendances inconnues à la compilation • pas besoin de recompiler • hum !!
Exécution dans le désordre (1) • Principe : • exécuter les instructions dès que : opérandes disponibles et unités fonctionnelles disponibles • Mise en œuvre : • une grande fenêtre d'instructions où on choisit les instructions exécutables
Exécution dans le désordre (2) • Le séquencement consiste à : • Lire les instructions en // • Marquer les dépendances • Renommer les registres • Dispatcher vers les unités fonctionnelles • Attendre .. • La gestion des dépendances prend de la place et du temps : pipeline profond
Renommage de registres: ou comment enlever les fausses dépendances • Aléas WAW et WAR sur les registres peuvent être évitées par renommage dynamique des registres.
Dépendances mémoires • pour exécuter une écriture sur la mémoire, on a besoin de la donnée à écrire • en dehors de toute information, toute lecture mémoire est potentiellement dépendante de toute écriture mémoire précédente • Solution (provisoire): • Calcul des adresses dans l'ordre du programme • Dépassement des écritures par les lectures avec détection des aléas
Dépendances mémoires (2) • Solution (actuelle): • Exécution optimiste dans le désordre • Réparation si la dépendance existe • Pb: coût de la réparation • Prochaine génération: la prédiction de dépendances sur la mémoire • Moshovos et Sohi, Micro'30, décembre 1997 • Chrysos et Emer, ISCA ’26, juin 1998
Les dépendances de contrôle • 15 à 30% des instructions sont des branchements. • La cible et la direction d'un branchement sont connues très tard dans le pipeline : • Cycle 7 sur le DEC 21264 • Cycle 11 sur l'Intel Pentium II • Cycle 18 sur Willamette • Pas question de perdre tous ces cycles !
Prédiction de branchement dynamique • Garder un historique des derniers passages et utiliser cet historique pour anticiper le branchement • Mise en œuvre: une table lue en même temps que le cache d’instructions • On prédit: • la cible et la direction des branchements • les retours de procédures • les branchements indirects
Branchements conditionnels • Plus important de prédire la direction que la cible • Schémas de prédiction de plus en plus complexes • adresse • historique des derniers branchements • global ou local • schémas hybrides
Prédiction de branchement • 1992: DEC 21064, schéma à 1 bit • 1993: Pentium, schéma à 2 bits • 1995: PentiumPro, historique local • 1998: DEC 21264, prédicteur hybride
Prédiction de branchement : tendance générale • Schémas de plus en plus complexes • Découplage de la prédiction de l'adresse et de la direction • Pile de retour pour les procédures • Support dans les jeux d'instructions pour l’exécution spéculative: • CMOV • prédicats de l ’IA64
Exécution dans le désordre:Savoir « défaire » • Mauvaise prédiction de branchement • Mauvaise anticipation d'indépendance • Interruption, exception • Valider dans l’ordre du programme • Ne rien faire de définitif dans le désordre
Savoir « défaire » • Une copie du fichier de registres est mise à jour dans l'ordre du programme • ou • Une <<carte>> registres logiques-registres physiques est sauvegardée • Les écritures en mémoire sont faites à la validation
De l'importance de la hiérarchie mémoire • Exemple : • 4 instructions/cycle, • 1 accès mémoire par cycle • 10 cycles de penalité sur le L2 • 50 cycles pour la mémoire • 2% de défauts d'instructions L1, 4% de défauts données L1, 1 référence sur 4 en défaut sur L2 • Pour exécuter 400 instructions : 395 cycles
Sauf que .. • Les caches primaires sont non-bloquants • Le cache secondaire est pipeliné • La mémoire est pipelinée • Préchargement matériel et logiciel • Latence et débit sont importants
Caches primaires: tendance générale • 1-2 cycles pour lecture ou écriture • multiples accès par cycle • non-bloquant • associatif faible degré • Restera petit ! • Une exception: HP-PA 8500
Caches secondaires : tendance générale • Il n’est plus question de s’en passer ! • Généralisation on-chip ou sur le module • Accès pipeliné • latence courte : 7-12 cycles • bus 128 bits, devrait s’élargir • temps de cycle: 1-3 cycles processeurs • La contention sur le cache L2 devient un goulot d’étranglement
La mémoire principale • Loin, trop loin du processeur: • plusieurs centaines d’instructions • Vers un abandon du modèle classique ? • mémoire sur le bus système: • cohérence par snooping • bus mémoire + bus système • cohérence par directory
Que faire avec un milliard de transistors ou plus? • IRAM: le processeur et sa mémoire • monoprocesseur + exécution spéculative • Le parallélisme de processus: • multiprocesseur à mémoire partagée • processeur SMT
IRAM • le processeur et sa mémoire sur un même composant • bande passante mémoire énorme à un coût limité • Une fausse bonne idée • Consommation mémoire des applications augmente • Extensibilité ? • La solution pour certaines applications enfouies
Un monoprocesseur + exécution spéculative • superscalaire 16 ou 32 voies • hyperspéculation: • branchements, dépendances, données .. • Les défis: • la qualité de la prédiction • les temps de communication sur le composant • la contention sur les structures: • caches , registres, ...
Le //isme de processus:à la croisée des chemins • Le parallélisme « gros grain » arrive sur le composant • Un multiprocesseur on-chip ? • IBM Power 4 ( fin 2001) • Simultaneous Multithreading ? • Compaq Alpha 21464 ( 2003)
Un multiprocesseur on-chip • Peut-être la solution, mais .. • Où sont les applications? • La bande passante sur la mémoire? • Et la performance sur un processus ? • Manquons-nous d'imagination à ce point?
multiprocesseur on-chip:IBM Power 4 (2001) • Marché visé: les serveurs • 2 processeurs superscalaire 4 voies sur un composant: • cache secondaire partagé • 4 composants sur un même MCM (multichip module) • bande passante énorme sur le MCM