SSE3, pour version 3, connu aussi par son nom de code interne (PNI), est la troisième génération du jeu d'instructions SSE pour l'architecture IA-32. Elle ajoute 13 nouvelles instructions-machine au jeu précédent, SSE2.
Intel a introduit SSE3 au début de l'année 2004 avec la version Prescott de son processeur Pentium 4. En , AMD a introduit un sous-ensemble de SSE3 dans la révision E de leur processeur Athlon 64 (Venice et San Diego). Leur jeu d'instructions SIMD pour la plate-forme x86, du plus ancien au plus récent, sont MMX, 3DNow! (développé par AMD), SSE et SSE2.
Changements Le changement le plus notable est la capacité à fonctionner horizontalement dans un registre, à l'opposé des plus ou moins strictes opérations verticales de toutes les instructions SSE précédentes. Plus spécifiquement, les instructions pour additionner et multiplier plusieurs valeurs stockées dans un seul registre ont été ajoutées. Ces instructions simplifient l'implantation de bon nombre d'opérations DSP et 3D. Il y a aussi une nouvelle instruction pour convertir des valeurs à virgules flottantes à des entiers sans avoir à changer le mode d'arrondissement global, permettant ainsi d'éviter la réinitialisation du Pipeline d'instruction. Finalement, il y a l'ajout de LDDQU, une instruction alternative, qui donne de meilleures performances sur des architectures NetBurst, pour charger les vecteurs d'entiers mal alignés qui traversent les limites du .
Processeurs avec le SSE3
AMD : Athlon 64 (depuis les révisions E3 Venice et E4 San Diego) Athlon 64 X2 Athlon 64 FX (depuis la révision E4 San Diego) Opteron (depuis la révision E4 Venus, Troy et Athens) Sempron (depuis la révision E3 Palermo ) Turion 64 Turion 64 X2 Intel : Pentium D Celeron D Pentium 4 (depuis Prescott) Pentium Dual Core Intel Core Intel Atom Xeon (depuis Nocona) VIA/ : C7 Transmeta Efficeon TM88xx
Nouvelles instructions Instructions communes Arithmétique ADDSUBPD - Entrée - { A0, A1 }, { B0, B1 } Sortie - { A0 - B0, A1 + B1 } ADDSUBPS - Entrée : { A0, A1, A2, A3 }, { B0, B1, B2, B3 } Sortie : { A0 - B0, A1 + B1, A2 - B2, A3 + B3 } AOS (Tableau de structures) HADDPD - Entrée : { A0, A1 }, { B0, B1 } Sortie : { B0 + B1, A0 + A1 } HADDPS Entrée : { A0, A1, A2, A3 }, { B0, B1, B2, B3 } Sortie : { B0 + B1, B2 + B3, A0 + A1, A2 + A3 } HSUBPD - Entrée : { A0, A1 }, { B0, B1 } Sortie : { A0 - A1, B0 - B1 } HSUBPS - Entrée : { A0, A1, A2, A3 }, { B0, B1, B2, B3 } Sortie : { A0 - A1, A2 - A3, B0 - B1, B2 - B3 } LDDQU - un chargement alternatif de vecteur codé sur des entiers, utile pour la compression vidéo MOVDDUP, MOVSHDUP, MOVSLDUP - pour les nombres complexes et le filtrage audio FISTTP - conversion de la pile du coprocesseur vers des entiers
Instructions Intel MONITOR, MWAIT - Permet d'optimiser les applications , Les processeurs disposant de l’ devraient bénéficier de meilleures performances.
Évolutions Le SSE4 est une autre avancée majeure, ajoutant une instruction de produit scalaire, de nombreuses instructions d'additions entières, une instruction popcnt et d'autres instructions. SSE4 arrête le support des registres MMX. Le SSE4 est supporté par la version 'Penryn' de la microarchitecture Core 2 . Le SSE5 prévu initialement pour mi- par AMD et implémenté dans la microarchitecture Bulldozer en , permet, comme dans les processeurs RISC, de préciser dans l'instruction un troisième registre destination, ce qui permet d'économiser un bon nombre d'instructions et devrait intrinsèquement accélérer les calculs. Auparavant, il fallait d'abord copier le contenu du registre destination dans un nouveau registre afin de ne pas détruire les informations précédentes sur theregister.co.uk sur developer.AMD.com.
Voir aussi Jeu d'instructions x86
Notes et références
Catégorie:Jeu d'instruction x86 Catégorie:SIMD