Articulo de referencia

Conjunto de instrucciones de FMA

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 r...

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:

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
  • Intel

Fragmento de FMA3

Los comandos compatibles incluyen:

Nota
  • VF N M ADD es result = − a · b + c, no result = − (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

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:

Referencias

  1. 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 )
  2. 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 .
  3. 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 )
  4. "CPU-Z - ID : y5z6gq" . Consultado el 1 de mayo de 2022 . 
  5. "CPU-Z - ID : kr2mlx" . Consultado el 1 de mayo de 2022 . 
  6. "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.
  7. "Nuevas instrucciones para "Bulldozer" y "Piledriver": Un paso adelante para el desarrollo de software de alto rendimiento" (PDF) . AMD . Octubre de 2012.
  8. "Blog de CPU de Agner - Resultados de pruebas para AMD Ryzen" . 2017-05-02.
  9. 1 2 "Discusión: Ryzen tiene soporte no documentado para FMA4" . Recuperado el 10 de mayo de 2017 .
  10. "www.amd.com, lista de modelos compatibles con FMA4" .
  11. "www.amd.com, lista de modelos compatibles con FMA4" .
  12. "www.amd.com, lista de modelos compatibles con FMA4" .
  13. "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 .
  14. "Intel Advanced Vector Extensions Programming Reference" (PDF) . Intel . Consultado el 5 de abril de 2008 .
  15. "Intel Advanced Vector Extensions Programming Reference" . Intel . Consultado el 6 de mayo de 2009 .
  16. "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 )
  17. 1 2 "Nuevas instrucciones para excavadoras y pilotadoras" (PDF) . AMD . Consultado el 25 de julio de 2013 .
  18. "Guía de optimización de software para procesadores AMD de la familia 15h" (PDF) . AMD . Consultado el 19 de abril de 2012 .
  19. "Intel Architecture Instruction Set Extensions Programming Reference" (PDF) . Intel . Consultado el 25 de julio de 2013 .
  20. Gopalasubramanian, Ganesh (10 de marzo de 2015). " [ PARCHE ] agregar procesador znver1" . Recuperado el 1 de mayo de 2022 .
  21. Pawar, Amit (2015-08-07). " [ PATCH ] Remove CpuFMA4 from Znver1 CPU Flags" . Recuperado el 2022-05-01 .
  22. "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 )
  23. "AMD Ryzen Machine Falla en una secuencia de instrucciones FMA3" . 16 de marzo de 2017. Consultado el 10 de septiembre de 2017 .
  24. "Comentario de Stack Overflow por Mysticial" . 16 de julio de 2019. Consultado el 1 de septiembre de 2023 .
  25. 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.
  26. "Se agregaron funciones intrínsecas de FMA4 para Visual Studio 2010 SP1" . 4 de febrero de 2013.
  27. "Documento de manual de EKOPath" . Archivado del original el 23 de junio de 2016. Consultado el 24 de julio de 2013 .
  28. "Notas de la versión LLVM 3.1" .
  29. "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 .
Obtenido de " https://en.wikipedia.org/w/index.php?title=FMA_instruction_set&oldid=1305276922 "