OCaml VS Nim benchmarks

Current benchmark data was generated on Fri Sep 30 2022, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz (Model 85)

* -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 3223ms 17ms 33.9MB 3200ms 3ms nim 1.6.8
nim 2.nim 3325ms 6.9ms 34.9MB 3293ms 10ms nim/clang 1.6.8
ocaml 1.ml 4394ms 23ms 120.7MB 4350ms 23ms ocaml 4.14.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 284ms 2.7ms 17.4MB 263ms 3ms ocaml 4.14.0
nim 2.nim 307ms 5.2ms 5.5MB 293ms 0ms nim 1.6.8
nim 2.nim 313ms 1.4ms 5.7MB 300ms 0ms nim/clang 1.6.8

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 3576ms 2.8ms 2.6MB 3560ms 0ms ocaml 4.14.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 299ms 0.6ms 2.5MB 290ms 0ms ocaml 4.14.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 241ms 0.8ms 0.7MB 230ms 0ms nim 1.6.8
nim 2.nim 295ms 0.4ms 1.0MB 283ms 0ms nim/clang 1.6.8
ocaml 6.ml 387ms 0.8ms 24.5MB 370ms 0ms ocaml 4.14.0
nim 1.nim 719ms 5.4ms 0.7MB 643ms 57ms nim 1.6.8
nim 1.nim 728ms 0.4ms 1.0MB 637ms 73ms nim/clang 1.6.8

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 27ms 1.0ms 0.7MB 20ms 0ms nim 1.6.8
nim 2.nim 33ms 0.4ms 1.0MB 20ms 0ms nim/clang 1.6.8
ocaml 6.ml 47ms 3.7ms 5.7MB 33ms 0ms ocaml 4.14.0
nim 1.nim 75ms 0.6ms 1.6MB 57ms 0ms nim 1.6.8
nim 1.nim 76ms 1.1ms 1.0MB 60ms 3ms nim/clang 1.6.8

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 2.0ms 0.7ms 0.9MB 0ms 0ms nim/clang 1.6.8
ocaml 1.ml 2.2ms 0.7ms 2.9MB 0ms 0ms ocaml 4.14.0
nim 1.nim 2.3ms 0.8ms 0.7MB 0ms 0ms nim 1.6.8

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 149ms 0.3ms 0.9MB 140ms 0ms nim/clang 1.6.8
nim 2.nim 160ms 0.9ms 0.7MB 150ms 0ms nim 1.6.8
ocaml 1.ml 231ms 0.7ms 5.9MB 213ms 0ms ocaml 4.14.0
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.8
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.8

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 440ms 1.1ms 0.9MB 430ms 0ms nim/clang 1.6.8
nim 2.nim 470ms 0.5ms 0.7MB 460ms 0ms nim 1.6.8
ocaml 1.ml 679ms 0.5ms 5.8MB 667ms 0ms ocaml 4.14.0
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.8
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.8

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 65ms 0.4ms 0.9MB 53ms 0ms nim/clang 1.6.8
nim 2.nim 69ms 0.6ms 0.7MB 60ms 0ms nim 1.6.8
ocaml 1.ml 102ms 0.9ms 5.2MB 90ms 0ms ocaml 4.14.0
nim 1.nim 442ms 1.7ms 0.6MB 430ms 0ms nim 1.6.8
nim 1.nim 486ms 3.6ms 1.0MB 470ms 0ms nim/clang 1.6.8

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1563ms 17ms 34.9MB 1533ms 10ms nim 1.6.8
nim 1.nim 1583ms 3.0ms 34.7MB 1557ms 10ms nim/clang 1.6.8
ocaml 1.ml 1706ms 12ms 62.7MB 1653ms 33ms ocaml 4.14.0
ocaml 2.ml 2834ms 23ms 70.4MB 2790ms 27ms ocaml 4.14.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 204ms 2.4ms 18.7MB 180ms 3ms ocaml 4.14.0
nim 1.nim 332ms 1.0ms 9.3MB 320ms 0ms nim 1.6.8
nim 1.nim 339ms 1.0ms 9.5MB 323ms 0ms nim/clang 1.6.8
ocaml 2.ml 458ms 4.5ms 23.6MB 437ms 7ms ocaml 4.14.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 435ms 1.3ms 0.9MB 420ms 0ms nim 1.6.8
nim 2.nim 439ms 18ms 1.0MB 427ms 0ms nim/clang 1.6.8
ocaml 1.ml 549ms 0.6ms 2.4MB 540ms 0ms ocaml 4.14.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 47ms 1.1ms 0.9MB 40ms 0ms nim/clang 1.6.8
nim 2.nim 48ms 1.9ms 0.9MB 40ms 0ms nim 1.6.8
ocaml 1.ml 59ms 0.7ms 2.6MB 50ms 0ms ocaml 4.14.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 661ms 0.8ms 6.7MB 640ms 0ms nim/clang 1.6.8
nim 2.nim 830ms 0.4ms 6.4MB 815ms 0ms nim 1.6.8
nim 1.nim 1068ms 24ms 40.3MB 1047ms 10ms nim 1.6.8
nim 1.nim 1155ms 61ms 41.2MB 1137ms 0ms nim/clang 1.6.8
ocaml 2.ml 2573ms 9.8ms 21.6MB 2553ms 3ms ocaml 4.14.0
ocaml 1.ml 3310ms 2.4ms 555.8MB 3143ms 147ms ocaml 4.14.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 129ms 1.4ms 11.0MB 120ms 0ms nim 1.6.8
nim 1.nim 131ms 0.7ms 11.4MB 120ms 0ms nim/clang 1.6.8
nim 2.nim 151ms 0.4ms 3.2MB 140ms 0ms nim/clang 1.6.8
nim 2.nim 197ms 0.6ms 2.9MB 190ms 0ms nim 1.6.8
ocaml 2.ml 608ms 1.5ms 9.0MB 593ms 0ms ocaml 4.14.0
ocaml 1.ml 671ms 10ms 142.5MB 617ms 37ms ocaml 4.14.0

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 2476ms 24ms 167.8MB 2413ms 47ms nim/clang 1.6.8
nim 1.nim 2525ms 3.5ms 167.5MB 2460ms 47ms nim 1.6.8
ocaml 2.ml timeout 0.0ms 0.0MB 0ms 0ms ocaml 4.14.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 249ms 2.1ms 17.1MB 230ms 3ms nim/clang 1.6.8
nim 1.nim 255ms 2.0ms 16.6MB 237ms 0ms nim 1.6.8
ocaml 2.ml 666ms 3.8ms 50.7MB 637ms 17ms ocaml 4.14.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 3433ms 0.9ms 1.8MB 3420ms 0ms nim/clang 1.6.8
nim 1.nim 3434ms 1.1ms 1.8MB 3420ms 0ms nim 1.6.8
ocaml 2.ml timeout 0.0ms 0.0MB 0ms 0ms ocaml 4.14.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 860ms 0.0ms 0.9MB 847ms 0ms nim/clang 1.6.8
nim 1.nim 861ms 0.3ms 0.9MB 850ms 0ms nim 1.6.8
ocaml 2.ml 1522ms 0.9ms 3.4MB 1510ms 0ms ocaml 4.14.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 218ms 0.2ms 1.0MB 207ms 0ms nim/clang 1.6.8
nim 1.nim 218ms 0.6ms 2.2MB 210ms 0ms nim 1.6.8
ocaml 2.ml 386ms 3.1ms 3.0MB 370ms 0ms ocaml 4.14.0