著者は、RaBitQ アルゴリズムの Rust 実装の最適化経験について議論しています。RaBitQ アルゴリズムは、近似最近傍探索アルゴリズムです。著者は、最初に nalgebra ライブラリを使用しましたが、予想よりも遅かったため、samply や Firefox Profiler などのプロファイリングツールを使用してコードのボトルネックを特定しました。著者は、f32::clone() の呼び出しが大量の時間を費やしていることを発見し、ベクトルのメモリーを事前に割り当てて、反復処理で再利用することにしました。また、AVX2 を使用して binarize_vector 関数を実装し、GIST での QPS を 32% 向上させました。著者は、スカラー量子化を使用してコード中の f32::clone() をさらに削除し、nalgebra の一部の関数を手動実装に置き換えました。また、SIMD 最適化された別の代数 crate である faer を発見し、行/列イテレーションのパフォーマンスが向上していることを発見しました。著者は、AVX2 を使用してバイナリドット積を再実装し、GIST での QPS を 11% 向上させました。
dev.to
Improve an algorithm performance step by step
Create attached notes ...
