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

@Pierre Marchand et Martin Dubois, 2002289 IFT-17584 Semaine 06 Programmation système.

Présentations similaires


Présentation au sujet: "@Pierre Marchand et Martin Dubois, 2002289 IFT-17584 Semaine 06 Programmation système."— Transcription de la présentation:

1 @Pierre Marchand et Martin Dubois, 2002289 IFT-17584 Semaine 06 Programmation système

2 @Pierre Marchand et Martin Dubois, 2002290 Plan de la rencontre Retour sur la semaine précédente Programmation SIMD Programmation SIMD2 Mémoire virtuelle

3 @Pierre Marchand et Martin Dubois, 2002291 Retour sur la semaine précédente Programmation virgule flottante Programmation MMX

4 @Pierre Marchand et Martin Dubois, 2002292 Programmation SIMD Importance de la virgule flottante Un pourcentage élevé des applications informatiques doit utiliser la virgule flottante : Les applications comptables et financières (par ex. Excel). Les applications infographiques : rotations, transformations, projections, etc. Les applications scientifiques et d’ingénierie: DSP (Digital Signal Processing), FFT (Fast Fourier Transform), Calcul numérique en général, trigonométrie, algèbre, etc.

5 @Pierre Marchand et Martin Dubois, 2002293 Programmation SIMD Importance de la virgule flottante La performance de l’unité de virgule flottante est insuffisante : fadd :5 cycles fmul :7 cycles fdiv : 23 (float), 38 (double) ou 43 cycles (extended) fsqrt :23, 38 ou 43 cycles Les instructions SIMD améliorent la situation en utilisant le parallélisme : addps :additionne 4 floats en 4 cycles, mulps :multiplie 4 floats en 6 cycles divps :divise 4 floats en 32 cycles sqrtps:racine carrée de 4 floats en 32 cycles

6 @Pierre Marchand et Martin Dubois, 2002294 Programmation SIMD Importance de la virgule flottante Intel a commencé modestement dans le Pentium III avec 8 registres de 128 bits pouvant contenir chacun 4 floats. Devant le succès de cette approche, Intel ajoute dans le Pentium 4, la manipulation des doubles et des entiers de 8, 16, 32 et 64 bits.

7 @Pierre Marchand et Martin Dubois, 2002295 Programmation SIMD Parallélisme CU PE 1 MU ISDS SISD SIMD CU IS PE 2 PE n PU LM 1 DS LM 2 DS LM n DS Légende : CU = Control Unit IS = Instruction Stream DS = Data Stream PU = Processing Unit MU = Memory Unit PE = Processing Element LM = Local Memory

8 @Pierre Marchand et Martin Dubois, 2002296 Programmation SIMD Parallélisme PE 1 MIMD à mémoire partagée (Multiprocessor) CU n IS PE 2 PE n DS CU 2 CU 1 IS PE 1 MIMD à mémoire distribuée (Multicomputer) CU n IS PE 2 PE n LM 1 DS LM 2 DS LM n DS CU 2 CU 1 IS Mémoire partagée Réseau d’interconnexion

9 @Pierre Marchand et Martin Dubois, 2002297 Programmation SIMD Les extensions SIMD Le Pentium III dispose de 8 registres de 128 bits appelés xmm0 à xmm7 pour des instructions parallèles sur 4 nombres de virgule flottante de simple précision, et d’un registre d’état et de contrôle appelé MXCSR. Son successeur le Pentium 4 dispose de 144 instructions supplémentaires (SIMD Extension 2) et peut traiter les nombres de virgule flottante de double précision ainsi que les entiers de 8, 16, 32 ou 64 bits.

10 @Pierre Marchand et Martin Dubois, 2002298 Programmation SIMD Les registres SIMD XMM7 1270 XMM6 XMM5 XMM4 XMM3 XMM2 XMM1 XMM0 MXCSR 031

11 @Pierre Marchand et Martin Dubois, 2002299 Programmation SIMD Le registre MXCSR Les bits IE, DE, ZE, OE, UE et PE ainsi que IM, DM, ZM, OM, UM, PM et RC jouent le même rôle que les bits de même nom pour la virgule flottante. Le bit FZ autorise le mode «Flush-To-Zero». Normalement, en virgule flottante IEEE, un sous-débordement retourne un nombre dénormalisé. Dans ce nouveau mode, un sous-débordement retourne zéro avec le signe approprié et les bits PE et UE sont mis à 1. Ce mode est plus performant que le mode normal, bien que non conforme à la norme IEEE. IEIE DEDE ZEZE OEOE UEUE PEPE 0 15010 PMPM 0 31 RCRC RCRC IMIM FZFZ OMOM ZMZM DMDM 5 UMUM

12 @Pierre Marchand et Martin Dubois, 2002300 Programmation SIMD Types de données Chaque double mot contient un nombre de virgule flottante IEEE de simple précision (float). Pour aligner une donnée sur une frontière de 16 octets, utilisez en C Microsoft la déclaration : _declspec(align(16)) float Tableau[TAILLE]; Avec Masm32, écrivez simplement : ALIGN 16 Double Mot 3Double Mot 2Double Mot 1Double Mot 0 Adresse 0x1000Adresse 0x100C 1279631032956463

