El conjunto de instrucciones FMA es una extensión de las instrucciones Streaming SIMD Extensions de 128 y 256 bits en el conjunto de instrucciones del microprocesador x86 para realizar operaciones de multiplicación-suma fusionadas (FMA). [ 1 ] Hay dos variantes:
- FMA4 es compatible con los procesadores AMD a partir de la arquitectura Bulldozer . FMA4 se implementó por hardware antes que FMA3. La compatibilidad con FMA4 se eliminó a partir de Zen 1. [ 2 ]
- FMA3 es compatible con los procesadores AMD a partir de la arquitectura Piledriver y con los procesadores Intel a partir de los procesadores Haswell y Broadwell desde 2014.
Instrucciones
Las instrucciones FMA3 y FMA4 tienen una funcionalidad casi idéntica, pero no son compatibles. Ambas contienen instrucciones de multiplicación y suma fusionadas (FMA) para operaciones escalares de punto flotante y SIMD , pero las instrucciones FMA3 tienen tres operandos, mientras que las FMA4 tienen cuatro. La operación FMA tiene la forma d = round( a · b + c ), donde la función round realiza un redondeo para permitir que el resultado quepa en el registro de destino si hay demasiados bits significativos para que quepa en dicho registro.
La forma de cuatro operandos (FMA4) permite que a , b , c y d sean cuatro registros diferentes, mientras que la forma de tres operandos (FMA3) requiere que d sea el mismo registro que a , b o c . La forma de tres operandos hace que el código sea más corto y la implementación de hardware un poco más sencilla, mientras que la forma de cuatro operandos proporciona mayor flexibilidad de programación.
Consulte el conjunto de instrucciones XOP para obtener más información sobre los problemas de compatibilidad entre Intel y AMD.
Conjunto de instrucciones FMA3
CPUs con FMA3
- AMD
- Piledriver (2012) y microarquitecturas más recientes [ 3 ]
- APU de segunda generación , "Trinity" (32 nm), 15 de mayo de 2012
- "Bulldozer" de segunda generación (bdver2) con núcleos Piledriver, 23 de octubre de 2012
- Piledriver (2012) y microarquitecturas más recientes [ 3 ]
- Intel
Fragmento de FMA3
Los comandos compatibles incluyen:
- Nota
- VF N M ADD es
result = − a · b + c, noresult = − (a · b + c). - VF N M SUB genera un −0 cuando todas las entradas son cero.
El orden explícito de los operandos se incluye en la regla mnemotécnica utilizando los números "132", "213" y "231":
así como el formato del operando (empaquetado o escalar) y el tamaño (simple o doble).
Esto da como resultado
Conjunto de instrucciones FMA4
CPUs con FMA4
- AMD
- Procesadores de "equipos pesados"
- Procesadores basados en excavadoras , 12 de octubre de 2011 [ 6 ]
- Procesadores basados en Piledriver [ 7 ]
- Procesadores basados en apisonadoras
- Procesadores basados en excavadora (incluida la versión "v2")
- Zen : Las pruebas de WikiChip muestran que FMA4 todavía parece funcionar (en las condiciones de las pruebas) a pesar de no ser compatible oficialmente y ni siquiera haber sido reportado por CPUID. Esto también ha sido confirmado por Agner Fog. [ 8 ] Pero otras pruebas dieron resultados erróneos. [ 9 ] Nota de soporte de FMA4 del sitio web oficial de AMD CPUs ZEN = AMD ThreadRipper 1900x, R7 Pro 1800, 1700, R5 Pro 1600, 1500, R3 Pro 1300, 1200, R3 2200G, R5 2400G. [ 10 ] [ 11 ] [ 12 ]
- Procesadores de "equipos pesados"
- Intel
- Intel no ha lanzado procesadores compatibles con FMA4.
Fragmento de FMA4
Historia
La incompatibilidad entre FMA3 de Intel y FMA4 de AMD se debe a que ambas compañías modificaron sus planes sin coordinar los detalles de codificación. AMD cambió sus planes de FMA3 a FMA4, mientras que Intel hizo lo mismo casi simultáneamente. La historia se puede resumir de la siguiente manera:
- Agosto de 2007: AMD anuncia el conjunto de instrucciones SSE5 , que incluye instrucciones FMA de 3 operandos. Se introduce un nuevo esquema de codificación (DREX) para permitir que las instrucciones tengan tres operandos. [ 13 ]
- Abril de 2008: Intel anuncia sus conjuntos de instrucciones AVX y FMA, incluidas las instrucciones FMA de 4 operandos. La codificación de estas instrucciones utiliza el nuevo esquema de codificación VEX , [ 14 ] que es más flexible que el esquema DREX de AMD.
- Diciembre de 2008: Intel cambia la especificación de sus instrucciones FMA de instrucciones de 4 operandos a instrucciones de 3 operandos. El esquema de codificación VEX se sigue utilizando. [ 15 ]
- Mayo de 2009: AMD cambia la especificación de sus instrucciones FMA del formato DREX de 3 operandos al formato VEX de 4 operandos, compatible con la especificación de Intel de abril de 2008 en lugar de la especificación de Intel de diciembre de 2008. [ 16 ]
- Octubre de 2011: El procesador AMD Bulldozer admite FMA4. [ 17 ]
- Enero de 2012: AMD anuncia la compatibilidad con FMA3 en futuros procesadores con nombre en clave Trinity y Vishera; estos se basan en la arquitectura Piledriver . [ 18 ]
- Mayo de 2012: El procesador AMD Piledriver admite tanto FMA3 como FMA4. [ 17 ]
- Junio de 2013: El procesador Intel Haswell admite FMA3. [ 19 ]
- Febrero de 2017: La primera generación de procesadores AMD Ryzen admite oficialmente FMA3, pero no FMA4 según la instrucción CPUID . [ 2 ] Ha habido confusión sobre si FMA4 se implementó o no en este procesador debido a erratas en el parche inicial del paquete GNU Binutils que ya se han rectificado. [ 20 ] [ 21 ] Un informe no confirmado de resultados erróneos [ 9 ] generó algunas dudas, pero Mysticial (Alexander Yee, desarrollador de y-cruncher) lo desmintió: [ 22 ] FMA4 funcionó para cálculos de bignum exactos de bits en su sistema Zen 1 durante años, y el informe en Reddit nunca tuvo ninguna investigación de seguimiento para descartar errores en el software de prueba antes de ser ampliamente repetido. Las CPU Ryzen iniciales podían fallar por una secuencia particular de instrucciones FMA3, pero el microcódigo de CPU actualizado soluciona el problema. [ 23 ]
- Julio de 2019: Los procesadores AMD Zen 2 y Ryzen posteriores no son compatibles con FMA4 en absoluto. [ 24 ] Siguen siendo compatibles con FMA3. Solo Zen 1 y Zen+ tienen compatibilidad no oficial con FMA4.
Compatibilidad con compiladores y ensambladores
Los distintos compiladores ofrecen distintos niveles de soporte para FMA:
- GCC admite FMA4 con -mfma4 desde la versión 4.5.0 [ 25 ] y FMA3 con -mfma desde la versión 4.7.0.
- Microsoft Visual C++ 2010 SP1 admite instrucciones FMA4. [ 26 ]
- Microsoft Visual C++ 2012 admite instrucciones FMA3 (si el procesador también admite la extensión del conjunto de instrucciones AVX2).
- Microsoft Visual C++ desde VC 2013
- PathScale admite FMA4 con -mfma. [ 27 ]
- LLVM 3.1 añade soporte para FMA4, [ 28 ] junto con soporte preliminar para FMA3. [ 29 ]
- Open64 5.0 añade "soporte limitado".
- Los compiladores de Intel solo admiten instrucciones FMA3. [ 25 ]
- NASM admite instrucciones FMA3 desde la versión 2.03 e instrucciones FMA4 desde la versión 2.06.
- FASM admite instrucciones FMA3 y FMA4.
Referencias
- ↑ Woltmann, George (Prime95). "Intel AVX y GIMPS" . mersenneforum.org . Proyecto Great Internet Mersenne Prime Search (GIMPS) . Consultado el 27 de julio de 2011.
FMA3 y FMA4 no son conjuntos de instrucciones, sino instrucciones individuales: multiplicación y suma fusionadas. Podrían ser bastante útiles dependiendo de cómo las implementen Intel y AMD.
{{cite web}}: CS1 maint: nombres numéricos: lista de autores ( enlace ) - 1 2 "La microarquitectura de las CPU de Intel, AMD y VIA: una guía de optimización para programadores de lenguaje ensamblador y creadores de compiladores" (PDF) . Consultado el 2 de mayo de 2017 .
- ↑ Maffeo, Robin (1 de marzo de 2012). "AMD y la versión beta de Visual Studio 11" . AMD . Consultado el 7 de noviembre de 2018 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ "CPU-Z - ID : y5z6gq" . Consultado el 1 de mayo de 2022 .
- ↑ "CPU-Z - ID : kr2mlx" . Consultado el 1 de mayo de 2022 .
- ↑ "Manual del programador de la arquitectura AMD64, volumen 6: instrucciones XOP, FMA4 y CVT16 de 128 y 256 bits" (PDF) . AMD . 1 de mayo de 2009.
- ↑ "Nuevas instrucciones para "Bulldozer" y "Piledriver": Un paso adelante para el desarrollo de software de alto rendimiento" (PDF) . AMD . Octubre de 2012.
- ↑ "Blog de CPU de Agner - Resultados de pruebas para AMD Ryzen" . 2017-05-02.
- 1 2 "Discusión: Ryzen tiene soporte no documentado para FMA4" . Recuperado el 10 de mayo de 2017 .
- ↑ "www.amd.com, lista de modelos compatibles con FMA4" .
- ↑ "www.amd.com, lista de modelos compatibles con FMA4" .
- ↑ "www.amd.com, lista de modelos compatibles con FMA4" .
- ↑ "Conjunto de instrucciones SSE5 de 128 bits" . AMD Developer Central. Archivado del original el 15 de enero de 2008. Consultado el 28 de enero de 2008 .
- ↑ "Intel Advanced Vector Extensions Programming Reference" (PDF) . Intel . Consultado el 5 de abril de 2008 .
- ↑ "Intel Advanced Vector Extensions Programming Reference" . Intel . Consultado el 6 de mayo de 2009 .
- ↑ "Encontrar el equilibrio" . Dave Christie, blogs de desarrolladores de AMD. 6 de mayo de 2009. Consultado el 7 de noviembre de 2018 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - 1 2 "Nuevas instrucciones para excavadoras y pilotadoras" (PDF) . AMD . Consultado el 25 de julio de 2013 .
- ↑ "Guía de optimización de software para procesadores AMD de la familia 15h" (PDF) . AMD . Consultado el 19 de abril de 2012 .
- ↑ "Intel Architecture Instruction Set Extensions Programming Reference" (PDF) . Intel . Consultado el 25 de julio de 2013 .
- ↑ Gopalasubramanian, Ganesh (10 de marzo de 2015). " [ PARCHE ] agregar procesador znver1" . Recuperado el 1 de mayo de 2022 .
- ↑ Pawar, Amit (2015-08-07). " [ PATCH ] Remove CpuFMA4 from Znver1 CPU Flags" . Recuperado el 2022-05-01 .
- ↑ "Comentario de Stack Overflow por Mysticial" . 16 de julio de 2019. Archivado del original el 22 de agosto de 2019. Consultado el 1 de septiembre de 2023 .
{{cite web}}: CS1 maint: bot: estado de la URL original desconocido ( enlace ) - ↑ "AMD Ryzen Machine Falla en una secuencia de instrucciones FMA3" . 16 de marzo de 2017. Consultado el 10 de septiembre de 2017 .
- ↑ "Comentario de Stack Overflow por Mysticial" . 16 de julio de 2019. Consultado el 1 de septiembre de 2023 .
- 1 2 Latif, Lawrence (14 de noviembre de 2011). "AMD Bulldozer solo admite las instrucciones FMA4 y XOP con GCC. Intel sigue sin pronunciarse" . The Inquirer . Archivado del original el 17 de noviembre de 2011.
- ↑ "Se agregaron funciones intrínsecas de FMA4 para Visual Studio 2010 SP1" . 4 de febrero de 2013.
- ↑ "Documento de manual de EKOPath" . Archivado del original el 23 de junio de 2016. Consultado el 24 de julio de 2013 .
- ↑ "Notas de la versión LLVM 3.1" .
- ↑ "Habilitar la detección de compatibilidad con AVX y AVX2 a través de CPUID" . LLVM . 26 de abril de 2012. Archivado del original el 26 de julio de 2014. Consultado el 6 de febrero de 2017 .
- Instrucciones X86
- computación SIMD
- Tecnologías AMD
- Extensiones del conjunto de instrucciones