Static search trees: 40x faster than binary search (2024)
L'article présente la mise en œuvre d'un arbre de recherche statique (S+ tree) visant à maximiser le débit pour trouver, dans un tableau trié de u32, le plus petit élément ≥ q. L'auteur détaille des optimisations basses couches : vectorisation automatique et manuelle (AVX2), transformations des comparaisons en masques, usage de popcnt et simplification du code assembleur pour réduire le nombre d'instructions. Le débit est ensuite amélioré par le traitement par lots, le préchargement explicite (prefetch), l'arithmétique sur pointeurs, l'interleaving des couches et des ajustements du layout mémoire et de la taille des nœuds. Le partitionnement par préfixe, les sous‑arbres compacts, les arbres chevauchants et la table de préfixes sont explorés pour gérer les distributions déséquilibrées, mais ils augmentent la complexité et n'offrent pas toujours de bénéfices supérieurs à l'interleaving. En combinant ces techniques, l'auteur passe d'environ 1150 ns/requête pour la recherche binaire à ~27 ns/requête pour la version optimisée, identifie le débit mémoire comme goulot d'étranglement et propose comme travaux futurs interpolation, compression des données et intégration aux recherches par suffix array.