Microprocesseurs Hautes Performances

Slides:



Advertisements
Présentations similaires
IRISA/INRIA. Processeurs Hautes Performances Panorama et Nouveaux Défis André Seznec IRISA/INRIA
Advertisements

1 Microprocesseurs Hautes Performances André Seznec IRISA/INRIA
1 Les bases de données Séance 7 Les fonctions avancées : Opérateurs ensemblistes, Sous-requêtes et transactions.
Projets et Programmes (p&p) Un nouveau concept pour définir les modalités de mise en œuvre FORMATION LAF – JUIN 2009.
CHAftITREI ARCHITECTURE de BASE. Modèle de Von Neumann Langage d’assemblage1 John Von Neumann est à l'origine d'un modèle de machine universelle de traitement.
Fonctionnement interne d'un routeur (kurose p ) Eugen Dedu IUT Belfort-Montbéliard, R&T1, France avril 2009.
Le moniteur Le clavier L'unité centrale (l'ordinateur proprement dit) Qui sont des périphériques DEFINITIONS DE BASE.
DIAGRAMME DE DEPLOIEMENT Exposé de: MBALLA MEKONGO Michèle MBOUNA FEUZE William SIEYADJEU Alex Lionel CHOPGWE Leonard NDUMATE Landry TIDJON Lionel.
ARCHITECTURE RESEAUX.
Le Mouvement Directionnel
appareil de mesure (pHmètre P310 Chauvin-Arnoux) Pierre DIEUMEGARD,
La technologie des mémoires
Ch3 : Les Processeurs Superscalairs
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
QUALITE ET PERFORMANCE
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Algorithme et programmation
Algorithmique demander jeu du pendu.
Reprise du cours ( ) Aujourd’hui :
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Evolution des machines Introduction à l’ARDUINO
L’Instruction de Test Alternatif
Les composants informatiques
Javadoc et débogueur Semaine 03 Version A16.
Architecture de machines Le microprocesseur
Activités algorithmiques
Master Réseaux et Systèmes Distribués (RSD) Algorithmique des systèmes
Plans d’expériences: Plans factoriels
La technique du pipeline
Semaine #4 INF130 par Frédérick Henri.
La question de ce module
Instructions et micro-instructions
Notion De Gestion De Bases De Données
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
Présentation de la carte graphique
Architectures parallèles
Architecture de machines Le microprocesseur Cours
Concentration, lecture et mémorisation
Formation au Numérique Codage et programmation dans les nouveaux programmes Romorantin, le 23 janvier 2018.
Bus et adressage GIF-1001: Ordinateurs: Structure et Applications
Composantes principales des ordinateurs
Exercice : le jeu. Vous devez concevoir l’algorithme permettant de jouer avec votre calculatrice : elle détermine au hasard un nombre caché entier entre.
Architectures des processeurs superscalaires, VLIW et optimisations
Cours Microprocesseur Par Philippe Bancquart ¨
La Station de pompage.
Mémoire: cache, RAM, disque dur
Révision du format des données
Assembleur, Compilateur et Éditeur de Liens
NUMERATION et REPRESENTATION DES NOMBRES
B.Shishedjiev - Informatique
Introduction aux microprocesseurs
Module 13 : Implémentation de la protection contre les sinistres
Architecture matérielle des ordinateurs
Les Sciences Physiques
7 Contraintes d’intégrité en SQL
Gei 431 Architecture des ordinateurs II – Frédéric Mailhot Introduction Objectifs du cours Évaluation Références Matière du cours: - Techniques modernes.
Bilan de projet pour [Nom du projet]
Un Mécanisme d‘Adaptation Guidé par le Contexte en Utilisant une Représentation par Objets Manuele Kirsch Pinheiro Laboratoire LSR – IMAG, Équipe SIGMA.
ENSEIGNER L’ALGORITHMIQUE ET LA PROGRAMMATION AU COLLÈGE
Opérateurs et fonctions arithmétiques Opérateurs de relation Opérateurs logiques Cours 02.
Points de vue et sémantiques ad hoc
Le D.R.P. - Quelques jours de fonctionnement
Design, innovation et créativité
Chapter 11: Récursivité Java Software Solutions Second Edition
Evolution des machines Introduction au MSP-EXP432
Pourquoi MIPS Assembler ?
Backup des Postes de Travail
Modélisation des SI et de la connaissance
Traitement de TEXTE 2 Stage – Semaine 3.
Séquence 1:Analyse du système d’information comptable
Transcription de la présentation:

