MMX es una arquitectura de conjunto de instrucciones de instrucción única y datos múltiples ( SIMD ) 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 compatible con los procesadores IA-32 de Intel y otros proveedores desde 1997 . [actualizar]
El New York Times describió el impulso inicial, incluidos los anuncios del Super Bowl , como centrado en "una nueva generación de ostentosos productos multimedia, incluidos videoteléfonos y videojuegos 3-D". [5]
Posteriormente, MMX se ha ampliado con varios programas de Intel y otros: 3DNow! , Streaming SIMD Extensions (SSE) y revisiones continuas de Advanced Vector Extensions (AVX).
MMX es oficialmente una inicial sin sentido [6] registrada por Intel; [7] Extraoficialmente, se ha explicado de diversas formas que las iniciales representan
Advanced Micro Devices (AMD), durante una de sus muchas batallas judiciales con Intel, produjo material de marketing de Intel indicando que MMX significaba "Matrix Math Extensions". [ cita necesaria ] Dado que una inicial no puede ser registrada como marca registrada, [ cita necesaria ] 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: AMD reconoció MMX como una marca comercial propiedad de Intel y Intel otorgó a AMD los derechos para usar la marca MMX como nombre de tecnología, pero no como nombre de procesador. [8]
MMX define ocho registros de procesador , denominados MM0 a MM7, y las operaciones que operan en ellos. Cada registro tiene 64 bits de ancho y se puede utilizar para contener números enteros de 64 bits o varios números enteros más pequeños en un formato "empaquetado": luego se puede aplicar una instrucción a dos números enteros de 32 bits, cuatro números enteros de 16 bits u ocho. Enteros de 8 bits a la vez. [9]
MMX proporciona sólo operaciones con números enteros. Cuando se desarrolló originalmente, para el Intel i860 , el uso de matemáticas enteras tenía sentido (tanto los cálculos 2D como 3D lo requerían), pero a medida que las tarjetas gráficas que hacían gran parte de esto se volvieron comunes, el SIMD entero en la CPU se volvió algo redundante para las aplicaciones gráficas. [ cita necesaria ] Alternativamente, las operaciones aritméticas de saturación en MMX podrían [ vago ] acelerar significativamente algunas aplicaciones de procesamiento de señales digitales . [ cita necesaria ]
Para evitar problemas de compatibilidad con los mecanismos de cambio de contexto en los sistemas operativos existentes, los registros MMX son alias para los registros de unidad de punto flotante (FPU) x87 existentes , cuyos cambios de contexto ya se guardarían y restaurarían. A diferencia de los registros x87, que se comportan como una pila , los registros MMX son direccionables directamente (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 el trabajo con operaciones de punto flotante y SIMD en el mismo programa. [10] Para maximizar el rendimiento, el software a menudo utilizaba 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 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 están configurados 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á pensado como 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 elementos intrínsecos para invocar instrucciones MMX e Intel lanzó bibliotecas de algoritmos vectorizados comunes que utilizan MMX. Tanto Intel como Metrowerks intentaron la vectorización automática en sus compiladores, pero las operaciones en el lenguaje de programación C se correlacionaban mal con el conjunto de instrucciones MMX y los algoritmos personalizados a partir del año 2000 normalmente todavía tenían que escribirse en lenguaje ensamblador . [10]
AMD, un proveedor competidor de microprocesadores x86 , mejoró el MMX de Intel con su propio 3DNow! conjunto de instrucciones. 3DNow es mejor 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 gran extensión x86 de Intel fueron las Streaming SIMD Extensions (SSE), introducidas con la familia Pentium III [11] en 1999, [12] aproximadamente un año después de 3DNow! Fue presentado.
SSE abordó las deficiencias principales de MMX (incapacidad de combinar operaciones SIMD enteras con operaciones de punto flotante) mediante la creación de 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 enteras todavía se realizaban utilizando el registro MMX y el conjunto de instrucciones. Sin embargo, el nuevo archivo de registro XMM permitió que las operaciones SSE SIMD se mezclaran libremente con operaciones MMX o x87 FPU.
Streaming SIMD Extensions 2 ( SSE2 ), introducida con el Pentium 4 , amplió aún más el conjunto de instrucciones SIMD x86 con soporte de datos enteros (8/16/32 bits) y de punto flotante de doble precisión para el archivo de registro XMM. SSE2 también permitió que los códigos de operación MMX ( códigos de operación ) usaran operandos de registro XMM, extendidos a registros YMM y ZMM aún más amplios mediante revisiones posteriores de SSE.
El núcleo del microprocesador XScale de Intel y Marvell Technology Group que comienza con PXA270 incluye una extensión de arquitectura de conjunto de instrucciones SIMD para el núcleo de arquitectura ARM denominada Tecnología Intel Wireless MMX (iwMMXt), cuyas funciones son similares a las de la extensión IA-32 MMX. [13] [14] [15] Proporciona operaciones aritméticas y lógicas en números enteros de 64 bits, en los que el software puede optar por realizar dos operaciones de 32 bits, cuatro de 16 bits u ocho de 8 bits en una sola 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 los espacios de los coprocesadores 0 y 1, y algunos de sus códigos de operación chocan con los códigos de operación de la extensión de punto flotante anterior, FPA. [ cita necesaria ]
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