Skip to content

Benchmarks

ordito runs on the GPU, and the libraries most mesh-processing code reaches for do not. This page compares the two on the same inputs: ordito on CUDA against eleven reference libraries — trimesh, libigl, Open3D, SciPy, NumPy, potpourri3d (geometry-central), MeshLab (through PyMeshLab), PyVista (VTK), MeshLib, PyMeshFix and PyTorch3D, the one other library with GPU kernels.

Every comparison times the same quantity on both sides, and the correctness suite checks that the two answers agree. A time is the median of repeated calls from Python, including the wait for the GPU to finish, so it is what a caller measures. The inputs are real 3D scans from the Stanford repository (from 16 thousand to 28 million triangles) and synthetic meshes that each stress one cost driver: many components, long boundaries, needle triangles, high valence.

Measured on GPU: NVIDIA GeForce RTX 5090 · CPU: Intel Xeon w7-2495X

Summary

How long each library takes relative to ordito, over every function both implement: ordito is 1x, and a library at 30x takes thirty times as long. Each function counts once: its ratio is first averaged over the inputs it was measured on, then the functions are averaged. Both averages are geometric means, the usual way to combine ratios: a 10x win and a 10x loss cancel out.

0.1x1x10x100x1000xordito (CUDA): the reference, 1xordito (CUDA)1xMeshLib: 11x ordito's time, geometric mean over 118 functions; slower than ordito in 103MeshLib11x (118)PyTorch3D (CUDA): 12x ordito's time, geometric mean over 36 functions; slower than ordito in 34PyTorch3D (CUDA)12x (36)NumPy: 12x ordito's time, geometric mean over 35 functions; slower than ordito in 29NumPy12x (35)Open3D: 22x ordito's time, geometric mean over 71 functions; slower than ordito in 67Open3D22x (71)SciPy: 44x ordito's time, geometric mean over 23 functions; slower than ordito in 23SciPy44x (23)potpourri3d: 65x ordito's time, geometric mean over 20 functions; slower than ordito in 20potpourri3d65x (20)libigl: 95x ordito's time, geometric mean over 95 functions; slower than ordito in 94libigl95x (95)MeshLab: 96x ordito's time, geometric mean over 79 functions; slower than ordito in 79MeshLab96x (79)trimesh: 102x ordito's time, geometric mean over 119 functions; slower than ordito in 116trimesh102x (119)PyVista: 109x ordito's time, geometric mean over 64 functions; slower than ordito in 62PyVista109x (64)PyMeshFix: 548x ordito's time, geometric mean over 4 functions; slower than ordito in 4PyMeshFix548x (4)
Time relative to ordito (CUDA), geometric mean over every function both implement; in parentheses, the number of functions. Log scale. Runs stopped at the time limit are left out.
Values
Library Time relative to ordito Functions compared ordito faster in
MeshLib 11x 118 103
PyTorch3D (CUDA) 12x 36 34
NumPy 12x 35 29
Open3D 22x 71 67
SciPy 44x 23 23
potpourri3d 65x 20 20
libigl 95x 95 94
MeshLab 96x 79 79
trimesh 102x 119 116
PyVista 109x 64 62
PyMeshFix 548x 4 4

Libraries are compared on different sets of functions, so each bar measures one library against ordito, not the libraries against each other. The libraries closest to ordito are the ones whose functions are mostly fast, compiled code on small inputs; the gaps grow with the input.

By module

ordito's speedup per module, against the fastest library measured on each input — the toughest comparison available for each function. Each module has its own page, with a chart for every function.