Microprocesseurs Hautes Performances André Seznec IRISA/INRIA http://www.irisa.fr/caps

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?

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 demain, le parallélisme de processus

Le pipeline

Principe de base Faire se chevaucher l'exécution de plusieurs instructions. On décompose l'exécution d'une instruction en plusieurs phases successives

Pipeline (2) On ajuste les phases pour qu'elles aient la même durée : 1 cycle de la machine L'exécution d'une instruction est allongée Difficile de découper en phases de même durée Le découpage entraine un surcout : traversée de buffers Mais une instruction peut être lancée tous les cycles.

Exemples de pipeline MIPS R3000 : MIPS R4000 :

Exemples de pipeline (2) DEC 21064 : 2 étages d’exécution Cypress Sparc étages EX et MEM confondus

Le débit d'un pipeline Hypothèse on peut séquencer une instruction par cycle débit maximum d'1 instruction par cycle Exemple : 5 étages Sur une machine non pipeline : 3 ns, 4 ns, 3 ns , 2 ns, 4 ns Durée totale = 16 ns Sur une machine pipeline : cycle 5 ns = 4 ns + 1 ns (pour les buffers) Speed-up potentiel : 3.2 Limite en multipliant les étages du pipeline : overhead des buffers

Attention aux pipelines longs Sur les entiers : multiplication : 5-10 cycles division : 20-50 cycles Sur les flottants : Addition : 2-5 cycles Multiplication: 2-6 cycles Division: 10-50 cycles

Activités dans le pipeline du MIPS R4000 1. IF (Instruction Fetch). Lecture du cache instructions et lecture du TLB 2. IS (Instruction Fetch, Second Half) Fin de lecture du TLB et du cache instructions 3. RF (Register File): Décodage de línstruction , lecture des opérandes, vérification des étiquettes 4.EX (Exécution). Exécution des opérations registre-registre ou calcul de l’adresse virtuelle pour les Load/Store ou calcul de l'adresse virtuelle de la cible pour les branchements