13 @Pierre Marchand et Martin Dubois, 2002301 Programmation SIMD Détection Comme nous avons vu dans la programmation MMX, pour savoir si le processeur peut exécuter les instructions SIMD, on utilise l’instruction cpuid comme dans le programme suivant : moveax, 1 cpuid shredx, 26// on place le bit 25 dans CF jcok// si CF = 1, on a le SIMD Pour savoir si le processeur peut exécuter les instructions SIMD2, on teste plutôt le bit 26 en faisant shr edx, 27 dans le programme ci-dessus.

14 @Pierre Marchand et Martin Dubois, 2002302 Programmation SIMD Instructions SIMD Mouvement de données MOVAPSTransfère 128 bits alignés sur une limite de 16 octets de la mémoire à un registre SIMD ou vice-versa ou entre deux registres SIMD. MOVUPSTransfère 128 bits non alignés, mais est plus lent que MOVAPS. MOVHPSTransfère 64 bits mémoire vers les deux champs du haut d’un registre SIMD ou vice-versa. MOVLPSTransfère 64 bits mémoire vers les deux champs du bas d’un registre SIMD ou vice-versa. MOVHLPSTransfère 64 bits du haut mémoire vers les deux champs du bas d’un registre SIMD ou vice-versa. MOVLHPSTransfère 64 bits du bas d’un registre SIMD vers les 64 bits du haut d’un autre registre SIMD.

15 @Pierre Marchand et Martin Dubois, 2002303 Programmation SIMD Instructions SIMD Mouvement de données MOVMSKPSTransfère le bit le plus significatif de chacun des quatre floats vers un registre d’entiers. On peut utiliser cette valeur de 4 bits pour effectuer un branchement. MOVSSTransfère 32 bits mémoire vers le champ du bas d’un registre SIMD ou vice-versa ou entre deux registres SIMD.

16 @Pierre Marchand et Martin Dubois, 2002304 Programmation SIMD Instructions SIMD Arithmétiques ADDPSAdditionne 4 paires de floats compactés. ADDSSAdditionne la paire de floats la moins significative. SUBPSSoustrait 4 paires de floats compactés. SUBSSSoustrait la paire de floats la moins significative. MULPSMultiplie 4 paires de floats compactés. MULSSMultiplie la paire de floats la moins significative. DIVPSDivise 4 paires de floats compactés. DIVSSDivise la paire de floats la moins significative. SQRTPSPrend la racine carrée de quatre floats compactés. SQRTSSPrend la racine carrée du float le moins significatif.

17 @Pierre Marchand et Martin Dubois, 2002305 Programmation SIMD Instructions SIMD Arithmétiques MAXPSRetourne le maximum de chacune des quatre paires de floats vers le registre SIMD destination. MAXSSRetourne le maximum de la paire de floats la moins significative. MINPSRetourne le minimum de chacune des quatre paires de floats vers le registre SIMD destination. MINSSRetourne le minimum de la paire de floats la moins significative.

18 @Pierre Marchand et Martin Dubois, 2002306 Programmation SIMD Instructions SIMD Comparaisons CMPPSCompare quatre paires de floats utilisant un opérande immédiat comme prédicat et retourne un masque de 1 ou de 0 dans la destination pour chacun des floats. CMPSSCompare la paire de floats la moins significative et retourne un masque de 1 ou de 0 dans le champ le moins significatif de la destination. COMISSCompare la paire de floats la moins significative et affecte EFLAGS. UCOMISSEffectue la comparaison non ordonnée de la paire de floats la moins significative et affecte EFLAGS.

19 @Pierre Marchand et Martin Dubois, 2002307 Programmation SIMD Instructions SIMD Conversions CVTPI2PSConvertit deux entiers de 32 bits dans un registre MMX en deux floats dans les deux champs de poids faible d’un registre SIMD. CVTSI2SSConvertit un entier de 32 bits vers le float de poids faible d’un registre SIMD. CVTPS2PIConvertit les deux floats de poids faible d’un registre SIMD en deux entiers de 32 bits dans un registre MMX. CVTSS2SIConvertit le float de poids faible d’un registre SIMD en un entier de 32 bits dans un registre de 32 bits.

20 @Pierre Marchand et Martin Dubois, 2002308 Programmation SIMD Instructions SIMD Logiques ANDPSEffectue le AND bit par bit entre deux opérandes. ANDNPSEffectue le NAND bit par bit entre deux opérandes. ORPSEffectue le OR bit par bit entre deux opérandes. XORPSEffectue le XOR bit par bit entre deux opérandes.

21 @Pierre Marchand et Martin Dubois, 2002309 Programmation SIMD Instructions SIMD Shuffle SHUFPSPermet de placer n’importe quel champ de l’opérande source dans n’importe quel champ de l’opérande destination en fonction d’un opérande immédiat. Les bits 0 et 1 de ce dernier déterminent quel champ de la source ira dans le champ 0 de la destination, les bits 2 et 3 déterminent quel champ de la source ira dans le champ 1 de la destination. Les bits 4 et 5 déterminent quel champ de l’opérande destination ira dans le champ 2 de la destination, et les bits 6 et 7 déterminent quel champ de l’opérande destination ira dans le champ 3 de la destination.

22 @Pierre Marchand et Martin Dubois, 2002310 Programmation SIMD Instructions SIMD Shuffle SHUFPSxmm0, xmm1, 0x82 X3X2X1X0 Y3Y2Y1Y0 Y2Y0X0X2 xmm0 xmm1 xmm0 0x82 = 10 00 00 10

23 @Pierre Marchand et Martin Dubois, 2002311 Programmation SIMD Instructions SIMD Shuffle SHUFPSxmm0, xmm0, 0x1B X3X2X1X0 X3X2X1X0 X1X2X3 0x1B = 00 01 10 11

