stringtranslate.com

Conjunto de instrucciones FMA

El conjunto de instrucciones FMA es una extensión de las instrucciones Streaming SIMD Extensions de 128 y 256 bits del 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-suma fusionada (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 dentro del registro de destino si hay demasiados bits significativos para caber dentro del destino.

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 del hardware un poco más simple, mientras que la forma de cuatro operandos proporciona más 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

CPU con FMA3

Extracto de FMA3

Los comandos admitidos incluyen

Nota

El orden explícito de los operandos se incluye en el mnemónico 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

CPU con FMA4

Extracto de FMA4

Historia

La incompatibilidad entre FMA3 de Intel y FMA4 de AMD se debe a que ambas compañías cambiaron sus planes sin coordinar los detalles de codificación entre sí. AMD cambió sus planes de FMA3 a FMA4, mientras que Intel cambió sus planes de FMA4 a FMA3 casi al mismo tiempo. La historia se puede resumir de la siguiente manera:

Compatibilidad con compiladores y ensambladores

Diferentes compiladores proporcionan distintos niveles de soporte para FMA:

Referencias

  1. ^ "FMA3 y FMA4 no son conjuntos de instrucciones, son instrucciones individuales: fusiones, multiplicaciones y sumas. Podrían ser bastante útiles dependiendo de cómo las implementen Intel y AMD" Woltmann, George (Prime95). "Intel AVX y GIMPS". mersenneforum.org/index.php . Proyecto Great Internet Mersenne Prime Search (GIMPS) . Consultado el 27 de julio de 2011 .{{cite web}}: CS1 maint: numeric names: authors list (link)
  2. ^ ab "La microarquitectura de las CPU Intel, AMD y VIA. Una guía de optimización para programadores de ensamblaje 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. Archivado desde el original el 9 de noviembre de 2013. Consultado el 7 de noviembre de 2018 .
  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 "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 las pruebas de AMD Ryzen". 2017-05-02.
  9. ^ ab "Discusión: Ryzen tiene soporte no documentado para FMA4" . Consultado 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 desde el original el 15 de enero de 2008. Consultado el 28 de enero de 2008 .
  14. ^ "Referencia de programación de extensiones de vector avanzadas de Intel" (PDF) . Intel . Consultado el 5 de abril de 2008 .[ enlace muerto permanente ]
  15. ^ "Referencia de programación de extensiones de vector avanzadas de Intel". Intel . Consultado el 6 de mayo de 2009 .
  16. ^ "Lograr un equilibrio". Dave Christie, blogs de desarrolladores de AMD. 6 de mayo de 2009. Archivado desde el original el 8 de julio de 2012. Consultado el 7 de noviembre de 2018 .
  17. ^ ab "Instrucciones para nuevas excavadoras y pilonos" (PDF) . AMD . Consultado el 25 de julio de 2013 .
  18. ^ "Guía de optimización de software para procesadores AMD Family 15h" (PDF) . AMD . Consultado el 19 de abril de 2012 .
  19. ^ "Referencia de programación de extensiones del conjunto de instrucciones de la arquitectura Intel" (PDF) . Intel . Consultado el 25 de julio de 2013 .
  20. ^ Gopalasubramanian, Ganesh (10 de marzo de 2015). «[PARCHE] Agregar procesador znver1» . Consultado el 1 de mayo de 2022 .
  21. ^ Pawar, Amit (7 de agosto de 2015). "[PARCHE] Eliminar CpuFMA4 de los indicadores de CPU de Znver1" . Consultado el 1 de mayo de 2022 .
  22. ^ "Comentario de Mysticial sobre Stack Overflow". 16 de julio de 2019. Archivado desde el original el 22 de agosto de 2019. Consultado el 1 de septiembre de 2023 .{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  23. ^ "La máquina AMD Ryzen falla al ejecutar una secuencia de instrucciones FMA3". 16 de marzo de 2017. Consultado el 10 de septiembre de 2017 .
  24. ^ "Comentario de Mysticial sobre Stack Overflow". 2019-07-16 . Consultado el 2023-09-01 .
  25. ^ ab Latif, Lawrence (14 de noviembre de 2011). "Las instrucciones AMD Bulldozer solo FMA4 y XOP son compatibles con GCC Intel sigue sin funcionar". The Inquirer . Archivado desde el original el 17 de noviembre de 2011.{{cite web}}: CS1 maint: unfit URL (link)
  26. ^ "Intrínsecos de FMA4 agregados para Visual Studio 2010 SP1". 4 de febrero de 2013.
  27. ^ "EKOPath man doc". Archivado desde el original el 23 de junio de 2016. Consultado el 24 de julio de 2013 .
  28. ^ "Notas de la versión de LLVM 3.1".
  29. ^ "Habilitar la detección de compatibilidad con AVX y AVX2 a través de CPUID". LLVM . 2012-04-26.