Aller au contenu

SSE4

Un article de Wikipédia, l'encyclopédie libre.

SSE4,pourStreamingSIMDExtensionsversion 4,aussi connu sous le nom deNehalem New Instructions(NNI), est unjeu d’instructionspour l’architecturex86.Il ajoute 54instructions-machinesupplémentaires aux jeux précédents,SSE3etSSSE3.

L’annonce de ce nouveau jeu d’instructions est faite leà l’Intel Developer Forumd’automne 2006. Ce jeu d’instructions a pour but d'améliorer les performances multimédia, les algorithmes de recherche et de détection, la protection des données (checksumde typeCRC) et la vectorisation.

Sous-ensembles SSE4

[modifier|modifier le code]

Le jeu d’instructions SSE4 est constitué de trois sous-ensembles. Deux sont particuliers aux processeurs Intel, et un aux processeurs AMD:

  • Le sous-ensembleSSE4.1,introduit dans lamicroarchitectureIntelPenryn,qui comprend 47 instructions.
  • Le sous-ensembleSSE4.2,introduit dans la microarchitecture IntelNehalem,qui comprend 7 instructions.
  • Le sous-ensembleSSE4aqui comprend 4 instructions. Disponible uniquement chez certains processeurs AMD

Nouvelles instructions

[modifier|modifier le code]

À la différence des précédentes implémentations des jeux SSE, le jeu SSE4 présente des instructions n’étant pas spécifiquement dédiées aux applications multimédia.

Ce jeu voit la réapparition d’un opérande implicite pour certaines instructions (cet opérande étant le registre XMM0 en tant que troisième opérande) et la disparition de l’utilisation des opérandes 64 bits (registres MMX) au profit d’opérandes uniquement 128 bits, c’est-à-dire une utilisation exclusive des registres XMM.

Beaucoup de ces instructions profitent d’un atout majeur des architectures Penryn et Nehalem, à savoir le moteur de permutation à un seul cycle (single-cycle shuffle engine).

L’instructionCPUIDpermet de déterminer si le processeur supporte les instructions.

Ces instructions ont été introduites avec la microarchitecturePenryn,le die shrink45 nmde lamicroarchitecture Cored'Intel. Le support est indiqué par le drapeau CPUID.01H:ECX.SSE41[Bit 19].