Activités dans le pipeline du R4000 5] DF (Data Fetch, First Half): accès au cache de données, et parallèlement, et traduction de l'adresse virtuelle en adresse physique 6. DS (Data Fetch, Second Half): fin de l'accès au cache et de la traduction d'adresses. 7. TC (Tag Check) : comparaison de l'étiquette du cache avec l'adresse physique du TLB pour déterminer si il y a eu un défaut de cache ou non. 8. WB (Write Back) : Ecriture du résultat de l'instruction dans un registre (s'il y a lieu).

Les aléas dans les processeurs pipelines Parfois (souvent), l'instruction suivante ne peut pas être exécutée tout de suite : Ces situations sont appelées aléas Aléas de structure : conflits de ressources Aléas de données : dépendances de données Aléas de contrôle : les branchements

Que faire sur les aléas? Gestion par matériel : détecter les aléas et les éviter en retardant l'avancée de l'instruction amont en attendant la résolution de l'aléa. Gestion par logiciel : retarder les instructions pour éviter les dépendances, ..

De l'avantage d'un jeu d'instruction régulier pour le pipeline Petite digression: De l'avantage d'un jeu d'instruction régulier pour le pipeline

RISC versus CISC Entre 1960 et 1980, la complexité des opérations qui pouvaient être implémentées en matériel a augmenté les jeux d'instructions ont suivi le même chemin.

Complex Instruction Set Computing (CISC). But: une instruction machine = une instruction langage de haut niveau VAX, Intel 80x86, Motorola 680x0, IBM 360 sur le VAX, une opération arithmétique (2 opérandes, un résultat) : opérandes et résultat soit en registre, soit en mémoire 8 cas Le calcul de l'adresse pour chacun des accès à la mémoire peut être : absolu : adresse codée dans l'instruction basé : registre + immédiat indexé : registre + registre indirect : lue en mémoire

CISC (2) Codage compact des applications: peu demandeur en lecture sur les instructions Tailles d'instructions variables (1 à 15 octets sur le xxx86) Temps d'exécution variables et occupation chaotique des ressources: une même instruction peut occuper 6 fois la mémoire sur le VAX.

De la difficulté du pipeline sur les CISC Taille variable des instructions pour connaître l'adresse de l'instruction suivante, il faut d'abord décoder l'instruction courante. Le séquencement des instructions entraîne de nombreux conflits de ressource : plusieurs utilisations de la même unité fonctionnelles Pipeline difficile, mais pas impossible : Le coût de la logique de contrôle est relativement important

RISC : Reduced Instruction Set Computer Concept mis en forme par Patterson et Ditzel (1980), préexistait bien avant. Principes : Une seule taille d'instruction : 32 bits en général , simplifie le décodage Architecture load/store : pas d'opérations avec opérandes ou résultat en mémoire Modes d'adressage simples : basé et indexé Instructions simples registre-registre : opérandes dans les registres et résultat dans les registres

RISC (2) Code relativement volumineux : C= A+B : load A,R2 load B,R3 add R3, R2, R1 pour une même application: 1.5 à 2 fois le volume que pour un CISC. Avantage : se pipeline bien ! Lecture de l'instruction et décodage en temps constant. Occupation d'une unité fonctionnelle à un instant précis

La saga RISC 1980 : Patterson et Ditzel formalisent le concept 1982 : IBM 801, RISC I et RISC II 1987-88 : MIPS R2000, Sparc 1990 : IBM Power, Intel i860 1992- : DEC Alpha, TI Supersparc, MIPS R4000, R8000 et R10000, HP8000, Ultrasparc , .. Intel xxx86 fait de la résistance !

Jeux d'instructions des processeurs RISC Principes communs Une seule taille d'instruction : 32 bits en général simplifie le décodage et le calcul de l'anticipation de l'adresse suivante Architecture load/store Modes d'adressage simples : basé et indexé Instructions simples registre-registre Presque consensus: 32 registres Bloc de registres distincts pour les flottants

Retour au pipeline

Les aléas de données L’exécution pipeline d'une séquence d'instructions doit produire le même résultat qu'une exécution séquentielle. 3 types d'aléas peuvent se produire: i précède j RAW (Read After Write) : j utilise un résultat de i comme opérande: le résultat doit être écrit par avant que j ne le lise. WAR (Write After Read) : j écrit un résultat dans une source de i i doit avoir lu sa source avant que j ne l'écrive WAW (Write After Write) : i et j écrivent leurs résultats à la même place j doit écrire son résultat après i

Read After Write sur les processeurs RISC Le problème: Une solution: Mais perte de 2 cycles !

De l'utilité des mécanismes de bypass Le résultat en sortie de l'ALU est en fait disponible plus tôt : On peut l'intercepter avant l'écriture dans le fichier de registres

Aléas Read After Write sur les processeurs RISC Le délai de chargement mémoire

Et comment s'en affranchir a= b+c ; d= e+f

Les aléas WAR et WAW sur les processeurs RISC Il n'y en a jamais ! Les opérandes sont lus dans les registres dès le décodage. Les aléas Write After Write sur les processeurs RISC Il ne peut y en avoir que si les écritures ne sont pas faites à un cycle précis du pipeline: en principe, il n'y en a pas. Sauf que … (multiplication, division, flottants)

Les aléas de données sur les processeurs CISC Tous les types d'aléas sont possibles : Read After Write Write after Read : le nombre des opérandes d'une instruction est très élevé. Write after Write : la durée d'exécution des instructions est tout à fait variable Pipeliner l'exécution de plusieurs instructions sur un processeur CISC requiert beaucoup de précautions.

RISC versus CISC RISC : mécanismes de contrôle plus simple possibilité de réordonnancement de code RISC : coût et temps de conception plus réduit. RISC : taille du composant plus réduit (à performance et technologies équivalentes) CISC : volume de code plus réduit

Les aléas de contrôle L'instruction est un branchement conditionnel ou non quelle instruction exécuter ? Le nombre de cycles perdu sur les branchements peut être très important.

Le parallélisme d’instructions

Toujours plus de puissance : les processeurs superscalaires et VLIW Processeurs RISC jusqu'en 1991 : objectif 1 instruction par cycle mais comment aller plus vite : Diviser le temps de cycle et multiplier les étages : superpipeline Lancer plusieurs instructions par cycle : qui contrôle: Le matériel: superscalaire Le compilateur: VLIW (Very Long Instruction Word)

Les processeurs superscalaires le droit de lancer les instruction par cycle est géré à l'exécution par matériel: aléas de ressource : e.g. partage d'une même unité fonctionnelle aléas de données : ne pas lancer 2 opérations dépendantes aléas de contrôle : attention aux branchements permet la compatibilité binaire d'une génération de processeurs à l'autre: du processeur RISC (1 instruction par cycle) au processeur superscalaire (x instructions par cycle) TOUS LES PROCESSEURS ANNONCES DEPUIS 1993 SONT SUPERSCALAIRES

VLIW: Very Long Instruction Word Parallélisme contrôlé par logiciel: Le compilateur est en charge de contrôler les unités fonctionnelles: gère les aléas de contrôle, de données et de ressources Problème: l’absence de compatibilité binaire  Pas utilisé pour les processeurs généraux

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 La gestion des dépendances de données Les branchements.

superscalaire « naturel »  1995 les unités fonctionnelles existantes dans les microprocesseurs ne sont pas dupliquées: ALU Unité flottante Accès à la mémoire Unité de séquencement  DEC 21064, IBM Power, Power601 Certaines unités fonctionnelles dupliquées : TI SuperSparc : 2 ALUs MIPS R8000, IBM Power2 : 2 opérateurs flottants, 2 accès au cache

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

Petit retour sur le pipeline

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 (fin 2000) 20 cycles sur le Pentium 4 (fin 2000) Et ça ne va pas s’améliorer !!

Retour au jeu d’instruction

Un jeu d’instruction pour le parallélisme d ’instructions parallélisme explicite entre les instructions (à la VLIW) support pour l’exécution spéculative Compatibilité assurée par  le matériel

Le jeu d’instruction 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 le compilateur gère le parallélisme d’instructions, mais la compatibilité est assurée par le matériel

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

Intel PentiumPro ou comment s’abstraire du jeu d’instruction

De la difficulté du superscalaire sur les jeux d'instruction non réguliers Les difficultés liées au jeu d'instructions: Taille d'instructions variables (1 à 15 bytes) Plusieurs occupations successives d'une même ressource Nombre d'itérations inconnu sur certaines instructions Temps d'exécution imprévisible pour certaines instructions

Intel PentiumPro: la solution adoptée Une constation : les jeux d'instruction RISC sont plus simples à pipeliner et exécuter en parallèle La solution : exécuter du "code " RISC ! Comment ? pseudo-code RISC

Intel PentiumPro MEM + REG  MEM: 4 microoperations (RISC-like) La plupart des instructions sont traduites en 1 à 4 microopérations en un cycle Certaines instructions ne peuvent pas être traduites en un nombre fixé de microopérations (boucles, instruction flottantes transcendantales , ..) : traduites en plusieurs cycles 3 traducteurs en parallèles (1 complexe + 2 simples)

Intel PentiumPro Les microopérations venant de différentes instructions sont executées dans le désordre comme sur les processeurs superscalaires out-of-order RISC renommage de registres stations de réservations .. Buffer de réordonnancement Jusqu'à 5 microopérations par cycle.

Jeu d’instruction: est-ce important ? 32 ou 64 bits: vers l’abandon (ou la mutation !) d’x86 AMD x86-64 ! Les performances: et x86 ? :=) en flottant !! à technologie égale ?

