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 en el conjunto de instrucciones del microprocesador x86 para realizar operaciones de multiplicación y suma fusionadas (FMA). [1] Hay dos variantes:

Instrucciones

Las instrucciones FMA3 y FMA4 tienen una funcionalidad casi idéntica, pero no son compatibles. Ambos contienen instrucciones fusionadas de multiplicación y suma (FMA) para operaciones escalares y SIMD de punto flotante , 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 encaje 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 , cyd 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 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 mnemotécnico utilizando los números "132", "213" y "231":

así como formato de operando (empaquetado o escalar) y tamaño (simple o doble).

Esto resulta en

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 de 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:

Soporte para compiladores y ensambladores

Diferentes compiladores proporcionan diferentes niveles de soporte para FMA:

Referencias

  1. ^ "FMA3 y FMA4 no son conjuntos de instrucciones, son instrucciones individuales: suma múltiple fusionada. Podrían ser muy útiles dependiendo de cómo las implementen Intel y AMD" Woltmann, George (Prime95). "Intel AVX y GIMPS". mersenneforum.org/index.php . "Gran proyecto de 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 fabricantes de compiladores" (PDF) . Consultado el 2 de mayo de 2017 .
  3. ^ Maffeo, Robin (1 de marzo de 2012). "AMD y Visual Studio 11 Beta". 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 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 2012.
  8. ^ "Blog de CPU de Agner: resultados de las pruebas de AMD Ryzen". 2017-05-02.
  9. ^ ab "Discusión: Ryzen tiene soporte indocumentado 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". Central de desarrolladores de AMD . Archivado desde el original el 15 de enero de 2008 . Consultado el 28 de enero de 2008 .
  14. ^ "Referencia de programación de extensiones vectoriales avanzadas de Intel" (PDF) . Intel . Consultado el 5 de abril de 2008 .[ enlace muerto permanente ]
  15. ^ "Referencia de programación de extensiones vectoriales 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 topadoras y martinetes" (PDF) . AMD . Consultado el 25 de julio de 2013 .
  18. ^ "Guía de optimización de software para procesadores 15h de la familia AMD" (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 Znver1" . Consultado el 1 de mayo de 2022 .
  22. ^ "Comentario de Stack Overflow de Mysticial". 2019-07-16. 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 en una secuencia de instrucciones FMA3". 16 de marzo de 2017 . Consultado el 10 de septiembre de 2017 .
  24. ^ "Comentario de Stack Overflow de Mysticial". 2019-07-16 . Consultado el 1 de septiembre de 2023 .
  25. ^ ab Latif, Lawrence (14 de noviembre de 2011). "GCC Intel solo admite instrucciones FMA4 y XOP de AMD Bulldozer aún silenciadas". El Indagador . 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. ^ "Documento de hombre de EKOPath". Archivado desde el original el 23 de junio de 2016 . Consultado el 24 de julio de 2013 .
  28. ^ "Notas de la versión LLVM 3.1".
  29. ^ "Habilite la detección de compatibilidad con AVX y AVX2 a través de CPUID". LLVM . 26 de abril de 2012.