Instruction Description
MPSADBW Calcule 8 sommes de différences absolues ( |x0-y0|+|x1-y1|+|x2-y2|+|x3-y3|, |x0-y1|+|x1-y2|+|x2-y3|+|x3-y4|,...); Cette opération est extrêmement importante pour lescodecsmodernesHDTV[1]et permet de calculer un bloc de différence de 8×8 en moins de 7 cycles. Un bit d’unopérande immédiatde 3 bits indique si y0.. y11ou y4.. y15doit être utilisé depuis l’opérande destination, les deux autres si x0..x3,x4..x7,x8..x11ou x12..x15doit être utilisé depuis l’opérande source.
PHMINPOSUW Trouve le plus petit mot (16 bits) non signé de l’opérande source et place le résultat dans l’opérande destination (16 bits de poids faible). L’index du mot trouvé dans l’opérande source est placé dans le second mot de l’opérande destination aux bits 16 à 18. Les bits restants de l’opérande destination sont mis à zéro.
PMULDQ Effectue deux multiplications signées de deux paires d’entiers (32 bits) et sauve le résultat (deux produits de 64 bits) dans l’opérande de destination.
PMULLD Effectue une multiplication sur des nombres signés etpackés:4 entiers signés de 32 bits (opérande source) multipliés par 4 entiers signés de 32 bits (opérande destination). Le résultat est placé dans la destination.
DPPS, DPPD Effectue unproduit scalaireconditionnel entre deux opérandes de 128 bits. La condition est donnée par un troisième opérande de type immédiat. Le produit est en simple précision pour DPPS et en double pour DPPD.
BLENDPS, BLENDPD, BLENDVPS, BLENDVPD, PBLENDVB, PBLENDW Effectue une copie conditionnelle d’un registre XMM vers un autre. La copie est basée soit sur un masque binaire donné par unopérande immédiat(mnémoniques sans le 'v' dans le nom) soit sur un masque binaire donné par le registre XMM0 (mnémoniques avec 'v').
PMINSB, PMAXSB, PMINUW, PMAXUW, PMINUD, PMAXUD, PMINSD, PMAXSD Trouve le minimum ou maximum pour différents types d’opérandes entiers etpackés.
ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD Arrondit les valeurs d’un registre à virgule flottante en entiers en utilisant un des quatre modes d’arrondi spécifié par unopérande immédiat.
INSERTPS, PINSRB, PINSRD/PINSRQ, EXTRACTPS, PEXTRB, PEXTRW, PEXTRD/PEXTRQ Extraction et insertion. L’extraction consiste à prendre une partie d’un registre XMM pour la mettre en mémoire, tandis que l’insertion consiste à prendre un contenu mémoire et l’insérer dans un registre XMM.
PMOVSXBW, PMOVZXBW, PMOVSXBD, PMOVZXBD, PMOVSXBQ, PMOVZXBQ, PMOVSXWD, PMOVZXWD, PMOVSXWQ, PMOVZXWQ, PMOVSXDQ, PMOVZXDQ Extension de signe ou extension à zéro pour des nombres packés vers un type plus grand (correspond peu ou prou à MOVSX ou MOVZX sur l’unité générale).
PTEST Même chose que l’instruction générale TEST, c’est-à-dire qu’elle change les drapeaux ZF et CF deRFLAGSen opérant une conjonction logique (AND) entre les opérandes. L’instruction arme le drapeau ZF si au moins un des bits est armé (résultat du AND), et le drapeau CF si tous les bits correspondent.
PCMPEQQ Compare des quadruples mots (QWORDs - 64 bits) en les testant pour une égalité.
PACKUSDW Convertit des doubles mots (DWORDs - 32 bits) signés en mots (WORDs - 16 bits) non signés avec saturation.
MOVNTDQA Déplace un double quadruple mot (DQWORD - 128 bits) de la mémoire vers un registre XMM en utilisant unnon temporal hint.L’opération n’est effectuée que si la mémoire est de type WC (Write Combining). Cette instruction est par exemple utile pour retrouver un résultat depuis des périphériques attachés au bus mémoire.

SSE4.2 a ajouté STTNI (String and Text New Instructions)[2],plusieurs nouvelles instructions qui effectuent des recherches de caractères et des comparaisons sur deux opérandes de 16 octets à la fois. Ceux-ci ont été conçus (entre autres) pour accélérer l’analyse des documentsXML[3].Il a également ajouté une instruction pour calculer lescontrôles de redondance cycliqueutilisés dans certains protocoles de transfert de données. Ces instructions ont été implémentées pour la première fois dans la gamme de produitsIntel Core i7basée surNehalemet complètent le jeu d’instructions SSE4. AMD, quant à lui, a effectué la prise en charge en commençant par la microarchitectureBulldozer.Le support est indiqué via le drapeau CPUID.01H:ECX.SSE42[Bit 20].

Windows 11 24H2nécessite que le processeur prenne en charge SSE4.2, sinon le noyau Windows n’est pas amorçable[4].

Instruction Description
CRC32 Calcul de la valeur duCRC32Cà l'aide du polynôme 0x11EDC6F41 (ou, sans le bit d'ordre élevé, 0x1EDC6F41)[5],[6]
PCMPESTRI Comparaison de chaînes de caractèrespackéesde longueur explicite, Retour Index
PCMPESTRM Comparaison de chaînes de caractèrespackéesde longueur explicite, Retour Masque
PCMPISTRI Comparaison de chaînes de caractèrespackéesde longueur implicite, Retour Index
PCMPISTRM Comparaison de chaînes de caractèrespackéesde longueur implicite, Retour Masque
PCMPGTQ Comparaison de données 64 bits signéespackéespour "supérieur à"

POPCNT et LZCNT

[modifier|modifier le code]