Jeu d’instruction: 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 Alpha 21164 700 Mhz 0.35m (1997)

La hiérarchie mémoire

Les caches La mémoire est: bon marché et lente ou chère et rapide. Les caches : donner l'illusion d'une mémoire globale rapide. Principe: utiliser les propriétés de localité temporelles et spatiales des applications

Principes de fonctionnement d'un cache Le cache est une petite mémoire rapide dont le contenu est une image d'un sous-ensemble de la mémoire. Lors d'une référence à la mémoire, la requête est: 1.) présentée au cache 2.) si la donnée absente alors la requête est présentée à la mémoire principale (ou à un second niveau de cache).

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 cache secondaire 100 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 : 520 cycles !!

Transferts mémoire-cache Le temps d ’accès à un bloc de K mots: T = a + (K-1) b Le temps d'accès au premier mot est plus long: envoi de l'adresse + retour Structure des mémoires RAM dynamiques On n'attend pas la fin du transfert complet des mots avant d'utiliser un mot du bloc chargé: le mot en défaut est en général chargé en premier

Placement des données dans les caches Chaque bloc ne peut être chargé qu'à une seule place dans le cache: cache DIRECT MAPPED ou à correspondance directe. Chaque bloc peut être chargé à n'importe quelle place dans le cache: FULLY ASSOCIATIVE ou totalement associatif. Chaque bloc ne peut être chargé qu'à un nombre limité de places (ensemble ou SET): SET ASSOCIATIVE ou associatif par ensembles.

