Académique Documents
Professionnel Documents
Culture Documents
complexes
Master 2004
- p. 1/134
● Processeurs embarqués
Introduction
Processeurs embarqués
embarqués
Conclusion
- p. 2/134
Part de marché
Conclusion
- p. 3/134
Contradiction ?
● Processeurs embarqués n Alors d’ou vient la position d’Intel (16% du marché des
Introduction
● Part de marché
semi-conducteurs) ?
● Contradiction ?
● Variété des processeurs
n processeurs: 2% du silicium, 30% des revenus
embarqués
Conclusion
- p. 4/134
Et au sein des processeurs
Conclusion
- p. 5/134
Variété des processeurs embarqués
● Processeurs embarqués
Introduction
● Part de marché
● Contradiction ?
● Variété des processeurs
embarqués
Conclusion
- p. 6/134
● Processeurs embarqués
Introduction
I-Type:
● Exemple: instructions de l’ISA
du MIPS n
● Le CPU
● Le pipeline RISC: exemple du LW rt, offset(base)
MIPS
● Exemple d’exécution sans
pipeline
n J-Type:
● Exemple d’exécution avec
pipeline
JUMP target
R-Type:
● Parallélisme au sein du
processeur n
ADD rd,rt,rs
● Parallélisme au sein du
processeur
● Mémoire
● Processeurs embarqués n Lorsque l’instruction suivante ne peut pas être exécutée tout
Introduction
de suite, cela crée une "bulle".
Architecture des processeurs
● Architecture "Von Neuman"
n Par exemple une addition utilisant un registre qui vient d’être
ou "Princeton"
● Architecture Harvard chargé doit être retardé d’un cycle.
● Le jeu d’instruction
● CISC: Complex Instruction
Set Computer
● Exemple: instructions de l’ISA
du Pentium
● RISC: Reduced Instruction
Set Computer
● Exemple: instructions de l’ISA
du MIPS
● Le CPU
● Le pipeline RISC: exemple du
MIPS
● Exemple d’exécution sans
pipeline
● Exemple d’exécution avec
pipeline
● Parallélisme au sein du
processeur
● Parallélisme au sein du
processeur
● Mémoire
Processor Datapath
Architecture des processeurs
● Architecture "Von Neuman"
ou "Princeton" ALU
● Architecture Harvard
● Le jeu d’instruction
Control unit
● CISC: Complex Instruction
control/Status
Set Computer R0 Register File R1
● Exemple: instructions de l’ISA PC IR
du Pentium 10
● RISC: Reduced Instruction
100 la R0,500 R2 R3
Set Computer
● Exemple: instructions de l’ISA
du MIPS
● Le CPU
● Le pipeline RISC: exemple du
MIPS
● Exemple d’exécution sans
pipeline
● Exemple d’exécution avec
Memory
pipeline 100 la R0,500 500 10
● Parallélisme au sein du
processeur
104 add R1,R0,1
● Parallélisme au sein du
108 sw R1,500
processeur
● Mémoire
● Processeurs embarqués
Indépendamment du pipeline, Deux paradigmes dominants:
Introduction n Super Scalaire
Architecture des processeurs u Duplication des unités,
● Architecture "Von Neuman"
ou "Princeton" u Répartition au vol des instructions sur les unités
● Architecture Harvard
● Le jeu d’instruction
● CISC: Complex Instruction
disponibles (re-ordonnancement des instructions: out of
Set Computer
● Exemple: instructions de l’ISA
order execution)
du Pentium u Exemple: le PowerPC 970 (4 ALU, 2 FPU)
● RISC: Reduced Instruction
Set Computer u Efficace mais complexifie l’unité de contrôle (problème
● Exemple: instructions de l’ISA
du MIPS
● Le CPU
des interruptions)
n Very Large Instruction Word (VLIW)
● Le pipeline RISC: exemple du
MIPS
● Exemple d’exécution sans
pipeline u Duplication des unités,
● Exemple d’exécution avec
pipeline u L’ordonnancement des instructions est fixé à la
● Parallélisme au sein du
processeur compilation (tout se passe comme si les instructions
● Parallélisme au sein du
processeur pouvait être regroupe sur 64 bits, 128 bits etc.)
● Mémoire
u Inventé par Josh Fisher (Yale) à partir du trace scheduling
Différents types de processeurs
embarqués u Les processeurs VLIW sont tous basés sur les
Compilation pour processeurs
embarqués
architecures RISC, avec entre 4 et 8 unités.
u Exemple: TriMedia (Philips), Itanium IA64 (Intel).
Exemple de l’appareil photo
- p. 34/134
numérique
Parallélisme au sein du processeur
● Processeurs embarqués
Une autre approche possible: instructions SIMD.
Introduction n Modification du data-path pour proposer des opérations
Architecture des processeurs
● Architecture "Von Neuman"
parallèles sur 16 ou 8 bits
ou "Princeton"
● Architecture Harvard n Exemple: Sun Visual Instruction Set, Intel Pentium MMX,
● Le jeu d’instruction
● CISC: Complex Instruction Philips TriMedia
Set Computer
● Exemple: instructions de l’ISA n Gains importants sur certains traitements mais très peu
du Pentium
● RISC: Reduced Instruction
Set Computer
utilisé en pratique (difficile à inférer par le compilateur)
● Exemple: instructions de l’ISA u Librairies écrites en assembleur (programmes non
du MIPS
● Le CPU
● Le pipeline RISC: exemple du
portables)
MIPS u Fonction C représentant les instructions assembleurs
● Exemple d’exécution sans
pipeline
● Exemple d’exécution avec
(compiler instrisic)
pipeline u Exemple: instruction ifir8ii R1, R2, R3 du Trimedia:
● Parallélisme au sein du
8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits
processeur
● Parallélisme au sein du
processeur
● Mémoire
* * * *
● Processeurs embarqués 0
1
0
Introduction 2
3
Architecture des processeurs
4
● Architecture "Von Neuman"
5
ou "Princeton"
6
● Architecture Harvard
7
● Le jeu d’instruction
0 8
● CISC: Complex Instruction
Set Computer 1 9
● Exemple: instructions de l’ISA 1 cycle 2 10−20 cycles 10
Espace
3 11
Processeur
du Pentium
mémoire
● RISC: Reduced Instruction 4 12
Set Computer 5 13 adressable
● Exemple: instructions de l’ISA 6 14
du MIPS 7 15
● Le CPU
16
● Le pipeline RISC: exemple du
17
MIPS
● Exemple d’exécution sans 18
pipeline Cache de données (SRAM) 19
● Exemple d’exécution avec 20
pipeline 21
● Parallélisme au sein du 22
processeur 23 N−1
● Parallélisme au sein du
processeur
● Mémoire Mémoire principale (DRAM)
Différents types de processeurs
embarqués
● Processeurs embarqués
Introduction
Conclusion
- p. 39/134
Différents types de processeurs embarqués
Conclusion
- p. 40/134
68000, x86
Conclusion
- p. 41/134
SPARC, 29000 et i960
- p. 42/134
MIPS, ARM, SuperH et PowerPC
- p. 43/134
Et les autres....
Conclusion
- p. 44/134
Micro-contrôleurs
Conclusion
- p. 45/134
DSP: Digital Signal Processing
Motorola
Exemple de l’appareil photo
numérique
Conclusion
- p. 46/134
Quelques mécanismes matériels utiles
- p. 47/134
Quelques mécanismes matériels utiles
Conclusion
- p. 48/134
Quelques mécanismes matériels utiles
Conclusion
- p. 49/134
Quelques mécanismes matériels utiles
- p. 50/134
Quelques mots sur la consommation
Conclusion
- p. 51/134
Consommation d’un circuit CMOS
Conclusion
- p. 52/134
Réduction statique de la consommation
- p. 53/134
Réduction dynamique de la consommation
Conclusion
- p. 54/134
● Processeurs embarqués
Introduction
Conclusion
- p. 55/134
Compilation: biblio
Conclusion
- p. 56/134
Compilation: Principes généraux
Conclusion
- p. 57/134
Compilation: Contraintes supplémentaires
Conclusion
- p. 58/134
Compilation: Le flot général
Conclusion
- p. 59/134
Compilation: Le flot détaillé
Ordonnancement
embarqués
Alloc. Reg.
Scanning
Selection
Parsing
C.S.A
Compilation pour processeurs
Opt1
Opt2
Opt3
embarqués
● Compilation pour processeurs
embarqués
● Compilation: biblio
● Compilation: Principes
généraux Infrastructure
● Quelques exemples
d’optimisation de compilation Table des symbols, Arbres de syntaxe abstraite, Graphes, ensembles, IR, ...
pour processeurs embarqués
● Exemple 1: génération
Compilateur
d’adresse pour DSP
● Exemple 2: cas des Registres
dédiés
● Exemple 3: gestion du cache
d’instruction
● Quelques manipulation avec
GCC
● Un compilateur pour
l’embarqué: GCC
Conclusion
- p. 60/134
Compilation: Représentation intermédiaires (1)
● Processeurs embarqués n Arbre: Abstract Syntax Tree (AST), Graphe acyclique (DAG)
Introduction
n ex: x × 2 + x × 2 × y
Architecture des processeurs + +
Différents types de processeurs
embarqués
* * * *
Compilation pour processeurs
embarqués
● Compilation pour processeurs
x 2 * y x 2
embarqués
● Compilation: biblio
● Compilation: Principes
généraux x 2
● Quelques exemples
d’optimisation de compilation
pour processeurs embarqués
● Exemple 1: génération
DAG
d’adresse pour DSP AST
● Exemple 2: cas des Registres
dédiés
● Exemple 3: gestion du cache
d’instruction
● Quelques manipulation avec
GCC
● Un compilateur pour
l’embarqué: GCC
Conclusion
- p. 61/134
Compilation: Représentation intermédiaires (2)
Conclusion
- p. 62/134
Compilation: Représentation intermédiaires (3)
Conclusion
- p. 63/134
Compilation: Le front-end
● Processeurs embarqués n Le front-end d’un compilateur pour code embarqué utilise les
Introduction
mêmes techniques que les compilateurs traditionnels (on
Architecture des processeurs
peut vouloir inclure des partie d’assembleur directement)
Parsing LR(1): Le parseur est généré à partir de la
Différents types de processeurs
embarqués n
Compilation pour processeurs grammaire du langage.
embarqués
● Compilation pour processeurs
embarqués
n Flex et bison: outils GNU
● Compilation: biblio
● Compilation: Principes
généraux
● Quelques exemples
d’optimisation de compilation
pour processeurs embarqués
● Exemple 1: génération
d’adresse pour DSP
● Exemple 2: cas des Registres
dédiés
● Exemple 3: gestion du cache
d’instruction
● Quelques manipulation avec
GCC
● Un compilateur pour
l’embarqué: GCC
Conclusion
- p. 64/134
Compilation: Le middle-end
Conclusion
- p. 65/134
A Data cache optimisations
Procedure integration
Tail−recursion optimisation
B Scalar replacement of agregates
Sparse conditional constant propagation
Interprocedural constant propagation
Procedure specialization and cloning
Sparse conditional constant propagation
Différents types de processeurs C Local and global common subexpression elimination Partial redundancy elimination
embarqués Loop invariant code motion
u Ordonnancement d’instructions
embarqués
● Compilation: biblio
● Compilation: Principes
généraux
● Quelques exemples
d’optimisation de compilation
pour processeurs embarqués
● Exemple 1: génération
d’adresse pour DSP
● Exemple 2: cas des Registres
dédiés
● Exemple 3: gestion du cache
d’instruction
● Quelques manipulation avec
GCC
● Un compilateur pour
l’embarqué: GCC
Conclusion
- p. 67/134
Exemple de code généré: MIPS
Conclusion
- p. 68/134
.file 1 "fib.c"
.text
.align 2
.globl fib
.ent fib
fib:
.frame $fp,40,$ra # vars= 8, regs= 3/0, args= 16, ext
.mask 0xc0010000,-8
.fmask 0x00000000,0
● Processeurs embarqués gcc -S fib.c subu $sp,$sp,40 # SP <- SP-40 :AR de 40 octet (10 mo
Introduction sw $ra,32($sp) # stocke adresse retour SP+32
sw $fp,28($sp) # stocke ARP appelant SP+28
Architecture des processeurs sw $s0,24($sp) # sauvegarde registre $s0
move $fp,$sp # ARP <- SP
Différents types de processeurs
embarqués
sw $a0,40($fp) # stocke Arg1 dans la pile (ARP+40)
lw $v0,40($fp) # charge Arg1 dans $v0
Compilation pour processeurs slt $v0,$v0,2 # $v0 <- 1 si $v0<2 0 sinon
embarqués int fib (int i) { beq $v0,$0,$L2 # branch L2 si $v0==0
● Compilation pour processeurs
if (i<=1) return(1); li $v0,1 # $v0 <- 0x1 ($v0 sera le registre c
embarqués
else return(fib(i-1)+fib(i-2)); sw $v0,16($fp) # stocke le resultat dans la pile
● Compilation: biblio
● Compilation: Principes } j $L1 # saute à L1
généraux $L2:
● Quelques exemples int main (int argc, char *argv[]) { lw $v0,40($fp) # charge Arg1 dans $v0
d’optimisation de compilation fib(2); addu $v0,$v0,-1 # retranche 1
pour processeurs embarqués
} move $a0,$v0 # $a0 <- $v0 ($a0 contient Arg1 pour
● Exemple 1: génération
d’adresse pour DSP
jal fib # jump and link fib ($ra<-next inst
● Exemple 2: cas des Registres move $s0,$v0 # $s0 <- $v0 ($v0: res appel fib)
dédiés lw $v0,40($fp) # charge Arg1 dans $v0
● Exemple 3: gestion du cache
addu $v0,$v0,-2 # retranche 2
d’instruction
● Quelques manipulation avec move $a0,$v0 # $a0 <- $v0 ($a0: contient Arg1 po
GCC jal fib # jump and link fib ($ra<-next inst
● Un compilateur pour addu $s0,$s0,$v0 # $s0 <- $s0+$v0 ($v0: res appel fi
l’embarqué: GCC
sw $s0,16($fp) # stocke le resultat dans la pile
Exemple de l’appareil photo $L1:
numérique lw $v0,16($fp) # $v0 <- resultat
move $sp,$fp # SP <- ARP
Conclusion lw $ra,32($sp) # $ra <- adresse retour
lw $fp,28($sp) # ARP <- ARP appelant
lw $s0,24($sp) # restaure $s0
- p. 69/134
addu $sp,$sp,40 # SP->SP+40
● Processeurs embarqués
Introduction
Conclusion
- p. 70/134
Exemple 1: génération d’adresse pour DSP
● Processeurs embarqués n Les petits DSP possèdent souvent peu de registres et les
Introduction
calculs se font directement entre un registre par défaut REG
Architecture des processeurs
et la mémoire.
Minimiser les accès mémoire augmente beaucoup les
Différents types de processeurs
embarqués n
Compilation pour processeurs performances.
embarqués
● Compilation pour processeurs
embarqués
n Pour cela, les assembleurs sont pourvus d’un registre
● Compilation: biblio
● Compilation: Principes
d’adresse AR et de plusieurs mode d’adressage: adressage
généraux
● Quelques exemples
indirect (REG ← M em[reg1 ]) et indirect indexé
d’optimisation de compilation (REG ← M em[reg1 + const1 ]).
pour processeurs embarqués
● Exemple 1: génération
d’adresse pour DSP
n ils possèdent généralement des versions avec
● Exemple 2: cas des Registres
dédiés
auto-incrément (ou auto-décrement) des instructions
● Exemple 3: gestion du cache
d’instruction standard: load, store.
● Quelques manipulation avec
GCC
● Un compilateur pour
l’embarqué: GCC
Conclusion
- p. 71/134
Exemple: addressage avec auto incrément
Conclusion
- p. 72/134
Exemple 1: addressage avec auto incrément
Conclusion
- p. 73/134
Optimisation de l’adressage
Conclusion
- p. 74/134
Solution
● Processeurs embarqués 2
a f
Introduction
2 1
Architecture des processeurs n On construit un graphe d’accès dont 4
b
Différents types de processeurs
embarqués
les noeuds représentent les 1 e 1
embarqués
● Compilation pour processeurs
représentent le nombre de fois ou c
2
d
embarqués
● Compilation: biblio
les variables sont accédées
● Compilation: Principes consécutivement dans le code: a
généraux
● Quelques exemples
d’optimisation de compilation
n On cherche un chemin hamiltonien c
pour processeurs embarqués
● Exemple 1: génération dans ce graphe qui maximise le
d
d’adresse pour DSP
● Exemple 2: cas des Registres poids (problème NP-complet).
dédiés
● Exemple 3: gestion du cache
d’instruction
n solution: 10 accès avec la solution a
● Quelques manipulation avec
GCC
suivante: f
● Un compilateur pour
l’embarqué: GCC
e
Exemple de l’appareil photo
numérique
Conclusion
- p. 75/134
Unité de génération d’adresse
● Processeurs embarqués n Pour les DSP plus gros, le problème est plus compliqué
Introduction
n Ils possèdent souvent une unité de génération d’adresse
Architecture des processeurs
hors du data-path (address generation unit, AGU) qui
possède:
Différents types de processeurs
embarqués
Conclusion
- p. 76/134
Exemple 2: cas des Registres dédiés
● Processeurs embarqués n De nombreux DSP ont des registres dédié dans le data-path
Introduction
qui permettent:
Architecture des processeurs u Un mini-pipeline à l’intérieur du data-path
Différents types de processeurs u De limiter les lectures/ecritures sur le fichier de registre
embarqués
u De réduire la taille du code (les registres sont adressé
Compilation pour processeurs
embarqués
● Compilation pour processeurs
implicitement)
embarqués
● Compilation: biblio
n exemple: le chemin de donnée et le jeu d’instruction associé
● Compilation: Principes
généraux du C25 de Texas Instrument.
● Quelques exemples instruction effet
d’optimisation de compilation MEM
pour processeurs embarqués
lac ACU ← MEM
● Exemple 1: génération addk ACU← ACCU+Constant
d’adresse pour DSP
add ACU← ACCU+MEM
● Exemple 2: cas des Registres TR
dédiés pac ACU ← PR
● Exemple 3: gestion du cache
* apac ACU← ACCU+PR
d’instruction
● Quelques manipulation avec + mpy PR← PR*MEM
GCC
● Un compilateur pour
PR lt TR← MEM
ACU
l’embarqué: GCC sacl MEM← ACU
Conclusion
- p. 77/134
Registre dédiés
Conclusion
- p. 78/134
Exemple 3: gestion du cache d’instruction
Conclusion
n Pour un placement de code aléatoire les performances
varient avec un rapport de 3!
- p. 79/134
Conflits de cache d’instruction
Conclusion
- p. 80/134
Pas de Conflits de cache d’instruction
Conclusion
- p. 81/134
Optimisation proposée
Conclusion
- p. 82/134
Utilisation du graphe d’appel
Conclusion
- p. 83/134
Utilisation du graphe des conflits
● Processeurs embarqués nConstruction d’un graphe (GC) où les sommets sont des
Introduction
fonctions (ou des morceaux de code) et les arêtes sont les
Architecture des processeurs
conflits constatés sur ne trace particulière
n Il y a conflit entre A et B si la trace contient le pattern
Différents types de processeurs
embarqués
Conclusion
- p. 84/134
● Processeurs embarqués
Introduction
Conclusion
- p. 85/134
Un compilateur pour l’embarqué: GCC
Conclusion
- p. 86/134
compilateur, éditeur de liens, binutils
● Processeurs embarqués
Introduction
Conclusion
- p. 87/134
Installation pour le Mips
Conclusion
- p. 88/134
Assembleur dans le code C
Conclusion
- p. 89/134
Assembleur dans le code C
● Processeurs embarqués n On peut aussi mettre explicitement des variables dans des
Introduction
registres sans connaître l’allocation de registres faite par le
Architecture des processeurs
processeur
Exemple: utilisation de la fonction fsinx du 68881:
Différents types de processeurs
embarqués n
Compilation pour processeurs __asm__("fsinx %1,%0" : "=f" (result) : "f" (angle));
embarqués
● Compilation pour processeurs
embarqués
n %0 et %1 représente le résultat et l’opérande de la fonction
● Compilation: biblio
● Compilation: Principes
qui vont correspondre aux variables result et angle du
généraux
● Quelques exemples
programme C
d’optimisation de compilation
pour processeurs embarqués
n "t" est une directive indiquant à gcc qu’il doit utiliser des
● Exemple 1: génération
d’adresse pour DSP
registres flottants
● Exemple 2: cas des Registres
dédiés
● Exemple 3: gestion du cache
d’instruction
● Quelques manipulation avec
GCC
● Un compilateur pour
l’embarqué: GCC
Conclusion
- p. 90/134
Contrôler les section du programme
- p. 91/134
Gestionnaire d’interruption
- p. 92/134
Le LD script
Conclusion
- p. 93/134
Exemple de LD script
librairie
Compilation pour processeurs OUTPUT_FORMAT("coff-sh")
embarqués
● Compilation pour processeurs
embarqués n Spécification du format de /* list of our memory sections */
● Compilation: biblio
● Compilation: Principes sortie MEMORY {
vect : ORIGIN = 0x00000000, LENGTH = 1k
généraux
● Quelques exemples
d’optimisation de compilation
n 5 sections nommées rom : ORIGIN = 0x00000400, LENGTH = 127k
reset: ORIGIN = 0xBFC00000, LENGTH = 0x00000400
pour processeurs embarqués ram : ORIGIN = 0x400000, LENGTH = 128k
● Exemple 1: génération
cache : ORIGIN = 0xfffff000, LENGTH = 4k
d’adresse pour DSP
}
● Exemple 2: cas des Registres
dédiés
● Exemple 3: gestion du cache
d’instruction
● Quelques manipulation avec
GCC
● Un compilateur pour
l’embarqué: GCC
Conclusion
- p. 94/134
Exemple de LD script (suite)
● Processeurs embarqués
n Description du placement /* uninitialized data */
Introduction .bss :
de chaque section en SECTIONS {
/* the interrupt
Architecture des processeurs
Conclusion
- p. 95/134
● Processeurs embarqués
Introduction
Conclusion
- p. 96/134