DSP - Lirmm

publicité
Processeurs de Traitement
Numérique du Signal (DSP)
Processeurs de Traitement
Numérique du Signal (DSP)
I.
II.
III.
IV.
Olivier Sentieys
IRISA
Université de Rennes I
ENSSAT Lannion
[email protected]
http://www.irisa.fr/R2D2
Introduction
Architectures MAC/Harvard
Evolutions des DSP
Flot de développement
Merci à Daniel Ménard pour son support
Exemples d’applications
I. Introduction
1.
2.
3.
4.
Contexte applicatif
Caractéristiques algorithmiques
Solutions architecturales
Marché des DSP
Téléphonie cellulaire
Communications sans-fil
Contrôle de moteur
Modems
Photo et caméra
numériques
Voix sur IP, réseau
Audio grand public
Navigation
Vidéoconférence
Jouets, consoles vidéo
Synthèse musicale, effets
ARCHI’07 - 4
• Performances
• Faible coût
• Faible énergie
Communications satellite
Analyse sismique
Sécurité
Médical
Reconnaissance vocale
Sonar, radar
Débruitage, écho
Anticollision
…
et pleins d’autres à venir
Tâches élémentaires
Algorithmes de TdSI1
Compression de signal (parole, audio, vidéo)
Filtrage
Modulation et démodulation
Détection et correction d’erreurs
Contrôle
Traitements audio (e.g. réduction bruit,
égalisation, annulation d’écho, conversion de
fréquence)
Reconnaissance vocale
Synthèse de signaux
ARCHI’07 - 5
1Traitement
du signal et de l’image
Signaux numériques
o Temps et amplitude discrets
o Flot de données
o Scalaires, vectorielles, matricielles, …
Traitement temps réel
o Temps d'exécution Tex guidé par flots de données
o Période d'échantillonnage Te période des sorties Tf > Tex
e(t)
Te
s(t)
ARCHI’07 - 6
Algorithme
ex. s(n) = max(moy(e), s(n-1))
Tf
Diversités
Fonctions typiques de TdSI
Complexité des algorithmes de TdSI
Convolution, filtrage (RIF, RII), corrélation, DCT
< 5 MOPS
10-30 MOPS
Faible
mesure/contrôle
> 100-1000 MOPS
Elevé
Compression Compression ADSL
UMTS
parole modemsaudio GSM Compression
Imagerie
vidéo
médicale
Format des données
Application
Taille des données
PWM, mesures, contrôle
1 à 4 - 18 à 22 bits
o y = y + x.h : MAC (multiplication-accumulation)
Adaptation (LMS)
o yn = yn-1 + x.h : MAD (multiplication-addition)
FFT, multiplication complexe
o xr=xr.wr-xi.wi; xi=xr.wi+xi.wr
Viterbi
o a1 = x1 + x2; a2 = y1 + y2;
o y = (a1>a2) ? a1 : a2 : ACS (addition-comparaison-sélection)
convertisseurs sigma -delta
ARCHI’07 - 7
radio HF/VHF, radar
6 - 14 bits
sonar
10 - 12 bits
parole
8 - 14 bits
audio
16 - 20 bits
imagerie / vidéo
8 - 36 bits (par pixel)
analyseurs de s ang
16 - 18 bits
Estimation de mouvement
o sad += |xi,j - yi+u,j+v| : SAD (sum-of-absolute-difference)
ARCHI’07 - 8
Exemple Fil Rouge
Fonctions typiques de TdSI
Filtre Numérique RIF sur N points
Filtre Numérique RIF symétrique sur N points
D
D
D
D
x(n)
h(0)
x
h(1)
x
h(2)
x
h(3)
x
h(4)
+
+
+
+
+
x
y(n)
0
+
+
h(0)
+
x
h(1)
h(2)
x
y(n)
TAP
ARCHI’07 - 9
x
+
ARCHI’07 - 10
+
Fonctions typiques de TdSI
Fonctions typiques de TdSI
FFT Fast Fourier Transform
Filtrage adaptatif LMS
• Butterfly (DIF)
X
X’ = X + W.Y
Y
x
x
x
x
ARCHI’07 - 11
Y’ = X - W.Y
W
+
+
-
DLMS
xn(i-1)
+
-
x
en
ARCHI’07 - 12
+
hn(i)
hn-1(i)
xn(i)
x
+
y
y
Fonctions typiques de TdSI
Caractéristiques algorithmiques
Estimation de mouvement
Charge de calcul importante
o Nids de boucles
o Multiplications-accumulations (convolution)
o Multiplications-additions (FFT, DCT, adaptation, distances, ...)
• Codage vidéo MPEGx, H26x
N+2p
Matched Block
Motion Vector
NxN
(u,v)
p
Reference Block
NxN
Search Window
ARCHI’07 - 13
sadmin = MAXINT; mvx=0; mvy=0;
for (u=-p; u<=p; u++)
for (v=-p; v<=p; v++) {
sad = 0;
for (i=0; i<N; i++) {
for (j=0; j<N; j++) {
sad = sad + ABS[BR(i,j)-FR(i+u,j+v)]
/* if (sad>=sadmin) break; */
}
}
if (sad<sadmin) {
sadmin = sad; mvx = u; mvy = v;
}
}
Précision des calculs
o Virgule fixe ou flottante
o Compromis coût – précision des calculs
Bande passante mémoire
Calculs d'adressage complexes
o Gestion signal, accès image, bit-reverse (FFT), ...
Boucles de traitement courtes
o Les instructions peuvent être placées en interne
o Pas besoin de grande taille de cache (données ou instructions)
ARCHI’07 - 14
Solutions architecturales
Marché des DSP (1)
Efficacité énergétique
Sans fils domine : 75% des revenus en 2004
Systèmes grand public : DVD, TV et radio
numérique, ...
Contrôle de moteurs, ...
Flexibilité
Pleiades, DART
10-50 MOPS/mW
Embedded
Processor
100 -1000 MOPS/mW
Multipurpose
6%
Automotive
3%
ASIP/DSP
Embedded
FPGA
100
PowerPC
1 MIPS/mW
Cellular phone
62%
Reconfigurable
Processor
EE : MOPS / mW
10
1
Consumer
9%
Wireline
(modem, xDSL)
6%
SA110
0.4 MIPS/mW
ASIC
ARCHI’07 - 15
Flexibility
• Spécialisation, parallélisme
2 V DSP
3 MOPS/mW
Wireless (other)
2%
ARCHI’07 - 16
Computer
6%
Cellular
infrastructure
5%
Wirless short
range
1%
Marché des DSP (2)
Marché des DSP (3)
En haut de la liste des plus fortes croissances du
marché de l’industrie des semi-conducteurs
Place dans le marché des processeurs embarqués
14000
DSP Market (M$)
12000
10000
8000
6000
4000
2000
0
1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007
Prévisions Forward Concept Co.
ARCHI’07 - 17
ARCHI’07 - 18
II. Architecture
MAC/Harvard
Architecture Von Neumann
E.g. processeurs RISC
MEMORY DATA BUS
PC
MEM. DATA
REGISTER
REGISTER
FILE
ADDRESS
REGISTER
MUX
ALU
1. Genèse des DSP : MAC/Harvard
2. Modélisation des générations 1 et 2
Panorama des DSP
3. Performances
Code example:
multiply & accumulate
r2 = r2 + #imm * r1
mov #imm,r3
mul r1,r3
add r3,r2
3 instructions, plus de 3 cycles
d'horloge
MEMORY ADDRESS BUS
ARCHI’07 - 20
FIR sur machine Von Neumann
Problèmes
• Bande passante avec la mémoire
• Code pour le contrôle et la gestion de l'adressage
• Multiplication lente
loop:
mov
mov
mpy
add
mov
inc
inc
inc
dec
tst
jnz
*r0,x0
*r1,x1
x0,y0,a
a,b
y0,*r2
r0
r1
r2
ctr
ctr
loop
Data Path
Généralités sur les DSPs
Propriétés du traitement
numérique du signal
Calculs intensifs et
répétitifs
Primitives simples
Memory
Le tout dans un environnement temps réel
Exécution en N.(15 à 20) cycles
ARCHI’07 - 21
ARCHI’07 - 22
Architecture Harvard (1)
Unité de traitement
PROGRAM ADDRESS BUS
DATA ADDRESS BUS
PROGRAM
RAM/ROM
DATA
RAM-A
DATA BUS - A
DATA BUS - B
24
24
X0
X1
Y0
Y1
Operand
Registers
DATA
RAM-B
24
24
Multiplier
DATA BUS - A
56
DATA BUS - B
56
ALU
Shifter
56
(-1, 0, +1)
PROGRAM DATA BUS
Accumulators
PROGRAM
CONTROL
AGU-A
AGU-B
Address Generation
MULTIPLIER
ALU
REGISTERS
ACCUMULATORS
24
A (56)
B (56)
56
ARCHI’07 - 23
Conséquences sur les
architectures
Fonctionnement pipeline
Architecture Harvard
Structures de contrôle
évoluées
Unités de traitement
spécialisées câblées
Gestion d’adressage
complexes
24
56
Shifter/Limiter
Motorola DSP 5600x
Processing Unit
ARCHI’07 - 24
(-1, 0, +1)
24
24
Architecture Harvard (2)
FIR sur DSP conventionnel
Bus et mémoires données/instructions séparées
Unité de traitement de type mpy-acc
Registres distribués ( RISC register file)
Instructions complexes s’exécutant en 1 cycle
• Chaque module (ALU) possède ses propres registres
locaux
Génération adresses efficaces (AGUs)
• Modes d’adressage spéciaux : auto incr-decr, circular
buffering (delay line) ...
in@2 in@1
in
ARCHI’07 - 25
T=DM(*r1+);
P=T*PM(*r0+)
|| T=DM(*r1+);
loop:
acc=acc+P
|| P=T*PM(*r0+)
|| T=DM(*r1+)
jnz loop;
acc=acc+P
|| P=T*PM(*r0+);
acc=acc+P
T
Program
Memory
MULT
Data Path
P
Data
Memory
ALU
ACC
Exécution en N+ cycles
ARCHI’07 - 26
II. Architecture
MAC/Harvard
Processeur : modélisation
Unité de contrôle (IP : Instruction Processor)
• Unité fonctionnelle (UF) qui interprète les instructions et les passe
à l’unité de traitement (DP)
1. Genèse des DSP : MAC/Harvard
2. Modélisation des générations 1 et 2
Panorama des DSP
3. Performances
Unité de traitement (DP : Data Processor)
• UF qui modifie ou transforme les données
Unité de mémorisation
• IM : Instruction Memory : stocke les instructions
• DM : Data Memory : stocke les données traitées par le DP
Unité de communication (EIU : External Interface Unit)
• Contrôle les accès aux données ou instructions externes, ou à
d'autres processeurs
ARCHI’07 - 28
[Flynn72] [Skillicorn88]
Architecture Harvard de base
Processeur : modélisation
IP : Instruction Processor, DP : Data Processor
IM : Instruction Memory, DM : Data Memory
IP
DP
IP
DP
DM
IM
IM
IM
Address from PC
Request Instruc
Receive Intstruc.
Receive State
from DP
Determine
Oper. Add.
Decode
Send to DP
DP
DP
DP
IP
IP
DM
Receive Instruc.
Receive Oper.
Address
Request Operand
DM
e.g. TMS320C10
ARCHI’07 - 29
Return State
Classification de E. Lee [Lee89]
Architecture Harvard de base
TMS320C10 (1982)
• 2N+4 cycles
• 2N+4 instructions!
ARCHI’07 - 30
IP
Store Results
Receive Operand
Exec. Instruction
DM
Optimisations des performances
Comment améliorer l’architecture Harvard ?
Transformations du diagramme d'états
• réarrangement des états
• exécution en parallèle d'états (e.g. Store Results et Return State)
Pipeline de l'exécution des états
• mise en parallèle d'états appartenant à des instructions
successives
Augmentation du nombre de FUs et/ou de DMs
• plusieurs DPs peuvent exécuter des instructions en parallèle sur
des données indépendantes
• FUs spécialisées pour la génération d’adresses
ARCHI’07 - 31
[Verbauwhede00]
ARCHI’07 - 32
Interconnexions entre FUs
Modification 1
Les interconnexions suivantes sont valables pour
toutes les FUs précédentes (DP, IP, IM, DM).
Autorisation de
mémorisation de
données dans l'IM
En un cycle : fetch deux
opérandes de la
mémoire, exécute MAC,
écriture du résultat en
I/O ou mémoire
• 1 - vers - 1
o une FU est connectée à une autre FU
• n - vers - n
o une FUi d'un ensemble de FUs est connectée à une autre FUi
• 1 - vers - n
o une FU est connectée à n autres FUs d'un ensemble de FUs
• n - par - n
DP
IP
1-vers-2
DM
IM/DM
o toute FUi d'un ensemble est connectée à chaque autre FUj
e.g. AT&T DSP32 et DSP32C
ARCHI’07 - 33
ARCHI’07 - 34
Modification 2
Modification 3
DM est une mémoire
multi-ports, plusieurs
accès aux données par
cycle
Utilisable pour des
mémoires internes
Cache pour charger
les instructions
fréquentes
Évite les conflits
d'accès données et
instructions de la
modification 1
DP
DM
IP
IM
e.g. Fujitsu MB86232 (3 ports en mémoire interne)
TMS320C25 : cache 1 instruction (boucles)
DSP16 : cache 15 instructions
ADSP-2100 : cache 16 instructions
ARCHI’07 - 35
ARCHI’07 - 36
DP
IP
1-vers-2
cache
DM
IM/DM
FIR sur DSP conventionnel
Deuxième génération (Modification 4)
TMS320C2x (1986)
Deux mémoires
données DM séparées
En un cycle : fetch
deux opérandes et une
instruction si le cycle
mémoire est le même
que le cycle
d'instruction de base
ZAC || LTD;
LTD || MPY;
RPTK N-1
MACD
APAC || MPY;
APAC;
ARCHI’07 - 37
1-vers-2
DM 1
DM 2
IM
ARCHI’07 - 38
CORE PROCESSOR
DUAL-PORTED
SRAM
TIMER
INSTRUCTION
CACHE
TWO INDEPENDENT
DUAL PORT BLOCKS
PROCESSOR PORT
ADDR
DATA
ADDR
DAG 1
DAG 2
8x4x32
8x4x24
DATA
BLOCK 0
SHARC
BLOCK 1
Architecture Analog Devices
TEST &
EMULATION
PROGRAM
SEQUENCER
PM ADDRESS BUS
EXTERNA
L
PORT
ADDR BUS
MUX
32
DM ADDRESS BUS
48
BUS
CONNECT
(PX)
48
DATA BUS
MUX
DM DATA BUS
HOST PORT
IOP
REGISTERS
(MEMORY MAPPED)
BARREL
SHIFTER
ALU
I/O PROCESSOR
32
MULTIPROCESSOR
INTERFACE
PM DATA BUS
40/32
DATA
REGISTER
FILE
Modification 5
JTAG
DATA
ADDR
ADDR
DATA
24
ARCHI’07 - 39
IP
Motorola DSP 56001 et 96002
TMS320C30, C40, C50
ADSP-2100
Exécution en N cycles
MULTIPLIER
DP
CONTROL,
STATUS &
DATA BUFFERS
DMA
CONTROLLER
Bancs mémoire
multiples
Instruction multiopérandes en parallèle
avec accès I/O
Problème de partition
des données sur un
grand nombre de
bancs (FFT)
LINK PORTS
(6)
IP
2-vers-2
1-vers-4
DM
DM
DM
DM
IM
EIU
IOM
1-vers-4
4
6
SERIAL PORTS
(2)
DP
6
Hitachi DSPi (6 bancs mémoire)
36
ARCHI’07 - 41
Générations
Caractéristiques complémentaires
Performances normalisées (BDTImark)
10000
4ème génération
1000
StareCore(300MHz)
TMS320C62x (300MIPS)
Carmel (300 MHz)
DSP16210 (100 MIPS)
100
DSP56301
TMS320C54x (50-100MIPS)
ADSP2183 (50MIPS)
2ème génération
DSP56001 (13MIPS)
ADSP21xx (13MIPS)
TMS320C50
10
1ère
Localisation des données
• Modèle registre-mémoire, Load-Store
Codage des instructions complexes
• Stationnarité temporelle ou par les données
Format des instructions
• Type d’encodage, compromis consommation/efficacité
Structures de contrôle
3ème génération
• Boucles matérielles, branchement
génération
Modes d’adressage
TMS320C20 (5 MIPS)
TMS320C10 (2.5 MIPS)
1
1980
1982
1984
1986
1988
1990
ARCHI’07 - 42
1992
1994
1996
1998
2000
2002
Année
Résumé (1)
Calcul
Précision
Bande passante mémoire
ARCHI’07 - 44
ARCHI’07 - 43
[cf. Annexes]
Résumé (2)
FUs spécialisées pour les
fonctions classiques de
TdSI en parallèle, MAC
simple cycles
Bits de garde, saturation,
arrondis, multiplication
16-24 bits, addition 32-40
bits
Harvard, bancs et bus
adresses/données
multiples
Accès aux données
Localité temporelle
d’exécution
Flots de données
(streaming)
Temps réel
ARCHI’07 - 45
Modes d’adressage
complexes
Boucles matérielles (zerooverhead), caches
d’instructions spécifiques
Pas de cache de données,
DMA puissants, mémoires
SRAM internes
Gestion des interruptions
Puissance de calcul
II. Architecture
MAC/Harvard
MIPS (Millions of instructions per second)
• Mesure facile mais…
• …peu représentatif des performances réelles
1. Genèse des DSP : MAC/Harvard
2. Modélisation des générations 1 et 2
Panorama des DSP
3. Performances
o VLIW, génération des adresse
MOPS (Millions of operations per second)
MMACS (Millions of MAC per second)
• Prise en compte de l’aspect traitement du signal
• Les autres opérations ne sont pas prises en compte
MOPS/W : Efficacité énergétique
ARCHI’07 - 47
Métriques de performance
Contenu d’un benchmark
Comparaison précision - effort d’implantation
Différents niveaux
Précision de la métrique
• Applications complète
Applications
Taches
o Système de vidéo-conférence, émetteur/récepteur radiomobile, player MP3 ...
• Taches d'une application
o Codeur ou décodeur audio ou vidéo, codeur de parole,
décodeur de Viterbi
Cœurs d’algorithme
Benchmarking
MMACS/MOPS
• Cœurs d'algorithme
o FIR, IIR, FFT, Control, ..
• Opérations
MIPS
o ADD, Mult/MAC, Décalage, Transfert mémoire
Disponibilité … Effort d’implantation
ARCHI’07 - 48
ARCHI’07 - 49
BDTImark2000
BDTIMARK
http://www.bdti.com
Basé sur des cœurs d’algorithme de traitement du signal
o
o
o
o
o
o
o
o
o
o
o
Filtre FIR réel, traitement par blocs
Filtre FIR réel, traitement par échantillons
Filtre FIR complexe, traitement par blocs
Filtre adaptif LMS
Filtre IIR, 2 cellules d'ordre 2 cascadées
Produit de vecteurs
Addition de vecteurs
Recherche de la valeur maximale d’un vecteur
Décodeur de Viterbi
FFT 256 points
Manipulation de bits
Code optimisé manuellement
ARCHI’07 - 50
ARCHI’07 - 51
Temps d’exécution (FFT)
Coût
Important pour une production à fort volume
Zoran ZR3800x
Texas Instruments TMS320C80
Texas Instruments TMS320C541
• Faible coût
Texas Instruments TMS320C52
Texas Instruments TMS320C44
o Les DSPs sont efficaces en MIPS/mW et en MIPS/mm2
o Cela se paye sur la flexibilité et la programmabilité
Texas Instruments TMS320C31
Texas Instruments TMS320C209
SGS-Thomson D950-CORE
NEC PD77015
Motorola DSP56166
Motorola DSP56002
mW/MIPS
M68K $200
IBM MDSP2780
DSP Group OAK
DSP Group PINE
Lucent Technologies DSP 3207
Lucent Technologies DSP32C
Lucent Technologies DSP 1627
Analog Devices ADSP-21062
I386 $300
DSP1 $150
Pentium $500
Pentium MMX $700
DSP32C $250
DSP16A $15
Analog Devices ADSP-2171
0
100
200
300
400
500
600
700
800
900
DSP16210 <$10
DSP1600 $10
Execution Tim e (s)
ARCHI’07 - 52
I286 $200
ARCHI’07 - 53
[Ackland ISLPD98]
Coût – performance (FFT)
Énergie
Filtrage numérique RIF
Zoran ZR3800x
C549
Texas Instruments TMS320C541
• 100 MHz, 2.5V
18
NEC PD77015
Motorola DSP56166
Motorola DSP56002
IBM MDSP2780
Lucent Technologies DSP 3207
Lucent Technologies DSP32C
Lucent Technologies DSP 1627
Analog Devices ADSP-21062
Analog Devices ADSP-2171
0
10000
20000
30000
40000
50000
60000
70000
Cost-Time Product (s$)
ARCHI’07 - 54
16
14
12
ARCHI’07 - 55
Virgule Fixe
Virgule Flottante
C6201
• 200 MHz, 1.8V
DSP16210
• 100 MHz, 3.3V
10
ZSP16401
8
6
• 200 MHz, 2.5V
4
ADSP-21160
2
• 100 MHz, 2.5V
0
C6701
C6
70
1
Texas Instruments TMS320C31
Texas Instruments TMS320C209
C5
49
Watt-microsecondes
Texas Instruments TMS320C44
C6
20
1
DS
P1
62
10
ZS
P1
64
01
AD
SP
-2
11
60
Texas Instruments TMS320C52
• 167 MHz, 1.8V
Évolution des DSP
III. Évolution des DSP
1.
2.
3.
4.
5.
6.
DSP conventionnels améliorés
Capacités SIMD
DSP hybride MCU
VLIW
Superscalaire
Comparaison de performances
Améliorer les performances au delà de
l'augmentation liée à la vitesse d'horloge ?
Augmenter le parallélisme
• Augmentation du nombre d'opérations exécutées
dans chaque instruction
• Augmentation du nombre d'instructions exécutées
par cycle d'horloge
Ajouter des unités spécialisées
Améliorer le contrôle
ARCHI’07 - 57
Plus d’opérations par instruction
Plus d’instructions par cycle
Augmenter le nombre d'opérations qui peuvent
être exécutées dans chaque instruction
L'objectif est ici de profiter du parallélisme au
niveau instruction (ILP) d'une application
Deux techniques sont bien connues :
• Ajouter des unités d'exécution
o
o
o
o
multiplieur, additionneur, ...
jeu d'instruction à enrichir
taille de l'instruction à augmenter
bus de transfert mémoire à augmenter
• VLIW : empaquetage de plusieurs instructions de
type RISC dans une seule "super-instruction"
• Superscalaire : exécution parallèle de plusieurs
instructions sélectionnées dynamiquement par le
processeur
• Augmenter les capacités SIMD (ou SWP)
Dans le même ordre d'idées
• Utiliser des unités fonctionnelles spécialisées
• Utiliser un coprocesseur
• Architectures hybrides DSP/MCU
ARCHI’07 - 58
ARCHI’07 - 59
Générations
DSP conventionnels améliorés
Performances normalisées (BDTImark)
10000
4ème génération
1000
StareCore(300MHz)
TMS320C62x (300MIPS)
Carmel (300 MHz)
DSP56301
TMS320C54x (50-100MIPS)
ADSP2183 (50MIPS)
2ème génération
DSP56001 (13MIPS)
ADSP21xx (13MIPS)
TMS320C50
10
• TMS320C54x
Architectures multi-MAC
DSP16210 (100 MIPS)
100
Troisième génération (1995)
Ajout d’unités spécialisés ou utilisation de
coprocesseurs
• Lucent DSP 16xxx
Multiprocesseurs sur une puce
3ème génération
• Principalement pour image/vidéo
• TMS320C80, MC68356
1ère génération
TMS320C20 (5 MIPS)
TMS320C10 (2.5 MIPS)
1
1980
ARCHI’07 - 60
1982
1984
1986
1988
1990
1992
Année
1994
1996
1998
2000
2002
ARCHI’07 - 62
Architecture C54x
DB
C54x
C54x
• 40-100-160 MIPS
• 1000-2000-3000 MIPS/W
• 60% of cellular handsets
• $5 for C5402 100MIPS - $75
CB
PB DB
DB
CB DB CB EB
17x17b mult.
40b ALU
40b adder
ACS unit
Viterbi,LMS
FIRS, FFT
• Dual cores (C5420)
ARCHI’07 - 63
ARCHI’07 - 64
C54x
C54x
FIR symétrique
A
B
Bus1
A
Bus1
T
Mult
Add
A
Bus1
Bus2
Bus3
x(N-i-1)
x(i)
+
x
h(i)
+
y
y
ALU
A
B
Bus1
T
ARCHI’07 - 65
A
B
0
A
B
Bus1
Bus2
DFG du coeur de la boucle
ARCHI’07 - 66
A
B
ALU
ALU
A
B
A
B
MAC
Bus4
C54x
C54x
e.g. N=20
Ressources du C54x
T
+
x
+
+
A
x
+
+
x
+
+
x
+
+
x
+
+
2
3
4
B
Mul/Add
x
+
1
10
9
8
7
+
5
6
x
+
ALU
+
Bus 1
x(0)
Bus 2
x(15)
+
+
+
+
+
+
+
+
+
Bus 3
+
x
ARCHI’07 - 67
+
Bus 4
ARCHI’07 - 68
Architectures multi-MAC
FIR sur DSP conventionnel
• e.g. Lucent DSP 16xx
DO N TIME:
acc=acc+P
// P=X*Y
// Y=*r0++
// X=*r1++
Architectures multi-MAC
Bus X 16b
Bus I 16b
MULT
ALU
FIR sur DSP dual-MAC
Bus X 32b
• e.g. Lucent DSP 16xxx
Bus I 32b
o 400 MIPS, 380mW
o $5 - $80
DO N/2 TIME:
acc=acc+P0+P1
// P0=X0*Y0
// P1=X1*Y1
// Y=*r0++
// X=*r1++
MULT
ALU
MULT
ADDER
Exécution en N cycles
Exécution en N/2 cycles
2 ACC
ARCHI’07 - 69
8 ACC
ARCHI’07 - 70
Architecture C55x
C55x
C55x
FIR sur C55x dual-MAC
• Jusqu'à 20 MIPS/mW
• C54x
o Consommation -85%
o Performances 5x
C5510
•
•
•
•
rptblocal sample_loop-1
mov
*AR0+,*AR1
; Put new sample to signal buffer x[n]
mov
*AR0+,*AR3
; Put next new sample to location x[n+1]
mpy
*AR1+,*CDP+,AC0
; The first operation
:: mpy
*AR3+,*CDP+,AC1
|| rpt
CSR
mac
*AR1+,*CDP+,AC0
; The rest MAC iterations
:: mac
*AR3+,*CDP+,AC1
macr *AR1,*CDP+,AC0
:: macr *AR3,*CDP+,AC1
; The last MAC operation
mov
pair(hi(AC0)),dbl(*AR2+); Store two output data
sample_loop
160 MHz, 320 MIPS
80mW
4 MIPS/mW
160 KW SRAM
C5502
• 400 MIPS
• 160 mW
• 2.5 MIPS/mW
ARCHI’07 - 71
ARCHI’07 - 72
Capacités SIMD (ou SWP)
Opérations parallèles sur différentes largeurs de chemins
de données (16 bit, 8 bit, ...)
• Split unités d'exécution
• Unités d'exécution multiples
Exemples
• Lucent DSP16xxx, ADI ADSP-2116x, ADI TigerSHARC, TI C64x
16 bits
16 bits
x,+,-
ARCHI’07 - 73
16 bits
16 bits
x,+,-
16 bits
16 bits
Avantages et inconvénients
Méthode
Augmenter le
nombre d'UE
Augmenter
les capacités
SIMD
Matériel
dédié
ARCHI’07 - 74
Avantages
Inconvénients
Augmentation limitée de
la consommation, du
coût et de la densité de
code
Augmentation importante de la
complexité
Difficulté à programmer et à
compiler
Compatibilité maintenue Perspectives limitées
Gain en performance très Nécessité d'avoir un
important pour des
parallélisme au niveau des
traitements par blocs
données important
Modifications
architecturales limitées
Consommation mémoire
importante
Gain en performance
important
Nécessite une bonne
connaissance de l'application
Architecture hybride DSP/MCU
III. Évolution des DSP
1.
2.
3.
4.
5.
6.
Associer des fonctionnalités MCU…
DSP conventionnels améliorés
Capacités SIMD
DSP hybride MCU
VLIW
Superscalaire
Comparaison de performances
• gestion efficace des ITs
• manipulation de bits
• exécution conditionnelle
à des fonctionnalités DSP,
• calcul intensif
pour obtenir un code performant et efficace
• limiter la taille du code et donc du circuit
ARCHI’07 - 76
Architecture hybride DSP/MCU
Architecture Hybride DSP/MCU
Méthodes de couplage
ST100, ST122, ST140 (STMicroelectronics)
Méthode
Multiprocesseur
Coprocesseur
Avantages
2 jeux d'instructions Les 2 cœurs travaillent en //
Pas de conflits de ressources
Les 2 cœurs travaillent en //
Inconvénients
Duplication de ressources
Deux outils de
développement
• 32 bits MCU / 16 bits DSP
• Fonctionnalités DSP
o MAC, architecture Harvard, modes d’adressages complexes
• et microcontrôleur
o architecture load/store, large espace d’adressage, code
compact
Modèle de programmation
plus complexe
Transferts de données
Extension
Solution Hybride
Modèle de programmation plus
simple
Contraintes imposées par
l'architecture initiale
Architecture plus "propre"
Développement plus
risqué
Contrôleur mémoire instruction
@
d
UC
Mémoire
UT
UA
Contrôleur mémoire donnée
ARCHI’07 - 77
ARCHI’07 - 78
ST 140
Compatible ST100
Compatible ST122 (dualMAC)
Flexible 16-bit/32-bit
Load/Store architecture
4-MAC/4-ALU
Two data clusters
Double data memory
bandwidth
ST140-DSP Core in
0.13m process
Frequency up to 600 MHz
Intensive Processing
2.4 GMAC/s
Large Data Bandwidth
9.6 Gbytes/s
Power Consumption
down to 0.180 mW/MHz
III. Évolution des DSP
1.
2.
3.
4.
5.
6.
100 mW, 24 MMAC/mW
DSP conventionnels améliorés
Capacités SIMD
DSP hybride MCU
VLIW
Superscalaire
Comparaison de performances
ARCHI’07 - 79
Very Long Instruction Word
Parallélisme niveau instructions
.
.
INS N
ALU MAC MU
INS3
– Ordonnancement
des instructions
– compilation
– Run-time
– Unité de dispatch
ARCHI’07 - 81
INS1 INS2
?
INS4
INS6 INS5
Caractéristiques
...
Time
INS 1
INS 2
INS 3
...
• Plusieurs instructions par cycle, empaquetées dans
une "super-instruction" large
• Architecture plus régulière, plus orthogonale, plus
proche du RISC
• Jeu de registres uniforme, plus large
Exemples
•
•
•
•
TI TMS320 C62x et C64x
ADI TigerSHARC ADS-TS20x
Freescale (Motorola) MSC71xx et MSC81xx
StarCore SC1400 Agere/Motorola (DSP core)
ARCHI’07 - 82
Texas Instruments TMS 320C6x
VLIW : C62xx
256
MPY
MPY
ADD
ADD
MV
STW
ADD
MPY
SHL
ADD
SUB
STW
STW
ADDK
ADD
B
ADD
SUB
LDW
LDW
B
MVK
NOP
NOP
MPY
MPY
ADD
ADD
STW
STW
ADDK
NOP
Fetch
VLIW CPU with eight functional
units (RISC-like code)
2400 MIPS @ 300MHz
CPU
• Two sets of functional units
including:
o Two multipliers
o Six arithmetic logic units (ALUs)
o 32 registers with 32-bit wordlength each
o Data-addressing units .D1 and
.D2 exclusively responsible for
data transfers between memory
and the register files
32x8=256 bits
Dispatch Unit
L:ALU
S:Shift+ALU
M:Multplier
D:Address
Functional
Unit
.L1
Functional
Unit
Functional
Unit
Functional
Unit
.S1
.M1
.D1
Functional
Unit
.D2
Register File A
Functional
Unit
Functional
Unit
Functional
Unit
.M2
.S2
.L2
Register File B
1M-bit on-chip memory
32-bit ext. mem. interface
2 enhanced-buffered serial ports
16-bit host access port (Host
processor access to on-chip
data memory)
Flexible PLL clock generator
(x ext. clock rate for 2 or 4)
Price: $9-$102
•
•
•
•
Data Memory Controller
Data Address 1
8-/16-/32-bit data support
40-bit arithmetic options
Saturation and normalisation
Bit-field manipulation and
instruction: extract, set, clear, bit
counting
Data Address 2
ARCHI’07 - 83
ARCHI’07 - 84
Internal Memory
Exploitation du parallélisme
Exploitation du parallélisme
Déroulage des boucles : augmente l'ILP
Pipeline logiciel : maximiser l’IPC
For(i=0;i<N;i+=3)
{
ACC=ACC + x[i].h[i]
ACC=ACC + x[i+1].h[i+1]
ACC=ACC + x[i+2].h[i+2]
}
For(i=0;i<N;i++)
{
ACC=ACC + x[i].h[i]
}
• Optimisation du code assembleur
Prologue
LOAD
MULT
LOAD
LOAD
MULT
N/3
ACC
LOAD
N
MULT
MULT
LOAD
LOAD
ACC
ACC
MULT
MULT
ACC
Taux d’utilisation
du processeur
Épilogue
100%
ARCHI’07 - 85
ACC
ACC
100%
ARCHI’07 - 86
Taux d’utilisation
du processeur
C6x
Functional
Unit
Functional
Unit
Functional
Unit
Functional
Unit
Functional
Unit
Functional
Unit
Functional
Unit
Functional
Unit
.L1
.S1
.M1
.D1
.D2
.M2
.S2
.L2
Exploitation du parallélisme
Filtre FIR sur DSP VLIW C6x
Register File A
Register File B
x[0] = input;
acc = 0;
for (i=0; i<8; i++)
{
prod = h[i] * x[i];
acc = acc + prod;
}
output = (short) (acc >> 15);
Data Memory Controller
Instruction
Description
LDH
ADD
Charge une donnée
16 bits venant de la
mémoire dans un
registre
Charge deux données
16 bits consécutives
venant de la mémoire
Multiplication entre 2
registres, résultat
dans un troisième
Addition
SUB
Soustraction
B
NOP
LDW
MPY
Nombre de
cycles
5
Unités .M
Unités .L
Unités .S
Unités .D
-
-
-
.D1
.D2
5
-
-
-
.D1
.D2
2
.M1
.M2
-
-
-
1
-
1
-
Branchement
6
-
.L1
.L2
.L1
.L2
-
.D1
.D2
.D1
.D2
-
aucune opération
1
-
-
.S1
.S2
.S1
.S2
.S1
.S2
-
ARCHI’07 - 87
Méthodes d’optimisation
Depuis le code “RISC”
Instructions en parallèle
Enlever les NOP
Déroulage de boucle
Pipeline logiciel
Lecture mémoire de paquets de données
2 LDH
1 LDW
2 LDW
1 LDDW
ARCHI’07 - 89
-
1 Start
2
3 Loop
4
5
6
7
8
9 [B0]
10 [B0]
MVKL .S2 8, B0
MVKL .S1 0, A5
LDH .D1 *A8++,A2
LDH .D1 *A9++,A3
NOP 4
MPY .M1 A2,A3,A4
NOP
ADD .L1 A4,A5,A5
SUB .L2 B0,1,B0
B .S1 loop
// Update most recent sample
// Zero accumulator
// 8 taps
// perform Q.15 multiplication
// Update 32-bit accumulator
// Cast output to 16 bits
;
;
;
;
;
;
;
;
;
;
Intialize the loop counter (B0) to 8
Intialize the accumulator (A5) to 0
Load x(i) in A2
Load h(i) in A3
LDH has a latency of 5 cycles
Multiply x(i) and h(i) in A4
MPY has a latency of 2
Add A4 to the accumulator A5
Sub 1 to the counter B0
Branch to loop if B0 <> 0
ARCHI’07 - 88
Code non optimisé
loop:
loop:
ldh.d1
ldh.d1
ldh.d1
ldh.d1
nop
*A8++,A2
*A9++,A3
4
mpy.m1
mpy.m1
nop
add.l1
add.l1
A2,A3,A4
sub.l2
sub.l2
[b0] b.s1
nop
ARCHI’07 - 90
A4,A6,A6
B0,1,B0
loop
5
Code RISC
40 itérations
16*40 = 640 cycles
Instructions parallèles
loop:
ldh.d1
|| ldh.d2
ldh.d2
nop
mpy.m1x
mpy.m1x
nop
add.l1
sub.l2
[b0] b.s1
nop
*A8++,A2
*B9++,B3
4
A2,B3
,A4
A2,B3,A4
Parallélisme ?
40 itérations
15*40 = 600 cycles
Remplacer les NOP
loop:
ldh.d1
|| ldh.d2
ldh.d2
nop
*A8++,A2
*B9++,B3
4
mpy.m1x
mpy.m1x
nop
add.l1
A4,A6,A6
B0,1,B0
loop
5
Not Optimized Properly
A2,B3
,A4
A2,B3,A4
Instructions à la
place des NOP
Dépendances interinstructions
LDH
A4,A6,A6
sub.l2
[b0] b.s1
nop
B0,1,B0
loop
5
LDH
a
b
5
5
MPY *
2
ADD
1
+
loop
1
ARCHI’07 - 91
B
6
ARCHI’07 - 92
Remplacer les NOP
loop:
ldh.d1
|| ldh.d2
ldh.d2
sub.l2
[b0] b.s1
nop
mpy.m1x
mpy.m1x
nop
add.l1
ARCHI’07 - 93
count SUB
*A8++,A2
*B9++,B3
B0,1,B0
loop
2
A2,B3
,A4
A2,B3,A4
A4,A6,A6
Déroulage de boucles
Instructions à la
place des NOP
40 itérations
8*40 = 320 cycles
Déroulage + ré-ordonnancement des instructions
Cycle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ARCHI’07 - 94
.D1
LDH
LDH
LDH
LDH
LDH
LDH
LDH
LDH
LDH
.D2
LDH
LDH
LDH
LDH
LDH
LDH
LDH
LDH
LDH
.L1
ADD
ADD
ADD
ADD
ADD
ADD
ADD
ADD
ADD
.L2
.M1
MPY
MPY
MPY
MPY
MPY
MPY
MPY
MPY
MPY
.M2
.S1
.S2
NOP
N=40 itérations
7 + (N-7) +7 =
47 cycles
47 instructions
VLIW!
Accès mémoire multiples
Pipeline logiciel
Réintroduction de la boucle sur le motif répété
Cycle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.D1
LDH
LDH
LDH
LDH
LDH
LDH
LDH
LDH
LDH
.D2
LDH
LDH
LDH
LDH
LDH
LDH
LDH
LDH
LDH
.L1
ADD
ADD
ADD
ADD
ADD
ADD
ADD
ADD
ADD
.L2
SUB
SUB
SUB
SUB
SUB
SUB
SUB
.M1
MPY
MPY
MPY
MPY
MP Y
MPY
MPY
MPY
MPY
MPY
.M2
.S1
.S2
B
B
B
B
B
B
A7
a1 * x1
47 cycles
15 instructions
A0
LDW.D1
*A5++,A0
x0
A1
LDW.D1
*A6++,A1
=
A3
a0 * x0
MPY.M1 A0, A1, A3
MPYH.M1 A0, A1, A7
+
a1x1 + a0x0 A4
ADD.L1
A3, A7, A4
ARCHI’07 - 96
Accès mémoire multiples
StarCore SC1400 core
Lecture de 4 données + 2 MAC en parallèle
ARCHI’07 - 97
a0
x
x1
ARCHI’07 - 95
Cycle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a1
NOP
.D1
LDW
LDW
LDW
LDW
LDW
LDW
LDW
LDW
.D2
LDW
LDW
LDW
LDW
LDW
LDW
LDW
LDW
.L1
ADD
ADD
ADD
ADD
ADD
ADD
ADD
ADD
ADD
.L2
ADD
ADD
ADD
ADD
ADD
ADD
ADD
ADD
.M1
.M2
MPY
MPY
MPY
MPY
MPY
MPY
MPY
MPY
MPYH
MPYH
MPYH
MPYH
MPYH
MPYH
MPYH
MPYH
.S1
.S2
NOP
Processeur VLIW 16 bits développé en commun
par Agere (Lucent) et Freescale (Motorola)
300 MHz, faible tension
Optimisé pour faible consommation
• Meilleure densité de code (16 bits) que C6x
• Pipeline plus simple (5 étages contre 11)
N=40 itérations
7 + (N/2-7) +8
= 28 cycles
BMU
ARCHI’07 - 98
MAC
ALU
Shift
MAC
ALU
Shift
MAC
ALU
Shift
MAC
ALU
Shift
VLIW combiné au SIMD
VLIW combiné au SIMD
ADI TigerSHARC
C64x
• Jusqu’à 1.1 GHz, ~9 GOPS
• Six ALUs (32/40-Bit)
• Combine le VLIW au SIMD afin d'atteindre un
parallélisme massif
• SIMD hiérarchique
o une 32/40-Bit, deux 16-Bit, ou quatre 8-Bit opérations
arithmétiques par cycle et par ALU
o Le TigerSHARC peut exécuter 8 multiplications 16x16 en
virgule fixe par cycle (4x le C62xx)
• Deux multiplieurs, quatre 16x16-Bit ou huit 8x8-Bit
multiplications par cycle
• Coprocesseurs VCP (Viterbi) et TCP (Turbo)
Instruction SIMD
ALU
MAC
Shift
4 MAC 16 bits
ARCHI’07 - 99
C64x
ALU
MAC
Shift
'C6411: 300 MHz, $39, 1.0 V, 250mW, 2400
MIPS, 1200 MMACS
4 MAC 16 bits
ARCHI’07 - 100
Superscalaire
Techniques dérivées des processeurs généraux
hautes-performances
• Prédiction de branchement
• Cache dynamique
Plusieurs (2-4) instructions par cycle
Jeu d'instructions de type RISC
Parallélisme important
LOOP
//
LDDU
Exemple
• LSI Logic LSI40x
o 4-way, 260MHz
ARCHI’07 - 101
ARCHI’07 - 102
(ZSP400 core)
FIR on LSI40x
R4, R14, 2
LDDU
R8, R15, 2
MAC2.A R4,R8
AGN0
LOOP
Avantages et inconvénients
Méthode
Avantages
Grand bon dans les
performances
VLIW
Superscalaire
Architectures plus orthogonales
meilleures cibles pour les
compilateurs
Grand bon dans les
performances
Architectures plus orthogonales
meilleures cibles pour les
compilateurs
Pas de problèmes de
séquencement
Générations : bilan
Inconvénients
Bande passante vers la
mémoire importante
Forte consommation
Séquencement délicat
Augmentation de la taille du
code importante
Bande passante vers la
mémoire importante
Plus forte consommation
Temps d'exécution
difficilement prédictible
ARCHI’07 - 103
ARCHI’07 - 104
ARCHI’07 - 105
ARCHI’07 - 106
Processeurs récents (2006)
Vitesse (BDTImark2000)
DSP
•
•
•
•
•
Analog Devices BF53x (Blackfin)
Analog Devices TS20x (TigerSHARC)
Freescale MC1xx/81xx
Texas Instruments C55x
Texas Instruments C64x
Processeurs applicatifs
•
•
•
•
Intel PXA255/26x (XScale)
Intel PXA27x (XScale + Wireless MMX)
Samsung S3C24xx (ARM9)
Texas Instruments OMAP 591x (ARM9 + C55x)
ARCHI’07 - 107
Coût – performance (mark/$)
ARCHI’07 - 109
ARCHI’07 - 108
Efficacité énergétique (mark/mW)
ARCHI’07 - 110
Efficacité mémoire (memmark)
ARCHI’07 - 111
BDTIMark
ARCHI’07 - 112
Flot de développement général
III. Flot de développement
Développement (actuel) d'applications (signal)
Algorithme 1
1. Flot général de développement
2. Compilation pour DSP
3. Arithmétique virgule fixe
Mise au point
de l'algorithme
– Matlab/Simulink
– SPW, Ptolemy, CoCentric
– VCC
Génération manuelle ou automatique
Code C
"flottant"
– Compilateur C, debugger
– Utilisation de vecteurs de
test issus de la simulation
système
Génération manuelle
Code C
"fixe"
ARCHI’07 - 114
– Compilateur C, debugger
– Utilisation de vecteurs de
test issus de la simulation
système
Flot général (suite)
Algorithme 1
Code C
Outils de développement
Implantation
logicielle
– Compilateur C pour DSP
– Simulation assembleur
Spécifications flots de données du TS, prototypage
rapide, simulation, validation
• Matlab/Simulink, Cadence SPW, Synopsys Cossap, Ptolemy
Outils de profiling
Système d'Exploitation
Temps Réel
Implantation
Matérielle
Algorithme 2
Code C
– Traduction en VHDL
– Synthèse du circuit
– Simulation VHDL
• gprof, ...
Compilateurs depuis des langages de haut-niveau
• DSP en virgule fixe ou flottante
Optimisations de l'assembleur
Critères de sélection des outils et du langage
• Compilateurs : taille et vitesse du code
• Simulateurs : vitesse
Algorithme N
Code C
ARCHI’07 - 115
ARCHI’07 - 116
Compilation
Inefficacité des compilateurs C
Compilation C vs optimisation assembleur
Surcoût
associé au
compilateur
• e.g. STMicrolectronics
Assembl
er MCU
28%
Assembl
er DSP
55%
Code C
DSP
8%
Code C
Ctrl
9%
Code C
MCU
5%
Assembler
MCU
25%
Assembler
DSP
25%
Code C
DSP
45%
Facteur 4 à 10
(virgule fixe)
Facteur 2 à 4
(flottants)
Orthogonalité
1000
800
Sur coût (%)
Conception de code enfoui dans l'industrie
Sur coût temps d'execution
1200
ANSI C
C modifié
600
400
200
• VLIW
0
[Paulin97]
ARCHI’07 - 117
ADSP21xx/
ADI
[Paulin00]
DSP56002/
Motorola
TMS320C51/
TI
Processeurs
ARCHI’07 - 118
TMS320C54/
TI
TMS320C62/
TI
Inefficacité des compilateurs C
Raisons de l’inefficacité
Surcoût associé
au compilateur
Absence de support de l’arithmétique virgule fixe
Inefficacité des techniques classiques de
développement des compilateurs
Sur coût taille du code
400
350
ANSI C
• Taille du code
300
o développement de l'architecture puis du compilateur
compilateurs reciblables
C modifié
Sur coût (%)
250
200
Inefficacité des techniques classiques de
compilation
150
100
o architecture non orthogonale, unités spécialisées, instructions
complexes
50
0
Absence de support des spécificités des DSP
-50
o registres d’état, modes d’adressage (modulo, bit inversé)...
-100
ADSP21xx/
ADI
DSP56002/
Motorola
TMS320C51/
TI
TMS320C54/
TI
Processeurs
ARCHI’07 - 119
TMS320C62/
TI
Extensions du langage C : e.g. Embedded C
ARCHI’07 - 120
Formats de codage
III. Flot de développement
Virgule fixe
• Représentation : signe - partie entière - partie fractionnaire
nx
mx
1. Flot général de développement
2. Compilation pour DSP
3. Arithmétique virgule fixe
S bm-1 bm-1
b1
b0 b-1 b-2
m 1
bn-2 bn-1 bn
x = (2) m S + bi 2i CA2
i = n
o bx = m x + n x + 1
o le format d’une donnée ne varie pas au cours du temps
Virgule flottante
• Représentation : exposant - mantisse
Exposant e bits
SE
d1
d2
Mantisse M+1 bits
de-1
SE
C1
C2
C3
Cm-2 Cm-1 Cm
1 M
x = 2u (1) S E + Ci 2i 1 2 i =1
E 1
avec u = (1) S E d i 2i
i =1
ARCHI’07 - 122
Comparaison fixe - flottant
Eléments de l’UT
Virgule fixe (>90% des ventes des DSP)
Multiplieur câblé
Additionneur
U.A.L.
• Précision importante mais problèmes de débordement
o nécessité de recadrer les données
•
•
•
•
Temps de développement plus long
Efficacité énergétique plus importante, plus rapide et moins cher
Consommation moins importante
Marché : applications grand public
2N+bg
Accumulateur
Gestion des débordements
Bits de garde
Registres d’accumulation
Sat
/Arr
stockage des données en double précision
ARCHI’07 - 123
ARCHI’07 - 124
Codage en virgule fixe : objectifs
Règles de l’arithmétique virgule fixe
mA
SA bmA
nA
b1
+
b0 b-1 b-2
mB
mBnB
bnA
nB
SB SB SB bmB Sb0 bb-1 bb-2 bbnB b0 b0
B
mB
0
-1
-2
nB
SR bmR
b1
b0 b-1 b-2
m R = max(m A , m B ) + 1
• Représentation identique
• Doublement du bit de signe
bnA
Objectifs pour le codage en virgule fixe
• Garantir l’absence de débordements
o Connaissance du domaine de définition des données
• Maximiser la précision
n R = max(n A , n B )
mA
Multiplication: a b
SA bmA b1
nA
b0 b-1 b-2 bnA
mB
Minimiser le nombre
de bits de poids fort
non utilisés
Minimiser le pas de
quantification
nB
SB bmB b0 b-1 bnB
S bm-1 bm-1
SR SR bmR
b1
mR = m A + mB
ARCHI’07 - 125
+
recadrage des données
• C67x > $30
o Alignement de la virgule
o Extension de bits
Registres à décalage
Temps de développement plus rapide, compilateurs plus efficaces
Plus grande portabilité, pas de recadrage
Pas de débordements : dynamique de 1500dB (32 bits)
Plus cher, consomme plus
• Format de a et b identique
• Choix d’un format commun
N
MAC
Virgule flottante
Addition: a+b
B
N
2N
• C5x > $5
•
•
•
•
A
(1 Op/cycle)
b0 b-1 b-2
b1
b0 b-1 b-2
bn-2 bn-1 bn
bnR
PMSB
nR = nA + nB
ARCHI’07 - 126
PLSB
Codage en virgule fixe : étapes
Fil rouge : filtre FIR
N 1
1. Détermination de la dynamique des données
y ( n ) = ai x ( n i )
Méthodes statistiques ou analytiques
2. Détermination de la position de la virgule
i =0
3. Détermination de la largeur des données
z-1
x (n)
a0
Opérateurs SIMD, précision multiple
z-1
a1
4. Evaluation de la précision des calculs
+
Méthodes par simulation ou analytiques
ARCHI’07 - 127
aN-2
z-1
+
Dynamique des données
float x[N] = {0.123, -0.569,...} /* Signal d’entrée du filtre */
float h[N] = {-0.0295, 0.0364,.., -0.0295 }; /* Coefficients du filtre */
int main() {
float x[N], y[M], acc;
int i,j;
Normes utilisées en TS
Norme L1
/* Initialisation variables internes */
for(j=0; j<M; j++) {
/* Filtrage du vecteur d'entrée input */
x[0] = Input[j];
acc = x[0]*h[0] ;
for(i=N-1; i>0; i--)
{
acc = acc + x[i]*h[i]; /* Calcul d'une cellule du filtre */
x[i] = x[i-1];
/* Vieillissement du signal */
}
y[j] = acc;
}
z max1 = max n (x(n) ). h(m)
m = Norme Chebychev
z max 2 = max n , (x(n) )max(H ( ) )
+
y (n)
Méthode garantissant
l’absence de débordements
Méthode garantissant l’absence
de débordements pour un signal
d’entrée à bande étroite e.g.
x(n)=cos(wt)
Arithmétique d’intervalle (non récursifs)
}
ARCHI’07 - 129
ARCHI’07 - 128
Fil rouge : filtre FIR
for(i=0; i<N; i++){x[i] = 0;}
aN-1
ARCHI’07 - 130
Filtre FIR
Filtre FIR
Propagation de la dynamique (intervalles) des
entrées au sein du GFS représentant l’application
Détermination de la position de la virgule pour les données
Insertion des opérations de recadrage pour aligner la virgule
Dx = 0.99
z-1
mx = 0
[-1,1]
z-1
x (n)
z-1
x[i]
z-1
x[i-1]
Da = 0,4
a0
[- |a0|, |a0| ]
a1
aN-2
aN-1
ma = 1
N 1
N 1
ai , ai i =0
i =0
[- |a1|, |a1| ]
+
Norme L1
+
+
ai
N 1
m = m =0
>> 1
m'MULT ' = 1
ARCHI’07 - 132
Graphe flot de données d’une cellule du FIR
Sources de bruit dans un FIR
Bruit de quantification associé à l’entrée
Bruit lié au recadrage externe Recadrage des
coefficients
[ xm , xm ]
x (n)
b0
z-1
>>
>>
>>
b1
z-1
>>
bN-2
>>
>>
bN-1
x (n)
>>
Renvoi en
mémoire
du résultat
>>
b0
Filtre FIR
+
+
Recadrage
interne
+
b
m
k = log 2 ( K )
b1
+
b1
+
z-1
bN-2 +
b N-2
bgm1 +
bN-1 +
b N-1
bgm N-2+
bgm N-1+
+
+
+
+
Filtre FIR
Biais lié au codage
des coefficients m = ARCHI’07 - 133
z-1
bg mem
[ K .xm , K .xm ]
K=
+
bgm0 +
>>
z-1
+
b0
y (n)
+
Bruit lié au renvoi en
mémoire du résultat
bx
z-1
>>
ACC
+
m ADD = max(mMULT , m ACC , m ACC ) = 1
Recadrage des données dans un FIR
Recadrage
externe
ACC
m ACC = 1
max n (y (n) )= max n (x(n) ). h(m) = ai = 1.65
ARCHI’07 - 131
mMULT = mb + mx + 1 = 0
mMULT = 0
y (n)
DACC = 1,65
ARCHI’07 - 134
Bruit lié au recadrage interne
y (n)
Filtre FIR
Filtre FIR : code C virgule fixe
Architecture du processeur cible
x[i] h[i]
• Données en mémoire sur 16 bits
• Multiplication 16 bits 16 bits 32 bits
• Addition 32 bits + 32 bits 32 bits
MULT
bmult
+
ADD
int x[M] = {-809, -6180, -1570, ...}
int h[N] = {-1933, 2386, 3631,};
/* Signal x, codage (16,0,15)*/
/* Coefficients (16,-1,16)
*/
Le signal d’entrée et les coefficients sont spécifiés au niveau du code C en
entiers sur 16 bits (absence de type virgule fixe en C) :
• l’entier représentant x (16,0,15) est obtenu en multipliant x par 215
• l’entier représentant h (16,-1,16) est obtenu en multipliant h par 216
int main() {
int x[N]; y[M];
long acc;
int i,j;
ACC
(16,0,15)
x (n)
z-1
a0
(16,-1,16)
z-1
a1
(32,0,31)
>> 1
aN-2
z-1
>> 1
>> 1
+
+
+
(32,1,30)
y (n)
Filtre récursif (IIR)
z-1
b1
/* Calcul d'une cellule du filtre */
/* Vieillissement des variables internes */
Réduction de la largeur de la variable 32 bits 16 bits
Récupération des 16 bits les plus significatifs de la donnée
(l ’opération de cast sur acc permet de récupérer les bits de poids faible
uniquement)
ADD0
+
b0
…
yn
yi-1(n)
sortie cellule
précédente
+
+
a2,i
a1,i
wi(n-2)
wi(n-1)
wi(n)
a1
z-1
b2,i
b1
b2
z-1
a2
wn
+yn
b0
z-1
+
}
}
(entrée) x(n)
ADD 1
wn
a1
for(i=N-1; i>0; i--) {
acc = acc + ((long)(x[i]*h[i])>>1);
x[i] = x[i-1];
}
y[j] = (int)(acc>>16);
Recadrage de la sortie de la multiplication :
changement de format : (32,0,31) (32,1,30)
Filtre IIR d’ordre 2 (cellule i)
Cascade de cellules d’ordre 2
/* Filtrage du vecteur d'entree input */
ARCHI’07 - 136
Renvoi de la donnée en mémoire
+
for(j=0; j<M; j++) {
x[0] = Input[j];
acc = (long)(x[0]*h[0])>>1;
(16,1,14)
ARCHI’07 - 135
ADD 0
/* Initialisation des variables internes du filtre */
aN-1
>> 1
(32,1,30)
xn
for(i=0; i<N; i++){x[i] = 0;}
a2
b1,i
+
b2
b0,i
ADD1
+
y (n) (sortie)
yi(n) (entrée cellule suivante)
ARCHI’07 - 137
ARCHI’07 - 138
Dynamique des données (IIR)
Dynamique des données (IIR)
Sources de débordements : additionneurs
Exemple
2
• IIR : 2 sources ADD0 et ADD1
x [1,1]
H ( z) =
ADD 1
wn
ADD 0
xn
+
+
=2
0
0.5
1
1.5
z-1
h
D
( m) = 9 mw = 4 k1 = 4
1
1 + a1 z + a2 z 2
ymax1 = xmax . h(m)
1
H ( z) =
1
b2
2
b0 + b1 z + b2 z
1 + a1 z 1 + a2 z 2
ARCHI’07 - 139
a1
a2
b2
b0
b1
= -27951
= 27581
= 16384
= 16384
= -7956
Dynamique des données (IIR)
Position de la virgule (IIR)
mx = log 2 (max n (x(n) ))= 0
H1 ( z ).H 2 ( z ).H 3 ( z )
mwi = log 2 (max n (wi (n) ))= 4
H1 ( z ).H 2 ( z )
H1 ( z )
H1(z)
H 1D ( z )
y1(n)
y2(n)
H2(z)
y3(n)
H3(z)
w2(n)
w3(n)
H1 ( z ).H 2 ( z ).H 3 D ( z )
1
b + b z 1 + b2i z 2
H iD ( z ) =
H i ( z ) = 0i 1i 1
1 + a1i z 1 + a2i z 2
1 + a z + a z 2
1i
m yi = log 2 (max n (yi (n) ))= 2
maij = log 2 (max j (ai
(
w1(n)
H1 ( z ).H 2 D ( z )
3.5
Fonction de transfert des filtres H(z) et HD(z)
ARCHI’07 - 140
Cellules d’ordre 2 cascadées
3
Codage des coefficients
m = a2
2.5
HD(jw)
m = b1
2
xmax
a1
m = ARCHI’07 - 141
y
wmax1 = xmax . hD (m)
x(n)
0
h(m) = 2.5645 m
H(jw)
1
0.5
m = H D ( z) =
0.5 0.2428 z 1 + 0.5
1 0.85 z 1 + 0.8417 z 2
xmax
yn
b0
z-1
1.5
))= 0
( ))= 0
mbij = log 2 max j bij
m ADD 0 = MAX (mx , mai + mwi + 1, mwi ) = 5
m ADD1 = MAX (mbi + mwi + 1, m yi ) = 5
2i
ARCHI’07 - 142
Codage des données (IIR)
Conversion flottant-fixe (IRISA)
ADD0
(16,mx,,nx)
x(n)
(16,0,15)
(32, madd0 , nadd0)
+
+
C source
code
(32,5,16)
#define pi 3.1416
#define pi 3.1416
main()
{
float x,h,z
for(i=1;i<n;i++)
{
*z= *y++ + *h++
}
for(i=1;i<n;i++)
{
*z= *y++ + *h++
}
C orrelator.C
#define pi 3.1416
#
define pi 3.1416
#define pi 3.1416
main()
{
float x,h,z
for(i=1;i<n;i++)
{
*z= *y++ + *h++
}
#define pi 3.1416
main()
{
float x,h,z
for(i=1;i<n;i++)
{
*z= *y++ + *h++
}
for(i=1;i<n;i++)
{
*z= *y++ + *h++
}
for(i=1;i<n;i++)
{
*z= *y++ + *h++
}
Floating-point
specification
C orrelator.C
C orrelator.C
a2,i
A
a1,i
(16,mw,nw)
B
wi(n-2)
16
16
wi(n-1)
b2,i
32
wi(n)
b1,i
+
b0,i
ADD1
+
(32, madd1, nadd1)
(32,5,16)
Binary-point
position
determination
High level
synthesis tool
BSS
Selection
Scheduling
Allocation
32
Acc
Fixed-point conversion
(16,4,11)
Fixed-point
specification
optimization
Accuracy
evaluation
Fixed-point
specification
optimization
Code generation
tool
CALIFE
Selection
Scheduling
Allocation
(16,my,ny)
(16,2,13)
Precision
constraint
y (n)
ARCHI’07 - 143
ARCHI’07 - 144
[Ménard02, Ménard04]
Conclusions
Conclusions
Processeurs spécialisés garantissent :
Les processeurs généraux ont maintenant des
performances qui concurrencent les DSPs
• efficacité énergétique, rapport performances/coût
• autres exemples probants
o Processeurs multimédia
o Network Processor NPU
Les performances des processeurs DSPs ont augmenté
de 150x sur 15 ans (40% par an)
Les nouvelles architectures sont nombreuses
• Mais les DSPs conventionnels dominent toujours le volume
• Mais le prix ... et la consommation ne sont pas
applicables aux applications embarquées grand public
La facilité de compilation est un facteur
important
• time-to-market...
Choisir un DSP requiert une analyse fine
• qui dépend de l'application...
ARCHI’07 - 145
ARCHI’07 - 146
Perspectives
Piste 1 : DSP conventionnel
Quelle sera l’architecture
pour le traitement du
signal et de l’image de
demain (ou d’après
demain) ?
DSP conventionnel multi-MAC
Unités spécialisés
Programmation ?
Viterbi
Turbo
MULT
MULT
MULT
MULT
FFT
ALU
ALU
ALU
ALU
CDMA
ACC
ARCHI’07 - 147
ARCHI’07 - 148
Piste 1 : DSP conventionnel
Piste 2 : ULIW
DSP spécialisés
Ultra Large Instruction Word
• Texas Instruments OMAP 591x
• e.g. Silicon Hive AVISPA+
o Mobile 2-3G
o ARM9 + C55x
Compilation ?
SMT ?
• Digital Media System-on-Chip (DMSoC): DaVinci
o Codec vidéo
o ARM926EJ-S Core
• 202.5-MHz at 1.05 V or 256-MHz at 1.2 V
o C64x+TM
• 405-MHz at 1.05 V or 513-MHz at 1.2 V
o Blocs dédiés au codage vidéo
o Interface imager/DAC/HD
ARCHI’07 - 149
ACC
ARCHI’07 - 150
Piste 3 : multiprocesseur
PicoArray
PicoArray (picoChip)
Static Interconnect
PE: 16-bit 3-way VLIW
• ~320 PE (VLIW 3-way)
• 160 MHz
• 190 GIPS
VHDL: structure
C/Assembly: PE
ARCHI’07 - 151
Piste 4 : FPGA
ARCHI’07 - 152
Piste 5 : processeur reconfigurable
e.g. Altera Stratix
Architecture DART
RDP1
Segmented Network
RDP2
• Multiplieurs 9x9 – 18x18, 2
GMAC/s par bloc, 250 MHz
Ctrl
RDP3
RDP4
Ctrl
DMA
RDP5
Config
Mem.
FPGA
Data.
Mem.
• 3G/UMTS Mobile Terminal
• 802.11a (Channel Est.)
• IRISA/R2D2
• STMicroelectronics
• CEA LIST/LETI
RDP6
Loop Managment
AG1
AG2
AG3
AG4
Data
mem1
Data
mem2
Data
mem3
Data
mem4
Performances
Fully Connected Network
reg
ARCHI’07 - 153
reg
ARCHI’07 - 154
FU1
FU2
FU3
FU4
•
•
•
•
•
5-10 GOPS/[email protected]
200MHz, 11mm2
300 mW @ 5 GOPS
16 MOPS/mW @ 5 GOPS
Circuit en juin 2005
Bibliographie
Bibliographie
DSP Processor Fundamentals :
Architectures and Features
(IEEE Press Series on Signal
Processing)
by Phil Lapsley, Jeff Bier, Amit
Shoham, Edward A. Lee,
Wiley-IEEE Press, 1997
Programmable Digital Signal
Processors
by Yu Hen Hu (Editor), Marcel
Dekker, 2001
Digital Signal Processors :
Architectures,
Implementations, and
Applications
by Sen M. Kuo, Woon-Seng S.
Gan, Prentice Hall, 2004
ARCHI’07 - 155
Bibliographie
Digital Signal Processing
Applications With Motorola's
DSP56002 Processor
by Mohammed El-Sharkawy,
Prentice Hall, 1996
Digital Signal Processing
Implementation Using the
TMS320C6000 DSP Platform
(With CD-ROM) by Naim
Dahnoun, Prentice Hall, 2000
DSP Applications Using C and
the TMS320C6x DSK by Rulph
Chassaing, Wiley-Interscience,
2002
VLSI Digital Signal Processors:
An Introduction to Rapid
Prototyping and Design
Synthesis
by Vijay Madisetti,
Butterworth-Heinemann, 1995
Méthodes et architectures pour
le TSI en temps réel, de Didier
Demigny, Hermès, 2002
ARCHI’07 - 156
Références
ARCHI’07 - 157
[David00] R. David, Etat de l'art des cœurs de DSP, Rapport DEA, ENSSAT, 2000.
[Sentieys00] O. Sentieys, Etat de l'art des DSP, École thématique du CNRS - Conception de
systèmes enfouis, Seix (Ariège), 20-23 novembre 2000.
[Sentieys01] O. Sentieys, DSP et processeur superscalaire : la convergence ?, Symposium en
Architectures Nouvelles de Machines, Paris, 2001.
[Ménard04] D. Ménard, Processeur de traitement du signal, ENSSAT/EII, 2004.
[ICE97] B. McClean, “Status 1997: A Report on the Integrated Circuit Industry”, Integrated Circuit
Engineering Corporation (ICE), Scottsdale, 1997
[Bhaskaran95] V. Bhaskaran & K. Konstantinides, “Image and Video Compression Standards Algorithms and Architectures”, Kluwer Academic Publishers, Boston, 1995.
[Bier97] J. Bier, P. Lapsley & G. Blalock, “Choosing a DSP Processor”, Berkeley Design Technology
(BDT), 1997.
[DeMan97] H. De Man and al., “Language Based Design of Digital Systems”, AI Course, KU
Leuven/IMEC, april 1997.
[Lapsley96] P. Lapsley and G. Blalock, “How to Estimate DSP Processor Performance”, IEEE
Spectrum, July 1996.
[Pirsch97] P. Pirsch: “Video and Image Processing Architectures - Dedicated and Programmable
Solutions”, NFWO Symposium on Video Processing Architectures, January 1997.
[Ackland98] B. Ackland and C. Nicol, "High Performance DSPs - What's Hot and What's Not?", IEEE
Int. Symposium on Low Power Electronic Design ISLPED, 1998.
[Ropers99] A. Ropers and al., "DSPstone : TI C54x" Report IISPS AAchen University of Technology,
1999.
ARCHI’07 - 158
Webographie
http://www.bdti.com
http://dsprelated.com/
http://www.ti-training.com/courses
http://www.eg3.com/dsp/index.htm
Annexes
BDTIMark
Caractéristiques complémentaires
Génération de code pour DSP
ARCHI’07 - 159
BDTIMARK
ARCHI’07 - 161
ARCHI’07 - 162
ARCHI’07 - 163
ARCHI’07 - 164
ARCHI’07 - 165
ARCHI’07 - 166
Localisation des opérandes
Codage des instructions
Mémoire
Modèle registre-mémoire
tacc
• Opérandes situées en mémoire et
dans les registres
Stationnarité temporelle
R
texec
Opérateur
o Temps d ’exécution de l’instruction
tinst = tacc+ texec
• Une instruction définit l’ensemble des opérations à
réaliser pour chaque unité fonctionnelle
A
MULT R1,R2,T
Mémoire
Modèle « Load-Store »
i
tacc
• Opérandes situées uniquement dans
des registres
o tinst = max(texec,,tacc)
RX
Transfert
mémoire .U.T.
RY
Opérateur
A
ARCHI’07 - 167
ADD T,A,A
Unité
Multiplieur
texec
LOAD
LD R1,AR1
i+1
i+2
i+3
LOAD
LOAD
MULT
MULT
MULT
ADD
ADD
Unité
Accumulateur
LD R2,AR2
i+4
ADD
ARCHI’07 - 168
Codage des instructions
Structures de contrôle
Stationnarité des données
Boucle matérielle
• Une instruction définit une séquence complète
d ’opérations à réaliser sur un ensemble de données.
• Optimiser le traitement des boucles de petite taille
o Initialisation des paramètres de la boucle en 1 instruction
o Pas d'instructions supplémentaires pour la gestion de la fin de la boucle
Instructions de branchement
MAC *AR1,*AR2
i
Transfert
mémoire .U.T.
Unité
Multiplieur
Unité
Accumulateur
ARCHI’07 - 169
LOAD
i+1
LOAD
MULT
i+2
i+3
i+4
• Branchement multi-cycles: ajout de NOP entre BR et 1ère
instruction
• Branchement retardé
Instructions à prédicat
LOAD
MULT
MULT
ADD
ADD
• Instructions conditionnelles
ADD
ARCHI’07 - 170
If
Then
Else
[R1]
[!R1]
INF R1,R5,10
ADD R3,R2,3
ADD R3,R2,3
Modes d’adressage
Modes d’adressage
Adressage immédiat :
Adressage indirecte par registre :
directement dans l’instruction
la donnée est stockée
Adressage registre directe :
stockées dans des registres
• Registre d’adresse (AR) pointant sur les données
(Ex C54x: LD #248, A)
LD *AR1, A
les données sont
• Possibilités de post modifications:
(Ex C54 : SUB A, B)
Adressage mémoire directe :
donnée est stockée dans l’instruction
l’adresse de la
partie stockée dans
un pointeur de page DP
9 bits
a11 A10 a9
a8
TMS320C54x
7 bits
x0 x1
x2
x5
a0
partie stockée dans
l’instruction
ARCHI’07 - 171
o linéaire : AR:= AR ± 1
LD *AR1+, A
addr = AR1
AR1 = AR1 + 1
o indexé : AR:= AR ± MR
LD *ARx+0, A
addr = AR1
AR1 = AR1 + AR0
LD *AR1+% ,A
addr = AR1
AR1 = circ(AR1 + 1)
– MR: registre d’index
• Pour limiter le nombre de bits stockés dans l’instruction un
adressage paginé est utilisé. L’adresse est composée de deux
parties :
a15
addr = AR1 (A *AR1)
o modulo : (AR:= AR ± 1)N
x3
(%) specifies the size of the circular buffer.
o bit inversé : FFT
addr = ARx
ARx = B(ARx + AR0)
LD *ARx+0B ,A
After access, AR0 is added to ARx with reverse carry (rc) propagation.
ARCHI’07 - 172
Génération de code pour DSP
Partie frontale
Génération d’un code de qualité
But: transformation du code source en une
représentation intermédiaire (I.R.)
o rapide (Texec faible)
o compacte (Tcode faible)
o sûr de fonctionnement
y = k + 60 * x
Analyse lexicale
id1= id2+60*id3
Analyse syntaxique
Intégration des spécificités des DSP
=
id1
Table des symboles
+
id2
o arithmétique virgule fixe
o spécificités des unités de mémoire et de contrôle
k id2 réels ….
Analyse sémantique
id3
=
id1
x id3 réels ….
Flexibilité du compilateur
Génération I.R.
id1
Optimisation I.R.
ARCHI’07 - 173
*
Entier Réel
id3
60
=
o compilateur « reciblable »
ARCHI’07
[SUIF] - 174
60
+
id2
[Leupers97,Marwedel99]
*
y id1 réels ….
+
id2
*
id3
60.0
Partie finale
But: génération d’un code cible à partir de la
représentation intermédiaire
Sélection d’instructions [SPAM, CHESS, CodeSyn, Calife]
o Reconnaissance de motifs [Leupers97, Leupers99]
o Couverture d’arbre
Programmation dynamique
Allocation et assignation de registres
o allocation de registres Coloration de graphe
o assignation de registres [Araujo95, Wess95]
Ordonnancement
• Ordonnancement par liste, ILP, de traces
Optimisations dépendantes de l’architecture
o adresses mémoire [Liao96, Sudarsanam95]
ARCHI’07 - 175
Post-optimisations
Post-optimisations
• instructions de changement de mode
• assignation des bancs de mémoire
• l’allocation mémoire et la génération des adresses
Génération des adresses : exploiter les U.G.A.
registres d’adresse : ARi
post-modifications (ARi++, ARi--)
registres d’offset : MRk (ARi= ARi ± MRk )
Optimiser le placement des données en mémoire afin
d’utiliser efficacement les UGA
ARCHI’07 - 177
Sélection de code
E:= E1 Op E2
Principe :
Op
• découpage du problème de production de code optimal
pour E en sous-problèmes optimaux de production de code
pour les sous-expressions E1 et E2
Ri = Rj
Rj = Ri op Rj
Ri = Ri op Mj
Ri = Rj
Mi = Ri
C =1
C=2+4+1
C =1
+
C =1
C =1
Jeu d ’instructions
2 registres : R0, R1
3 opérateurs : *,+,/
tlatence_op = 1 cycle
(C[0], C[1], C[2])
(3,2,2)
+
(0,1,1)
a
S2
S1
(0,1,1)
b
c
*
(0,1,1)
(5,4,4)
/
(3,2,2)
(0,1,1)
d
Architecture de la machine
ARCHI’07 - 176
E2
Rj = Ri op Rj
Ri = Ri op Mj
(8,8,7)
C =1
E1
Hypothèses
e
(0,1,1)
Téléchargement