1x10x100x1000xadjacency: ordito 187x faster than the fastest library, geometric mean over 7 functions; faster in 7adjacency187x (7)triangles: ordito 160x faster than the fastest library, geometric mean over 9 functions; faster in 9triangles160x (9)tangent_space: ordito 138x faster than the fastest library, geometric mean over 2 functions; faster in 2tangent_space138x (2)geodesic_walk: ordito 110x faster than the fastest library, geometric mean over 5 functions; faster in 5geodesic_walk110x (5)graph: ordito 107x faster than the fastest library, geometric mean over 6 functions; faster in 6graph107x (6)grouping: ordito 88x faster than the fastest library, geometric mean over 4 functions; faster in 4grouping88x (4)edges: ordito 85x faster than the fastest library, geometric mean over 14 functions; faster in 14edges85x (14)validation: ordito 84x faster than the fastest library, geometric mean over 11 functions; faster in 11validation84x (11)smoothing: ordito 72x faster than the fastest library, geometric mean over 16 functions; faster in 16smoothing72x (16)seams: ordito 56x faster than the fastest library, geometric mean over 4 functions; faster in 4seams56x (4)curvature: ordito 54x faster than the fastest library, geometric mean over 3 functions; faster in 3curvature54x (3)repair: ordito 45x faster than the fastest library, geometric mean over 19 functions; faster in 17repair45x (19)laplacian: ordito 40x faster than the fastest library, geometric mean over 9 functions; faster in 9laplacian40x (9)visibility: ordito 37x faster than the fastest library, geometric mean over 6 functions; faster in 6visibility37x (6)metrics: ordito 36x faster than the fastest library, geometric mean over 7 functions; faster in 7metrics36x (7)levelset: ordito 33x faster than the fastest library, geometric mean over 4 functions; faster in 4levelset33x (4)measures: ordito 30x faster than the fastest library, geometric mean over 3 functions; faster in 3measures30x (3)mesh: ordito 27x faster than the fastest library, geometric mean over 13 functions; faster in 13mesh27x (13)energies: ordito 27x faster than the fastest library, geometric mean over 8 functions; faster in 8energies27x (8)interpolation: ordito 27x faster than the fastest library, geometric mean over 5 functions; faster in 5interpolation27x (5)sample: ordito 24x faster than the fastest library, geometric mean over 2 functions; faster in 2sample24x (2)vertices: ordito 24x faster than the fastest library, geometric mean over 4 functions; faster in 4vertices24x (4)remesh: ordito 24x faster than the fastest library, geometric mean over 10 functions; faster in 10remesh24x (10)holes: ordito 21x faster than the fastest library, geometric mean over 12 functions; faster in 12holes21x (12)neighbors: ordito 21x faster than the fastest library, geometric mean over 14 functions; faster in 14neighbors21x (14)points: ordito 19x faster than the fastest library, geometric mean over 19 functions; faster in 19points19x (19)creation: ordito 18x faster than the fastest library, geometric mean over 20 functions; faster in 16creation18x (20)intersection: ordito 18x faster than the fastest library, geometric mean over 11 functions; faster in 9intersection18x (11)heat: ordito 17x faster than the fastest library, geometric mean over 8 functions; faster in 8heat17x (8)array: ordito 17x faster than the fastest library, geometric mean over 20 functions; faster in 18array17x (20)transform: ordito 16x faster than the fastest library, geometric mean over 5 functions; faster in 3transform16x (5)parametrization: ordito 10x faster than the fastest library, geometric mean over 6 functions; faster in 6parametrization10x (6)selection: ordito 9x faster than the fastest library, geometric mean over 8 functions; faster in 5selection9x (8)boundary: ordito 8.8x faster than the fastest library, geometric mean over 7 functions; faster in 5boundary8.8x (7)ray: ordito 8.7x faster than the fastest library, geometric mean over 5 functions; faster in 5ray8.7x (5)registration: ordito 8.6x faster than the fastest library, geometric mean over 5 functions; faster in 5registration8.6x (5)proximity: ordito 7.2x faster than the fastest library, geometric mean over 6 functions; faster in 5proximity7.2x (6)combine: ordito 6.9x faster than the fastest library, geometric mean over 2 functions; faster in 2combine6.9x (2)voxels: ordito 6.3x faster than the fastest library, geometric mean over 15 functions; faster in 12voxels6.3x (15)polyline: ordito 4.6x faster than the fastest library, geometric mean over 7 functions; faster in 5polyline4.6x (7)reconstruction: ordito 3.8x faster than the fastest library, geometric mean over 6 functions; faster in 6reconstruction3.8x (6)homology: ordito 3.2x faster than the fastest library, geometric mean over 1 functions; faster in 1homology3.2x (1)linalg: ordito 3.2x faster than the fastest library, geometric mean over 1 functions; faster in 1linalg3.2x (1)reduce: ordito 3.1x faster than the fastest library, geometric mean over 15 functions; faster in 9reduce3.1x (15)bounds: ordito 1.3x faster than the fastest library, geometric mean over 9 functions; faster in 7bounds1.3x (9)
ordito (CUDA)'s speedup over the fastest library measured on each input, geometric mean per module; in parentheses, the number of functions. Log scale.
Values
Module ordito's speedup Functions ordito faster in
adjacency 187x 7 7
triangles 160x 9 9
tangent_space 138x 2 2
geodesic_walk 110x 5 5
graph 107x 6 6
grouping 88x 4 4
edges 85x 14 14
validation 84x 11 11
smoothing 72x 16 16
seams 56x 4 4
curvature 54x 3 3
repair 45x 19 17
laplacian 40x 9 9
visibility 37x 6 6
metrics 36x 7 7
levelset 33x 4 4
measures 30x 3 3
mesh 27x 13 13
energies 27x 8 8
interpolation 27x 5 5
sample 24x 2 2
vertices 24x 4 4
remesh 24x 10 10
holes 21x 12 12
neighbors 21x 14 14
points 19x 19 19
creation 18x 20 16
intersection 18x 11 9
heat 17x 8 8
array 17x 20 18
transform 16x 5 3
parametrization 10x 6 6
selection 9x 8 5
boundary 8.8x 7 5
ray 8.7x 5 5
registration 8.6x 5 5
proximity 7.2x 6 5
combine 6.9x 2 2
voxels 6.3x 15 12
polyline 4.6x 7 5
reconstruction 3.8x 6 6
homology 3.2x 1 1
linalg 3.2x 1 1
reduce 3.1x 15 9
bounds 1.3x 9 7