24 @Pierre Marchand et Martin Dubois, 2002312 Programmation SIMD Instructions SIMD Unpack UNPCKHPSCopie les champs 2 et 3 de l’opérande destination respectivement dans les champ 1 et 3 de la destination et les champs 2 et 3 de l’opérande source respectivement dans les champs 0 et 2 de la destination. X3X2X1X0 Y3Y2Y1Y0 Y3X3Y2X2

25 @Pierre Marchand et Martin Dubois, 2002313 Programmation SIMD Instructions SIMD Unpack UNPCKLPSCopie les champs 0 et 1 de l’opérande destination respectivement vers les champs 1 et 3 de la destination et les champs 0 et 1 de l’opérande source vers les champs 0 et 2 de la destination. X3X2X1X0 Y3Y2Y1Y0 Y1X1Y0X0

26 @Pierre Marchand et Martin Dubois, 2002314 Programmation SIMD Instructions SIMD Contrôle LDMXCSRCharge le registre MXCSR à partir de la mémoire. STMXCSREnregistre le registre MXCSR en mémoire. FXSAVEEnregistre l’état FP, MMX et SIMD en mémoire. FXRSTORCharge l’état FP, MMX et SIMD à partir de la mémoire.

27 @Pierre Marchand et Martin Dubois, 2002315 Programmation SIMD Instructions SIMD Contrôle du cache Les données adressées par le programmeur peuvent avoir une localité temporelle (la donnée sera utilisée de nouveau) ou une localité spatiale (les données de la même rangée du cache seront utilisées). Des données qui ne seront pas réutilisées sont appelées non temporelles. On ne veut pas que de telles données aillent dans le cache. Les instructions qui suivent permettent de contrôler le cache, de sorte que l’accès à des données non temporelles ne le polluera.

28 @Pierre Marchand et Martin Dubois, 2002316 Programmation SIMD Instructions SIMD Contrôle du cache MASKMOVQEnregistre la donnée d’un registre MMX à l’adresse contenue dans EDI. Le bit le plus significatif de chaque octet du second registre MMX est utilisé pour écrire les données du premier registre sélectivement, octet par octet. Cette instruction ne cause pas le chargement de la ligne correspondante du cache. MOVNTQEnregistre les données d’un registre MMX en mémoire. Cette instruction minimise la pollution du cache.

29 @Pierre Marchand et Martin Dubois, 2002317 Programmation SIMD Instructions SIMD Contrôle du cache MOVNTPSEnregistre un registre SIMD en mémoire. L’adresse doit être un multiple de 16. Cette instruction minimise la pollution du cache. PREFETCHCharge des données temporelles ou non temporelles dans le niveau de cache spécifié. SFENCEGarantit que toute écriture en mémoire qui la précède est visible globalement avant toute écriture qui la suit. C’est une façon efficace d’assurer l’ordonnancement entre des routines qui retournent des résultats non temporels et celles qui utilisent ces résultats.

30 @Pierre Marchand et Martin Dubois, 2002318 Programmation SIMD Exemples SIMD Addition ou multiplication de deux vecteurs leaesi, v1 leaedi, v2 movecx, longueur b:movupsxmm0, [esi]; ou movaps si v1 aligné addps ou mulpsxmm0, [edi] movups[edi], xmm0 addesi, 16 addedi, 16 subecx, 4 jnzb

31 @Pierre Marchand et Martin Dubois, 2002319 Programmation SIMD Exemples SIMD Moyenne d’un vecteur de 20 floats : vec dq 1.3E3, -6.5, 7.2,……. moyennedq? vingtdw 20; leaesi, vec movupsxmm0, [esi] addpsxmm0, [esi+16] addpsxmm0, [esi+32] addpsxmm0, [esi+48] addpsxmm0, [esi+64]; xmm0 = 4, 3, 2, 1 xorpsxmm1, xmm1; xmm1= 0.0, 0.0, 0.0, 0.0

32 @Pierre Marchand et Martin Dubois, 2002320 Programmation SIMD Exemples SIMD Moyenne d’un vecteur de 20 floats : shufpsxmm1, xmm0, 0x40 ; xmm1 = 2, 1, 0, 0 addpsxmm0, xmm1 ; xmm0 = 4+2, 3+1, 2, 1 shufpsxmm1, xmm0, 0x30 ; xmm1 = 1, 4+2, 0, 0 addpsxmm0, xmm1 ; xmm0 = 4+2+1, 3+1+4+2, 2, 1 shufpsxmm0, xmm0, 0x02 ; xmm0 = 1, 1, 1, 3+1+4+2 movssmoyenne, xmm0 emms flddword ptr moyenne fidivword ptr vingt fstpdword ptr moyenne

33 @Pierre Marchand et Martin Dubois, 2002321 Programmation SIMD Exemples SIMD Calcul du sinus d’un vecteur de floats (angles - π/2 <= x <= π/2) On utilise le même développement en série de puissances que dans le chapitre sur la virgule flottante : On utilise la même factorisation avec seulement les trois premiers termes : où : sin x ≈ (((a 1 * x 2 + a 2 ) * x 2 + a 3 ) * x 2 + a 4 ) * x a 1 = -1/7!, a 2 = 1/5!, a3 = -1/3! et a 4 = 1

