Mesh Benchmarks
March 23, 2026 · View on GitHub
3D point-cloud alignment benchmarks comparing NumKong RMSD and Kabsch against scalar and nalgebra implementations.
Rust
| Library | Precision | MP/s |
|---|---|---|
| RMSD | ||
numkong::MeshAlignment::rmsd | f16 → f16 | 2864.47 |
numkong::MeshAlignment::rmsd | bf16 → bf16 | 2861.70 |
numkong::MeshAlignment::rmsd | f64 → f64 | 1859.32 |
numkong::MeshAlignment::rmsd | f32 → f32 | 1626.67 |
| nalgebra-based RMSD | f32 → f32 | 634.04 |
| Kabsch | ||
numkong::MeshAlignment::kabsch | f16 → f16 | 696.00 |
numkong::MeshAlignment::kabsch | bf16 → bf16 | 691.01 |
numkong::MeshAlignment::kabsch | f32 → f32 | 396.52 |
numkong::MeshAlignment::kabsch | f64 → f64 | 331.70 |
| nalgebra-based Kabsch | f32 → f64 | 283.16 |
| Umeyama | ||
numkong::MeshAlignment::umeyama | bf16 → bf16 | 673.50 |
numkong::MeshAlignment::umeyama | f16 → f16 | 614.06 |
numkong::MeshAlignment::umeyama | f32 → f32 | 376.48 |
numkong::MeshAlignment::umeyama | f64 → f64 | 325.16 |
| nalgebra-based Umeyama | f32 → f64 | 255.14 |
Python
| Library | Precision | MP/s |
|---|---|---|
numkong.rmsd | f64 → f64 | 1311.77 |
numkong.rmsd | f32 → f64 | 1228.00 |
numkong.kabsch | f32 → f64 | 360.08 |
numkong.umeyama | f32 → f64 | 327.01 |
numkong.umeyama | f64 → f64 | 296.67 |
numkong.kabsch | f64 → f64 | 285.81 |
numpy-based RMSD | f32 → f64 | 124.48 |
numpy-based RMSD | f64 → f64 | 117.30 |
biopython SVDSuperimposer (Kabsch) | f32 → f64 | 2.88 |
biopython SVDSuperimposer (Kabsch) | f64 → f64 | 2.92 |
# Default 2048-point clouds
python mesh/bench.py
# Smaller 256-point clouds
python mesh/bench.py --count 256
# Focus on one operation
python mesh/bench.py -k "kabsch"
Run It (Rust)
# Default 2048-point clouds
cargo bench --bench bench_mesh --features bench_mesh
# Smaller 256-point clouds
NUMWARS_DIMS=256 cargo bench --bench bench_mesh --features bench_mesh
# Focus on one operation
NUMWARS_FILTER="mesh/rmsd/f32" \
cargo bench --bench bench_mesh --features bench_mesh