Highlights

The comparisons with the widest field of libraries. Each chart shows one input, with ordito at 1x and every other library's time relative to it; each module's page has every function and every input.

Signed distance to a mesh

Signed distance from a point set to a triangle mesh, the widest field among the spatial queries.

0.1x1x10x100x1000x10000xordito (CUDA): 5.11 ms, 1x ordito's timeordito (CUDA)1x · 5.11 msMeshLib: 94.85 ms, 19x ordito's timeMeshLib19x · 94.85 msOpen3D: 281.78 ms, 55x ordito's timeOpen3D55x · 281.78 msPyVista: 1.024 s, 200x ordito's timePyVista200x · 1.024 slibigl: 1.045 s, 205x ordito's timelibigl205x · 1.045 sMeshLab: 7.216 s, 1413x ordito's timeMeshLab1413x · 7.216 s
dragon (871 414 faces) · sign_mode=parity · time relative to ordito, log scale · [all proximity benchmarks](proximity.md)
Values
Library Median Relative to ordito
ordito (CUDA) 5.11 ms 1x
MeshLib 94.85 ms 19x
Open3D 281.78 ms 55x
PyVista 1.024 s 200x
libigl 1.045 s 205x
MeshLab 7.216 s 1413x

Nearest neighbours, k = 7

Seven nearest neighbours of every query point, against CPU trees and PyTorch3D's GPU kernel.

0.1x1x10x100xordito (CUDA): 1.85 ms, 1x ordito's timeordito (CUDA)1x · 1.85 msPyTorch3D (CUDA): 43.89 ms, 24x ordito's timePyTorch3D (CUDA)24x · 43.89 msOpen3D: 117.91 ms, 64x ordito's timeOpen3D64x · 117.91 msSciPy: 147.45 ms, 80x ordito's timeSciPy80x · 147.45 mslibigl: out of memorylibiglout of memory
dragon (871 414 faces) · time relative to ordito, log scale · a red cross is a run that left no time · [all neighbors benchmarks](neighbors.md)
Values
Library Median Relative to ordito
ordito (CUDA) 1.85 ms 1x
PyTorch3D (CUDA) 43.89 ms 24x
Open3D 117.91 ms 64x
SciPy 147.45 ms 80x
libigl out of memory

Nearest neighbour, k = 1

The same query with a single neighbour. Every library with a tree, ordito included, builds it over the cloud inside the timed call, and the build is most of the work: about two thirds of ordito's time.