34 @Pierre Marchand et Martin Dubois, 2002322 Programmation SIMD Exemples SIMD Calcul du sinus d’un vecteur d’angles (floats) align 16 a1dd-1.9841269841E-4, -1.9841269841E-4, -1.9841269841E-4, dd-1.9841269841E-4 a2dd8.33333333E-3, 8.33333333E-3, 8.33333333E-3, dd8.33333333E-3 a3dd-1.66666667E-1, -1.66666667E-1, -1.66666667E-1 dd -1.66666667E-1 a4dd1.0, 1.0, 1.0, 1.0 xdd0.0, 7.5, 15.0, 22.5, 30, 37.5, 45, 52.5, 60, 67.5, 75, 82.5 d2rdd1.7453292519E-2, 1.7453292519E-2, 1.7453292519E-2, dd1.7453292519E-2 resdd12 dup(?)

35 @Pierre Marchand et Martin Dubois, 2002323 Programmation SIMD Exemples SIMD Calcul du sinus d’un vecteur d’angles (floats) leaesi, x leaedi, res movecx, 12 xorebx, ebx movapsxmm3, a1 movapsxmm4, a2 movapsxmm5, a3 movapsxmm6, a4 L:movapsxmm0, [esi+ebx]; 4 angles mulpsxmm0, d2r; conversion en radians movapsxmm1, xmm0; x mulpsxmm1, xmm0; x^2

36 @Pierre Marchand et Martin Dubois, 2002324 Programmation SIMD Exemples SIMD Calcul du sinus d’un vecteur d’angles (floats) movapsxmm2, xmm3; a1 mulpsxmm2, xmm1; * x^2 addpsxmm2, xmm4; + a2 mulpsxmm2, xmm1; * x^2 addpsxmm2, xmm5; + a3 mulpsxmm2, xmm1; * x^2 addpsxmm2, xmm6; + a4 mulpsxmm2, xmm0; * x movaps[edi+ebx], xmm2 addebx, 16 subecx, 4 jaL

37 @Pierre Marchand et Martin Dubois, 2002325 Programmation SIMD L’extension SIMD2 Six types de données au lieu d’un seul : Ces quadruples mots peuvent être des nombres IEEE de double précision ou des entiers de 64 bits. Ces doubles mots peuvent être des nombres IEEE de simple précision ou des entiers de 32 bits. Double Mot 3Double Mot 2Double Mot 1Double Mot 0 Adresse 0x1000Adresse 0x100C 1279631032956463 Quadruple Mot 0 Adresse 0x1000Adresse 0x1008 1279631032956463

38 @Pierre Marchand et Martin Dubois, 2002326 Programmation SIMD L’extension SIMD2 Six types de données au lieu d’un seul : Mot 0 Adresse 0x1000Adresse 0x100E 1279631032956463 Mot 1 1516 Mot 3 Mot 2 Mot 4 Mot 5 Mot 7 Mot 6 Adresse 0x1008 47488079112111 Adresse 0x1000Adresse 0x100F 12710331095716315 Adresse 0x1008 4755877911911172339

39 @Pierre Marchand et Martin Dubois, 2002327 Programmation SIMD Extension SIMD2 : Nouvelles instructions Mouvement de données MOVAPDTransfère deux doubles alignés sur une limite de 16 octets de la mémoire vers un registre SIMD ou d’un registres SIMD à un autre. MOVUPDTransfère deux doubles non alignés de la mémoire vers un registre SIMD. MOVSDTransfère 64 bits de la mémoire vers le champ du bas d’un registre SIMD ou les 64 bits de poids faible d’un registre SIMD vers un autre. MOVDQ2QTransfère les 64 bits de poids faible d’un registre SIMD à un registre MMX. MOVQ2DQTransfère 64 bits d’un registre MMX vers les 64 bits de poids faible d’un registre SIMD.

40 @Pierre Marchand et Martin Dubois, 2002328 Programmation SIMD Extension SIMD2 : Nouvelles instructions Mouvement de données MOVDQATransfère deux quadruples mots alignés sur une limite de 16 octets de la mémoire vers un registre SIMD. MOVDQUTransfère deux quadruples mots non alignés de la mémoire vers un registre SIMD. MOVHPDTransfère le double de poids fort d’un registre SIMD. MOVLPDTransfère le double de poids faible d’un registre SIMD.

41 @Pierre Marchand et Martin Dubois, 2002329 Programmation SIMD Extension SIMD2 : Nouvelles instructions Mouvement de données MASKMOVDQUEnregistre en mémoire les octets d’un registre SIMD choisis au moyen d’un masque. MOVMSKPDRetourne dans un registre de 32 bits un masque formé du bit de signe des deux doubles d’un registre SIMD. MOVNTDQEnregistre en mémoire 128 bits non temporels. MOVNTIEnregistre en mémoire 64 bits non temporels. MOVNTPDEnregistre en mémoire deux doubles non tem- porels.

42 @Pierre Marchand et Martin Dubois, 2002330 Programmation SIMD Extension SIMD2 : Nouvelles instructions Mouvement de données PEXTRWExtrait un mot d’un registre MMX ou d’un registre SIMD et le place dans un registre de 32 bits. PINSRWInsère le mot de poids faible d’un registre de 32 bits et l’insère dans un des mots d’un registre MMX ou d’un registre SIMD. PMOVMSKB Retourne un masque formé du bit le plus significatif (signe) de chacun des octets de l’opérande source. Dans le cas d’un registre MMX, le masque est de 8 bits, dans le cas d’un registre SIMD, il est de 16 bits.

