MMX es una arquitectura de conjunto de instrucciones SIMD ( instrucción única, datos múltiples ) diseñada por Intel , introducida el 8 de enero de 1997 [1] [2] con su línea de microprocesadores basada en Pentium P5 (microarquitectura) , denominada "Pentium con tecnología MMX". [3] Se desarrolló a partir de una unidad similar introducida en el Intel i860 , [4] y anteriormente en el procesador de píxeles de vídeo Intel i750 . MMX es una capacidad complementaria del procesador que es compatible con los procesadores IA-32 de Intel y otros proveedores a partir de 1997. AMD también agregó el conjunto de instrucciones MMX en su procesador K6 . [actualizar]
El New York Times describió el impulso inicial, incluidos los anuncios del Super Bowl , como centrado en "una nueva generación de deslumbrantes productos multimedia, incluidos videoteléfonos y videojuegos 3D". [5]
MMX se ha ampliado posteriormente mediante varios programas de Intel y otros: 3DNow!, Streaming SIMD Extensions (SSE) y revisiones en curso de Advanced Vector Extensions (AVX).
MMX es oficialmente una sigla sin significado [6] registrada por Intel; [7] extraoficialmente, las iniciales han sido explicadas de diversas maneras como si representaran
Advanced Micro Devices (AMD), durante una de sus muchas batallas judiciales con Intel, presentó material de marketing de Intel indicando que MMX significaba "Matrix Math Extensions" (extensiones de matriz matemática). [ cita requerida ] Dado que una sigla no puede registrarse como marca, [ cita requerida ] este fue un intento de invalidar la marca registrada de Intel. En 1995, Intel presentó una demanda contra AMD y Cyrix Corp. por uso indebido de su marca registrada MMX. AMD e Intel llegaron a un acuerdo, y AMD reconoció a MMX como una marca registrada propiedad de Intel, e Intel otorgó a AMD los derechos para usar la marca registrada MMX como nombre de tecnología, pero no como nombre de procesador. [9]
MMX define ocho registros de procesador , denominados MM0 a MM7, y las operaciones que se realizan en ellos. Cada registro tiene 64 bits de ancho y se puede utilizar para almacenar números enteros de 64 bits o varios números enteros más pequeños en un formato "comprimido": una instrucción se puede aplicar a dos números enteros de 32 bits, cuatro números enteros de 16 bits u ocho números enteros de 8 bits a la vez. [10]
MMX solo proporciona operaciones con números enteros. Cuando se desarrolló originalmente para el Intel i860 , el uso de matemáticas con números enteros tenía sentido (tanto los cálculos en 2D como en 3D lo requerían), pero a medida que las tarjetas gráficas que hacían gran parte de esto se volvieron comunes, el SIMD de números enteros en la CPU se volvió algo redundante para las aplicaciones gráficas. [ cita requerida ] Alternativamente, las operaciones aritméticas de saturación en MMX podrían [ vago ] acelerar significativamente algunas aplicaciones de procesamiento de señales digitales . [ cita requerida ]
Para evitar problemas de compatibilidad con los mecanismos de cambio de contexto de los sistemas operativos existentes, los registros MMX son alias de los registros de unidad de punto flotante (FPU) x87 existentes , que los cambios de contexto ya guardarían y restaurarían. A diferencia de los registros x87, que se comportan como una pila , los registros MMX son directamente direccionables (acceso aleatorio).
Cualquier operación que involucre la pila de punto flotante también podría afectar los registros MMX y viceversa, por lo que este alias dificulta trabajar con operaciones de punto flotante y SIMD en el mismo programa. [11] Para maximizar el rendimiento, el software a menudo usaba el procesador exclusivamente en un modo u otro, posponiendo el cambio relativamente lento entre ellos el mayor tiempo posible.
Cada registro MMX de 64 bits corresponde a la parte de mantisa de un registro x87 de 80 bits. Por lo tanto, los 16 bits superiores de los registros x87 no se utilizan en MMX y todos estos bits se configuran en unos, lo que los convierte en tipos de datos No es un número ( NaN ) o infinitos en la representación de punto flotante. Esto puede ser utilizado por el software para decidir si el contenido de un registro determinado está destinado a ser datos de punto flotante o SIMD.
El soporte de software para MMX se desarrolló lentamente. [5] El compilador C de Intel y las herramientas de desarrollo relacionadas obtuvieron capacidades intrínsecas para invocar instrucciones MMX e Intel lanzó bibliotecas de algoritmos vectorizados comunes que usaban MMX. Tanto Intel como Metrowerks intentaron la vectorización automática en sus compiladores, pero las operaciones en el lenguaje de programación C no se correspondían bien con el conjunto de instrucciones MMX y, a partir del año 2000, los algoritmos personalizados generalmente todavía tenían que escribirse en lenguaje ensamblador . [11]
AMD, un proveedor de microprocesadores x86 competidor , mejoró el MMX de Intel con su propio conjunto de instrucciones 3DNow !. 3DNow es más conocido por agregar soporte de punto flotante de precisión simple (32 bits) al conjunto de instrucciones SIMD, entre otras mejoras de números enteros y más generales.
Después de MMX, la siguiente extensión x86 importante de Intel fue Streaming SIMD Extensions (SSE), introducida con la familia Pentium III [12] en 1999, [13] aproximadamente un año después de que se introdujera 3DNow! de AMD.
SSE abordó las deficiencias principales de MMX (la imposibilidad de mezclar operaciones SIMD de números enteros con operaciones de punto flotante) creando un nuevo archivo de registro de 128 bits de ancho (XMM0–XMM7) y nuevas instrucciones SIMD para él. Al igual que 3DNow!, SSE se centró exclusivamente en operaciones de punto flotante de precisión simple (32 bits); las operaciones SIMD de números enteros se seguían realizando utilizando el registro MMX y el conjunto de instrucciones. Sin embargo, el nuevo archivo de registro XMM permitió que las operaciones SIMD de SSE se mezclaran libremente con operaciones MMX o FPU x87.
Streaming SIMD Extensions 2 ( SSE2 ), introducido con el Pentium 4 , amplió aún más el conjunto de instrucciones SIMD x86 con compatibilidad con datos de punto flotante de precisión doble y enteros (8/16/32 bits) para el archivo de registro XMM. SSE2 también permitió que los códigos de operación MMX ( opcodes ) utilizaran operandos de registro XMM, que se extendieron a registros YMM y ZMM aún más amplios mediante revisiones posteriores de SSE.
El núcleo de microprocesador XScale de Intel y Marvell Technology Group , a partir del PXA270, incluye una extensión de la arquitectura del conjunto de instrucciones SIMD para el núcleo de la arquitectura ARM denominada Intel Wireless MMX Technology (iwMMXt), cuyas funciones son similares a las de la extensión IA-32 MMX. [14] [15] [16] Proporciona operaciones aritméticas y lógicas sobre números enteros de 64 bits, en las que el software puede optar por realizar en su lugar dos operaciones de 32 bits, cuatro de 16 bits u ocho de 8 bits en una instrucción. La extensión contiene 16 registros de datos de 64 bits y ocho registros de control de 32 bits. Se accede a todos los registros a través del mecanismo de mapeo de coprocesador de arquitectura ARM estándar. iwMMXt ocupa el espacio de los coprocesadores 0 y 1, y algunos de sus códigos de operación entran en conflicto con los códigos de operación de la extensión de punto flotante anterior, FPA. [ cita requerida ]
Las versiones posteriores de los procesadores ARM de Marvell admiten códigos de operación Wireless MMX (WMMX) y Wireless MMX2 (WMMX2).
La nueva tecnología de extensión multimedia de Intel, llamada MMX, ...
el nombre, que no significa nada.
{{cite book}}
: Mantenimiento de CS1: ubicación ( enlace )