Nim VS OCaml benchmarks

Current benchmark data was generated on Sun Jan 29 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 1938ms 2.8ms 35.0MB 1920ms 3ms nim 1.6.10
nim 2.nim 2100ms 32ms 35.2MB 2080ms 3ms nim/clang 1.6.10
ocaml 1.ml 4932ms 8.7ms 153.4MB 4857ms 60ms ocaml 5.0.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 186ms 2.3ms 5.5MB 170ms 0ms nim 1.6.10
nim 2.nim 199ms 5.2ms 5.7MB 183ms 0ms nim/clang 1.6.10
ocaml 1.ml 346ms 2.9ms 22.9MB 330ms 0ms ocaml 5.0.0

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.4MB 3303ms 1340ms nim 1.6.10
nim 1.nim timeout 0.0ms 427.7MB 3400ms 1247ms 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 425.1MB 3457ms 1193ms nim 1.6.10
nim 1.nim timeout 0.0ms 427.4MB 3410ms 1237ms 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.1MB 4987ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 3.0MB 4983ms 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 4987ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 2.2MB 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 269ms 0.5ms 1.1MB 260ms 0ms nim 1.6.10
nim 2.nim 335ms 0.5ms 1.3MB 323ms 0ms nim/clang 1.6.10
ocaml 6.ml 422ms 0.6ms 22.7MB 407ms 0ms ocaml 5.0.0
nim 1.nim 771ms 2.9ms 1.1MB 663ms 90ms nim 1.6.10
nim 1.nim 796ms 0.7ms 1.3MB 693ms 87ms nim/clang 1.6.10

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 29ms 0.9ms 1.0MB 20ms 0ms nim 1.6.10
nim 2.nim 36ms 0.4ms 1.3MB 30ms 0ms nim/clang 1.6.10
ocaml 6.ml 46ms 0.8ms 4.8MB 40ms 0ms ocaml 5.0.0
nim 1.nim 81ms 2.9ms 1.0MB 57ms 10ms nim 1.6.10
nim 1.nim 83ms 1.2ms 1.2MB 63ms 3ms nim/clang 1.6.10

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1.2ms 0.2ms 1.0MB 0ms 0ms nim 1.6.10
nim 1.nim 2.0ms 0.4ms 1.3MB 0ms 0ms nim/clang 1.6.10
ocaml 1.ml 2.5ms 0.8ms 2.8MB 0ms 0ms ocaml 5.0.0

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 725ms 4.3ms 93.6MB 280ms 417ms nim/clang 1.6.10
nim 1.nim 731ms 3.4ms 94.6MB 310ms 390ms nim 1.6.10

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 123ms 0.8ms 18.7MB 53ms 57ms nim/clang 1.6.10
nim 1.nim 125ms 0.5ms 18.2MB 53ms 57ms 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 145ms 0.9ms 1.3MB 137ms 0ms nim/clang 1.6.10
nim 2.nim 152ms 0.5ms 1.0MB 140ms 0ms nim 1.6.10
ocaml 1.ml 261ms 2.5ms 6.8MB 250ms 0ms ocaml 5.0.0
nim 1.nim timeout 0.0ms 1.1MB 4987ms 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 0.9ms 1.2MB 420ms 0ms nim/clang 1.6.10
nim 2.nim 448ms 0.4ms 1.1MB 440ms 0ms nim 1.6.10
ocaml 1.ml 768ms 0.5ms 6.8MB 760ms 0ms ocaml 5.0.0
nim 1.nim timeout 0.0ms 1.0MB 4987ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 1.3MB 4990ms 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 64ms 1.3ms 1.2MB 53ms 0ms nim/clang 1.6.10
nim 2.nim 65ms 1.8ms 1.0MB 57ms 0ms nim 1.6.10
ocaml 1.ml 116ms 1.2ms 6.0MB 110ms 0ms ocaml 5.0.0
nim 1.nim 390ms 2.5ms 1.2MB 380ms 0ms nim/clang 1.6.10
nim 1.nim 442ms 4.8ms 1.1MB 433ms 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.1ms 4.8MB 647ms 0ms nim/clang 1.6.10
nim 1.nim 983ms 0.7ms 4.6MB 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 0.4ms 1.2MB 20ms 0ms nim/clang 1.6.10
nim 1.nim 43ms 0.2ms 1.0MB 33ms 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 998ms 1.8ms 34.7MB 977ms 7ms nim 1.6.10
nim 1.nim 1034ms 9.1ms 34.9MB 1013ms 7ms nim/clang 1.6.10
ocaml 1.ml 1554ms 4.5ms 69.1MB 1510ms 23ms ocaml 5.0.0
ocaml 2.ml 3269ms 59ms 74.3MB 3220ms 37ms ocaml 5.0.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 213ms 0.3ms 9.3MB 200ms 0ms nim 1.6.10
nim 1.nim 221ms 0.9ms 9.5MB 207ms 0ms nim/clang 1.6.10
ocaml 1.ml 229ms 1.2ms 25.6MB 213ms 7ms ocaml 5.0.0
ocaml 2.ml 579ms 2.5ms 30.1MB 557ms 0ms ocaml 5.0.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 383ms 1.7ms 1.4MB 370ms 0ms nim 1.6.10
nim 2.nim 411ms 1.3ms 1.3MB 400ms 0ms nim/clang 1.6.10
ocaml 1.ml 469ms 0.4ms 2.9MB 460ms 0ms ocaml 5.0.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 40ms 0.1ms 1.3MB 30ms 0ms nim 1.6.10
nim 2.nim 43ms 0.1ms 1.3MB 33ms 0ms nim/clang 1.6.10
ocaml 1.ml 50ms 0.3ms 3.5MB 40ms 0ms ocaml 5.0.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 593ms 1.9ms 6.3MB 580ms 0ms nim/clang 1.6.10
nim 1.nim 643ms 17ms 40.2MB 623ms 0ms nim 1.6.10
nim 1.nim 648ms 14ms 41.1MB 627ms 7ms nim/clang 1.6.10
nim 2.nim 669ms 1.1ms 6.0MB 657ms 0ms nim 1.6.10
ocaml 1.ml 1997ms 3.1ms 550.5MB 1863ms 113ms ocaml 5.0.0
ocaml 2.ml 2386ms 11ms 19.0MB 2367ms 3ms ocaml 5.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 127ms 0.3ms 11.3MB 120ms 0ms nim/clang 1.6.10
nim 1.nim 129ms 3.0ms 11.1MB 117ms 0ms nim 1.6.10
nim 2.nim 138ms 0.6ms 3.3MB 130ms 0ms nim/clang 1.6.10
nim 2.nim 157ms 1.5ms 3.1MB 143ms 0ms nim 1.6.10
ocaml 1.ml 387ms 13ms 140.4MB 350ms 27ms ocaml 5.0.0
ocaml 2.ml 579ms 0.8ms 9.1MB 567ms 0ms ocaml 5.0.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim timeout 0.0ms 5.9MB 4987ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 6.1MB 4983ms 3ms nim/clang 1.6.10

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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 2494ms 7.5ms 167.6MB 2440ms 37ms nim/clang 1.6.10
nim 1.nim 2531ms 4.5ms 167.1MB 2477ms 37ms nim 1.6.10
ocaml 2.ml timeout 0.0ms 181.9MB 4923ms 53ms ocaml 5.0.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 256ms 1.6ms 17.0MB 240ms 0ms nim/clang 1.6.10
nim 1.nim 261ms 2.6ms 16.9MB 243ms 3ms nim 1.6.10
ocaml 2.ml 719ms 5.1ms 52.5MB 677ms 20ms ocaml 5.0.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 4118ms 0.9ms 1.3MB 4110ms 0ms nim/clang 1.6.10
nim 1.nim 4119ms 0.1ms 1.3MB 4107ms 0ms nim 1.6.10
ocaml 2.ml timeout 0.0ms 4.1MB 4987ms 0ms ocaml 5.0.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1031ms 0.3ms 1.3MB 1020ms 0ms nim/clang 1.6.10
nim 1.nim 1032ms 1.1ms 1.3MB 1020ms 0ms nim 1.6.10
ocaml 2.ml 1633ms 0.1ms 3.6MB 1623ms 0ms ocaml 5.0.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 259ms 0.1ms 1.3MB 250ms 0ms nim/clang 1.6.10
nim 1.nim 260ms 0.4ms 1.3MB 250ms 0ms nim 1.6.10
ocaml 2.ml 411ms 0.7ms 3.3MB 400ms 0ms ocaml 5.0.0