Nim VS Python benchmarks

Current benchmark data was generated on Sat Jan 28 2023, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz (Model 106)

* -m in a file name stands for multi-threading or multi-processing

* -i in a file name stands for direct intrinsics usage. (Usage of simd intrinsics via libraries is not counted)

* -ffi in a file name stands for non-stdlib FFI usage

* (You may find time < time(user) + time(sys) for some non-parallelized programs, the overhead is from GC or JIT compiler, which are allowed to take advantage of multi-cores as that's more close to real-world scenarios.)

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 1946ms 26ms 35.1MB 1927ms 3ms nim 1.6.10
nim 2.nim 2142ms 32ms 35.5MB 2120ms 7ms nim/clang 1.6.10
python 1.py 3016ms 52ms 271.6MB 2870ms 130ms pypy 3.9.16
python 1.py timeout 0.0ms 40.9MB 4977ms 7ms cpython 3.11.1
python 1.py timeout 0.0ms 40.2MB 4900ms 80ms pyston 3.8.12

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 113ms 3.4ms 80.6MB 87ms 10ms pypy 3.9.16
nim 2.nim 183ms 0.2ms 5.5MB 170ms 0ms nim 1.6.10
nim 2.nim 195ms 1.2ms 5.7MB 187ms 0ms nim/clang 1.6.10
python 1.py 613ms 1.2ms 12.0MB 583ms 10ms pyston 3.8.12
python 1.py 972ms 3.3ms 12.5MB 957ms 3ms cpython 3.11.1

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1646ms 35ms 193.2MB 1543ms 87ms pypy 3.9.16
nim 1.nim timeout 0.0ms 425.1MB 3367ms 1280ms nim 1.6.10
nim 1.nim timeout 0.0ms 425.7MB 3353ms 1293ms nim/clang 1.6.10
python 1.py timeout 0.0ms 20.2MB 4973ms 7ms cpython 3.11.1
python 1.py timeout 0.0ms 17.2MB 4973ms 3ms pyston 3.8.12

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 320ms 4.8ms 92.8MB 280ms 20ms pypy 3.9.16
python 1.py 818ms 1.1ms 20.0MB 797ms 3ms cpython 3.11.1
python 1.py 943ms 6.4ms 16.7MB 923ms 3ms pyston 3.8.12
nim 1.nim timeout 0.0ms 424.7MB 3407ms 1243ms nim 1.6.10
nim 1.nim timeout 0.0ms 428.4MB 3300ms 1347ms nim/clang 1.6.10

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 711ms 11ms 81.6MB 680ms 13ms pypy 3.9.16
python 1.py 1658ms 0.8ms 10.1MB 1643ms 0ms cpython 3.11.1
python 1.py 2817ms 53ms 9.7MB 2807ms 0ms pyston 3.8.12
nim 1.nim timeout 0.0ms 3.0MB 4983ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 2.9MB 4990ms 0ms nim/clang 1.6.10

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 193ms 3.6ms 78.5MB 160ms 17ms pypy 3.9.16
python 1.py 301ms 0.7ms 9.4MB 290ms 0ms cpython 3.11.1
python 1.py 481ms 1.1ms 9.0MB 470ms 0ms pyston 3.8.12
nim 1.nim timeout 0.0ms 2.3MB 4990ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 2.3MB 4990ms 0ms nim/clang 1.6.10

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 268ms 0.2ms 1.0MB 260ms 0ms nim 1.6.10
nim 2.nim 335ms 0.2ms 1.3MB 327ms 0ms nim/clang 1.6.10
nim 1.nim 779ms 4.3ms 1.1MB 687ms 73ms nim 1.6.10
nim 1.nim 796ms 1.3ms 1.2MB 687ms 93ms nim/clang 1.6.10
python 1.py 3281ms 110ms 88.1MB 3240ms 23ms pypy 3.9.16
python 5-m.py 4072ms 15ms 13.5MB 5707ms 977ms cpython 3.11.1
python 1.py 4085ms 11ms 8.0MB 4063ms 7ms pyston 3.8.12
python 5-m.py 4087ms 56ms 12.5MB 6220ms 1000ms pyston 3.8.12
python 5-m.py 4461ms 125ms 82.8MB 5007ms 1030ms pypy 3.9.16
python 1.py timeout 0.0ms 8.5MB 4990ms 0ms cpython 3.11.1

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 32ms 3.0ms 1.1MB 20ms 0ms nim 1.6.10
nim 2.nim 37ms 2.3ms 1.3MB 27ms 0ms nim/clang 1.6.10
nim 1.nim 79ms 0.1ms 1.1MB 57ms 7ms nim 1.6.10
nim 1.nim 83ms 1.7ms 1.3MB 67ms 3ms nim/clang 1.6.10
python 1.py 430ms 8.6ms 7.9MB 413ms 0ms pyston 3.8.12
python 1.py 444ms 84ms 79.3MB 410ms 20ms pypy 3.9.16
python 5-m.py 468ms 23ms 12.7MB 667ms 150ms pyston 3.8.12
python 5-m.py 472ms 3.0ms 13.5MB 617ms 113ms cpython 3.11.1
python 1.py 603ms 4.7ms 8.6MB 590ms 0ms cpython 3.11.1
python 5-m.py 838ms 30ms 82.5MB 903ms 487ms pypy 3.9.16

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1.5ms 0.8ms 1.3MB 0ms 0ms nim/clang 1.6.10
nim 1.nim 1.7ms 0.7ms 1.0MB 0ms 0ms nim 1.6.10
python 1.py 13ms 0.4ms 7.3MB 10ms 0ms pyston 3.8.12
python 1.py 14ms 1.4ms 8.4MB 10ms 0ms cpython 3.11.1
python 1.py 38ms 3.1ms 51.6MB 14ms 10ms pypy 3.9.16

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 724ms 4.5ms 94.5MB 323ms 367ms nim 1.6.10
nim 1.nim 726ms 1.1ms 94.5MB 320ms 373ms nim/clang 1.6.10
python 1.py 1489ms 10ms 35.2MB 1097ms 800ms pyston 3.8.12
python 1.py 1783ms 2.7ms 30.0MB 1437ms 763ms cpython 3.11.1
python 1.py 4609ms 150ms 127.8MB 3567ms 920ms pypy 3.9.16

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 122ms 1.9ms 18.0MB 47ms 53ms nim/clang 1.6.10
nim 1.nim 122ms 1.2ms 17.8MB 53ms 53ms nim 1.6.10
python 1.py 350ms 1.8ms 29.5MB 260ms 137ms pyston 3.8.12
python 1.py 365ms 1.5ms 24.8MB 303ms 113ms cpython 3.11.1
python 1.py 1188ms 74ms 104.0MB 950ms 210ms pypy 3.9.16

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 147ms 1.5ms 1.2MB 140ms 0ms nim/clang 1.6.10
nim 2.nim 151ms 0.4ms 1.0MB 140ms 0ms nim 1.6.10
python 2.py 212ms 19ms 77.3MB 177ms 13ms pypy 3.9.16
python 1.py 248ms 4.0ms 78.2MB 207ms 23ms pypy 3.9.16
python 1.py 976ms 2.0ms 9.0MB 960ms 0ms pyston 3.8.12
python 2.py 1156ms 1.7ms 8.7MB 1140ms 0ms pyston 3.8.12
python 1.py 1300ms 7.9ms 9.3MB 1287ms 0ms cpython 3.11.1
python 2.py 1494ms 5.2ms 9.1MB 1477ms 0ms cpython 3.11.1
nim 1.nim timeout 0.0ms 1.0MB 4990ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 1.3MB 4987ms 0ms nim/clang 1.6.10

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 430ms 1.7ms 1.2MB 420ms 0ms nim/clang 1.6.10
nim 2.nim 448ms 1.1ms 1.0MB 437ms 0ms nim 1.6.10
python 2.py 475ms 2.8ms 77.2MB 443ms 10ms pypy 3.9.16
python 1.py 512ms 11ms 78.8MB 480ms 17ms pypy 3.9.16
python 1.py 2900ms 12ms 9.0MB 2880ms 3ms pyston 3.8.12
python 2.py 3456ms 28ms 8.8MB 3440ms 0ms pyston 3.8.12
python 1.py 3892ms 45ms 9.5MB 3877ms 0ms cpython 3.11.1
python 2.py 4470ms 72ms 9.1MB 4453ms 0ms cpython 3.11.1
nim 1.nim timeout 0.0ms 1.0MB 4990ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 1.3MB 4983ms 0ms nim/clang 1.6.10

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 63ms 0.2ms 1.3MB 50ms 0ms nim/clang 1.6.10
nim 2.nim 65ms 0.7ms 1.1MB 57ms 0ms nim 1.6.10
python 2.py 141ms 3.5ms 77.2MB 110ms 17ms pypy 3.9.16
python 1.py 171ms 15ms 78.2MB 140ms 13ms pypy 3.9.16
nim 1.nim 387ms 3.1ms 1.2MB 373ms 0ms nim/clang 1.6.10
nim 1.nim 465ms 40ms 1.0MB 447ms 0ms nim 1.6.10
python 1.py 476ms 3.0ms 8.7MB 460ms 0ms pyston 3.8.12
python 2.py 539ms 3.6ms 8.2MB 523ms 0ms pyston 3.8.12
python 1.py 619ms 4.0ms 8.9MB 607ms 0ms cpython 3.11.1
python 2.py 745ms 5.0ms 8.4MB 733ms 0ms cpython 3.11.1

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 656ms 0.5ms 4.6MB 647ms 0ms nim/clang 1.6.10
nim 1.nim 982ms 1.4ms 4.5MB 970ms 0ms nim 1.6.10

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 30ms 1.0ms 1.3MB 20ms 0ms nim/clang 1.6.10
nim 1.nim 43ms 0.5ms 1.1MB 30ms 0ms nim 1.6.10

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1003ms 8.6ms 34.3MB 983ms 3ms nim 1.6.10
nim 1.nim 1037ms 18ms 35.2MB 1013ms 7ms nim/clang 1.6.10
python 1.py 3586ms 375ms 292.5MB 3383ms 180ms pypy 3.9.16
python 1.py timeout 0.0ms 93.0MB 4947ms 33ms cpython 3.11.1
python 1.py timeout 0.0ms 130.3MB 4947ms 30ms pyston 3.8.12

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 213ms 1.3ms 9.3MB 197ms 0ms nim 1.6.10
nim 1.nim 222ms 1.4ms 9.5MB 210ms 0ms nim/clang 1.6.10
python 1.py 543ms 129ms 138.5MB 483ms 47ms pypy 3.9.16
python 1.py timeout 0.0ms 37.3MB 4967ms 17ms cpython 3.11.1
python 1.py timeout 0.0ms 41.4MB 4963ms 13ms pyston 3.8.12

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 381ms 0.4ms 1.3MB 370ms 0ms nim 1.6.10
nim 2.nim 412ms 3.2ms 1.3MB 403ms 0ms nim/clang 1.6.10
python 2.py 2692ms 149ms 77.4MB 2660ms 13ms pypy 3.9.16
python 1.py 3533ms 41ms 76.5MB 3500ms 17ms pypy 3.9.16
python 1.py timeout 0.0ms 8.4MB 4983ms 0ms cpython 3.11.1
python 2.py timeout 0.0ms 8.6MB 4990ms 0ms cpython 3.11.1
python 1.py timeout 0.0ms 8.4MB 4977ms 3ms pyston 3.8.12
python 2.py timeout 0.0ms 8.0MB 4990ms 0ms pyston 3.8.12

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 40ms 0.0ms 1.4MB 30ms 0ms nim 1.6.10
nim 2.nim 43ms 0.2ms 1.2MB 30ms 0ms nim/clang 1.6.10
python 2.py 305ms 26ms 77.0MB 277ms 10ms pypy 3.9.16
python 1.py 400ms 3.4ms 76.4MB 373ms 10ms pypy 3.9.16
python 1.py 1193ms 1.0ms 8.3MB 1180ms 0ms pyston 3.8.12
python 2.py 1636ms 28ms 7.9MB 1623ms 0ms pyston 3.8.12
python 2.py 3404ms 24ms 8.6MB 3393ms 0ms cpython 3.11.1
python 1.py 3437ms 149ms 8.4MB 3423ms 0ms cpython 3.11.1

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 574ms 11ms 40.6MB 553ms 0ms nim/clang 1.6.10
nim 1.nim 587ms 10ms 40.2MB 570ms 0ms nim 1.6.10
nim 2.nim 587ms 4.0ms 6.4MB 573ms 0ms nim/clang 1.6.10
nim 2.nim 667ms 5.2ms 6.2MB 657ms 0ms nim 1.6.10
python 1.py 4480ms 211ms 389.1MB 4330ms 133ms pypy 3.9.16
python 1.py timeout 0.0ms 321.1MB 4937ms 50ms cpython 3.11.1
python 2.py timeout 0.0ms 633.6MB 4690ms 293ms cpython 3.11.1
python 2.py timeout 0.0ms 1013.7MB 4620ms 360ms pypy 3.9.16
python 1.py timeout 0.0ms 320.5MB 4897ms 87ms pyston 3.8.12
python 2.py timeout 0.0ms 633.2MB 4577ms 403ms pyston 3.8.12

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 128ms 2.1ms 11.3MB 120ms 0ms nim/clang 1.6.10
nim 1.nim 128ms 0.4ms 11.1MB 120ms 0ms nim 1.6.10
nim 2.nim 138ms 0.3ms 3.2MB 130ms 0ms nim/clang 1.6.10
nim 2.nim 157ms 0.3ms 3.1MB 143ms 0ms nim 1.6.10
python 1.py 1085ms 58ms 213.2MB 1033ms 37ms pypy 3.9.16
python 2.py 1345ms 7.3ms 164.4MB 1253ms 70ms pyston 3.8.12
python 2.py 1668ms 7.8ms 164.8MB 1593ms 60ms cpython 3.11.1
python 1.py 1746ms 35ms 86.1MB 1713ms 20ms pyston 3.8.12
python 2.py 1769ms 128ms 266.8MB 1623ms 123ms pypy 3.9.16
python 1.py 2971ms 17ms 86.7MB 2933ms 20ms cpython 3.11.1

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 4.py 2780ms 3.4ms 9.1MB 2750ms 10ms pyston 3.8.12
python 4.py 2785ms 5.2ms 9.4MB 2753ms 20ms cpython 3.11.1
python 4.py 3067ms 120ms 117.1MB 3013ms 37ms pypy 3.9.16
nim 1.nim timeout 0.0ms 5.9MB 4987ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 6.1MB 4987ms 0ms nim/clang 1.6.10

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 4.py 658ms 0.4ms 8.8MB 643ms 0ms pyston 3.8.12
python 4.py 660ms 1.0ms 9.1MB 650ms 0ms cpython 3.11.1
python 4.py 776ms 32ms 81.6MB 747ms 13ms pypy 3.9.16
nim 1.nim timeout 0.0ms 5.9MB 4987ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 6.1MB 4990ms 0ms nim/clang 1.6.10

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 2490ms 1.9ms 168.2MB 2440ms 30ms nim/clang 1.6.10
nim 1.nim 2531ms 3.9ms 167.4MB 2480ms 33ms nim 1.6.10
python 1.py 3568ms 25ms 262.2MB 3440ms 110ms pypy 3.9.16
python 1.py timeout 0.0ms 108.4MB 4953ms 27ms cpython 3.11.1
python 1.py timeout 0.0ms 106.9MB 4930ms 50ms pyston 3.8.12

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 256ms 2.0ms 17.0MB 233ms 3ms nim/clang 1.6.10
nim 1.nim 260ms 2.1ms 16.8MB 247ms 0ms nim 1.6.10
python 1.py 501ms 2.5ms 100.6MB 457ms 27ms pypy 3.9.16
python 1.py 706ms 1.3ms 30.5MB 670ms 20ms pyston 3.8.12
python 1.py 828ms 1.2ms 31.9MB 793ms 17ms cpython 3.11.1

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 4118ms 2.6ms 1.3MB 4107ms 0ms nim/clang 1.6.10
nim 1.nim 4118ms 1.5ms 1.3MB 4107ms 0ms nim 1.6.10
python 8.py timeout 0.0ms 16.5MB 57ms 7ms cpython 3.11.1
python 8.py timeout 0.0ms 105.2MB 717ms 120ms pypy 3.9.16
python 8.py timeout 0.0ms 17.7MB 57ms 23ms pyston 3.8.12

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1031ms 0.1ms 1.2MB 1020ms 0ms nim/clang 1.6.10
nim 1.nim 1033ms 3.1ms 1.3MB 1020ms 0ms nim 1.6.10
python 8.py timeout 0.0ms 18.2MB 113ms 10ms cpython 3.11.1
python 8.py timeout 0.0ms 107.0MB 1267ms 210ms pypy 3.9.16
python 8.py timeout 0.0ms 17.2MB 160ms 20ms pyston 3.8.12

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 260ms 0.1ms 1.3MB 250ms 0ms nim 1.6.10
nim 1.nim 261ms 0.1ms 1.3MB 250ms 0ms nim/clang 1.6.10
python 8-m.py 3558ms 133ms 107.0MB 6063ms 373ms pypy 3.9.16
python 8.py timeout 0.0ms 15.9MB 243ms 30ms cpython 3.11.1
python 8.py timeout 0.0ms 17.1MB 357ms 73ms pyston 3.8.12