Para comprender esto, necesitará un poco de información sobre qué es una operación de multiplicación en hardware digital y qué es una operación de agregar en hardware digital. Un buen punto de partida es:
Multiplicador binario
Math Alive Crypto 1
Presta especial atención al método de multiplicación binaria. Implica formar productos parciales y luego sumarlos:
- ¿Qué hace la desfragmentación?
- Cómo reparar una computadora vieja
- ¿Cuáles son las mejores computadoras portátiles de 11-13 pulgadas?
- ¿Por qué nadie está haciendo computadoras portátiles atractivas / estéticas, excepto Apple?
- En la década de 1960, ¿qué tan loca era la idea de unidades de almacenamiento de múltiples terabytes, rápidas, portátiles y relativamente baratas?
Una multiplicación no es más que sumar un montón de números. Si el tamaño de los números es N, entonces el resultado oscila entre N y 2N. Ahora en una secuencia de multiplicar y luego agregar, haríamos:
1. Cree la matriz de producto parcial que ve arriba
2. tome el resultado de esta serie de adiciones, vuelva a reducirlo a N bits; el resultado debe tener el mismo tamaño de bit que los 2 números multiplicados)
3. almacenar el resultado. También usamos el resultado para agregar.
Una fusión múltiple de suma omite los pasos 2 y 3. En su lugar, simplemente tomamos el número que se va a agregar y lo adjuntamos a las filas de arriba. Creamos un sumador gigante Carry-save de todo en lugar de sumar para multiplicar primero y luego agregar nuevamente.
Para la multiplicación de coma flotante, se necesitan algunos pasos más allá de la matriz parcial del producto. Debido al gran rango y la imprecisión que puede tener una multiplicación de punto flotante (ver Punto flotante), se deben detectar varios casos de redondeo y de número normal después de que se complete la operación.
En una computadora, si uno multiplicara un número de coma flotante y luego agregara un número de coma flotante al resultado, la especificación del punto flotante IEEE dice que el resultado de la multiplicación primero debe redondearse y verificarse para detectar denormal y / o excepciones ( resulta en infinito, por ejemplo) antes de realizar la adición.
Un agregado múltiple con fusible omite este paso y simplemente agrega la adición antes de que se realice cualquier verificación de redondeo o excepción. Esto ahorra un tiempo de circuito significativo.
Por ejemplo, en Krait (Snapdragon 800 y más allá), una suma múltiple fusionada de punto flotante de 64 bits toma un total de 6 ciclos. Una multiplicación de coma flotante de 64 bits toma 5 ciclos y una adición de coma flotante de 64 bits toma 3 ciclos.
Por lo tanto, usar una operación FMA tomaría 6 ciclos frente a 8.
Sin embargo, tenga en cuenta que debido a que omitimos el paso de redondeo y corrección denormal (normalización) después de la multiplicación, una operación FMA de punto flotante realmente dará un resultado * diferente * que una multiplicación de punto flotante + una adición de punto flotante. Sin embargo, si no le importan esas diferencias menores, un FMA es significativamente más rápido.