0.1x1x10x100x1000xordito (CUDA): 625.7 µs, 1x ordito's timeordito (CUDA)1x · 625.7 µsMeshLib: 15.65 ms, 25x ordito's timeMeshLib25x · 15.65 msPyTorch3D (CUDA): 33.85 ms, 54x ordito's timePyTorch3D (CUDA)54x · 33.85 msOpen3D: 125.54 ms, 201x ordito's timeOpen3D201x · 125.54 msSciPy: 167.32 ms, 267x ordito's timeSciPy267x · 167.32 mslibigl: out of memorylibiglout of memory
dragon (871 414 faces) · time relative to ordito, log scale · a red cross is a run that left no time · [all neighbors benchmarks](neighbors.md)
Values
Library Median Relative to ordito
ordito (CUDA) 625.7 µs 1x
MeshLib 15.65 ms 25x
PyTorch3D (CUDA) 33.85 ms 54x
Open3D 125.54 ms 201x
SciPy 167.32 ms 267x
libigl out of memory

Quadric decimation

Edge-collapse simplification under the quadric error metric, against five independent decimators.

0.1x1x10x100xordito (CUDA): 2.99 ms, 1x ordito's timeordito (CUDA)1x · 2.99 msMeshLib: 19.08 ms, 6.4x ordito's timeMeshLib6.4x · 19.08 msOpen3D: 45.93 ms, 15x ordito's timeOpen3D15x · 45.93 msPyVista: 46.34 ms, 15x ordito's timePyVista15x · 46.34 mslibigl: 51.05 ms, 17x ordito's timelibigl17x · 51.05 msMeshLab: 177.33 ms, 59x ordito's timeMeshLab59x · 177.33 ms
saddle (34 848 faces) · target_ratio=0.5 · time relative to ordito, log scale · [all remesh benchmarks](remesh.md)
Values
Library Median Relative to ordito
ordito (CUDA) 2.99 ms 1x
MeshLib 19.08 ms 6.4x
Open3D 45.93 ms 15x
PyVista 46.34 ms 15x
libigl 51.05 ms 17x
MeshLab 177.33 ms 59x

Minimal oriented bounding box

Every library here searches for the minimum-volume box, not the PCA box, so the bars compare the same optimisation.

0.1x1x10x100x1000x10000xordito (CUDA): 1.58 ms, 1x ordito's timeordito (CUDA)1x · 1.58 msPyVista: 18.34 ms, 12x ordito's timePyVista12x · 18.34 mstrimesh: 159.09 ms, 100x ordito's timetrimesh100x · 159.09 msOpen3D: 2.096 s, 1322x ordito's timeOpen3D1322x · 2.096 slibigl: 2.483 s, 1567x ordito's timelibigl1567x · 2.483 s
dragon (871 414 faces) · time relative to ordito, log scale · [all bounds benchmarks](bounds.md)
Values
Library Median Relative to ordito
ordito (CUDA) 1.58 ms 1x
PyVista 18.34 ms 12x
trimesh 159.09 ms 100x
Open3D 2.096 s 1322x
libigl 2.483 s 1567x

Convex hull

0.1x1x10x100x1000xordito (CUDA): 1.86 ms, 1x ordito's timeordito (CUDA)1x · 1.86 msOpen3D: 49.37 ms, 27x ordito's timeOpen3D27x · 49.37 msSciPy: 61.31 ms, 33x ordito's timeSciPy33x · 61.31 mstrimesh: 79.55 ms, 43x ordito's timetrimesh43x · 79.55 msMeshLab: 417.44 ms, 224x ordito's timeMeshLab224x · 417.44 ms
dragon (871 414 faces) · time relative to ordito, log scale · [all points benchmarks](points.md)
Values
Library Median Relative to ordito
ordito (CUDA) 1.86 ms 1x
Open3D 49.37 ms 27x
SciPy 61.31 ms 33x
trimesh 79.55 ms 43x
MeshLab 417.44 ms 224x

Blue-noise sampling

Poisson-disk sampling of a surface: four different algorithms for the same distribution.

0.1x1x10x100x1000xordito (CUDA): 1.21 ms, 1x ordito's timeordito (CUDA)1x · 1.21 msMeshLib: 12.08 ms, 10x ordito's timeMeshLib10x · 12.08 msOpen3D: 57.02 ms, 47x ordito's timeOpen3D47x · 57.02 mslibigl: 304.39 ms, 252x ordito's timelibigl252x · 304.39 msMeshLab: 488.56 ms, 404x ordito's timeMeshLab404x · 488.56 ms
dragon (871 414 faces) · radius_scale=1.0 · time relative to ordito, log scale · [all sample benchmarks](sample.md)
Values
Library Median Relative to ordito
ordito (CUDA) 1.21 ms 1x
MeshLib 12.08 ms 10x
Open3D 57.02 ms 47x
libigl 304.39 ms 252x
MeshLab 488.56 ms 404x

