Examen compilation avancée – 4 Juin 2012– 2ème partie

Download Report

Transcript Examen compilation avancée – 4 Juin 2012– 2ème partie

Compilation avancée
Master informatique UPMC
2011-2012
Examen compilation avancée – 4 Juin 2012– 2ème partie
A traiter sur une copie séparée
Tous les documents et notes de cours/TD/TP sont autorisés.
Exercice 1 : DAG, ordonnancement et cie.
Soit la suite d’instructions assembleur MIPS d’un bloc de base :
(i1)
(i2)
(i3)
(i4)
(i5)
(i6)
(i7)
(i8)
(i9)
(i10)
(i11)
(i12)
lw R5, 0(R4)
lw R7, 0(R3)
add R3, R5, R6
add R8, R7, R3
mul R3, R2, R9
add R7, R3, R6
sw R7, 0(R4)
mul R9, R8, R3
sw R9, 0(R11)
addi R4, R4, 1
bne R4, R0, etiquette
nop
# R5 <- MEM[R4 + 0]
# R7 <- MEM[R3 + 0]
# R3 <- R5 + R6
# R8 <- R7 + R3
# R3 <- R2 * R9
# R7 <- R3 +R8
# MEM[R4 + 0] <- R7
# R9 <- R8 * R3
# MEM[R11 + 0] <- R9
# R4 <- R4 + 1
# saut si R4 différent de 0
Dans tout l'exercice, on considère les délais suivants pour les dépendances RAW
Producteur
Consommateur
Délai
Lecture mémoire (lw)
Opération arithmétique
3
Opération arithmétique
(add, addi, mul, ...)
Lecture/écriture mémoire
(lw/sw)
1
Opération arithmétique
Branchement
2
On supposera un délai de 1 pour les dépendances de type MEMOIRE, WAR ou WAW.
La latence des instructions est de 1 pour les opérations arithmétiques, les branchements et les
écritures mémoire et de 3 cycles pour les lectures mémoires.
Question 1:
Donnez le DAG associé au code ci-dessus en indiquant les dépendances et les délais sur
les arêtes. Vous ne mettrez que les dépendances utiles (pas de redondances).
Question 2:
Quel est le chemin critique de ce bloc de base ? Combien de cycles au minimum faut il
pour exécuter le bloc ci-dessus ?
Question 3:
Donnez le nombre de cycles nécessaires à l’exécution du bloc, en supposant que
processeur cible peut lancer une instruction par cycle (lorsque le pipeline n’est pas
bloqué).
Compilation avancée
Master informatique UPMC
2011-2012
Question 4 :
a) Quelle technique peut on utiliser pour réduire le temps d’exécution de ce bloc de
base ? Qu’apporte t elle ?
b) Mettez en oeuvre votre technique et donnez le DAG associé au nouveau code ;
donnez le nombre de cycles associé au chemin critique du nouveau code.
Exercice 2 : autour des caches
int A[N], B[N], C[N/4], S[N] ;
for( i = 0 ; i < N ; i++){
s= 0;
for( j = 0 ; j < N ; j++)
s += (A[j] + C[j%N/4])* B[j]; /* on accède à C[j modulo N/4] */
/* C ne contient que N/4 éléments */
S[i] = s;
}
Question 1
On considère un cache de taille infinie et complètement associatif sans écriture allouée (pas de
miss sur écriture i.e on ne s'occupe pas des écritures dans le tableau S).
Donnez le nombre de défauts de cache du programme en fonction de N et de la taille de la
ligne L en octets.
Rappel : un entier est codé sur 4 octets.
Question 2
On considère un cache de 4Ko et de taille de ligne 16 octets sans écriture allouée.
Ici on suppose que N vaut 1024.
1. Combien y a t il de lignes de cache ?
2. Si le cache est à correspondance directe, donnez la taille en bits du champ offset et la
taille en bits du champs index d’une adresse vue par le cache.
3. On suppose que le cache est à correspondance directe.
a) Si A[0] va dans la ligne 0 mot 0, dans quel mot et dans quelle ligne vont les
éléments C[0] et B[0] ?
b) Donnez le nombre de défauts de cache du programme.
4. On suppose que le cache est associatif par ensemble de deux.
a) Si A[0] va dans la ligne 0 mot 0, dans quel mot et dans quelle ligne vont les
éléments C[0] et B[0] ?
b) Donnez le nombre de défauts de cache du programme.