Benchmarks

Each case has four logically equivalent implementations. kvlang is currently slower than Python, Rust, and C; these charts track how fast it converges.

Data from v0.3.24 · commit 531e4c7 · measured 2026-10-29 · Intel(R) Xeon(R) Platinum 8336C CPU @ 2.30GHz · raw CSV

Latest results

BenchmarksLog-scale latency in nanoseconds for ten benchmark cases, comparing kvlang (shm, fs, redis) with Python, Rust, and C.kvlang shmkvlang fskvlang redisPythonRustCtime (ns, log scale)binary_search1µs1ms1sN=16N=32N=64binary_treesdepth=4depth=5depth=6fib1µs1ms1sn=8n=9n=10hash_tableN=50N=100N=200iops1µs1ms1sN=500N=1000N=2000k_nucleotiderep=3rep=5rep=8matmul1µs1ms1sN=4N=6N=8nqueensN=4N=5N=6prime_sieve1µs1ms1sN=50N=75N=100quicksortN=32,seed=1N=64,seed=1N=128,seed=1
Full results (30 rows)
CaseInputshmfsredisPythonRustC
binary_searchN=16199 µs——14.1 µs738 ns451 ns
binary_searchN=32402 µs——23.7 µs1.36 µs956 ns
binary_searchN=64851 µs——45.3 µs2.94 µs2.07 µs
binary_treesdepth=4441 µs——14.4 µs2.63 µs5.29 µs
binary_treesdepth=5843 µs——22.6 µs3.12 µs6.14 µs
binary_treesdepth=61.64 ms——40.7 µs4.41 µs8.75 µs
fibn=856.1 µs——10.1 µs321 ns373 ns
fibn=977.1 µs——12.0 µs401 ns444 ns
fibn=10117 µs——15.2 µs466 ns527 ns
hash_tableN=50305 µs——33.6 µs4.94 µs265 ns
hash_tableN=100583 µs——63.1 µs8.07 µs481 ns
hash_tableN=2001.14 ms——113 µs15.1 µs727 ns
iopsN=50013.8 µs——23.7 µs475 ns284 ns
iopsN=100014.3 µs——45.0 µs800 ns449 ns
iopsN=200014.8 µs——95.2 µs1.47 µs754 ns
k_nucleotiderep=3932 µs——39.5 µs3.29 µs225 ns
k_nucleotiderep=51.59 ms——65.1 µs4.97 µs306 ns
k_nucleotiderep=82.60 ms——101 µs7.50 µs416 ns
matmulN=450.6 µs——20.1 µs313 ns232 ns
matmulN=6120 µs——54.1 µs467 ns364 ns
matmulN=8242 µs——116 µs740 ns565 ns
nqueensN=439.1 µs——13.8 µs299 ns253 ns
nqueensN=573.6 µs——23.7 µs550 ns526 ns
nqueensN=6171 µs——50.7 µs1.60 µs1.44 µs
prime_sieveN=50576 µs——41.6 µs16.2 µs19.2 µs
prime_sieveN=75762 µs——61.7 µs17.7 µs19.1 µs
prime_sieveN=100904 µs——82.1 µs21.1 µs21.7 µs
quicksortN=32,seed=176.4 µs——18.5 µs1.21 µs1.01 µs
quicksortN=64,seed=1147 µs——33.7 µs2.33 µs2.19 µs
quicksortN=128,seed=1296 µs——66.0 µs5.13 µs4.46 µs

ns/µs/ms are self-adaptive. Missing values are shown as —. benchmark/README.md

Versions

Per version, three rows per case: wall time, ratio to Python, and the headline ratio to C (C = 1). Each cell stacks the case's three input points.

v0.3.24 · Intel(R) Xeon(R) Platinum 8336C CPU @ 2.30GHz · gcc -O1 / rustc opt-level=1 / cpython · measured 2026-10-29

v0.2.16 · Intel(R) Xeon(R) Platinum 8336C CPU @ 2.30GHz · gcc -O1 / rustc opt-level=1 / cpython · measured 2026-09-10

v0.2.14 · Intel(R) Xeon(R) Platinum 8336C CPU @ 2.30GHz · gcc -O1 / rustc opt-level=1 / cpython · measured 2026-09-09

v0.2.12 · Intel(R) Xeon(R) Platinum 8336C CPU @ 2.30GHz · gcc -O1 / rustc opt-level=1 / cpython · measured 2026-09-08

v0.2.9 · Intel(R) Xeon(R) Platinum 8336C CPU @ 2.30GHz · gcc -O1 / rustc opt-level=1 / cpython · measured 2026-09-08

v0.2.5 · Intel(R) Xeon(R) Platinum 8336C CPU @ 2.30GHz · gcc -O1 / rustc opt-level=1 / cpython · measured 2026-09-04