43 @Pierre Marchand et Martin Dubois, 2002331 Programmation SIMD Extension SIMD2 : Nouvelles instructions Shuffle PSHUFDMélange des doubles mots compactés. PSHUFHWMélange les mots compactés de poids fort. PSHUFLWMélange les mots compactés de poids faible. PSHUFWMélange les mots compactés. SHUFPDMélange les doubles compactés.

44 @Pierre Marchand et Martin Dubois, 2002332 Programmation SIMD Extension SIMD2 : Nouvelles instructions Unpack PUNPCKHQDQDécompacte les quadruples mots de poids fort. PUNPCKLBWDécompacte les octets de poids faible. PUNPCKLWDDécompacte les mots de poids faible. PUNPCKLDQDécompacte les doubles mots de poids faible. PUNPCKLQDQDécompacte les quadruples mots de poids faible. PUNPCKHBWDécompacte les octets de poids fort. PUNPCKHWDDécompacte les mots de poids fort. PUNPCKHDQDécompacte les doubles mots de poids fort.

45 @Pierre Marchand et Martin Dubois, 2002333 Programmation SIMD Extension SIMD2 : Nouvelles instructions Unpack UNPCKHPDDécompacte les doubles de poids fort. UNPCKLPDDécompacte les doubles de poids faible.

46 @Pierre Marchand et Martin Dubois, 2002334 Programmation SIMD Extension SIMD2 : Nouvelles instructions Arithmétiques ADDPDAdditionne deux paires de doubles compactés. ADDSDAdditionne la paire de doubles de poids faible. DIVPDDivise deux paires de doubles compactés. DIVSDDivise la paire de doubles de poids faible. MAXPDRetourne le maximum de chacune des deux paires de doubles compactés. MAXSDRetourne le maximum de la paire de doubles de poids faible.

47 @Pierre Marchand et Martin Dubois, 2002335 Programmation SIMD Extension SIMD2 : Nouvelles instructions Arithmétiques MINPDRetourne le minimum de deux paires de doubles compactés. MINSDRetourne le minimum des doubles de poids faible. MULPDMultiplie deux paires de deux doubles compactés. MULSDMultiplie la paire de doubles de poids faible. PADDBAdditionne les octets compactés. PADDWAdditionne les mots compactés. PADDD Additionne les doubles mots compactés. PADDQAdditionne les quadruples mots compactés.

48 @Pierre Marchand et Martin Dubois, 2002336 Programmation SIMD Extension SIMD2 : Nouvelles instructions Arithmétiques PADDSBAdditionne 16 paires d’octets compactés avec satura- tion signée. PADDSWAdditionne 8 paires de mots compactés avec satura- tion signée. PADDUSBAdditionne 16 paires d’octets compactés avec satura- tion non signée. PADDUSWAdditionne 8 paires de mots compactés avec satura- tion non signée PAVGBCalcule la moyenne des 16 paires d’octets compactés. PAVGWCalcule la moyenne des 8 paires de mots compactés.

49 @Pierre Marchand et Martin Dubois, 2002337 Programmation SIMD Extension SIMD2 : Nouvelles instructions Arithmétiques PMADDWDAddition et multiplication de 8 paires de mots compac- tés signés. PMAXSWMaximum de 8 paires de mots compactés signés. PMAXUBMaximum 16 paires d’octets compactés non signés. PMINUBMinimum de 16 paires d’octets compactés non signés. PMULHUWMot de poids fort de la multiplication de 8 paires de mots compactés non signés. PMULHWMot de poids fort de la multiplication de 8 paires de mots compactés signés. PMULLWMot de poids faible de la multiplication de 8 paires de mots compactés signés.

50 @Pierre Marchand et Martin Dubois, 2002338 Programmation SIMD Extension SIMD2 : Nouvelles instructions Arithmétiques PMULUDQMultiplication de 4 paires de doubles mots compactés non signés. PSADBWSomme de la valeur absolue des différences de 8 paires de mots compactés. PADDSBAdditionner 16 paires d’octets compactés avec saturation signée. PADDSWAdditionner 8 paires de mots compactés avec saturation signée. PSUBQSoustraire 4 paires de quadruples mots compactés. PSUBSBSoustraire 16 paires d’octets compactés avec satura- tion signée. PSUBSWSoustraire 8 paires de mots compactés avec satura- tion signée.

51 @Pierre Marchand et Martin Dubois, 2002339 Programmation SIMD Extension SIMD2 : Nouvelles instructions Arithmétiques PSUBUSBSoustraire 16 paires d’octets compactés avec satura- tion non signée. PSUBUSWSoustraire 8 paires de mots compactés avec satura- tion non signée. SQRTPDRacine carrée de deux doubles compactés. SQRTSDRacine carrée du double de poids faible. SUBPDSoustraction de deux paires de doubles. SUBSDSoustraction de la paire de doubles de poids faible.

52 @Pierre Marchand et Martin Dubois, 2002340 Programmation SIMD Extension SIMD2 : Nouvelles instructions Décalages PSLLDQDécalage logique des 128 bits vers la gauche. PSLLWDécalage logique vers la gauche des 8 mots compactés. PSLLDDécalage logique vers la gauche des 4 doubles mots compactés. PSLLQDécalage logique vers la gauche des 2 quadruples mots compactés. PSRAWDécalage arithmétique vers la droite des 8 mots compactés. PSRADDécalage arithmétique vers la droite des 4 doubles mots compactés.

