La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Programmation système

Présentations similaires


Présentation au sujet: "Programmation système"— Transcription de la présentation:

1 Programmation système
IFT-17584 Programmation système @Pierre Marchand, 2001

2 Programmation MMX Introduction MMX veut dire Multi Media Extension.
La technologie MMX utilise la technique SIMD (single instruction multiple data, i.e. traitement vectoriel) pour effectuer des opérations arithmétiques et logiques sur des octets, des mots ou des doubles mots placés dans des registres MMX de 64 bits. @Pierre Marchand, 2001

3 Programmation MMX Registres 63 MM0 MM1 MM2 MM3 MM4 MM5 MM6 MM7
MM6 MM5 MM4 MM3 MM2 MM1 MM0 @Pierre Marchand, 2001

4 Programmation MMX + + + + + + + +
Par exemple, l’instruction PADDB aditionne 8 octets signés de l’opérande source à 8 octets signés de l’opérande destination et stocke le résultat de 8 octets dans la destination. Ce sont 8 additions séparées, i.e. la retenue n’est pas propagée d’un octet à l ’autre. + + + + + + + + @Pierre Marchand, 2001

5 Programmation MMX Cette technologie s’adresse aux média modernes, les communications et les applications graphiques, qui utilisent souvent des algorithmes qui effectuent les mêmes opérations sur un grand nombre de petits éléments tels que des octets, des mots, des mots doubles. Par exemple, les données audio sont représentées par des quantités de 16 bits. Une instruction MMX peut agir sur 4 de ces mots simultanément @Pierre Marchand, 2001

6 Programmation MMX En effet, 1 pixel couleur = 24 bits
Les données graphiques et video sont représentées par des quantités parallélisées de 8 bits. En effet, 1 pixel couleur = 24 bits = 3 couleurs RGB de 8 bits chacune Une instruction MMX peut agir sur 8 de ces octets simultanément. Les données audio sont représentées par des échantillons de 8 ou 16 bits. @Pierre Marchand, 2001

7 Programmation MMX Formats des données en mémoire Octet 7 Octet 6
63 56 55 48 47 40 39 32 31 24 23 16 15 8 7 Octet 7 Octet 6 Octet 5 Octet 4 Octet 3 Octet 2 Octet 1 Octet 0 Adresse 0x1007 Adresse 0x1000 63 48 47 32 31 16 15 Mot 3 Mot 2 Mot 1 Mot 0 Adresse 0x1006 Adresse 0x1000 63 32 31 Double mot 1 Double mot 0 Adresse 0x1004 Adresse 0x1000 @Pierre Marchand, 2001

8 Programmation MMX Arithmétique à saturation
En mode wraparound, les résultats qui débordent vers le haut ou vers le bas sont tronqués et seuls les bits les moins significatifs du résultat sont retournés, i.e. la retenue est ignorée. Exemple : 80 + FF = 7F au lieu de (1)7F = 00 au lieu de (1)00 En mode saturation, les résultats d’une opération qui déborde vers le haut ou vers le bas sont tronqués (saturés) à une limite de l’étendue des données pour le type de données. @Pierre Marchand, 2001

9 Programmation MMX Saturation
Le résultat d’une opération qui déborde l’étendue du type de données sature à la valeur maximum de l’étendue. Le résultat d’une opération qui est inférieur à l’étendue de représentation sature à la valeur minimum de l’étendue. Exemples: = FF au lieu de (1)00 pour un octet non signé = 00 au lieu de F0 pour un octet non signé = 7F au lieu de E0 pour un octet signé 90 + A0 = 80 au lieu de (1)30 pour un octet signé @Pierre Marchand, 2001

10 Programmation MMX Saturation
Limites des étendues de données pour la saturation Le mode saturation ne s’applique pas aux doubles mots. @Pierre Marchand, 2001

11 Programmation MMX Syntaxe movd eax, mm0 // 32 bits
movq mm2, qword ptr [ebp-8] // 64 bits movd eax, mm0 // 32 bits movd [edi+4], mm1 // 32 bits paddsb mm0, qword ptr [ebp-8] // 64 bits Dans Masm32, il faut ajouter .MMX au début du fichier .asm juste après l’identification du processeur. .686P .MMX option casemap:none @Pierre Marchand, 2001

