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 fusionadas de multiplicación-suma (FMA). [1] Hay dos variantes:

Las instrucciones FMA3 y FMA4 tienen una funcionalidad casi idéntica, pero no son compatibles. Ambas contienen instrucciones fusionadas de multiplicación y suma (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 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 , bo 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.

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: