Département Informatique L3 Inforamtique Jean

Transcription

Département Informatique L3 Inforamtique Jean
Département Informatique
L3 Inforamtique
Jean-Michel Richer
UE Architecture des Ordinateurs
2013/2014
[email protected]
TP 4
Exercice 1 - Ecrire un programme assembleur (tp4_1_nasm.asm) qui permet de
tester le temps pris par différentes méthodes de calcul de la somme de deux
vecteurs. On créera trois tableaux d’entiers de 131.072 octets chacun alignés sur
une adresse multiple de 16. On initialisera les deux premiers tableaux a et b de
manière à ce que ∀i, ai = 1, bi = 2. On calculera ci = ai + bi .
Le programme prendra en paramètres 2 arguments :
– le nombre d’itérations de la boucle principale de calcul
– la méthode choisie (entier)
Les méthodes de calcul à utiliser ou implanter sont :
– méthode 1 : simple traduction en assembleur
– méthode 2 : dépliage de boucle par 2
– méthode 3 : dépliage de boucle par 4
– méthode 4 : utiliser des registres SSE ainsi que les instructions associées
movdqa, paddd
– méthode 5 : utiliser des registres SSE avec dépliage de boucle par 2
RDTSC : On utilisera l’instruction RDTSC pour calculer le nombre de cycles
CPU utilisés par chaque méthode de copie afin de déterminer le temps d’exécution.
L’instruction RDTSC (ReaD Time-Stamp Counter) donne le nombre de cycles
d’horloge écoulés depuis la mise en marche de l’ordinateur et retourne le résultat
sous forme d’une valeur 64 bits dans EDX:EAX. L’instruction RDTSC est exécutée
dans le mode OOO (Out-Of-Order), il faut utiliser une instruction de synchronisation comme CPUID avant d’exécuter RDTSC.
section .data
; compteur initial 64 bits
cpu_start: dd 0,0
; difference entre final et initial
cpu_cycles: dd 0,0
; affichage 64bits en 32bits
msg: db "%llu", 10,0
section .text
; appel de CPUID, RDTSC
xor eax,eax
cpuid
; lecture compteur de cycle et enregistrement
rdtsc
mov
[cpu_start],eax
mov
[cpu_start+4],edx
; traitement a realiser
....
; appel de CPUID, RDTSC
xor
eax,eax
cpuid
rdtsc
; calcul de la difference et stockage
sub
eax,[cpu_start]
sbb
edx,[cpu_start+4]
mov
[cpu_cycles],eax
mov
[cpu_cycles+4],edx
; affichage
push edx
push eax
push dword msg
call printf
add
esp,12