La librería Rust gearhash ha incorporado un backend NEON que duplica su velocidad de procesamiento en arquitecturas ARM64, una mejora significativa para aplicaciones que requieren hashing de alto rendimiento. Esta optimización, disponible desde la versión 0.1.4, se activa automáticamente en sistemas aarch64 y mantiene la compatibilidad hacia atrás, eliminando la necesidad de cambios en el código de los consumidores. El proyecto, que originalmente se centró en SSE4.2 y AVX2, ha sido revitalizado por su integración en el cliente Xet de Hugging Face, que procesa entre 10.000 y 20.000 descargas diarias, lo que ha motivado la búsqueda de mejoras en la eficiencia del algoritmo.
La implementación de NEON no fue trivial debido a la naturaleza serial del algoritmo GEAR, que presenta dependencias de datos que dificultan la paralelización directa. El autor identificó que la cadena de dependencias de 2 operaciones por 2 bytes limitaba el rendimiento, ya que el vectorizado no podía superar la latencia del código escalar. La solución clave consistió en reducir la longitud de la cadena de dependencias mediante el desrollado de dos pasos de actualización por iteración, lo que permitió eliminar una operación de suma de la ruta crítica. Además, se optimizaron las cargas de datos reemplazando cuatro cargas de bytes consecutivas por una carga desalineada de 32 bits, reduciendo el conteo de instrucciones. Estos ajustes transformaron el cuello de botella de un límite de latencia a uno de throughput, logrando una aceleración de 1,63 veces en las pruebas iniciales, con el objetivo final de alcanzar el doble de velocidad.
