Implementación de FMA y bugs hallados en las bibliotecas estándar de C y Rust

Fuentes: Implementing FMA and finding bugs in C and Rust standard libraries

Sergey "Shnatsel" Davidoff, desarrollador del proyecto fearless_simd, relata cómo, al intentar implementar de forma eficiente la operación fused multiply-add (a*b+c) en SIMD para máquinas sin soporte hardware de FMA —aproximadamente un 15% de los equipos según la encuesta de hardware de Firefox—, descubrió un error sistemático en el manejo de valores subnormales (números en coma flotante muy cercanos a cero con representación especial). El artículo describe paso a paso su trabajo: partir del algoritmo formalmente verificado en Coq por Boldo y Melquiond (2008), traducirlo a SIMD por lanes, obtener una aceleración de 5x sobre std::simd de Rust, y luego verificar la corrección gracias a que un colaborador externo, @awxkee, aportó contraejemplos que rompían la implementación. Davidoff comprobó que el mismo bug estaba presente en la función mul_add de la biblioteca estándar de Rust (compiler-builtins) y, más adelante, en musl libc (y por extensión en FreeBSD), donde el código se ha copiado durante casi dos décadas. El texto también aborda las dificultades de fijar el bug en la biblioteca estándar —que además del resultado debe gestionar correctamente los flags de estado de coma flotante— y cómo en la integración continua aparecieron fallos adicionales en ARM de 32 bits por un comportamiento errático del tipo experimental f128. La conclusión es una invitación a la comunidad a revisar implementaciones de FMA heredadas y a agradecer la transparencia que permite el software libre.