Académique Documents
Professionnel Documents
Culture Documents
PROG ACC
PC
RAM ADDR
MEM
RAM
ALU
IR
UC
Architecture de Von Neumann
ADD A,55H
PROG ACC
PC
RAM ADDR
MEM
RAM
ALU
IR
UC
Architecture de Von Neumann
ADD A,55H
PROG ACC
PC
RAM ADDR
MEM
RAM
ALU
IR
UC
Architecture de Von Neumann
ADD A,55H
PROG ACC
PC
RAM ADDR
MEM
RAM
ALU
IR
UC
Architecture de Harvard
PROG ACC
RAM ADDR
PC
MEM
RAM
ALU
IR
UC
Architecture de Harvard
PROG ACC
RAM ADDR
PC
MEM
RAM
ALU
IR
UC
Architecture de Harvard
PROG ACC
RAM ADDR
PC
MEM
RAM
ALU
IR
UC
RISC et CISC
• Évolution
• Complexification continuelle toujours en cours pour certains processeurs dit
CISC (Complex Instruction Set Computer)
• > 1980 études démontrant une autre voie pour augmenter la performance : les
processeurs d’instruction réduit dis RISC (Reduced Instruction Set Computer)
• Software
• Développement des langages évolués ou HLL (High Level Languages)
• FORTRAN, ALGOL, COBOL
RISC et CISC (1965 – 1969) CPU plus rapide que mémoire
• Facteurs d’évolution
• Technologie
• Transistors discrets → 1ers circuits intégrés
• Réduction du coût, de la taille et de la consommation
• Mémoires : tores de ferrite (↘) + semi-conducteurs (↗)
• Notion de cache
• Architecture
• UC micro-programmée
• Pipe-lining
• Software
• multiprecessing
• Systèmes d’exploitation multi-tâches
RISC et CISC (1970 – …) CPU et mémoire rapides
• Facteurs d’évolution
• Technologie
• Montée du niveau d’intégration
• Apparition des microprocesseurs
• Augmentation des fréquences d’horloge
• Mémoires à semi-conducteurs généralisées
• Rééquilibrage de la vitesse entre mémoire et CPU
• Software
• Recherches sur l’optimisation des compilateurs
RISC et CISC (1955 – …) la tendance CISC
• Double déséquilibre
• Vitesse CPU > vitesse mémoire
• La phase d’opcode/operand fetch est beaucoup plus lente que la phase de
décodage/execution
• sémantique
• Une instruction HLL est beaucoup plus riche que une instruction ASM
• Le compilateur traduit une ligne de source en de nombreuses instructions ASM
• Solution : CISC
• Créer des instructions machine complexes
• Pour facilité l’optimisation en assembleur
• Pour les rapprocher du langage de haut niveau
• Chaque instruction est optimisée indépendamment
RISC et CISC (1955 – …) la tendance CISC
• Réduction du déséquilibre sémantique
• Instructions machine plus complexes
• Réduction du déséquilibre de vitesse
• Moins d’accès mémoire
• Chaque opcode fetch ramène en moyenne une instruction plus complèxe, donc plus
riche
• Pallie partiellement la lenteur d’accès à la mémoire
• Plus de travail pour le CPU
• Décodage plus complexe
• Exécution plus longue
• Intéret des UC microprogrammées (flexibilité)
• Idéalement
• Une instruction/cycle, 1cycle/coup d’horloge (irréaliste)
• En réalité
• Cycle divisé en étapes (“states”)
• Au moins 1 coup d’horloge par étape
• Un cycle = généralement plusieurs coups d’horloge
• Une instruction peut comporter plusieurs cycles
L’équation de performances
• Augmenter les performances
• ↗ fréquence d’horloge c-à-d ↘ 𝑇#$% et donc 𝑇&'&()
• ↘ 𝑁 (nombre total d’instructions) : typiquement CISC
• ↘ nombre de cycles / instruction : RISC mais aussi CISC
5
𝑡,-,_)/)& = 1 𝐶𝑃𝐼2 × 𝑇&'&()
234
Évolution des processeurs
4004 8008 8085 8086 80286 80386 80486 PI Ppro PII PIII PIV
date 1971 1972 1974 1978 1982 1985 1989 1993 1995 1997 1999 2000
clk[Hz] 100k 200k 2M 10M 12M 33M 50M 66M 200M 300M 1G 3G
Bus [bit] 4 8 8 16 16 32 32 64 64 64 64 64
#trans [K] 2.3 3.5 6 29 134 275 1200 3100 5500 7500 28K 42K
dim[µm] 10 10 6 3 1.5 1 .8 .8 .35 .35 .25 .13
mém adr[B] 640 16K 64K 1M 16M 4G 4G 4G 64G 64G 64G 64G
mém vir[B] --- --- --- --- 1G 64T 64T 64T 64T 64T 64T 64T
Intr 40 66 113 122 140 162 162 168 176 176 176 176
FP 91 91 91 91 91 91
MMX 47 47 47
SSE 64
SSE2 130
TOTAL 40 66 113 122 140 162 253 259 267 314 378 446
Conso[W] 3 6 13 44 25 34 55
1980 – … : réflexions de fond sur l’optimisation
• Augmentation de la vitesse d’accès à la mémoire
• Développement important des mémoires “caches”
• RAM statiques à accès rapides (quelques 10ns)
• En tampon entre mémoire programme et CPU
• Analyse du contenu de la cache pour l’optimiser
• Constatations
• Le déséquilibre de vitesse est inversé : cache plus rapide que CPU
• 80% du cache = instructions les plus simples
• Transfert mémoire ↔ registres
• Branchements
• …
1980 – … : réflexions de fond sur l’optimisation
• Jeu d’instructions complexes mal utilisé. Pourquoi ?
• Beaucoup d’instructions
• Difficile de programmer en assembleur ou d’optimiser un compilateur
• Beaucoup d’expérience pour bien programmer
• Optimisation en langage machine non univoque et difficile (trop de choix) : long à
personnaliser par rapport au développement d’un nouveau CPU
• On a finalement surtout recours à des instructions simples
1980 – … : réflexions de fond
• Compatibilité ascendante
• Poids du passé, malgré la disparition des contraintes de taille et de lenteur
mémoire et le passage ASM → HLL
• → complexité croissante
• Optimisation de la place mémoire mais …
• Instructions de taille et de temps d’exécution variables → difficile d’optimiser les
performances
• Est-ce encore nécessaire d’optimiser à ce point la taille du code ?
• Sous-utilisation des instructions spécialisées
• 20% du jeu utilisé en pratique
• → gaspillage du silicium consacré à une grosse Unité de Commande
• Bug hardware fréquents
• Status Register
• Mise à jour systématique prend du temps
• Le programmeur doit se souvenir d’aller le voir avant qu’il ne change
1985 – … : RISC
• Nombre d’instructions relativement limité (quelques dizaines)
• Toutes les instructions de même longueur et même durée
• Défaut : tend à gaspiller de la mémoire programme
• Architecture basée sur les registres
• Surface économisée sur UC consacrée à beaucoup de registres
• Architecture registre à registre
• RALU, instructions à 3 opérandes
• Pas d’instructions ALU vers mémoire : LOAD-STORE architecture
• Échange registre ↔ mémoire optimisé en un cycle (via cache)
• Orthogonalité (symétrie)
• Tous les registres sont équivalents
• Les instructions portent sur tous les registres
• Unité de commande simple et rapide (câblée)
• Peu d’instructions
• Limitation des modes d’adressage et pour LOAD et STORE seulement
• Interruptions simplifiées
1985 – … : RISC
• Bien réutiliser le silicium économisé
• Register file, fenêtrage
• Multiplieur câblé efficace
• Data-path multiples : architecture de Harvard
• Pipeline efficace
• Diminuer CPI par parallélisme d’exécution
• Optimum car toutes les instructions de même durée
1985 – … : RISC
• RISC prévu essentiellement pour HLL
• + de travail de base pour le software
• Gestion de stack
• Gestion d’interruptions
• …
• Nécessité d’un compilateur optimisé développé conjointement avec
le microprocesseur
1985 – … : RISC
• Savoir-faire de l’architecte
• Peu d’instructions mais choisir les bonnes
• Instructions = briques pour instruction plus complexes (comme CISC) fabriquées
par le compilateur et plus par le silicium
• La solution n’est pas unique
• Aucun processeur développé après 1985 n’est exempt de l’influence
RISC
• Plusieurs représentants
• MIPS, ARM, HP, DEC, Intel, MOTOROLA, SUN
RISC ou CISC ?
• Microprocesseur performant dans les 2 cas
• CISC
• Compatibilité ascendante (x86, 68K)
• Code plus compact
• Surtout destinés aux PC
• RISC
• Meilleure performance absolue
• Code moins compact
• Meilleur rapport performance/coût
• Meilleur rapport performance/consommation
• Surtout « embedded processors » et « workstations »
• Réconciliation
• RISC
• Tendance à augmenter le nombre d’instructions
• CISC
• Instructions prédécodées, puis exécutées par cœur RISC
• → réduction du CPI par les mêmes techniques que RISC
SISC
• Specific Instruction Set Computers
• Essentiellement micro-contrôleurs
• Tendance = RISC plus …
• Manipulation de bits
• Manipulation optimisée des périphériques internes (communication, graphique,
multimédia)
• Instructions spécifiques
• Special Function Register
• Vocabulaire
• Prendre le branchement = rupture de séquence (instruction suivante 𝑖; )
• Ne pas prendre = continuer l’incrémentation de PC (instruction suivante 𝑖= )
• Problème : délai de dépendance dans le pipeline
• L’instruction à exécuter (𝑖; ou 𝑖= ) n’est connue que lorsque la condition C a été
calculée et vérifiée
• Solutions
• Branchement avec délai
• Prédiction de branchement (>1990)
• On prend le branchement le plus probable (par ex 𝑖= )
• On commence à exécuter 𝑖= , 𝑖=<4 , 𝑖=<? « exécution spéculative » avant que C ne soit
connu
• Dès que C est connu
• Soit la prédiction était juste et on a gagné
• Soit la prédiction était fausse et on « détricote » (par exemple à l’aide d’une pile où on a
sauvé l’état avant de spéculer)
Pipeline : prédiction de branchement
• Simplement, mais bêtement
• Ne jamais (ou toujours) brancher
• Le plus naturel = ne jamais brancher c-à-d exécution séquentielle
• Implémentation hardware très simple
• 50% (?) de chance de prédire correctement
• Déjà mieux que de bloquer le pipeline systématiquement
• Un peu plus intelligemment
• Les boucles sont fréquentes
• Le branchement le plus probable est le retour au début
• → On branche si c’est « vers le haut »
• On ne se trompe qu’une fois : à la sortie de la boucle
Pipeline : prédiction de branchement
• Statique simple à un bit
• On associe 1 bit au branchement en cours qui mémorise le dernier état de la
condition C
• On suppose que C gardera la même valeur
• Marche très bien pour les boucles où seule la sortie change la condition C
• Taux de réussite moyen = 80%
• Statut graduel sur 2 bits
• NON(sûr) ↔ NON(probable) ↔ OUI(probable) ↔ OUI(sûr)
• 1er prédiction triviale : OUI(probable) ou NON(probable)
• évolution → si branchement effectivement pris, ← si pas pris
Les caches ou anté-mémoires
Mémoire Mémoire
CPU
centrale de masse
Mémoire Mémoire
CPU Cache
centrale de masse
Mémoire Mémoire
CPU Cache
centrale de masse
Gérer la cache
• Buts :
• ↘ temps d’accès aux instructions et aux données
• Accès en 1 cycle → pipeline efficace
• Gérer la cache
• Contrôleur hardware (parfois intervention de l’OS)
• Rendre la cache transparente pour le programme
• Au moment où le processeur veut accéder à un mot, il doit pour bien faire déjà
se trouver dans la cache ; il faut donc prédire ce qu’il faut mettre en cache
• Savoir si l’adresse demandée se trouve dans la cache (cache hit) ou non (cache
miss)
• Aller chercher les données/instructions manquantes et savoir où les mettres
• Ne pas perdre de données
Principe de localité