12 Programmation MMX Instructions Arithmétiques
Wraparound Signed Unsigned Saturation Saturation Addition PADDB PADDSB PADDUSB PADDW PADDSW PADDUSW PADDD Soustraction PSUBB PSUBSB PSUBUSB PSUBW PSUBSW PSUBUSW PSUBD @Pierre Marchand, 2001

13 Programmation MMX Instructions Arithmétiques
Wraparound Signed Unsigned Saturation Saturation Multiplication PMULL PMULH Multplication-Addition PMADDWD @Pierre Marchand, 2001

14 Programmation MMX + + + + + + + + PADDB, PADDSB, PADDUSB paddb paddsb
+ + + + + + + + paddb paddsb paddusb @Pierre Marchand, 2001

15 Programmation MMX     PMULHW Mot de poids fort Mot de poids fort
Mot de poids fort Mot de poids fort @Pierre Marchand, 2001

16 Programmation MMX     + + PMADDWD 0111000111000111
+ + @Pierre Marchand, 2001

17 Programmation MMX Instructions Comparaison Compare for PCMPEQB
Equal PCMPEQW PCMPEQD Compare for PCMPGTPB Greater Than PCMPGTPW PCMPGTPD @Pierre Marchand, 2001

18 Programmation MMX == == == == == == == == Instructions
Comparaison PCMPEQB == == == == == == == == True False True True False False False True @Pierre Marchand, 2001

19 Programmation MMX Instructions Conversion Wraparound Signed Unsigned
Saturation Saturation Pack PACKSSWB PACKUSWB PACKSSDW Unpack Hi PUNPCKHBW PUNPCKHWD PUNPCKHDQ Unpack Lo PUNPCKLBW PUNPCKLWD PUNPCKLDQ @Pierre Marchand, 2001

20 Programmation MMX Instruction PACKUSWB
Compacte et sature 4 mots signés du premier opérande avec 4 mots signés du second opérande en 8 octets signés dans l’opérande destination. Si la valeur signée d’un mot est > FF ou < 00, la valeur FF ou 00 respectivement est stockée dans la destination. @Pierre Marchand, 2001

21 Programmation MMX Instructions Logiques Packed Full Quadword And PAND
And Not PANDN Or POR Exclusive Or PXOR @Pierre Marchand, 2001

22 Programmation MMX Instructions Décalages Packed Full Quadword
Left Logical PSLLW PSLLQ PSLLD Right logical PSRLW PSRLQ PSRLD Right arithmetic PSRAW PSRAD PSLLW @Pierre Marchand, 2001

23 Programmation MMX Instructions Transferts de données 32 bits 64 bits
Reg to Reg MOVD MOVQ Mem to Reg MOVD MOVQ Reg to Mem MOVD MOVQ EMMS Cette instruction vide l’état MMX et met le mot de tags de virgule flottante à 0. Cette instruction doit être utilisée à la fin d’un pro-gramme MMX avant que d’autres routines puissent utiliser les instructions de virgule flottante. @Pierre Marchand, 2001

24 Programmation MMX Programmation
Avant de demander à un processeur d’exécuter des instructions MMX, il faut s’assurer qu’il possède bien les registres et les instructions pour le faire. On effectue cette vérification au moyen de l’instruction CPUID. On place un paramètre dans EAX qui peut être 0, 1, 2 ou plus. Si EAX = 0, CPUID retourne dans EAX la valeur maximum qu’on peut donner comme paramètre à CPUID. Pour le Pentium actuel, cette valeur est 2. De plus, on trouve alors dans EBX les caractères “Genu” et dans EDX et ECX respectivement les caractères “ineI” et “ntel”. @Pierre Marchand, 2001

25 Programmation MMX Programmation
Si EAX = 1, CPUID retourne dans EAX de l’information sur la version du processeur et dans EDX de l’information sur les capacités du processeur. En particulier : • Le bit 23 de EDX indique si le processeur dispose de la technologie MMX. • Le bit 25 de EDX indique si le processeur dispose de l’extension SIMD (Pentium III). • Le bit 26 de EDX indique si le processeur dispose de l’extension SIMD2 (Pentium 4). @Pierre Marchand, 2001

26 Programmation MMX Programmation mov eax, 1 cpuid
Donc, pour savoir si le processeur peut exécuter les instructions MMX, on exécute le code suivant : mov eax, 1 cpuid shr edx, 24 // on place le bit 23 dans CF jc ok // si CF = 1, on a le MMX @Pierre Marchand, 2001

