IMPORTANT
IMPORTANT
IMPORTANT
Q1) En partant à chaque fois du contenu de la table 1, donner le contenu des registres et des
cases mémoire modifié après exécution des instructions ARM ou séquences d’instructions
a) ADD R8,R3,R4 R8= 80FFDCBA
b) MUL R9,R6,R7 // multiplication entière R9=00000600
c) AND R10,R3,R4 R10= 81002200
d) EOR R11,R3,R4 // Ou exclusif R11 = 7EFF98BA
a)
MOV R1, #0
b)
MOV R0, #0
MOV R1,#250 // 250 mots de 32 bits = 1000 octets
Boucle :STR R0, [R2],#4
SUBS R1,R1, #1
BGT Boucle
c)
ADD R3, R3, R3 LSL #4
d)
ADD R4, R4, R4 LSL #4 // x 17
RSB R4, R4, R4 LSL #3 // 7 x 17 = 119
1
Université Paris Sud 2006-2007
Licence d’Informatique (L313)
EXECUTION DE PROGRAMME
Q3) Que fait la suite d’instructions ARM suivante (écrire le programme C correspondant en
supposant que le contenu des variables x et y a été initialement chargé dans R1 et dans R2)
While (x !=y) {
If (x > y) x=x-y ;
If (x < y) y=y-x ; }
NB : il s’agit de l’algorithme d’Euclide pour calculer le PCD
IMPLANTATION MEMOIRE
Soit la déclaration de variables C suivante
toto 0 0 10000000
toto(16) 16 10 10000010
a 18 12 10000012
b 20 14 10000014
c 22 16 10000016
d 24 18 10000018
2
Université Paris Sud 2006-2007
Licence d’Informatique (L313)
e 26 1A 1000001A
f 28 1C 1000001C
w(0) 32 20 10000020
Y(0)(0) 112 70 10000070
Z(0) 624 270 10000270
foo(0)(0) 664 298 10000298
ouf 744 2E8 100002E8
cest 748 2EC 100002EC
fini 752 2F0 100002F0
Toto[16] : 1000 0010
A : 1000 0012
F : 1000001C
Y[0][0] : 10000070
Foo [0][0] : 10000298
Fini : 100002F0
RCC
Bus R
Bus A
Bus B
3
Université Paris Sud 2006-2007
Licence d’Informatique (L313)
LM1 Rd ← MEM(RT)
LM2 Rd ← MEM(Rs1)
EM1 MEM (Rs1) ← Rs2
EM2 MEM (RT) ← Rs2
NOP Décodage : condition fausse
Q5) : Donner le temps d’exécution de chacune des instructions suivantes (en précisant la
suite des actions élémentaires):
a) ADD R2,R1,R0
b) ADD R3, R1,#4
c) ADD R4, R1, R2 LSL#4
d) LDR R6, [R1,#4]
e) LDR R7, [R1,#4] !
f) LDR R8, [R1],#4
g) BEQ déplacement (condition vraie)
h) BEQ déplacement (condition fausse)
Instruction Total
ADD R2,R1,R0 LI UAL1 2
ADD R3, R1,#4 LI UAL2 2
ADD R4, R1, R2 LSL#4 LI DEC UAL3 3
LDR R6, [R1,#4] LI CA1 LM1 3
LDR R7, [R1,#4] ! LI CA2 LM1 3
LDR R8, [R1],#4 LI LM2 CA2 3
BEQ déplacement (V) LI CA4 2
BEQ déplacement (F) LI NOP 2
CACHES.
On suppose que le processeur utilisé a un cache données de 16 Ko, avec des blocs de 64 octets.
Le processeur a des adresses sur 32 bits.
On considère le programme suivant
4
Université Paris Sud 2006-2007
Licence d’Informatique (L313)
Q7) Quel est le nombre total de défaut de caches lors de l’exécution du programme pour les
deux cas suivants : a) correspondance directe, b) associativité quatre voies (quatre blocs par
ensemble) si le cache est à écriture simultanée (write through) et écriture non allouée?
Adresse de X[0] : 1000 0000H
Adresse de X[2048] = 1000 0000 + 2048*8 octets= 1000 4000H
Adresse de Y [0] = 1000 0000 + 4096 *8 octets = 1000 8000H
En correspondance directe, X[0] va dans le bloc 0 du cache, X[2048] va dans le bloc 0 et Y[0]
vont dans le bloc 0 du cache
Il y a donc 2 défauts de cache par itération pour la lecture de X[i+2048] et X[i] et un défaut par
itération en écriture pour Y[0], soit 3 défauts par itération.
Avec l’associativité 4 voies, il y a 2 échecs toutes les 8 itérations en lecture et 1 échec (réécriture)
toutes les 8 itérations en écriture, soit 3/8 défauts par itération.
a) Correspondance directe
réécriture : 3 * 2048 = 6144 défauts
OPTIMISATIONS DE PROGRAMME .
On suppose une version pipelinée du processeur utilisant les instructions ARM.
La latence de toutes les instructions arithmétique et logique est de 1 cycle, sauf pour la
multiplication entière MUL (32 bits x 32 bits et résultat sur 32 bits) qui a une latence de 4.
Les instructions de chargement (LDR) ont une latence de 3 cycles ou 4 cycles (voir Table).
On rappelle qu’une latence de n signifie que si une instruction I démarre au cycle c, une
instruction qui utilise le résultat de I ne peut démarrer qu’au cycle c+n. (une latence de 1
signifie qu’elle peut démarrer au cycle suivant).
Q8) Quel est le temps d’exécution (en cycles) de la boucle ci-dessus. Indiquer une
optimisation possible et donner le nouveau temps d’exécution ?
12 cycles.
En remontant l’instruction SUBS, on obtient 11 cycles.
Si, en plus, on utilise LDR R2, [R4] (3 cycles) et ADD R4,R4,#4, on gagne un cycle
supplémentaire et on obtient 10 cycles
Q9) Quel serait le temps d’exécution (en cycles par itération de la boucle initiale) avec un
déroulage de boucle d’ordre 4 ?
5
Université Paris Sud 2006-2007
Licence d’Informatique (L313)
1 Loop :LDR R1, [R3], #4 1 Loop :LDR R1, [R3], #4 1 Loop :LDR R1, [R3], #4 1 Loop :LDR R1, [R3], #4
2 LDR R2, [R4], #4 2 LDR R2, [R4], #4 2 LDR R2, [R4] 2 LDR R2, [R4], #4
3 3 SUBS R5,R5,#1 3 SUBS R5,R5,#1 3 LDR R7, [R3], #4
4 4 4 ADD R4,R4,#4 4 LDR R8, [[R4], #4
5 5 5 MUL R1,R1,R2 5 LDR R9, [R3], #4
6 MUL R1,R1,R2 6 MUL R1,R1,R2 6 6 LDR R10, [R4], #4
7 7 7 7 LDR R11, [R3], #4
8 8 8 8 LDR R12, [R4], #4
9 9 9 ADD R0,R0,R1 9 MUL R1,R1,R2
10 ADD R0,R0,R1 10 ADD R0,R0,R1 10 BGT Loop 10 MUL R7,R7,R8
11 SUBS R5,R5,#1 11 BGT Loop 11 MUL R9,R9,R10
12 BGT Loop 12 MUL R11,R11,R12
13 ADD R0,R0,R1
14 ADD R0,R0, R7
15 ADD R0,R0, R9
16 ADD R0,R0,R11
17 SUBS R5,R5,#1
18 BGT Boucle
6
Université Paris Sud 2006-2007
Licence d’Informatique (L313)