Nim VS Julia 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
julia 4.jl 1087ms 3.4ms 239.5MB 1010ms 153ms julia 1.8.5
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

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
julia 4.jl 307ms 3.7ms 225.8MB 247ms 140ms julia 1.8.5

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
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
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
julia 7-m.jl 624ms 7.1ms 298.7MB 857ms 147ms julia 1.8.5
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

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
julia 7.jl 452ms 0.1ms 222.8MB 543ms 113ms julia 1.8.5

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
julia 1.jl 181ms 7.2ms 167.3MB 124ms 62ms julia/aot 1.8.5
julia 1.jl 192ms 1.3ms 171.1MB 118ms 90ms julia 1.8.5

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

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

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
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
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
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

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

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

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
julia 7.jl 548ms 2.6ms 168.3MB 510ms 110ms julia/aot 1.8.5
julia 7.jl 704ms 4.6ms 223.7MB 650ms 127ms julia 1.8.5

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
julia 7.jl 244ms 1.8ms 168.0MB 217ms 97ms julia/aot 1.8.5
julia 7.jl 390ms 5.7ms 228.4MB 370ms 100ms julia 1.8.5

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
julia 1.jl 423ms 2.7ms 156.6MB 393ms 103ms julia/aot 1.8.5
julia 1.jl 536ms 6.8ms 202.9MB 493ms 113ms julia 1.8.5
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

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
julia 1.jl 220ms 6.3ms 150.0MB 170ms 90ms julia/aot 1.8.5
julia 1.jl 326ms 0.8ms 196.8MB 283ms 117ms julia 1.8.5

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
julia 3.jl 787ms 3.7ms 177.6MB 747ms 120ms julia 1.8.5
julia 1.jl 1376ms 7.8ms 262.4MB 1283ms 167ms julia 1.8.5
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
julia 3.jl 348ms 5.3ms 176.1MB 303ms 123ms julia 1.8.5
julia 1.jl 783ms 32ms 261.5MB 710ms 137ms julia 1.8.5
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

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

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
julia 2-m.jl 1364ms 5.8ms 193.7MB 2393ms 117ms julia 1.8.5
julia 3-m.jl 2101ms 0.8ms 211.4MB 3773ms 133ms julia 1.8.5
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

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
julia 2-m.jl 578ms 1.9ms 194.3MB 860ms 107ms julia 1.8.5
julia 3-m.jl 805ms 4.7ms 209.2MB 1213ms 133ms julia 1.8.5
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

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
julia 2-m.jl 379ms 1.7ms 192.1MB 473ms 100ms julia 1.8.5
julia 3.jl 473ms 1.7ms 209.3MB 597ms 110ms julia 1.8.5