27 Programmation MMX Exemples Addition de deux vecteurs
Soit deux vecteurs (chaînes ou tableaux) x et y de short et de même longueur divisible par 4. Pour avoir y = x + y, on fait : lea esi, x lea edi, y mov ecx, longueur b: movq mm0,[esi] paddw mm0,[edi] movq [edi], mm0 add esi, 8 add edi, 8 sub ecx, 4 jnz b emms @Pierre Marchand, 2001

28 Programmation MMX Exemples Multiplication de deux vecteurs
Soit deux vecteurs (chaînes ou tableaux) x et y de short et de même longueur divisible par 4, et d est un vecteur équivalent de long. lea esi, x lea edi, y lea edx, dest mov ecx, longueur b: movq mm0,[esi] movq mm1, mm0 pmullw mm0,[edi] pmulhw mm1,[edi] x * y dest @Pierre Marchand, 2001

29 Programmation MMX Exemples Multiplication de deux vecteurs
movq mm2, mm0 punpcklwd mm0, mm1 punpckhwd mm2, mm1 movq [edx], mm0 movq [edx+8], mm2 add esi, 8 add edi, 8 add edx, 16 sub ecx, 4 jne b emms mm1 mm0 Hi Lo mm0 mm1 mm2 mm2 dest @Pierre Marchand, 2001

30 Programmation MMX Exemples
Multiplication scalaire de deux vecteurs de shorts (au moins 16) mov eax, offset a mov ebx, offset b mov ecx, n mov edi, offset p boucle: movq mm0, [eax] movq mm1, [ebx] movq mm2, [eax+8] movq mm3, [ebx+8] movq mm4, [eax+16] movq mm5, [ebx+16] movq mm6, [eax+24] a3 a2 a1 a0 b3 b2 b1 b0 a7 a6 a5 a4 b7 b6 b5 b4 a11 a10 a9 a8 b11 b10 b9 b8 a15 a14 a13 a12 @Pierre Marchand, 2001

31 Programmation MMX Exemples
Multiplication scalaire de deux vecteurs de shorts pmaddwd mm0, mm1 pmaddwd mm2, mm3 pmaddwd mm4, mm5 pmaddwd mm6, [ebx+24] paddd mm7, mm0 paddd mm7, mm2 paddd mm7, mm4 paddd mm7, mm6 add eax, 32 add ebx, 32 sub ecx, 16 jnz boucle a3b3+a2b2 a1b1+a0b0 a7b7+a6b6 a5b5+a4b4 a11b11+a10b10 a9b9+a8b8 a15b15+a14b14 a13b13+a12b12 Hi Lo @Pierre Marchand, 2001

32 Programmation MMX Exemples
Multiplication scalaire de deux vecteurs de shorts movq mm0, mm7 shrlq mm7, 32 paddd mm7, mm0 movd [edi], mm0 Hi Lo Hi Hi Hi+Lo p @Pierre Marchand, 2001

33 Programmation MMX Exemples Multiplication d’une matrice par un vecteur
Soit m une matrice de short et v un vecteur de short tels que v contient un nombre pair d’éléments et que m contient le même nombre de rangées que v d’éléments. Le produit p de m par v est : @Pierre Marchand, 2001

34 Programmation MMX Exemples v m
Multiplication d’une matrice par un vecteur for ( i = 0; i < colonnes; i++ ) { accum = 0; for ( j = 0; j < rangées; j++ ) accum += v[ j ] * m[ j ][ i ]; produit[ i ] = accum; } v i 0, 1, 2, … , j - 1 m j @Pierre Marchand, 2001

35 Programmation MMX Exemples produit v = m
Multiplication d’une matrice par un vecteur On peut décomposer le problème comme suit : long accum [4]; for ( i = 0; i < colonnes; i += 4 ) { for ( k = 0; k < 4; k++ ) accum[ k] = 0; for ( i = 0; j < rangées; j += 2 ) accum[ 0,… 3 ] += MULT4x2(&v[ j ], &m[ j ] [ i ]); produit [i+k ] = accum[ k ]; } produit v i = 0, 1 2, … , i - 1 0, 1 2, … , j - 1 m j @Pierre Marchand, 2001

