3DNow! es una extensión obsoleta del conjunto de instrucciones x86 desarrollado por Advanced Micro Devices (AMD). Agrega instrucciones SIMD ( instrucción única, múltiples datos ) al conjunto de instrucciones x86 base, lo que le permite realizar el procesamiento vectorial de operaciones vectoriales de punto flotante utilizando registros vectoriales . Esta mejora mejora el rendimiento de muchas aplicaciones con uso intensivo de gráficos. El primer microprocesador que implementó 3DNow! fue el AMD K6-2 , presentado en 1998. En aplicaciones apropiadas, esta mejora aumentó la velocidad aproximadamente entre 2 y 4 veces. [1]
Sin embargo, el conjunto de instrucciones nunca ganó mucha popularidad, y AMD anunció en agosto de 2010 que el soporte para 3DNow! se eliminaría en futuros procesadores AMD, excepto para dos instrucciones, PREFETCH
y PREFETCHW
. [2] Estas dos instrucciones también están disponibles en los procesadores Intel Bay-Trail. [3]
3DNow! se desarrolló en un momento en el que los gráficos 3D se estaban convirtiendo en algo habitual en los juegos y los sistemas multimedia para PC. La visualización en tiempo real de gráficos 3D dependía en gran medida de la unidad de coma flotante (FPU) de la CPU anfitriona para realizar cálculos de coma flotante , una tarea en la que el procesador K6 de AMD era fácilmente superado por su competidor, el Intel Pentium II.
Como mejora del conjunto de instrucciones MMX , el conjunto de instrucciones 3DNow! aumentó los registros SIMD de MMX para admitir operaciones aritméticas comunes (sumar/restar/multiplicar) en datos de punto flotante de precisión simple (32 bits). El software escrito para usar 3DNow! de AMD en lugar de la FPU x87 más lenta podía ejecutarse hasta cuatro veces más rápido, según la combinación de instrucciones.
La primera implementación de la tecnología 3DNow! contiene 21 nuevas instrucciones que admiten operaciones de punto flotante SIMD . El formato de datos de 3DNow! es de punto flotante, de precisión simple y empaquetado. El conjunto de instrucciones de 3DNow! también incluye operaciones para operaciones con números enteros SIMD, precarga de datos y conmutación más rápida de MMX a punto flotante. Más tarde, Intel agregaría instrucciones similares (pero incompatibles) al Pentium III , conocidas como SSE (Streaming SIMD Extensions).
Las instrucciones de punto flotante de 3DNow! son las siguientes:
PI2FD
– Conversión de números enteros de 32 bits a números de punto flotantePF2ID
– Conversión de punto flotante empaquetado a entero de 32 bitsPFCMPGE
– Comparación de punto flotante empaquetado, mayor o igualPFCMPGT
– Comparación de punto flotante empaquetado, mayorPFCMPEQ
– Comparación de punto flotante empaquetado, igualPFACC
– Acumulación de punto flotante empaquetadoPFADD
– Adición de punto flotante empaquetadaPFSUB
– Resta de punto flotante empaquetadaPFSUBR
– Resta inversa de punto flotante empaquetadaPFMIN
– Mínimo de punto flotante empaquetadoPFMAX
– Máximo de punto flotante empaquetadoPFMUL
– Multiplicación de punto flotante empaquetadaPFRCP
– Aproximación recíproca de punto flotante empaquetadoPFRSQRT
– Aproximación de raíz cuadrada recíproca de punto flotante empaquetadaPFRCPIT1
– Recíproco de punto flotante empaquetado, primer paso de iteraciónPFRSQIT1
– Raíz cuadrada recíproca de punto flotante empaquetada, primer paso de iteraciónPFRCPIT2
– Raíz cuadrada recíproca/recíproca de punto flotante empaquetada, segundo paso de iteraciónLas instrucciones enteras de 3DNow! son las siguientes:
PAVGUSB
– Promedio de enteros sin signo de 8 bits empaquetadosPMULHRW
– Multiplicación de enteros de 16 bits empaquetados con redondeoLas instrucciones para mejorar el rendimiento de 3DNow! son las siguientes:
FEMMS
– Entrada/salida más rápida del estado MMX o de punto flotantePREFETCH/PREFETCHW
– Precargar al menos una línea de 32 bytes en la caché de datos L1 (esta es la única instrucción que no está obsoleta)Hay poca o ninguna evidencia de que la segunda versión de 3DNow! haya recibido oficialmente su propio nombre comercial. Esto ha provocado cierta confusión en la documentación que hace referencia a este nuevo conjunto de instrucciones. Los términos más comunes son Extended 3DNow!, Enhanced 3DNow! y 3DNow!+ . La frase "Enhanced 3DNow!" se puede encontrar en algunas ubicaciones en el sitio web de AMD, pero la capitalización de "Enhanced" parece ser puramente gramatical o utilizada para enfatizar los procesadores que pueden o no tener estas extensiones (la más notable de las cuales hace referencia a una página de evaluación comparativa para el K6-III-P que no tiene estas extensiones). [4] [5]
Esta extensión del conjunto de instrucciones 3DNow! se introdujo con los procesadores Athlon de primera generación . El Athlon agregó cinco nuevas instrucciones 3DNow! y 19 nuevas instrucciones MMX. Más tarde, el K6-2+ y el K6-III+ (ambos orientados al mercado móvil) incluyeron las cinco nuevas instrucciones 3DNow!, dejando fuera las 19 nuevas instrucciones MMX. Las nuevas instrucciones 3DNow! se agregaron para impulsar el procesamiento digital de señales (DSP) . Las nuevas instrucciones MMX se agregaron para impulsar la transmisión de medios .
Las 19 nuevas instrucciones MMX son un subconjunto del conjunto de instrucciones SSE de Intel. En los manuales técnicos de AMD, AMD separa estas instrucciones de las extensiones 3DNow! [4] Sin embargo, en la literatura de productos para clientes de AMD, esta segregación es menos clara, ya que los beneficios de las 24 nuevas instrucciones se atribuyen a la tecnología 3DNow! mejorada. [6] Esto ha llevado a los programadores a idear su propio nombre para las 19 nuevas instrucciones MMX. La más común parece ser Integer SSE ( ISSE ). [7] SSEMMX y MMX2 también se encuentran en la documentación de filtros de video del sector de dominio público. ISSE también podría referirse a Internet SSE, un nombre temprano para SSE.
Las instrucciones DSP de la extensión 3DNow! son las siguientes:
PF2IW
– Conversión de palabras de punto flotante empaquetadas a palabras enteras con extensión de signoPI2FW
– Conversión de palabras enteras empaquetadas a punto flotantePFNACC
– Acumulación negativa de punto flotante empaquetadaPFPNACC
– Acumulación positiva-negativa mixta de punto flotante empaquetadaPSWAPD
– Palabra doble de intercambio empaquetadaLas instrucciones de extensión MMX (Integer SSE) son las siguientes:
MASKMOVQ
– Almacenamiento en streaming (omisión de caché) mediante máscara de bytesMOVNTQ
– Tienda de streaming (omisión de caché)PAVGB
– Promedio empaquetado de bytes sin signoPAVGW
– Promedio empaquetado de palabras sin signoPMAXSW
– Palabra firmada máxima empaquetadaPMAXUB
– Byte máximo sin signo empaquetadoPMINSW
– Palabra firmada mínima empaquetadaPMINUB
– Byte mínimo sin signo empaquetadoPMULHUW
– Palabra sin signo de múltiples caracteres empaquetada y altaPSADBW
– Suma empaquetada de diferencias absolutas de bytesPSHUFW
– Palabra aleatoria empaquetadaPEXTRW
– Extraer palabra en registro enteroPINSRW
– Insertar palabra del registro enteroPMOVMSKB
– Mueve la máscara de bytes al registro enteroPREFETCHNTA
– Precargar utilizando la referencia NTAPREFETCHT0
– Precargar utilizando la referencia T0PREFETCHT1
– Precargar utilizando la referencia T1PREFETCHT2
– Precargar utilizando la referencia T2SFENCE
– Valla de tienda3DNow! Professional es un nombre comercial utilizado para indicar procesadores que combinan la tecnología 3DNow! con un conjunto completo de instrucciones SSE (como SSE, SSE2 o SSE3). [8] El Athlon XP fue el primer procesador que llevó el nombre comercial 3DNow! Professional y fue el primer producto de la familia Athlon en soportar el conjunto completo de instrucciones SSE (para un total de: 21 instrucciones 3DNow! originales; cinco instrucciones DSP de extensión 3DNow!; 19 instrucciones de extensión MMX; y 52 instrucciones SSE adicionales para una compatibilidad SSE completa). [9]
Geode GX y Geode LX agregaron dos nuevas instrucciones 3DNow! que están ausentes en todos los demás procesadores.
Las instrucciones "profesionales" de 3DNow! exclusivas para Geode GX/LX son las siguientes:
PFRSQRTV
– Aproximación de raíz cuadrada recíproca para un par de puntos flotantes de 32 bitsPFRCPV
– Aproximación recíproca para un par de flotantes de 32 bitsUna ventaja de 3DNow! es que es posible sumar o multiplicar dos números que están almacenados en el mismo registro . Con SSE, cada número sólo se puede combinar con un número que esté en la misma posición en otro registro. Esta capacidad, conocida como horizontal en la terminología de Intel, fue la principal incorporación al conjunto de instrucciones SSE3 .
Una desventaja de 3DNow! es que las instrucciones 3DNow! y las instrucciones MMX comparten el mismo archivo de registros, mientras que SSE agrega 8 nuevos registros independientes ( XMM0
– XMM7
).
Debido a que los registros MMX/3DNow! son compartidos por la FPU x87 estándar , las instrucciones 3DNow! y las instrucciones x87 no se pueden ejecutar simultáneamente. Sin embargo, debido a que están asociadas a la FPU x87, los estados de los registros 3DNow! y MMX se pueden guardar y restaurar mediante las instrucciones F(N)SAVE
y x87 tradicionales F(N)RSTOR
. Esta disposición permitió que los sistemas operativos admitieran 3DNow! sin modificaciones explícitas, mientras que los registros SSE requerían compatibilidad explícita con el sistema operativo para guardar y restaurar correctamente los nuevos registros XMM (a través de las instrucciones FXSAVE
y agregadas FXRSTOR
).
Las instrucciones FX* de SSE proporcionan un superconjunto funcional de las antiguas instrucciones de guardado y restauración x87. Pueden guardar no solo los estados de registro de SSE, sino también los estados de registro x87 (por lo tanto, también son aplicables para operaciones MMX y 3DNow! donde sean compatibles).
En los núcleos basados en AMD Athlon XP y K8 (es decir, Athlon 64 ), los programadores de ensamblaje han notado que es posible combinar instrucciones 3DNow! y SSE para reducir la presión del registro , pero en la práctica es difícil mejorar el rendimiento debido a que las instrucciones se ejecutan en unidades funcionales compartidas. [10]
Título incorrecto en la página: Procesadores móviles AMD-K6-III+ y AMD-K6-2+ con
tecnología 3DNow!
mejorada