Similarity Benchmarks

March 23, 2026 · View on GitHub

Pairwise vector-vector distance and dot-product benchmarks comparing NumKong against scalar baselines and BLAS-backed libraries.

Rust

LibraryPrecisionGSO/s
Dot
numkong::Dotu8 → u3237.34
numkong::Doti8 → i3237.41
numkong::Dotbf16 → f3214.83
serial codef32 → f3213.86
ndarray::dotf32 → f3212.77
nalgebra::dotf32 → f3212.95
serial codeu8 → u3219.28
numkong::Dotf32 → f642.50
serial codei8 → i3219.70
serial codebf16 → f320.67
numkong::Dotf16 → f326.16
numkong::Dotf64 → f642.81
numkong::Dote4m3 → f324.43
numkong::Dote5m2 → f326.08
numkong::Dote2m3 → f3226.64
numkong::Dote3m2 → f3211.32
ndarray::dotf64 → f6411.62
nalgebra::dotf64 → f6411.66
Angular
numkong::Angularf32 → f322.34
numkong::Angularf64 → f642.30
numkong::Angulari8 → f3231.86
numkong::Angularu8 → f3231.86
numkong::Angularf16 → f324.81
numkong::Angularbf16 → f3210.28
numkong::Angulare4m3 → f322.19
numkong::Angulare5m2 → f325.34
numkong::Angulare2m3 → f322.60
numkong::Angulare3m2 → f322.60
Euclidean
numkong::Euclideanu8 → f3234.85
numkong::Euclideani8 → f3234.91
numkong::Euclideanbf16 → f325.54
numkong::Euclideanf32 → f642.50
ndarray::normf32 → f327.61
nalgebra::normf32 → f327.74
serial codef32 → f3211.15
serial codeu8 → f329.19
serial codei8 → f329.26
serial codebf16 → f320.66
numkong::Euclideanf16 → f325.27
numkong::Euclideanf64 → f642.60
numkong::Euclideane4m3 → f322.28
numkong::Euclideane5m2 → f325.80
numkong::Euclideane2m3 → f322.74
numkong::Euclideane3m2 → f322.75
ndarray::normf64 → f645.59
nalgebra::normf64 → f645.63
Squared Euclidean
numkong::SqEuclideanf32 → f322.65
numkong::SqEuclideanf64 → f642.76
numkong::SqEuclideani8 → f3238.59
numkong::SqEuclideanu8 → f3238.80
numkong::SqEuclideanf16 → f325.52
numkong::SqEuclideanbf16 → f325.70
numkong::SqEuclideane4m3 → f322.29
numkong::SqEuclideane5m2 → f325.87
numkong::SqEuclideane2m3 → f322.76
numkong::SqEuclideane3m2 → f322.76
Hamming
numkong::Hammingu1x8 → u3245.20
Jaccard
numkong::Jaccardu1x8 → f3236.88
Kullback-Leibler
numkong::KullbackLeiblerf32 → f322.87
numkong::KullbackLeiblerf64 → f640.27
Jensen-Shannon
numkong::JensenShannonf32 → f321.47
numkong::JensenShannonf64 → f640.17

Python

LibraryPrecisionGSO/s
Dot
numkong.dotu8 → f329.37
numkong.doti8 → f329.81
numkong.dotbf16 → f321.06
numkong.dotf32 → f322.02
numkong.dotf64 → f322.48
numpy.dotf32 → f323.81
numpy.dotf64 → f643.68
Angular
numkong.angularu8 → f3210.07
numkong.angulari8 → f3210.04
numkong.angularbf16 → f321.03
numkong.angularf32 → f321.98
numkong.angularf64 → f322.01
Euclidean
numkong.euclideanu8 → f3210.24
numkong.euclideani8 → f3210.32
numkong.euclideanbf16 → f320.92
numkong.euclideanf32 → f322.15
numkong.euclideanf64 → f322.14
SqEuclidean
numkong.sqeuclideanu8 → f329.34
numkong.sqeuclideani8 → f328.60
numkong.sqeuclideanbf16 → f320.93
numkong.sqeuclideanf32 → f322.02
numkong.sqeuclideanf64 → f322.14

Run It

Rust

# Default 2048-dimensional vectors
cargo bench --bench bench_similarity --features bench_similarity

# Smaller 512-dimensional vectors
NUMWARS_DIMS=512 cargo bench --bench bench_similarity --features bench_similarity

# One benchmark group
NUMWARS_FILTER="similarity/angular/f32" \
cargo bench --bench bench_similarity --features bench_similarity

Python

# Default 2048-dimensional pairwise distances
python similarity/bench.py --filter 'angular.*float32'

# Compare probability metrics
python similarity/bench.py --filter 'jensenshannon|kullback' --ndim 1536 --count 128