36 Programmation MMX Exemples La fonction MULT4x2 mov esi, param1
mov edx, param2 mov ecx, colonnes movd mm7, [esi] punpckldq mm7, mm7 movq mm0, [edx] movq mm1, mm0 movq mm6, [edx + ecx * 2] punpcklwd mm0, mm6 punpckhwd mm1, mm6 mm7 v1 v0 mm7 v1 v0 v1 v0 mm0 m03 m02 m01 m00 mm1 m03 m02 m01 m00 mm6 m13 m12 m11 m10 mm0 m11 m01 m10 m00 mm1 m13 m03 m12 m02 @Pierre Marchand, 2001

37 Programmation MMX Exemples Multiplication d’une matrice par un vecteur
pmaddwd mm0, mm7 pmaddwd mm1, mm7 paddd mm2, mm0 // accum[1, 0] paddd mm3, mm1 // accum[3, 2] mm7 v1 v0 v1 v0 mm0 m11 m01 m10 m00 mm1 m13 m03 m12 m02 mm0 m11v1+ m01v0 m10v1+ m00v0 mm1 m13v1+ m03v0 m12v1+ m02v0 @Pierre Marchand, 2001

38 Programmation MMX Exemples m00 m01 m02 m03 m10 m11 m12 m13
Transposée d’une matrice Soit une matrice 4 x 4 de short : En mémoire, on a : m00 m01 m02 m03 m10 m11 m12 m13 m20 m21 m22 m23 m30 m31 m32 m33 Si on fait movq mm0, m on aura dans mm0 : m03 m02 m01 m00 m00 m01 m02 m03 m10 m11 m12 m13 m20 m21 m22 m23 m30 m31 m32 m33 @Pierre Marchand, 2001

39 Programmation MMX Exemples Transposée d’une matrice On fait donc :
m33 m32 m31 m30 m23 m22 m21 m20 m13 m12 m11 m10 m03 m02 m01 m00 punpcklwd punpcklwd m31 m21 m30 m20 m11 m01 m10 m00 punpckhdq punpckldq m31 m21 m11 m01 m30 m20 m10 m00 @Pierre Marchand, 2001

40 Programmation MMX Exemples Transposée d’une matrice Ensuite :
m33 m32 m31 m30 m23 m22 m21 m20 m13 m12 m11 m10 m03 m02 m01 m00 punpckhwd punpckhwd m33 m23 m32 m22 m13 m03 m12 m02 punpckhdq punpckldq m33 m23 m13 m03 m32 m22 m12 m02 @Pierre Marchand, 2001

41 Programmation MMX a’ a b b’ Exemples Transposée d’une matrice
Pour une matrice non carrée et plus grande que 4x4, on observe que chaque bloc de 4x4 peut être transposé : m00 m01 m02 m03 m04 m05 m06 m07 m10 m11 m12 m13 m14 m15 m16 m17 m20 m21 m22 m23 m24 m25 m26 m27 m30 m31 m32 m33 m34 m35 m36 m37 m00 m10 m20 m30 m01 m11 m21 m31 m02 m12 m22 m32 m03 m13 m23 m33 m04 m14 m24 m34 m05 m15 m25 m35 m06 m16 m26 m36 m07 m17 m27 m37 a’ a b b’ @Pierre Marchand, 2001

42 Programmation MMX a b c d e f a’ g’ m’ g h i j k l b’ h’ n’
Exemples Transposée d’une matrice On prend donc la transposée de chaque bloc de 4x4 : a b c d e f g h i j k l m n o p q r a’ g’ m’ b’ h’ n’ c’ i’ o’ d’ j’ p ’ e’ k’ q’ f’ l’ r’ @Pierre Marchand, 2001

43 Programmation MMX Autres exemples Voyez le site d’Intel :
@Pierre Marchand, 2001

44 Programmation MMX Pour le TP2
Supposons que esi pointe sur les données suivantes : 01, 02, 03, 04, 05, 06, 07, 08, …. pxor mm0,mm0 movd mm1,[esi] punpcklbw mm1,mm0 movd mm2,[esi+1] punpcklbw mm2, mm0 movd mm3,[esi+2] punpcklbw mm3, mm0 mm0 mm1 mm2 @Pierre Marchand, 2001


Télécharger ppt "Programmation système"

Présentations similaires


Annonces Google