El programador Serhii Potapov (greyblake) demuestra cómo una técnica de programación sin bifurcaciones (branchless) puede acelerar hasta cuatro veces el típico filtrado de un millón de valores de tipo f64 en Rust. El artículo parte de un caso aparentemente trivial: una función filter que conserva los elementos mayores que un umbral. Un benchmark con criterion revela un resultado desconcertante: la operación es más lenta cuando conserva el 50 % de los datos (3,94 ms) que cuando conserva el 99 % (1,49 ms). La preasignación de capacidad apenas mejora un 2 % el rendimiento, descartando la hipótesis de las reasignaciones del Vec.
La explicación está en el predictor de saltos de la CPU. Con datos aleatorios y un umbral del 50 %, la bifurcación que decide si cada elemento se conserva es impredecible: el predictor acierta solo la mitad de las veces, lo que provoca alrededor de medio millón de vaciados de pipeline de 15-20 ciclos cada uno. La prueba definitiva es ordenar la entrada antes del filtrado: el caso del 50 % pasa de 4,15 ms a 0,93 ms, 4,5 veces más rápido, con idéntica función y umbral.
La solución branchless elimina la bifurcación impredecible: se escribe cada elemento de forma incondicional y se usa el resultado de la comparación (0 o 1) como incremento del cursor, convirtiendo una dependencia de control en una dependencia de datos. En ensamblado basta con una instrucción seta. Con esta versión los tiempos oscilan entre 1,02 y 1,11 ms para todos los porcentajes de conservación, planos e independientes del dato, aunque la versión idiomática gana en el caso del 1 % de conservación, donde el predictor acierta casi siempre. El artículo, publicado en el blog greyblake.com el 2 de agosto de 2026, incluye el código, los benchmarks y el repositorio branchless-rust-benchmarks para reproducir los resultados.
