Similarities Benchmarks

March 23, 2026 · View on GitHub

All-pairs distance matrix benchmarks comparing NumKong packed kernels against ndarray and nalgebra.

Rust

LibraryPrecisionGSO/s
Angular
numkong::angulars_packedi8 → f32830.13
numkong::angulars_packedu8 → f32830.14
numkong::angulars_packedbf16 → f32502.45
numkong::angulars_packedf32 → f6492.52
ndarray angularf32 → f3256.98
nalgebra angularf32 → f3249.95
ndarray angularf64 → f6428.82
nalgebra angularf64 → f6427.26
numkong::angulars_packedf64 → f6422.81
Euclidean
numkong::euclideans_packedi8 → f32887.85
numkong::euclideans_packedu8 → f32888.74
numkong::euclideans_packedbf16 → f32524.00
numkong::euclideans_packedf32 → f6492.93
ndarray euclideanf32 → f3257.64
nalgebra euclideanf32 → f3249.79
ndarray euclideanf64 → f6428.82
nalgebra euclideanf64 → f6427.11
numkong::euclideans_packedf64 → f6422.85
Hamming
numkong::hammings_packedu1x89821
Jaccard
numkong::jaccards_packedu1x83173

Python

LibraryPrecisionGSO/s
numkong.euclideans_packedu8 → f32425.91
numkong.euclideans_packedi8 → f32408.64
numkong.angulars_packedi8 → f32386.96
numkong.angulars_packedu8 → f32364.01
numkong.angulars_packedf32 → f6479.26
numkong.euclideans_packedf32 → f6452.95
scipy.cdist euclideanf32 → f645.09
scipy.cdist cosinef32 → f641.30

Run It

Rust

``$\text{bash}

\text{Default} 2048 \times 2048 \text{pairs} \text{at} 2048 \text{dimensions}

\text{cargo} \text{bench} --\text{bench} \text{bench_similarities} --\text{features} \text{bench_similarities}

\text{Smaller} 256 \times 256 \text{pairs} \text{at} 256 \text{dimensions}

\text{NUMWARS_DIMS}=256
\text{cargo} \text{bench} --\text{bench} \text{bench_similarities} --\text{features} \text{bench_similarities}

\text{Focus} \text{on} \text{one} \text{metric}

\text{NUMWARS_FILTER}="\text{similarities}/\text{angulars}/\text{f32}"
\text{cargo} \text{bench} --\text{bench} \text{bench_similarities} --\text{features} \text{bench_similarities} $``

Python

# Run the Python suite
python similarities/bench.py