Anda di halaman 1dari 6

¿Qué es la tecnología MMX?

La multimedia y las comunicaciones están generando aplicaciones con exigencias cada vez
mayores. La tecnología MMX es una nueva extensión a la Arquitectura que:

 Mejora el rendimiento de esas aplicaciones, y


 Crea y activa nuevas características/posibilidades.
MMX nació en los laboratorios de Intel Corporation, la empresa estadounidense que
fabrica los procesadores Intel x86, los que usan la mayoría de los PC (386, 486, Pentium,
Pentium Pro, etc.). Intel sacó su primer procesador MMX en enero de 1997, y en menos
de seis meses inundó el mercado con versiones cada vez más veloces de esos chips.
Para mejorar la multimedia y el procesado 3-D, la nueva tecnología MMX de Intel puede
empaquetar múltiples pixeles en un registro y manipularlos con una sola instrucción. En
efecto, MMX aporta un nuevo nivel de paralelismo a los procesadores x86.
En lugar de añadir registros físicos nuevos a la arquitectura x86 (lo que ralentizaría la
adopción del MMX), Intel reutiliza la pila de coma flotante (FP) existente a modo de
registros lógicos MMX. Las instrucciones MMX utilizan sólo la porción de mantisa de 64
bits de los registros FP de 80 bits, ignorando la porción de 16 bits del exponente. Esto da
lugar a 8 registros lógicos de 64 bits sin que se altere de forma significativa la arquitectura
x86.
Las instrucciones MMX pueden empaquetar varios tipos de datos dentro de estos
registros de 64 bits: bytes empaquetados (ocho por registro); palabras empaquetadas
(cuatro por registro); palabras dobles empaquetadas (dos por registro) y una palabra
cuádruple (un valor de 64 bits por registro). Estos tipos de datos resultan útiles debido a
que, normalmente, los programas multimedia trabajan con pequeñas unidades de datos.
Por ejemplo, un pixel de color en modo color real, la resolución de color más utilizada, usa
24 bits: 1 byte por cada color RGB. Este modo permite trabajar con hasta 16,7 millones de
colores, mucho más de lo que es capaz de distinguir el ojo humano. En modo HiColor, sólo
se necesitan 16 bits por pixel. Para la mayoría de aplicaciones gráficas, 16 bits son más
que suficientes.
Los nuevos procesadores x86 que soporten MMX serán capaces de direccionar los nuevos
registros, desde el MM0 hasta el MM7. En lugar de tratar los registros como si fueran una
pila, que es lo que hacen las instrucciones FP, las instrucciones MMX acceden
directamente a los registros. Al efectuarse el cambio de instrucciones MMX a FP (y
viceversa), la instrucción FSAV guarda el estado de los registros y la instrucción FRSTR
restaura los valores. Esto permite que la tecnología MMX sea compatible con los sistemas
operativos existentes que, frecuentemente deben de efectuar operaciones de guardar y
restaurar registros cuando se produce un cambio de contexto entre aplicaciones
multitarea.
El inconveniente de esta técnica reside en la imposibilidad de que los programadores
puedan entremezclar instrucciones PF y MMX, ya que necesitan los mismos registros. Pero
esto no es tan importante como parece, ya que los programas multimedia efectúan
habitualmente sus operaciones en coma flotante antes de visualizar los datos (el proceso
de modelado se basa fundamentalmente en instrucciones para enteros).
MMX presenta un conjunto de instrucciones para enteros, de propósito general, que
utiliza el paradigma SIMD (Single Instruction/Multiple Data). Una sola instrucción procesa
todos los datos de los registros empaquetados. Este paralelismo incrementa el
rendimiento. Casualmente este concepto no es nuevo para Intel. Hace años, la familia
i860RISC, ahora obsoleta por completo, ofrecía una tecnología parecida, denominada PAX
(Pixel Addressing Extension).
Otra característica del nuevo conjunto de instrucciones, las operaciones que efectúan
comparaciones en paralelo, podría incrementar el rendimiento al eliminar las
bifurcaciones (los procesadores modernos intentan prever las bifurcaciones, pero
cualquier error de predicción significa una penalización de varios ciclos de procesador). En
combinación con las características de empaquetado de datos, las operaciones de
comparación en paralelo resultan útiles cuando, por ejemplo, se quieren combinar o
solapar dos imágenes.
Punto 1 del gráfico: Las instrucciones MMX pueden empaquetar valores de 6, 16, 32 o 64
bits dentro de registros MMX de 64 bits. Aquí 8 pixeles de 8 bits son empaquetados en un
solo registro.
Punto 2 del gráfico: Cuando se ejecuta una instrucción MMX, los ocho valores de píxel de
cada registro MMX se procesan simultáneamente. Aquí, la instrucción compara los píxeles
de los registros 1 y 2 en busca de igualdad.
Punto 3 del gráfico: Resultados de las comparaciones. El paralelismo que se logra cuando
una única instrucción MMX procesa múltiples valores de píxel resulta más rápido que si
tuvieran que ejecutar instrucciones separadas para cada comparación.
Las instrucciones MMX son parecidas al conjunto de instrucciones visuales (VIS) del
UltraSparc de Sun. VIS también empaqueta registros y utiliza los registros FP. Pero ofrece
muchas más cosas que MMX: 32 registros nuevos (en comparación con los ocho de Intel),
descompresión acelerada de vídeo con transformaciones discretas de coseno, modos de
direccionamiento más potentes, enmascarado de pixels y un conjunto de operaciones
superespecializadas que incrementan mucho la sensación de movimiento al trabajar con
flujos de video con compresión MPEG.
MMX no es el único enfoque nuevo de Intel para acelerar la tecnología 3-D. Otra nueva
versión para aceleradores 3-D es la que constituye el AGP (Advanced Graphics Port). Para
distribuir equitativamente las tareas del procesador principal y las del procesador gráfico,
AGP crea una nueva vía de acceso para efectuar la transferencia de datos entre la
memoria principal y la memoria de almacenamiento intermedio para marcos de la tarjeta
gráfica. En teoría, según Intel, al evitar el bus PCI, AGP puede permitir transferencias para
lectura y escritura a velocidades de hasta 400 MBps.
Instrucciones MMX:
Todas las instrucciones MMX (excepto EMMS) tienen dos operandos, destino y origen, y
como siempre en ese mismo orden. El operando origen podrá ser memoria o un registro
MMX, mientras que el destino siempre será un registro MMX (excepto en las operaciones
de movimiento, claro, porque si no, apañados íbamos). Bueno, que empiece la fiesta.
Instrucciones de movimientos de datos:
MOVD (MOVe Dword)
Copia una palabra doble (32 bits) de origen en destino. Cualquiera de los operandos
puede ser un registro MMX, memoria, o incluso un registro de propósito general de 32
bits. Sin embargo no es válido mover entre registros MMX, entre posiciones de memoria,
ni entre registros de propósito general. Si el destino es un registro MMX el dato se copia a
la parte baja y se extiende con ceros. Si el origen es un registro MMX se copia es la parte
baja de dicho registro sobre el destino.
MOVQ (MOVe Qword)
Copia una palabra cuádruple (64 bits) de origen en destino. Cualquier operando puede ser
memoria o un registro MMX, o incluso ambos MMX. No se admiten los dos operandos en
memoria.
A partir de ahora, y salvo que se diga lo contrario, todas las instrucciones admiten como
operandos origen registros MMX o memoria, y como destino obligatoriamente un registro
MMX.
Instrucciones aritméticas:
PADDB, PADDW, PADDD (Packed ADD Byte/Word/Dword)
Suman los paquetes con signo (bytes, words, o dwords) de destino y origen, almacenando
el resultado en destino. Si el resultado de un paquete queda fuera del rango se trunca a la
parte más baja (es decir, se ignoran los bits de carry de cada suma individual)
PADDSB, PADDSW (Packed ADD with Saturation Byte/Word)
Suman los paquetes con signo (bytes o words) de origen y destino, almacenando el
resultado en destino. Si el resultado de un paquete queda fuera del rango de
representación, se limita al máximo o mínimo según corresponda: aplica saturación
PADDUSB, PADDUSW (Packed ADD Unsigned with Saturation Byte/Word)
Suma los paquetes sin signo de origen y destino, almacenando el resultado en destino.
Aplica saturación.
PSUBB, PSUBW, PSUBD (Packed SUBstract Byte/Word/Dword)
Resta a los paquetes de destino (bytes, words o dwords) los de origen.
PSUBSB, PSUBSW (Packed SUBstract with Saturation Byte/Word)
Resta a los paquets de destino con signo (bytes o words) los de origen. Aplica saturación.
PSUBUSB, PSUBUSW (Packed SUBstract Unsigned with Saturation Byte/Word)
Resta a los paquets de destino con signo (bytes o words) los de origen. Aplica saturación.
PMULHW, PMULLW (Packed MULtiply High/Low Word)
Multiplica las cuatro palabras del operando origen con las cuatro del operando destino,
resultando en cuatro dwords. La parte alta o baja respectivamente de cada dword es
almacenada en los paquetes correspondientes del destino. Las operaciones se realizan
sobre números con signo.
PMADDWD (Packed Multiply and ADD)
Multiplica las cuatro palabras del operando origen con las cuatro del operando destino,
resultando en cuatro dwords. Las dos dwords superiores son sumadas entre sí y
almacenadas en la parte alta del destino. Lo mismo con las dwords inferiores en la parte
inferior del destino.
Instrucciones de comparación:
PCMPEQB, PCMPEQW, PCMPEQD (Packed CoMPare for EQual Byte/Word/Dword)
PCMPGTB, PCMPGTW, PCMPGTD (Packed CoMPare for Greater Than Byte/Word/Dword)
Realiza la comparación de igualdad o de "mayor que" entre las palabras de origen y de
destino, almacenando en destino el resultado de dicha comparación (verdadero todo a 1,
falso todo a 0).
Instrucciones lógicas:
PAND, PANDN, POR, PXOR (Packed AND/AND Not/OR/XOR)
Realizan las operaciones lógicas correspondientes bit a bit entre operando y destino,
almacenando el resultado en destino. PANDN realiza la operación NOT sobre los bits de
destino, y a continuación efectúa AND entre operando y destino, almacenando el
resultado en destino. PANDN de un registro consigo mismo equivale a NOT, pues A AND A
= A.
Instrucciones de desplazamiento:
PSLLW,PSLLD (Packed Shift Left Logical Word/Dword)
PSRLW,PSRLD (Packed Shift Right Logical Word/Dword)
Efectúan desplazamientos lógicos hacia la izquierda o derecha (Left/Right) sobre las
palabras o palabras dobles empaquetadas (Word/Dword); desplazan los bits y rellenan
con ceros.
PSRAW,PSRAD (Packed Shift Right Arithmetic Word/Dword)
Efectúan desplazamientos aritméticos hacia la derecha sobre las palabras o palabras
dobles empaquetadas (Word/Dword); equivalen a dividir entre 2 números con signo, pues
en el desplazamiento rellenan con el bit más significativo.
EMMS (Empty MMX State) restaura el estado de los registros para que puedan ser usados
por la FPU, pues cada vez que se ejecuta una instrucción MMX se marcan todos los
registros como con un resultado numérico válido, cuando para su uso por la FPU han de
ser marcados como vacíos (que es exactamente lo que hace FFREE).
Ejemplo: El factor de fusión es un valor de un byte entre 0 y 255, al igual que los
componentes del canal. Cada canal se mezcla usando la siguiente fórmula.

res = (a*fa + b*(255-fa))/255

Anda mungkin juga menyukai