Manticore acelera la búsqueda KNN hasta un 29% con AVX-512 y un nuevo bucle HNSW

Fuentes: Faster KNN search in Manticore: 2-pass HNSW, batched distances, and AVX-512

Manticore Search ha reescrito el núcleo del motor de búsqueda KNN basado en HNSW, heredado de hnswlib, para mejorar el rendimiento sin modificar la API ni requerir reconfiguración. Los cambios se centran en tres fuentes de sobrecarga: patrones de acceso a memoria ineficientes, cargas redundantes y llamadas indirectas a funciones de distancia. La nueva implementación resuelve la función de distancia en tiempo de compilación mediante plantillas C++, lo que permite al compilador insertarla en el bucle de búsqueda y optimizar la asignación de registros y el desenrollado de bucles. Además, el procesamiento de vecinos pasa de una a dos pasadas: la primera recoge los vecinos no visitados y emite hints de precarga, y la segunda calcula distancias sobre un array compacto, lo que da tiempo a que los datos lleguen a caché antes de ser usados. Sobre esa estructura, la distancia se calcula por parejas (batch-2) para reducir cargas redundantes del vector de consulta y se añaden implementaciones AVX-512 que procesan 16 floats por iteración frente a los 8 de AVX2, con instrucciones FMA y VPOPCNTDQ para vectores cuantizados. En el banco de pruebas dbpedia-openai-1M-1536-angular, ejecutado en un AMD Ryzen 7 9700X, las mejoras algorítmicas aisladas crecen del 3% en k=10 al 24% en k=1000 en un solo hilo, mientras que AVX-512 frente al nuevo AVX2 muestra una ligera regresión del 2% en k=10 pero supera a AVX2 a partir de k=30, con una ventaja creciente al añadir hilos (hasta el 6,5% en 16 hilos a k=60). El efecto combinado alcanza hasta un 29% en condiciones de carga alta, y el motor selecciona automáticamente la variante de biblioteca adecuada al inicio según las capacidades de la CPU.