Streaming SIMD Extensions: diferència entre les revisions

Contingut suprimit Contingut afegit
m Robot substituint el text: (-Imatge: +Fitxer:, -Image: +Fitxer:)
Cap resum de modificació
Línia 1:
En [[informàtica]], '''Streaming SIMD Extensions''' ('''SSE''') és una extensió [[SIMD]] del [[repertori d'instruccions]] de l'arquitectura [[x86]], dissenyada per [[Intel]] i introduïda el 1999 amb la seva serie de processadors [[Pentium III]] en resposta de [[3DNow!]] d'[[AMD]] (que va debutar un any abans). SSE conté 70 noves instruccions.
 
Originariament va ser conegut com '''KNI''', '''''K'''atmai '''N'''ew '''I'''nstructions'' (''Katmai'' va ser el nom amb clau per la primera revisió del nucli [[Pentium III]]). Durant el projecte Katmai, Intel va buscar la forma per diferienciardiferenciar-lo de la seva linealínia de productes anteriors, en particular, el seu producte insígnia [[Pentium II]]. AMD eventualment va afegir suport per a instruccions SSE, començant amb el seu processador [[Athlon XP]]. Que va ser posteriorment renombrat '''ISSE''', per '''I'''nternet '''S'''treaming '''S'''IMD '''E'''xtensions, després SSE.
 
Intel pel general, es va decebre del seu primer esforç d'implementació de SIMD a [[IA-32]], [[MMX (instruction set)|MMX]]. MMX tenia dos problemes principals: Aquest reutilitzava els registres de [[coma flotant|punt flotant]] existents fent la [[CPU]] incapaç de treballar amb ambdós [[coma flotant|punt flotant]] i les dades SIMD al mateix moment, i solament treballava amb [[nombres enters|enters]].
Línia 7:
==Registres==
 
SSE originariariamentoriginàriament va afegir vuit registres nous de 128 bits coneguts com XMM0 a XMM7. Les extensions [[x86-64]] d'AMD (anomenadaesanomenades originariamentoriginàriament ''AMD64'') i després duplicades per Intel afegeixen uns altres vuit registres de XMM8 fins a XMM15. També hi ha un nou registre control/estat de 32 bits, MXCSR. Tots els 16 registres 16 XMM de 128 bits són només accessibles en mode d'operació de 64 bits.
[[Fitxer:XMM registers.png|right|220px]]
Cada registre de paquets engloba 4 nombres en punt flotant de [[precisió simple]] de 32 bits o 2 nombres en punt flotant de [[precisió doble]] de 64 bits o quatre enters de 32 bits o vuit enters curts de 16 bits o setze octets o caràcters de 8 bits. Les operacions amb enters tenen instruccions per variant amb o sense signe. Les operacions enteres [[SIMD]] encara poden ser portades a terme pels vuit registres MMX de 64 bits.
 
A causa que aquests registres de 128 bits són estats de programa adicionaladdicional que el [[sistema operatiu]] ha de preservar a través de l'activació de tasques, Per defecte estan desactivats mentres el sistema operatiu els activi de forma explícita. Això significa que els sistema operatiu ha de sbaersaber com utilitzar les instruccions FXSAVE i FXRSTOR, que són el parell d'instruccions que poden enmagatzemaremmagatzemar d'un sol cop tots els registres d'estat [[x87]] i SSE. Aquest suport va ser ràpidament afegit a la gran majoria de sistemes operatius IA-32.
 
A causa de que SSE afegeix suport per a punt flotant, te molta més utilització que MMX. L'adició d'afegir suport d'enters a SSE2 fa encara més flexible SSE. mentres que MMX es redundant, les operacions es poden realitzar amb paral·lel amb les operacions SSE oferint a més un augment en el rendiment en algunes situacions.
 
La primera CPU que va suportar SSE, el Pentium III, compartia els recursos d'execució entre SSE i la [[FPU]]. Mentres una aplicació compilada pot interpaginar cara a cara instruccions FPU i SSE, el Pentium III no podrà proporcionar en el mateix cicle de rellotge instruccions FPU i SSE. Aquesta limitació redueix l'eficàcia de la [[segmentaciód'instruccions|segmentació]], però els registres separats XMM fan posiblepossible barrejar operacions SIMD i punt flotant escalar sense el compliment explícit d'èxit del canvi de mode MMX/punt flotant.
 
== Instruccions SSE ==
Línia 24:
'''Instruccions en punt flotant'''
 
* Moviment de dades: MemoriaMemòria-a-Registre / Registre-a-MemoriaMemòria / Registre-a-Registre
** Escalar – MOVSS
** Empaquetat – MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS
Línia 58:
 
==Exemple==
El següent exemple demostra els avantatges de la utilització de SSE. Considera una operació com la suma de vectors, que és molt utilitzada en aplicacions gràfiques d'ordinadors. Per sumar dos números de precissióprecisió simple, juntarunir vectors de 4 components utilitzant x87 necessita quatre operacions de suma en punt flotant
 
vec_res.x = v1.x + v2.x;<br />
Línia 65:
vec_res.w = v1.w + v2.w;<br />
 
Aquest podria correspondre a quatre instruccions FADD de x87 FADD en codi odjecteobjecte. Per un altre costat, com en el següent preudocodi mostra, una sola instrucció de 128 bits 'packed-add' que pot remplaçarreemplaçar les quatre operacions de suma.
 
movaps xmm0,address-of-v1 ;xmm0=v1.w | v1.z | v1.y | v1.x <br />