53 @Pierre Marchand et Martin Dubois, 2002341 Programmation SIMD Extension SIMD2 : Nouvelles instructions Décalages PSRLDQDécalage logique des 128 bits vers la droite. PSRLWDécalage logique vers la droite des 8 mots compactés. PSRLDDécalage logique vers la droite des 4 doubles mots compactés. PSRLQDécalage logique vers la droite des 2 quadruples mots compactés.

54 @Pierre Marchand et Martin Dubois, 2002342 Programmation SIMD Extension SIMD2 : Nouvelles instructions Logiques ANDPDAND logique bit par bit pour des doubles. ANDNPDNAND logique bit par bit pour des doubles. ORPDOR logique bit par bit pour des doubles. PANDAND logique sur 64 bits (registre MMX) ou 128 bits (registre SIMD). PANDNNAND logique sur 64 bits (registre MMX) ou 128 bits (registre SIMD). POROR logique sur 64 bits (registre MMX) ou 128 bits (registre SIMD)

55 @Pierre Marchand et Martin Dubois, 2002343 Programmation SIMD Extension SIMD2 : Nouvelles instructions Logiques PXORXOR logique sur 64 bits (registre MMX) ou 128 bits (registre SIMD). XORPDXOR logique pour des données de virgule flottante de double précision.

56 @Pierre Marchand et Martin Dubois, 2002344 Programmation SIMD Extension SIMD2 : Nouvelles instructions Comparaisons CMPPDComparaison de doubles mots compactés. CMPSDComparaison des doubles mots de poids faible. COMISDComparaison de la paire de doubles de poids faible et affectation de EFLAGS. PCMPEQBCompare les 16 octets compactés pour égalité. PCMPEQWCompare les 8 mots compactés pour égalité. PCMPEQDCompare les 4 doubles mots compactés pour égalité. PCMPGTBCompare les 16 octets compactés pour plus grand que. PCMPGTWCompare les 8 mots compactés pour plus grand que. PCMPGTDCompare les 4 doubles mots compactés pour plus grand que. UCOMISDComparaison non ordonnée de la paire de doubles de poids faible et affectation de EFLAGS.

57 @Pierre Marchand et Martin Dubois, 2002345 Programmation SIMD Extension SIMD2 : Nouvelles instructions Conversions CVTDQ2PDConversion de deux entiers doubles mots compac- tés en deux doubles compactés. CVTPD2DQConversion de deux doubles compactés en entiers doubles mots compactés. CVTPD2PIConversion de deux doubles compactés en deux entiers doubles mots compactés dans un registre MMX. CVTPD2PSConversion de deux doubles compactés en deux floats compactés. CVTPI2PDConversion de deux entiers doubles mots compactés dans un registre MMX en deux doubles compactés.

58 @Pierre Marchand et Martin Dubois, 2002346 Programmation SIMD Extension SIMD2 : Nouvelles instructions Conversions CVTPS2DQConversion de quatre floats compactés en quatre entiers compactés doubles mots signés. CVTPS2PDConversion de deux floats compactés en deux doubles compactés. CVTSD2SIConversion double de poids faible en entier double mot signé dans un registre de 32 bits.

59 @Pierre Marchand et Martin Dubois, 2002347 Programmation SIMD Extension SIMD2 : Nouvelles instructions Conversions CVTSD2SSConversion du double de poids faible en float. CVTSI2SDConversion d’un entier double mot dans un registre de 32 bits en double de poids faible dans un registre SIMD. CVTSS2SDConversion du float de poids faible en double de poids faible d’un registre SIMD.

60 @Pierre Marchand et Martin Dubois, 2002348 Programmation SIMD Extension SIMD2 : Nouvelles instructions Conversions avec troncature CVTTPD2DQConversion avec troncature de deux doubles compactés en entiers compactés doubles mots signés. CVTTPD2PIConversion avec troncature de deux doubles compactés en entiers compactés doubles mots signés dans un registre MMX. CVTTPS2DQConversion avec troncature de deux floats en entiers compactés doubles mots signés. CVTTSD2SIConversion avec troncature du double de poids faible en entier double mot signé dans un registre de 32 bits.

61 @Pierre Marchand et Martin Dubois, 2002349 Programmation SIMD Extension SIMD2 : Nouvelles instructions Conversions PACKSSWBCompacter 8 mots en octets avec saturation signée. PACKSSDWCompacter 4 doubles mots en mots avec satura- tion signée. PACKUSWBCompacter 8 mots en octets avec saturation non signée.

62 @Pierre Marchand et Martin Dubois, 2002350 Modes de fonctionnement Le mode protégé du Pentium dispose de quatre niveaux de privilèges. Niveau 0 (Ring 0) : C'est le fonctionnement en mode noyau : accès aux instructions privilégiées, accès aux interruptions, accès aux entrées/sorties. Niveau 1 (Ring 1) : Fonctions systèmes appelées par les applications, gestion des fichiers, affichage, pilotes d’imprimantes, etc.

63 @Pierre Marchand et Martin Dubois, 2002351 Modes de fonctionnement  Niveau 2 (Ring 2) : Extensions du système d’exploitation qui reposent sur le niveau 1.  Niveau 3 (Ring 3) : Niveau des applications. Notez que Windows NT et Linux n’utilisent que les niveaux 0 et 3.

64 @Pierre Marchand et Martin Dubois, 2002352 Mémoire virtuelle Les buts de la mémoire virtuelle Les adresses logiques vs les adresses physiques La façon de faire Intel  La segmentation  La pagination

