El compilador se niega a vectorizar un simple bucle de suma de productos en float

Trying to Make a Loop Auto-Vectorize

Un análisis práctico de por qué Rust no auto-vectoriza un dot product de f32 incluso con AVX2 y FMA: la aritmética IEEE 754 no es asociativa y el compilador no puede reordenar sumas sin cambiar el resultado. La versión con enteros sí se vectoriza, y una implementación manual por bloques de 4 lo logra, aunque limita el uso de vectores de 256 bits.

El problema principal aquí es que el compilador no puede reordenar de forma segura las operaciones aritméticas de punto flotante porque la aritmética IEEE 754 no es asociativa, es decir, (a + b) + c no es necesariamente igual a a + (b + c).

Más de este día

2026-09-14