Ces instructions fonctionnent sur des registres entiers plutôt que SSE, car ce ne sont pas des instructions SIMD, mais elle apparaissent en même temps et, bien qu’introduites par AMD avec le jeu d’instructions SSE4a, elles sont comptées comme des extensions distinctes avec leurs propres bits CPUID dédiés pour indiquer la prise en charge. Intel a implémentéPOPCNTà partir de la microarchitectureNehalemetLZCNTà partir de la microarchitectureHaswell.AMD a implémenté les deux, en commençant par la microarchitectureBarcelona.

AMD appelle cette paire d’instructionsAdvanced Bit Manipulation(ABM).

Le codage deLZCNTprend le même chemin de codage que celui de l’instructionBSR(balayage des bits inverse). Cela se traduit par un problème car l’appel àLZCNTpar certains processeurs qui ne le prennent pas en charge, tels que les processeurs Intel antérieurs à Haswell, peut exécuter l’opération de manière incorrecte au lieu de lever une exceptioninstruction non valide.Il s’agit d’un problème, car les valeurs du résultat deLZCNTet deBSRsont différentes.

Les zéros à droite peuvent être comptés à l’aide des instructionsBit Scan Forward(BSF) (balayage des bits vers l’avant) ouTZCNT(comptage des zéros en queue).

Windows 11 24H2nécessite que le processeur prenne en chargePOPCNT,sinon le noyau Windows n’est pas amorçable[7].

Instruction Description
POPCNT Comptage de la population(compte le nombre de bits valant 1). Le support est indiqué par le drapeau CPUID.01H:ECX.POPCNT[Bit 23][8]
LZCNT Comptage des zéros en tête. Le support est indiqué par le drapeau CPUID.80000001H:ECX.ABM[Bit 5][9]

Le groupe d'instructions SSE4a a été introduit dans lamicroarchitecture Barcelonad'AMD. Ces instructions ne sont pas disponibles sur les processeurs Intel. Le support est indiqué par le drapeau CPUID.80000001H:ECX.SSE4A[Bit 6][9].

Instruction Description
EXTRQ/INSERTQ instructions combinées de masque et de décalage[10]
MOVNTSD/MOVNTSS Instructions de stockage de flux scalaire[11]
  1. (en)«Motion Estimation with Intel Streaming SIMD Extensions 4 (Intel SSE4)», Intel.
  2. (en-US)«Schema Validation with Intel® Streaming SIMD Extensions 4 (Intel® SSE4) - archivé depuis l'original»(consulté le)
  3. (en-US)«XML Parsing Accelerator with Intel® Streaming SIMD Extensions 4 (Intel® SSE4) - - archivé depuis l'original»(consulté le)
  4. (en-US)AaronKlotzMicrosoft blocks some PCs from Windows 11 24H2 — CPU must support SSE4.2 or the OS will not boot», surTom's Hardware,(consulté le)
  5. (en)«Intel SSE4 Programming Reference (page 61) - Archivé depuis l'original»,.Voir aussi(en)«rfc3385 - Archivé depuis l'original»,pour une discussion sur le polynôme CRC32C.
  6. (en)Dr. Dobbs, «ast, Parallelized CRC Computation Using the Nehalem CRC32 Instruction»,
  7. (en)SayanSenMicrosoft fixes a misfired PopCnt block but Windows 11 24H2 requirements may be here to stay», surNeowin,(consulté le)
  8. (en)«Intel® 64 and IA-32 Architectures Software Developer's Manual, Volume 2B: Instruction Set Reference, N–Z - Archivé depuis l'original»,.
  9. aetb(en)«AMD CPUID Specification - Archivé depuis l'original»(consulté le)
  10. (en)Rahul Chaturvedi, «"Barcelona" Processor Feature: SSE4a Instruction Set - Archivé depuis l'original»,
  11. (en)Rahul Chaturvedi, «"Barcelona" Processor Feature: SSE4a, part 2 - Archivé depuis l'original»,

Articles connexes

[modifier|modifier le code]

Liens externes

[modifier|modifier le code]