65 @Pierre Marchand et Martin Dubois, 2002353 Buts de la mémoire virtuelle Donner aux applications l’impression d’une grande mémoire vive en utilisant une mémoire vive plus modeste et une mémoire de masse. Protéger les applications contre les dommages causés volontairement ou non par les autres applications s’exécutant sur le même ordinateur. Protéger le système d’exploitation contre les dommages causés volontairement ou non par les applications.

66 @Pierre Marchand et Martin Dubois, 2002354 Adresse logique vs adresse physique C’est le concept à la base de tous les systèmes de mémoire virtuelle Les applications ne manipulent que des adresses logiques, souvent nommées adresses virtuelles Les adresses physiques sont utilisées pour les lectures et écritures de la mémoire Adresse logique Adresse physique Unité de gestion de la mémoire virtuelle (MMU)

67 @Pierre Marchand et Martin Dubois, 2002355 Scénario d’une lecture L’application déclenche la lecture d’une case mémoire en utilisant une adresse logique Le MMU vérifie les permissions de lecture-écriture Le MMU transforme l’adresse logique en adresse physique Le processeur effectue la lecture de la mémoire en utilisant l’adresse physique Qu’arrive-t-il si la mémoire que l’application désire lire se trouve temporairement placée sur une unité de mémoire de masse ?

68 @Pierre Marchand et Martin Dubois, 2002356 Faute de page En effectuant la conversion d’adresse logique en adresse physique, le MMU découvre que l’adresse logique n’a pas de correspondance physique Le système d’exploitation prend le contrôle  Il place la « thread » en sommeil  Demande le chargement de la zone de mémoire  Permet l’exécution d’une autre « thread »  Une fois le chargement effectué, il marque à nouveau la « thread » comme exécutable

69 @Pierre Marchand et Martin Dubois, 2002357 La façon Intel La façon Intel d’implanter la mémoire virtuelle ajoute un type d’adresse. Adresse logique ou virtuelle: Elle est constituée d’un sélecteur de segment (16 bits) et d’un déplacement (32 bits) par rapport au début de ce segment. Adresse linéaire: C’est simplement un déplacement (32 bits) par rapport au début de l’espace d’adressage du processus. Adresse physique: C’est l’adresse qui sera directement utilisé à l’extérieur du processeur pour la manipulation de la mémoire (32 ou 36 bits).

70 @Pierre Marchand et Martin Dubois, 2002358 Segmentation et pagination Adresse logique Segmentation Adresse linéaire Pagination Adresse physique 16 bits pour le sélecteur de segment 32 bits pour le déplacement 32 bits pour le déplacement par rapport au début de l’espace d’adressage 32 ou 36 bits qui seront directement placés sur le bus d’adresses du processeur.

71 @Pierre Marchand et Martin Dubois, 2002359 Sélecteur de segment En mode protégé, les registres de segment (16 bits) ne contiennent pas des adresses comme dans le mode réel. Ils contiennent des sélecteurs, qui contiennent un index dans une table de descripteurs située en mémoire. Format d'un sélecteur : IndexTIRPL 2 1 0 15

72 @Pierre Marchand et Martin Dubois, 2002360 Table des descripteurs de segments L’index a 13 bits, il peut donc adresser 8,192 descripteurs différents. Le processeur multiplie cet index par 8 pour trouver l’adresse d’un descripteur dans la table, puisque chaque descripteur comporte 8 octets. Le bit TI (Table Indicator) indique dans quelle table on doit chercher le descripteur : 0 = GDT (Global Descriptor Table), 1 = LDT (Local Descriptor Table). Les bits RPL (Requested Privilege Level) indiquent le niveau de privilège désiré.

73 @Pierre Marchand et Martin Dubois, 2002361 Adresses des tables Registres d’adresses système Global Descriptor Table Register GDTR (48 bits) Local Descriptor Table Register LDTR (16 bits) 0 47 GDTR LDTR

74 @Pierre Marchand et Martin Dubois, 2002362 GDTR - LDTR La partie accessible de GDTR comporte 48 bits : Le champ limit donne la taille de la table, tandis que le champ base donne son adresse. Le registre LDTR contient un sélecteur dans la GDT. Le registre fantôme associé contient le descripteur correspondant. 0 47 limitbase 15

75 @Pierre Marchand et Martin Dubois, 2002363 Global Descriptor Table Chaque système contient une table globale de descripteurs GDT. Cette table contient des descripteurs disponibles pour toutes les tâches du système. La GDT peut contenir n'importe quel descripteur de segment. En général, la GDT contient trois types de descripteurs : segments de code et de données utilisés par le système d'exploitation, descripteurs pour les descripteurs locaux d’un système, et segments d’état de tâches (Task State Segment).

76 @Pierre Marchand et Martin Dubois, 2002364 Local Descriptor Table Les systèmes d’exploitation utilisent généralement une LDT pour chaque tâche. Ces tables permettent d'isoler les segments de code et de données d'une tâche du reste du système. Une LDT est associée avec une tâche donnée et ne peut contenir que des descripteurs de code, de données, de pile, de task gate et de call gate. Une tâche ne peut accéder à un segment si son descripteur n’existe soit dans sa LDT, soit dans la GDT. Mais des données globales peuvent être partagées par différentes tâches si leur segment est dans la GDT.

77 @Pierre Marchand et Martin Dubois, 2002365 Descripteur de segment Un descripteur a toujours 64 bits (8 octets). Format d’un descripteur de segment 3116150 limit 0-15base 0-15 63484732 base 16-23 base 24-31 D P L GDO limit 16-19 A V L 39 P S = 0 A Type Droits d'accès 56