Cache direct-mapped

Cache set-associatifs

Cache fully-associatifs

Remplacer un bloc Lorque l'ensemble est plein, quel bloc rejeter en mémoire ? RANDOM: les candidats sont choisis de manière aléatoire LRU: Least Recently Used Random: plus simple à mettre en oeuvre LRU: meilleur en général effets bizarres

Ecrire Toute écriture doit être répercutée dans la mémoire: Tout de suite: WRITE THROUGH ou plus tard: WRITE BACK ( quand le bloc est évincé du cache) WRITE BACK: moins de trafic sur la mémoire problème de cohérence entre la mémoire et le cache WRITE THROUGH: trafic important vers la mémoire

Quelle taille de bloc ? Blocs longs: bénéficie de la localité spatiale réduit le nombre de blocs et perd de la place Blocs courts: nombreux défauts sur des blocs contigus Expérimentalement : 16 - 64 bytes pour les caches 8-32 Kbytes

Plusieurs niveaux de caches Une hiérarchie de caches: des capacités de plus en plus grandes des temps d'accès de plus en plus longs. L2 devenu la règle générale: sur le composant ou sur le même module que le processeur temps d ’accès: 7-15 cycles

Problème d’inclusion doit-on assurer que toute donnée présente dans le cache de premier niveau est aussi présente dans le cache de second niveau?

Un défaut de cache n’arrête pas (complètement) le processeur Cache non-bloquant: en présence d’un défaut on envoie la requête vers le niveau suivant et on continue ! Préchargement: on anticipe les prochaines requêtes (par matériel ou par logiciel)