Versionbinary_searchbinary_treesfibhash_tableiopsk_nucleotidematmulnqueensprime_sievequicksort
v0.3.24
timeN=16 199 µs
N=32 402 µs
N=64 851 µs
depth=4 441 µs
depth=5 843 µs
depth=6 1.64 ms
n=8 56.1 µs
n=9 77.1 µs
n=10 117 µs
N=50 305 µs
N=100 583 µs
N=200 1.14 ms
N=500 13.8 µs
N=1000 14.3 µs
N=2000 14.8 µs
rep=3 932 µs
rep=5 1.59 ms
rep=8 2.60 ms
N=4 50.6 µs
N=6 120 µs
N=8 242 µs
N=4 39.1 µs
N=5 73.6 µs
N=6 171 µs
N=50 576 µs
N=75 762 µs
N=100 904 µs
N=32,seed=1 76.4 µs
N=64,seed=1 147 µs
N=128,seed=1 296 µs
vs PythonN=16 14.1×
N=32 17.0×
N=64 18.8×
depth=4 30.5×
depth=5 37.3×
depth=6 40.4×
n=8 5.54×
n=9 6.45×
n=10 7.69×
N=50 9.07×
N=100 9.25×
N=200 10.1×
N=500 0.583×
N=1000 0.317×
N=2000 0.156×
rep=3 23.6×
rep=5 24.4×
rep=8 25.7×
N=4 2.52×
N=6 2.22×
N=8 2.09×
N=4 2.83×
N=5 3.10×
N=6 3.37×
N=50 13.8×
N=75 12.4×
N=100 11.0×
N=32,seed=1 4.14×
N=64,seed=1 4.37×
N=128,seed=1 4.48×
vs CN=16 442×
N=32 421×
N=64 412×
depth=4 83.4×
depth=5 137×
depth=6 188×
n=8 150×
n=9 174×
n=10 221×
N=50 1,151×
N=100 1,212×
N=200 1,574×
N=500 48.7×
N=1000 31.8×
N=2000 19.7×
rep=3 4,143×
rep=5 5,181×
rep=8 6,262×
N=4 218×
N=6 330×
N=8 429×
N=4 155×
N=5 140×
N=6 119×
N=50 29.9×
N=75 39.9×
N=100 41.6×
N=32,seed=1 75.5×
N=64,seed=1 67.2×
N=128,seed=1 66.3×
v0.2.16
timeN=16 6.95 ms
N=32 15.0 ms
N=64 32.7 ms
depth=4 5.18 ms
depth=5 9.60 ms
depth=6 19.3 ms
n=8 7.47 ms
n=9 12.1 ms
n=10 19.8 ms
N=50 4.57 ms
N=100 9.04 ms
N=200 19.0 ms
N=500 7.45 ms
N=1000 14.6 ms
N=2000 28.9 ms
rep=3 10.5 ms
rep=5 20.5 ms
rep=8 39.8 ms
N=4 3.29 ms
N=6 9.54 ms
N=8 21.4 ms
N=4 5.22 ms
N=5 15.8 ms
N=6 45.2 ms
N=50 11.9 ms
N=75 23.0 ms
N=100 32.9 ms
N=32,seed=1 7.76 ms
N=64,seed=1 17.0 ms
N=128,seed=1 36.5 ms
vs PythonN=16 482×
N=32 629×
N=64 712×
depth=4 362×
depth=5 433×
depth=6 475×
n=8 726×
n=9 1,016×
n=10 1,291×
N=50 140×
N=100 137×
N=200 165×
N=500 312×
N=1000 329×
N=2000 320×
rep=3 257×
rep=5 324×
rep=8 406×
N=4 162×
N=6 184×
N=8 190×
N=4 374×
N=5 670×
N=6 890×
N=50 289×
N=75 374×
N=100 409×
N=32,seed=1 416×
N=64,seed=1 503×
N=128,seed=1 549×
vs CN=16 14,640×
N=32 15,153×
N=64 15,679×
depth=4 830×
depth=5 1,212×
depth=6 2,176×
n=8 23,045×
n=9 29,340×
n=10 32,321×
N=50 16,937×
N=100 20,172×
N=200 24,364×
N=500 28,548×
N=1000 33,716×
N=2000 37,111×
rep=3 54,449×
rep=5 72,402×
rep=8 94,208×
N=4 17,123×
N=6 27,820×
N=8 38,678×
N=4 19,264×
N=5 28,998×
N=6 31,663×
N=50 691×
N=75 1,185×
N=100 1,397×
N=32,seed=1 7,393×
N=64,seed=1 7,834×
N=128,seed=1 7,894×
v0.2.14
timeN=16 10.1 ms
N=32 22.0 ms
N=64 48.8 ms
depth=4 7.31 ms
depth=5 13.7 ms
depth=6 27.4 ms
n=8 11.5 ms
n=9 18.9 ms
n=10 31.2 ms
N=50 6.60 ms
N=100 12.9 ms
N=200 27.0 ms
N=500 12.9 ms
N=1000 25.5 ms
N=2000 50.5 ms
rep=3 14.5 ms
rep=5 27.0 ms
rep=8 50.1 ms
N=4 5.00 ms
N=6 14.8 ms
N=8 33.5 ms
N=4 7.88 ms
N=5 24.2 ms
N=6 70.2 ms
N=50 17.3 ms
N=75 33.4 ms
N=100 48.8 ms
N=32,seed=1 11.8 ms
N=64,seed=1 25.8 ms
N=128,seed=1 55.2 ms
vs PythonN=16 727×
N=32 897×
N=64 1,062×
depth=4 518×
depth=5 606×
depth=6 684×
n=8 1,178×
n=9 1,590×
n=10 2,110×
N=50 199×
N=100 213×
N=200 242×
N=500 553×
N=1000 568×
N=2000 571×
rep=3 365×
rep=5 426×
rep=8 501×
N=4 254×
N=6 287×
N=8 296×
N=4 586×
N=5 1,028×
N=6 1,404×
N=50 439×
N=75 552×
N=100 615×
N=32,seed=1 631×
N=64,seed=1 772×
N=128,seed=1 835×
vs CN=16 22,656×
N=32 21,637×
N=64 22,241×
depth=4 1,399×
depth=5 2,111×
depth=6 3,016×
n=8 32,173×
n=9 47,317×
n=10 53,551×
N=50 21,942×
N=100 29,216×
N=200 35,336×
N=500 46,173×
N=1000 58,729×
N=2000 65,883×
rep=3 64,893×
rep=5 98,882×
rep=8 114,343×
N=4 23,682×
N=6 40,952×
N=8 57,021×
N=4 33,395×
N=5 45,008×
N=6 48,696×
N=50 910×
N=75 1,851×
N=100 2,078×
N=32,seed=1 11,901×
N=64,seed=1 11,749×
N=128,seed=1 11,961×
v0.2.12
timeN=16 28.2 ms
N=32 58.0 ms
N=64 120 ms
depth=4 5.52 ms
depth=5 10.4 ms
depth=6 20.7 ms
n=8 55.4 ms
n=9 90.6 ms
n=10 147 ms
N=50 4.79 ms
N=100 9.56 ms
N=200 20.2 ms
N=500 10.0 ms
N=1000 19.1 ms
N=2000 37.1 ms
rep=3 11.5 ms
rep=5 22.1 ms
rep=8 42.6 ms
N=4 3.60 ms
N=6 10.6 ms
N=8 23.9 ms
N=4 31.8 ms
N=5 103 ms
N=6 297 ms
N=50 13.9 ms
N=75 26.3 ms
N=100 37.5 ms
N=32,seed=1 8.55 ms
N=64,seed=1 18.9 ms
N=128,seed=1 37.7 ms
vs PythonN=16 1,953×
N=32 2,367×
N=64 2,665×
depth=4 380×
depth=5 463×
depth=6 511×
n=8 5,572×
n=9 7,340×
n=10 9,653×
N=50 144×
N=100 154×
N=200 177×
N=500 425×
N=1000 412×
N=2000 412×
rep=3 297×
rep=5 322×
rep=8 425×
N=4 180×
N=6 199×
N=8 214×
N=4 2,344×
N=5 4,384×
N=6 5,848×
N=50 346×
N=75 421×
N=100 470×
N=32,seed=1 469×
N=64,seed=1 559×
N=128,seed=1 568×
vs CN=16 57,588×
N=32 59,280×
N=64 56,745×
depth=4 961×
depth=5 1,597×
depth=6 2,448×
n=8 146,259×
n=9 222,157×
n=10 281,837×
N=50 16,647×
N=100 21,061×
N=200 28,109×
N=500 37,686×
N=1000 42,300×
N=2000 47,611×
rep=3 52,172×
rep=5 75,311×
rep=8 102,685×
N=4 13,964×
N=6 31,191×
N=8 41,405×
N=4 115,335×
N=5 198,524×
N=6 201,314×
N=50 728×
N=75 1,137×
N=100 1,652×
N=32,seed=1 8,613×
N=64,seed=1 8,864×
N=128,seed=1 8,094×
v0.2.9
timeN=16 33.3 ms
N=32 68.7 ms
N=64 144 ms
depth=4 9.75 ms
depth=5 18.6 ms
depth=6 36.6 ms
n=8 60.5 ms
n=9 98.1 ms
n=10 160 ms
N=50 8.67 ms
N=100 17.1 ms
N=200 35.1 ms
N=500 19.5 ms
N=1000 38.4 ms
N=2000 74.9 ms
rep=3 20.0 ms
rep=5 36.0 ms
rep=8 65.0 ms
N=4 7.45 ms
N=6 22.6 ms
N=8 51.1 ms
N=4 35.3 ms
N=5 114 ms
N=6 326 ms
N=50 25.5 ms
N=75 49.2 ms
N=100 71.4 ms
N=32,seed=1 16.9 ms
N=64,seed=1 37.8 ms
N=128,seed=1 81.4 ms
vs PythonN=16 2,331×
N=32 2,855×
N=64 3,148×
depth=4 677×
depth=5 821×
depth=6 903×
n=8 6,183×
n=9 8,180×
n=10 10,434×
N=50 261×
N=100 277×
N=200 311×
N=500 811×
N=1000 842×
N=2000 851×
rep=3 499×
rep=5 557×
rep=8 652×
N=4 373×
N=6 431×
N=8 447×
N=4 2,577×
N=5 4,868×
N=6 6,524×
N=50 630×
N=75 790×
N=100 889×
N=32,seed=1 897×
N=64,seed=1 1,116×
N=128,seed=1 1,247×
vs CN=16 71,137×
N=32 69,492×
N=64 67,146×
depth=4 1,722×
depth=5 2,841×
depth=6 3,813×
n=8 188,924×
n=9 229,771×
n=10 267,682×
N=50 31,409×
N=100 37,207×
N=200 47,563×
N=500 71,231×
N=1000 85,491×
N=2000 96,043×
rep=3 96,812×
rep=5 118,097×
rep=8 149,359×
N=4 30,928×
N=6 65,756×
N=8 86,385×
N=4 134,878×
N=5 211,755×
N=6 224,955×
N=50 1,309×
N=75 2,412×
N=100 3,187×
N=32,seed=1 15,401×
N=64,seed=1 17,901×
N=128,seed=1 17,369×
v0.2.5
timeN=16 975 ms
N=32 2.32 s
N=64 5.43 s
depth=4 671 ms
depth=5 1.36 s
depth=6 2.74 s
n=8 2.11 s
n=9 4.03 s
n=10 7.64 s
N=50 625 ms
N=100 1.24 s
N=200 2.48 s
N=500 1.74 s
N=1000 3.44 s
N=2000 6.90 s
rep=3 1.50 s
rep=5 2.50 s
rep=8 4.00 s
N=4 596 ms
N=6 1.85 s
N=8 4.22 s
N=4 690 ms
N=5 2.89 s
N=6 10.2 s
N=50 2.71 s
N=75 5.49 s
N=100 8.17 s
N=32,seed=1 1.41 s
N=64,seed=1 3.29 s
N=128,seed=1 7.26 s
vs PythonN=16 69,062×
N=32 95,046×
N=64 119,699×
depth=4 46,943×
depth=5 60,059×
depth=6 67,221×
n=8 206,620×
n=9 330,596×
n=10 501,995×
N=50 18,799×
N=100 20,406×
N=200 21,936×
N=500 74,017×
N=1000 76,641×
N=2000 76,407×
rep=3 38,228×
rep=5 39,332×
rep=8 39,652×
N=4 29,005×
N=6 33,545×
N=8 38,009×
N=4 50,137×
N=5 123,719×
N=6 203,974×
N=50 66,069×
N=75 89,703×
N=100 101,013×
N=32,seed=1 75,908×
N=64,seed=1 97,552×
N=128,seed=1 110,700×
vs CN=16 2,123,604×
N=32 2,138,706×
N=64 2,481,079×
depth=4 114,994×
depth=5 231,924×
depth=6 305,928×
n=8 6,400,197×
n=9 9,860,498×
n=10 13,326,081×
N=50 2,299,259×
N=100 2,699,277×
N=200 3,026,072×
N=500 5,863,882×
N=1000 7,917,590×
N=2000 9,025,180×
rep=3 6,609,949×
rep=5 8,051,147×
rep=8 8,904,458×
N=4 2,671,172×
N=6 5,500,327×
N=8 7,270,982×
N=4 2,481,606×
N=5 5,782,815×
N=6 6,828,429×
N=50 145,962×
N=75 280,407×
N=100 406,075×
N=32,seed=1 1,354,116×
N=64,seed=1 1,560,778×
N=128,seed=1 1,617,070×

All runs on the same CPU model unless noted. The v0.2.17 snapshot on a different CPU is excluded. Ratios are kvlang / baseline; a lower ratio is faster. C is the reference baseline (ratio to C = 1 is the primary metric). benchmark/README.md