Geodesic distance

Geodesic distance from a source vertex by the heat method, including building the solver.

0.1x1x10x100xordito (CUDA): 6.68 ms, 1x ordito's timeordito (CUDA)1x · 6.68 msPyVista: 23.72 ms, 3.5x ordito's timePyVista3.5x · 23.72 mspotpourri3d: 539.58 ms, 81x ordito's timepotpourri3d81x · 539.58 mslibigl: 597.39 ms, 89x ordito's timelibigl89x · 597.39 msMeshLab: 601.38 ms, 90x ordito's timeMeshLab90x · 601.38 ms
sphere_med (81 920 faces) · setup=full · time relative to ordito, log scale · [all heat benchmarks](heat.md)
Values
Library Median Relative to ordito
ordito (CUDA) 6.68 ms 1x
PyVista 23.72 ms 3.5x
potpourri3d 539.58 ms 81x
libigl 597.39 ms 89x
MeshLab 601.38 ms 90x

Repair: merging duplicate vertices

0.1x1x10x100x1000x10000xordito (CUDA): 218.1 µs, 1x ordito's timeordito (CUDA)1x · 218.1 µsOpen3D: 16.42 ms, 75x ordito's timeOpen3D75x · 16.42 msPyVista: 25.66 ms, 118x ordito's timePyVista118x · 25.66 msMeshLib: 31.33 ms, 144x ordito's timeMeshLib144x · 31.33 msMeshLab: 221.69 ms, 1017x ordito's timeMeshLab1017x · 221.69 ms
sphere_med (81 920 faces) · epsilon=0.0 · time relative to ordito, log scale · [all repair benchmarks](repair.md)
Values
Library Median Relative to ordito
ordito (CUDA) 218.1 µs 1x
Open3D 16.42 ms 75x
PyVista 25.66 ms 118x
MeshLib 31.33 ms 144x
MeshLab 221.69 ms 1017x

Repair: consistent winding

Re-orienting every face to agree with its neighbours, a whole-mesh propagation.

0.1x1x10x100x1000xordito (CUDA): 148.6 µs, 1x ordito's timeordito (CUDA)1x · 148.6 µsMeshLib: 6.91 ms, 46x ordito's timeMeshLib46x · 6.91 mstrimesh: 17.97 ms, 121x ordito's timetrimesh121x · 17.97 mslibigl: 36.63 ms, 247x ordito's timelibigl247x · 36.63 msMeshLab: 51.21 ms, 345x ordito's timeMeshLab345x · 51.21 ms
sphere_med (81 920 faces) · time relative to ordito, log scale · [all repair benchmarks](repair.md)
Values
Library Median Relative to ordito
ordito (CUDA) 148.6 µs 1x
MeshLib 6.91 ms 46x
trimesh 17.97 ms 121x
libigl 36.63 ms 247x
MeshLab 51.21 ms 345x

Connected components

0.1x1x10x100x1000x10000xordito (CUDA): 301.0 µs, 1x ordito's timeordito (CUDA)1x · 301.0 µsMeshLib: 21.73 ms, 72x ordito's timeMeshLib72x · 21.73 msPyVista: 318.91 ms, 1060x ordito's timePyVista1060x · 318.91 mslibigl: 445.32 ms, 1480x ordito's timelibigl1480x · 445.32 ms
dragon (871 414 faces) · time relative to ordito, log scale · [all adjacency benchmarks](adjacency.md)
Values
Library Median Relative to ordito
ordito (CUDA) 301.0 µs 1x
MeshLib 21.73 ms 72x
PyVista 318.91 ms 1060x
libigl 445.32 ms 1480x

Unique edges

The undirected edge list, the first step of most topology code.

0.1x1x10x100x1000xordito (CUDA): 472.6 µs, 1x ordito's timeordito (CUDA)1x · 472.6 µsPyTorch3D (CUDA): 3.52 ms, 7.5x ordito's timePyTorch3D (CUDA)7.5x · 3.52 mstrimesh: 243.05 ms, 514x ordito's timetrimesh514x · 243.05 msPyVista: 268.58 ms, 568x ordito's timePyVista568x · 268.58 mslibigl: 330.25 ms, 699x ordito's timelibigl699x · 330.25 ms
dragon (871 414 faces) · time relative to ordito, log scale · [all edges benchmarks](edges.md)
Values
Library Median Relative to ordito
ordito (CUDA) 472.6 µs 1x
PyTorch3D (CUDA) 3.52 ms 7.5x
trimesh 243.05 ms 514x
PyVista 268.58 ms 568x
libigl 330.25 ms 699x