Quelques paramêtres actuels Intel Pentium : 2 * 8K bytes, 2-way, 60 (1993)-233 Mhz (1997) MIPS R4400 : 16K Inst + 16K data, DM, 100 (1992) 250 Mhz (1996) Alpha 21164 : 2* 8K (DM) + L2 96 Kbytes (3-way) 266 (1995) Mhz 700 Mhz (1998) Intel Pentium III: 2* 16K, 4-way, 1 Ghz (2000) + L2 256K Alpha 21264 : 2 * 64 Kbytes (2-way), 733 Mhz

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

la mémoire principale sur le bus système

Mémoire principale en connexion directe

Les tendances (et les problèmes) plus d'instructions par cycle: au delà d'un bloc de base par cycle ? Exécution dans le désordre: de plus en plus de spéculation, adresses! valeurs ! Pipeline de séquencement très long: pénalité de mauvaise prédiction de branchement ? Caches premier niveau multiport, non-bloquants, accédés en 1-2 cycles: compromis temps d ’accès, taille, associativité Cache second niveau pipeliné non-bloquant

Microprocesseurs généraux, processeurs enfouis, DSP: vers une convergence ?

Un lourd passif Les applications temps-réels n'aiment pas les microprocesseurs: temps d'exécution borné:les caches ? le parallélisme dynamique ? Les calculs concentrés dans quelques sections de code performance et/ou place et/ou prix critiques Culture: programmation assembleur Instructions baroques: multiply-add, mais surtout adressage

Un monde qui change (1) Impossibilité d'atteindre les performances sans cache: Gestion de tous les mouvements de données à la main: à peu près impossible ! et les mouvements d'instructions ! caches dans les nouveaux DSPs: TriMedia, TMS320C62xx, .. De plus en plus de contrôle dans les applications Parallélisme d'instruction nécessaire pour la performance (mais VLIW possible !)

Un monde qui change (2) Le recyclage des designs de processeurs: les coeurs des microcontrolleurs d'aujourd'hui sont dérivés des microprocesseurs d'hier: Des microcontrolleurs sont dérivés de toutes les grandes familles de processeurs. Disponibilité de logiciels

Un monde qui change (3) Une culture qui évolue dans le monde des DSPs: parallélisme d'instructions, pipeline profond: écriture de plus en plus difficile en assembleur. Compilateurs de plus en plus matures: pipeline logiciel time-to-market des systèmes enfouis: SURTOUT le logiciel programmation en langages de haut niveau (euh, C)

Un monde qui change (4) Les jeux d'instruction multimédias: Calcul vectoriel sur des données 8 ou 16 bits présents sur tous les processeurs généraux

Et demain ?

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

La vision du programmeur

Simultaneous Multithreading (SMT) Les UFs d’un processeur sont sous-utilisées SMT: Partager les UFs d’un processeur superscalaire entre plusieurs processus Avantages: 1 processus a toutes les ressources partage dynamique des structures (caches, prédicteurs, UFs)

SMT: Alpha 21464 (2003) Un processeur superscalaire 8 voies Performance ultime sur un processus Si multiprocessus, 4 processus se partagent les unités fonctionnelles: Surcoût pour ce partage 5-10 %

La vision du programmeur

Le SMT: les voies de la recherche Speculative multithreading: un coup plus loin que la prédiction de branchement Multipath execution: dans le doute, exécutons les 2 branches Flot de support: Utilisons un flot <<esclave>> pour accélérer le flot principal: préchargement anticipation de branchement

Boule de cristal Le processeur du PC en 2010 Jeu d'instruction x86+: extension pour mode + de 32 bits Superscalaire 10 voies SMT Exécution dans le désordre < 50 mm2 support multiprocesseur: cache snooping

Boule de cristal Le processeur du serveur en 2010 Jeu d'instruction IA64 ou Alpha+ les registres de prédicats !! Multi SMT 10 voies Prédiction de dépendances agressif Multipath execution support multiprocesseur: directory coherence

La vision du programmeur !

Les grandes questions Saura-t-on maitriser la complexité du design? Qui saura programmer ces monstres ?