Lo único que he encontrado hasta ahora son las "transformaciones sin errores". Para cualquier error de números de coma flotante de a+b
, a-b
y a*b
, también son números de punto flotante (en el redondeo al modo más cercano, suponiendo que no hay desbordamiento/subdesbordamiento, etc.).
El error de suma (y obviamente substracción) es fácil de calcular; si es abs(a) >= abs(b)
, el error es exactamente b-((a+b)-a)
(2 flops, o 4-5 si no sabemos cuál es más grande). El error de multiplicación es trivial para calcular con fma
- es simplemente fma(a,b,-a*b)
. Sin fma
son 16 fracasos de código bastante desagradable. Y la emulación totalmente genérica de fma
redondeada correctamente es incluso más lenta que eso.
Extra 16 fracasos de seguimiento de errores por fracaso de cálculo real es una gran exageración, pero con solo 1-5 fracasos fáciles de usar es bastante razonable, y para muchos algoritmos basados en esa sobrecarga del 50% -200% de seguimiento de errores y la compensación da como resultado un error tan pequeño como si todos los cálculos se hicieran en el doble del número de bits que eran, evitando el mal acondicionamiento en muchos casos.
Curiosamente, fma
no se usa nunca en estos algoritmos para calcular los resultados, sólo para encontrar errores, porque la búsqueda de errores de fma
es un proceso lento como la búsqueda de errores de la multiplicación era sin fma
.
Las palabras clave relevantes para la búsqueda serían "esquema de Horner compensado" y "producto de punto compensado", y el esquema de Horner se beneficiará mucho más.
pregunta es sobre impacto de redondeo, no se trata de esto. Su respuesta también es incorrecta ya que fma requiere 3 entradas de unidad de coma flotante en lugar de 2 entradas estándar, puerto adicional en el archivo de registro de coma flotante y sumadores de coma flotante más amplios. Esto no es gratuito, es una compensación de soporte de fma a costo de algunos otro hardware. – taw
taw: preguntaste qué algoritmos se benefician de FMA y algunos ejemplos donde el redondeo es un beneficio no trivial. Respondí la primera parte, que es que la mayoría de los algoritmos se beneficiarán. – Gabe