Taubin smoothing

0.1x1x10x100x1000x10000xordito (CUDA): 476.5 µs, 1x ordito's timeordito (CUDA)1x · 476.5 µsPyVista: 153.29 ms, 322x ordito's timePyVista322x · 153.29 mstrimesh: 198.54 ms, 417x ordito's timetrimesh417x · 198.54 msOpen3D: 306.02 ms, 642x ordito's timeOpen3D642x · 306.02 msMeshLab: 867.52 ms, 1821x ordito's timeMeshLab1821x · 867.52 ms
dragon (871 414 faces) · time relative to ordito, log scale · [all smoothing benchmarks](smoothing.md)
Values
Library Median Relative to ordito
ordito (CUDA) 476.5 µs 1x
PyVista 153.29 ms 322x
trimesh 198.54 ms 417x
Open3D 306.02 ms 642x
MeshLab 867.52 ms 1821x

Voxelizing a mesh

0.1x1x10x100x1000x10000xordito (CUDA): 636.0 µs, 1x ordito's timeordito (CUDA)1x · 636.0 µsMeshLib: 109.34 ms, 172x ordito's timeMeshLib172x · 109.34 msOpen3D: 161.89 ms, 255x ordito's timeOpen3D255x · 161.89 msPyVista: 255.97 ms, 402x ordito's timePyVista402x · 255.97 mstrimesh: 655.79 ms, 1031x ordito's timetrimesh1031x · 655.79 ms
dragon (871 414 faces) · divisor=64 · time relative to ordito, log scale · [all voxels benchmarks](voxels.md)
Values
Library Median Relative to ordito
ordito (CUDA) 636.0 µs 1x
MeshLib 109.34 ms 172x
Open3D 161.89 ms 255x
PyVista 255.97 ms 402x
trimesh 655.79 ms 1031x

Boundary edges, a loss

Listing the edges on a mesh's boundary is a single pass that serial C++ finishes in less time than a GPU round trip takes. ordito loses this one, as it does most operations whose whole cost is a few tens of microseconds; the module pages show the rest.

0.01x0.1x1x10x100x1000xMeshLib: 55.0 µs, 0.31x ordito's timeMeshLib0.31x · 55.0 µsordito (CUDA): 178.5 µs, 1x ordito's timeordito (CUDA)1x · 178.5 µstrimesh: 17.86 ms, 100x ordito's timetrimesh100x · 17.86 msMeshLab: 43.46 ms, 243x ordito's timeMeshLab243x · 43.46 mslibigl: 43.80 ms, 245x ordito's timelibigl245x · 43.80 msPyVista: 56.55 ms, 317x ordito's timePyVista317x · 56.55 ms
rim_long (131 072 faces) · time relative to ordito, log scale · [all boundary benchmarks](boundary.md)
Values
Library Median Relative to ordito
MeshLib 55.0 µs 0.31x
ordito (CUDA) 178.5 µs 1x
trimesh 17.86 ms 100x
MeshLab 43.46 ms 243x
libigl 43.80 ms 245x
PyVista 56.55 ms 317x

Reproduce

The suite lives in benchmarks/; its README describes the inputs and every comparison in detail. It needs Linux, an NVIDIA GPU and the CUDA toolkit:

git clone https://github.com/lucagrementieri/ordito
cd ordito
uv sync --group bench --no-install-package pytorch3d
uv sync --group bench

mkdir -p results
for f in benchmarks/test_*.py; do
  uv run pytest "$f" --device=cuda --bench-all-libs \
    --benchmark-json="results/$(basename "$f" .py).json" -q
done

uv run python -m benchmarks.tools.render_docs results

The last command redraws every chart on this page and on the module pages from your own run. Absolute times depend on the hardware; the ratios are what carries over.

A ratio holds only for the library, the input and the hardware it was measured on: besides its size, a mesh's number of components, boundary length and triangle shapes move it. A few functions have little parallel work at realistic sizes (a sequential pass over one small boundary loop), and a fast single-threaded C++ implementation beats them; the module pages show those cases beside the others.