78 @Pierre Marchand et Martin Dubois, 2002366 Descripteur de segment limittaille du segment baseadresse du segment Aaccessed : le système d’exploitation inscrit 1 dans ce champ lorsqu’il accède au segment, pour gérer la mémoire virtuelle. SSystem Descriptor 0 = Special segment 1 = Code/Data segment DPLDescriptor Privilege Level (0 - 3). Une tâche ne peut accéder qu’à des segments de privilège égal au sien (CPL).

79 @Pierre Marchand et Martin Dubois, 2002367 Descripteur de segment P P = 1:Present in physical memory. AVLAvailable for programmer DSize : Si le descripteur est celui d'un segment exécutable, D = 1 signifie jeu d’instructions natif D = 0 signifie jeu d'instructions du 80286, avec segments de 64 Ko. Si le descripteur est celui d’un segment de données, D = 1 signifie segment > 64 Ko.

80 @Pierre Marchand et Martin Dubois, 2002368 Descripteur de segment GGranularity : 0 = 1 octet, limite de segment de 1 Mo (20 bits dans le champ limit) 1 = 4 Ko (1 page), limite de segment de 4 Go. : 2 20 pages de 4 Ko.

81 @Pierre Marchand et Martin Dubois, 2002369 Descripteur de segment Type 0Read-only data segment 1Read/write date segment 2- 3Read/write expand-down a data segment 4Execute-only code segment 5Execute/readable code segment 6Execute-only « conforming » code b segment 7Execute/readable « conforming » code segment a segments spéciaux pour les piles b code qui adoptera le niveau de privilège de la fonction qui l’a appelé.

82 @Pierre Marchand et Martin Dubois, 2002370 Descripteur de segment Exemple GDTR = CC CC80 03 6000 03FF Base = CC 03 6000 Taille = C03FF = 787 455 G = 1 = pages de 4 Ko donc taille = 4 Ko x 787 455 = 3 149 820 Ko D = 1 = natif P = 1 = présent en mémoire DPL = 00 = niveau de privilège 0 S = 0 = segment spécial Type = 000 = read only A = 0 = accessed 3116150 limit 0-15base 0-15 63484732 base 16-23 base 24-31 D P L GDO limit 16-19 A V L 39 P S = 0 A Type Droits d'accès 56

83 @Pierre Marchand et Martin Dubois, 2002371 Manipulation des tables Des instructions spéciales permettent d’accéder aux registres des tables de descripteurs : LGDTLoad GDT Register SGDTStore GDT Register LIDTLoad IDT Register SIDTStore IDT Register LLDTLoad LDT Register SLDTStore LDT Register LTRLoad Task Register STRStore Task Register En mode protégé, les instructions Load ci-dessus sont privilégiées, c’est-à-dire qu’elles déclencheront une exception si le niveau de privilège du code n’est pas 0.

84 @Pierre Marchand et Martin Dubois, 2002372 GDT Descripteur de LDT Reg. LDT Registre GDT LDT Tâche 1 LDT Tâche 2 Segment de Code Tâche 1 Descripteur de segment de code Mémoire CS

85 @Pierre Marchand et Martin Dubois, 2002373 La segmentation et nous Les développeurs d’applications ne remarquent généralement pas la segmentation Comme « programmeur système », sans nous en occuper directement, nous avons à bien comprendre le fonctionnement de la segmentation et ses implications.  Utilisation des données utilisateurs à partir d’un pilote de périphérique en mode « Kernel »  Communication entre processus  Protection des données systèmes  Sécurité du système d’exploitation  Adressage des périphériques

86 @Pierre Marchand et Martin Dubois, 2002374 Pagination Buts  Éviter la fragmentation de la mémoire physique  Permettre de placer efficacement des partie de mémoire sur une unité de mémoire de masse  Émuler une plus grande quantité de mémoire

87 @Pierre Marchand et Martin Dubois, 2002375 Structure de pagination Directory Page Offset CR3 Directory Table Page Donnée Adresse linéaire 12 bits 10 bits

88 @Pierre Marchand et Martin Dubois, 2002376 Page directory entry NomDescription 31 à 12 Adresse de base de la table de page 11 à 9Avail Disponible pour le système d’exploitation 8G 7PS Grandeur de la page 0 = 4 Ko 60 Réservé 5A Indicateur d’accès 4PCD Désactiver la cache 3PWT Désactiver la cache pour les écriture 2U/S Utilisateur ou système 1R/W Permission d’écriture 0P Présente en mémoire

89 @Pierre Marchand et Martin Dubois, 2002377 Page table entry NomDescription 31 à 12 Adresse de base de la page 11 à 9Avail Disponible pour le système d’exploitation 8G Globale 7PAT Grandeur de la page 0 = 4 Ko 6D Indicateur de modification 5A Indicateur d’accès 4PCD Désactiver la cache 3PWT Désactiver la cache pour les écriture 2U/S Utilisateur ou système 1R/W Permission d’écriture 0P Présente en mémoire

90 @Pierre Marchand et Martin Dubois, 2002378 Pagination et programmation système La mémoire qu’un programme considère continue ne l’est pas physiquement Il est possible qu’une page de données ou de code ne soit pas en mémoire Impacte énorme sur la programmation des transferts DMA et le contrôle de périphérique de type « Master »


Télécharger ppt "@Pierre Marchand et Martin Dubois, 2002289 IFT-17584 Semaine 06 Programmation système."

Présentations similaires


Annonces Google