Tech
El Filtrado Sin Ramas Acelera El Filtrado de Segmentos de Números

El autor, greyblake, estaba optimizando una ruta crítica en código que filtra un segmento de números mayores que un umbral, un problema común en bases de datos. Los puntos de referencia en una computadora portátil Intel i7-10875H con un millón de valores f64 aleatorios mostraron que el caso de filtro del 50% era el más lento, a pesar de copiar solo la mitad de los datos, porque las ramas impredecibles causaron predicciones erróneas de la tubería de la CPU que costaron 15-20 ciclos cada una. Ordenar la entrada hizo que el mismo código fuera más rápido, pero ordenar no es una solución práctica.
En cambio, el enfoque sin ramas siempre escribe el elemento y usa el resultado de la comparación como un número para decidir dónde colocarlo, convirtiendo una dependencia de control en una dependencia de datos. El peor caso mejoró de 3.87 ms a aproximadamente 1 ms, y el rendimiento se volvió plano independientemente de la distribución de datos. La compensación es que la versión sin ramas siempre escribe, aumentando potencialmente el tráfico de memoria, pero la ganancia de velocidad es significativa.
Fuente: Hacker News