Académique Documents
Professionnel Documents
Culture Documents
7
3 étapes importantes dans la
synthèse à haut niveau
(par analogie: cas du RISC)
• Allocation : représente le matériel disponible: e.g. à l’étape
EX comme par exemple unité entière, unités flottantes
pipelinées ou pas, unités de branchement, etc.
• Ordonnancement (scheduling) : consiste à assigner les
opérations aux étapes de contrôle (et en y incluant au besoin
des suspensions).
• Assignation (binding): consiste à lier les opérations au
matériel disponible, p.e. si j’ai 2 unités flottantes à quelle unité
j’assigne l’opération?
8
Plan
1) Déroulement de boucles:
#pragma HLS unroll
On assume Le pragma doit être dans la boucle
3 cycles pour respecter
les dépendances résultat
3 x 4 = 12 cycles
3 x 2 = 6 cycles
Solution
non pipelinée
Solution
pipelinée
* On utilise aussi
le terme software
pipelining
• Soit l’expression X = (A + B + C) * (D + E + F) * G
• On suppose une contrainte de ressources de 2 Latence=4
additionneurs et 1 multiplieur
• La latence est de 4 cycles mais on
peut débuter un nouveau calcul à
toute les 2 cycles (-II = 2). On a
donc un nouveau résultat à tous les Débit=2
Débit =1
etc.
Avec 4 unités fonctionnels +/- et 2 unités de * on garde la même latence,
mais on a un résultat à chaque cycle à partir de 5 (II=1)
shift_reg
Pragma
Interface
Interface du lab 2
1ère fenêtre
2e fenêtre
3e fenêtre
Filtrage
• Soit n=3:
o C’est comme si on avait une fenêtre de 3 points qui se déplace de droite à gauche.
o Chaque fenêtre fait une multiplication/accumulation sur 3 points (sorte de moyenne) et
o remplace le point milieu par ce résultat.
INF3610 Systèmes embarqués 28
Étude de cas: FIR
De manière plus générale:
Entrée
Sortie
Filtre FIR avec n points
Pseudo code du FIR
Soit un tableau x de n points:
1. on décale à droite (1 shift)
2. on lit un nouveau point en x[0]
3. on fait la multiplication/accumulation i.e.
4. on met le résultat de 3) dans un tableau résultat y et on retourne à 1.
INF3610 Systèmes embarqués
29
Étude de cas: FIR
De manière plus générale:
Ici la fenêtre
x[0] x[1] x[n] est fixe et les points
Entrée circulent de gauche à droite,
Donc avec un décalage à droite
de 1 à chaque opération
Sortie
Filtre FIR avec n points
Pseudo code du FIR
Soit un tableau x de n points:
1. on décale à droite i.e. 1 shift (et le point le plus à droite est perdu)
2. on lit un nouveau point en x[0]
3. on fait la multiplication/accumulation i.e.
4. on met le résultat de 3) dans un tableau résultat y et on retourne à 1.
INF3610 Systèmes embarqués
30
Étude de cas: FIR
http://www.csl.cornell.edu/courses/ece5775/pdf/lecture02.pdf
Solution séquentielle
//mult/add
//affectation à y
11*3=33
Ressources
Parallélisation
Pourquoi?
INF3610 - Systèmes embarqués 40
Étude de cas: FIR
Existe-t-il un compromis entre les 2 solutions précédentes?
Réponse: oui!
Plutôt que de dérouler la boucle, allons y
avec le pipeline
http://www.csl.cornell.edu/courses/ece5775/pdf/lecture02.pdf
Accumulation
Décalage
Étude de cas: FIR
Multiplication
Accumulation
Décalage
Solution séquentielle
3 x 11
Solution pipelinée
INF3610 Systèmes embarqués 3 + 11 43
Étude de cas: FIR
Résultat de synthèse (pipeline + array partitionning)
Au total
N.B. Similaire au déroulement de boucle
II (débit demandé)
Latence
11+3=14
• Accumulation de l’iteration 1
4
• Multiplication de l’itération 2
5
• Décalage de l’itération 3
n=m
n≠m
46
INF3610 Systèmes embarqués
multiplication matricielle
Solution 1: sans optimisation
49
INF3610 Systèmes embarqués
multiplication matricielle
Solution 2: pipeline opération mult/acc
Dépendance de données
52
INF3610 Systèmes embarqués
multiplication matricielle
Solution 3: pipeline la boucle Product
53
INF3610 Systèmes embarqués
multiplication matricielle
Solution 3: pipeline la boucle Product
Dépendance de ressources
(structurelle)
• Trois solutions:
2) HLS ARRAY_PARTITION complet (solution 4)
• Trois solutions:
2) HLS ARRAY_PARTITION complet (solution 5)
• Trois solutions:
2) HLS ARRAY_PARTITION complet (solution 6)
Condition de branchement
Donnée à écrire
Imm
Étendre
RI[16:31]
64
Donnée à écrire en
registre
Ordonnancement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Ai1
B1j
Ai2
B2j
pipeline de
la page 54
Ai3
B3j
Ai4
B4j
66
INF3610 Systèmes embarqués
multiplication matricielle
Solution 7: pipeline les boucles Col et Product
67
INF3610 Systèmes embarqués
multiplication matricielle
Solution 7: pipeline les boucles Col et Product
Est-ce possible?
69
INF3610 Systèmes embarqués
multiplication matricielle
Solution 7: pipeline les boucles Col et Product
#pragma HLS_pipeline
for (i=1; i<=1000; i++)
read X;
Add;
write X;
#pragma HLS_pipeline
for (i=1; i<=1000; i++)
read X;
Add;
write X;
Si on a pas 2 accès/cycle?
Réponse:
On voit que le debit II > 1
I.e. qu’on ne termine plus une iteration
par cycle…
Cette degradation est due à ce qu’on
appelle une dépendance structurelle!
P.S. D’où l’importance du
array_partititionning… 72
INF3610 Systèmes embarqués
Autre cas: variante possible de l’opération scalaire sur des tableaux
#pragma HLS pipeline
for (i=1; i<=1000; i++) for (i=1; i<=1000; i++)
X[i] = Y[i] + S; read X;
Y[i] = X[i] + S; read Y
Add 1;
Add 2;
write X;
write Y
À partir du cycle 6 on a
deux operations
mémoire par cycle. Ici
pour permettre II=1 il
nous faut 4 operations
mémoires
simultanémment et 2
additions simultanées.
73
INF3610 Systèmes embarqués
INF3610 - Systèmes embarqués 74
75
INF3610 Systèmes embarqués
Autre cas: variante possible de l’opération scalaire avec dépendances de données
(mais cette fois avec unroll plutôt que pipeline)
X[1] = X[0] + S;
#pragma HLS unroll X[2] = X[1] + S;
for (i=1; i<=1000; i++)
for (i=1; i<=1000; i++) X[3] = X[2] + S;
X[i] = X[i-1] + S;
read X[i-1]; X[4] = X[3] + S;
Add; .
write X[i] On déroule la boucle
.
Il sera impossible d’avoir: X[1000] = X[999] + S;
76
INF3610 Systèmes embarqués
Autre cas: variante possible de l’opération scalaire avec opérations flottantes
77
INF3610 Systèmes embarqués
Autre cas: variante possible de l’opération scalaire avec opérations flottantes
78
INF3610 Systèmes embarqués