Benchmarks
Each case has four logically equivalent implementations. kvlang is currently slower than Python, Rust, and C; these charts track how fast it converges.
Latest results
Full results (30 rows)
| Case | Input | shm | fs | redis | Python | Rust | C |
|---|---|---|---|---|---|---|---|
| binary_search | N=16 | 199 µs | — | — | 14.1 µs | 738 ns | 451 ns |
| binary_search | N=32 | 402 µs | — | — | 23.7 µs | 1.36 µs | 956 ns |
| binary_search | N=64 | 851 µs | — | — | 45.3 µs | 2.94 µs | 2.07 µs |
| binary_trees | depth=4 | 441 µs | — | — | 14.4 µs | 2.63 µs | 5.29 µs |
| binary_trees | depth=5 | 843 µs | — | — | 22.6 µs | 3.12 µs | 6.14 µs |
| binary_trees | depth=6 | 1.64 ms | — | — | 40.7 µs | 4.41 µs | 8.75 µs |
| fib | n=8 | 56.1 µs | — | — | 10.1 µs | 321 ns | 373 ns |
| fib | n=9 | 77.1 µs | — | — | 12.0 µs | 401 ns | 444 ns |
| fib | n=10 | 117 µs | — | — | 15.2 µs | 466 ns | 527 ns |
| hash_table | N=50 | 305 µs | — | — | 33.6 µs | 4.94 µs | 265 ns |
| hash_table | N=100 | 583 µs | — | — | 63.1 µs | 8.07 µs | 481 ns |
| hash_table | N=200 | 1.14 ms | — | — | 113 µs | 15.1 µs | 727 ns |
| iops | N=500 | 13.8 µs | — | — | 23.7 µs | 475 ns | 284 ns |
| iops | N=1000 | 14.3 µs | — | — | 45.0 µs | 800 ns | 449 ns |
| iops | N=2000 | 14.8 µs | — | — | 95.2 µs | 1.47 µs | 754 ns |
| k_nucleotide | rep=3 | 932 µs | — | — | 39.5 µs | 3.29 µs | 225 ns |
| k_nucleotide | rep=5 | 1.59 ms | — | — | 65.1 µs | 4.97 µs | 306 ns |
| k_nucleotide | rep=8 | 2.60 ms | — | — | 101 µs | 7.50 µs | 416 ns |
| matmul | N=4 | 50.6 µs | — | — | 20.1 µs | 313 ns | 232 ns |
| matmul | N=6 | 120 µs | — | — | 54.1 µs | 467 ns | 364 ns |
| matmul | N=8 | 242 µs | — | — | 116 µs | 740 ns | 565 ns |
| nqueens | N=4 | 39.1 µs | — | — | 13.8 µs | 299 ns | 253 ns |
| nqueens | N=5 | 73.6 µs | — | — | 23.7 µs | 550 ns | 526 ns |
| nqueens | N=6 | 171 µs | — | — | 50.7 µs | 1.60 µs | 1.44 µs |
| prime_sieve | N=50 | 576 µs | — | — | 41.6 µs | 16.2 µs | 19.2 µs |
| prime_sieve | N=75 | 762 µs | — | — | 61.7 µs | 17.7 µs | 19.1 µs |
| prime_sieve | N=100 | 904 µs | — | — | 82.1 µs | 21.1 µs | 21.7 µs |
| quicksort | N=32,seed=1 | 76.4 µs | — | — | 18.5 µs | 1.21 µs | 1.01 µs |
| quicksort | N=64,seed=1 | 147 µs | — | — | 33.7 µs | 2.33 µs | 2.19 µs |
| quicksort | N=128,seed=1 | 296 µs | — | — | 66.0 µs | 5.13 µs | 4.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.
| Version | binary_search | binary_trees | fib | hash_table | iops | k_nucleotide | matmul | nqueens | prime_sieve | quicksort |
|---|---|---|---|---|---|---|---|---|---|---|
| v0.3.24 | ||||||||||
| time | N=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 Python | N=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 C | N=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 | ||||||||||
| time | N=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 Python | N=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 C | N=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 | ||||||||||
| time | N=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 Python | N=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 C | N=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 | ||||||||||
| time | N=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 Python | N=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 C | N=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 | ||||||||||
| time | N=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 Python | N=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 C | N=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 | ||||||||||
| time | N=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 Python | N=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 C | N=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