OCaml VS Nim benchmarks

Current benchmark data was generated on Thu May 04 2023, 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 2139ms 5.2ms 34.7MB 2123ms 0ms nim 1.6.12
nim 2.nim 2145ms 6.8ms 35.1MB 2117ms 13ms nim/clang 1.6.12
ocaml 1.ml timeout 0.0ms 145.4MB 4903ms 73ms ocaml 5.0.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 202ms 0.6ms 5.5MB 190ms 0ms nim 1.6.12
nim 2.nim 207ms 3.8ms 5.7MB 190ms 0ms nim/clang 1.6.12
ocaml 1.ml 359ms 8.8ms 22.9MB 337ms 7ms ocaml 5.0.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 3637ms 2.2ms 2.7MB 3620ms 0ms ocaml 5.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 303ms 0.9ms 2.8MB 290ms 0ms ocaml 5.0.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 242ms 0.7ms 1.0MB 230ms 0ms nim 1.6.12
nim 2.nim 308ms 0.5ms 1.2MB 290ms 0ms nim/clang 1.6.12
ocaml 6.ml 387ms 4.7ms 22.7MB 360ms 7ms ocaml 5.0.0
nim 1.nim 693ms 3.9ms 1.3MB 603ms 77ms nim/clang 1.6.12
nim 1.nim 712ms 8.1ms 1.0MB 620ms 73ms nim 1.6.12

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 27ms 0.3ms 1.0MB 20ms 0ms nim 1.6.12
nim 2.nim 34ms 1.1ms 1.2MB 20ms 0ms nim/clang 1.6.12
ocaml 6.ml 42ms 0.4ms 4.9MB 30ms 0ms ocaml 5.0.0
nim 1.nim 71ms 0.0ms 1.2MB 57ms 0ms nim/clang 1.6.12
nim 1.nim 74ms 0.5ms 1.0MB 53ms 3ms nim 1.6.12

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1.7ms 0.7ms 1.0MB 0ms 0ms nim 1.6.12
nim 1.nim 1.9ms 0.9ms 1.2MB 0ms 0ms nim/clang 1.6.12
ocaml 1.ml 2.9ms 0.5ms 2.7MB 0ms 0ms ocaml 5.0.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 149ms 0.2ms 1.3MB 140ms 0ms nim/clang 1.6.12
nim 2.nim 153ms 0.7ms 1.0MB 140ms 0ms nim 1.6.12
ocaml 1.ml 250ms 4.9ms 6.7MB 240ms 0ms ocaml 5.0.0
nim 1.nim timeout 0.0ms 1.0MB 4990ms 0ms nim 1.6.12
nim 1.nim timeout 0.0ms 1.2MB 4987ms 0ms nim/clang 1.6.12

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 441ms 0.9ms 1.2MB 430ms 0ms nim/clang 1.6.12
nim 2.nim 454ms 4.3ms 1.0MB 440ms 0ms nim 1.6.12
ocaml 1.ml 727ms 1.6ms 6.7MB 717ms 0ms ocaml 5.0.0
nim 1.nim timeout 0.0ms 1.1MB 4987ms 0ms nim 1.6.12
nim 1.nim timeout 0.0ms 1.3MB 4983ms 0ms nim/clang 1.6.12

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 66ms 0.2ms 1.2MB 57ms 0ms nim/clang 1.6.12
nim 2.nim 66ms 0.2ms 1.0MB 57ms 0ms nim 1.6.12
ocaml 1.ml 110ms 0.4ms 6.0MB 93ms 0ms ocaml 5.0.0
nim 1.nim 388ms 2.0ms 1.2MB 377ms 0ms nim/clang 1.6.12
nim 1.nim 416ms 1.7ms 1.0MB 400ms 0ms nim 1.6.12

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1082ms 4.0ms 34.1MB 1060ms 7ms nim/clang 1.6.12
nim 1.nim 1097ms 3.3ms 34.3MB 1073ms 7ms nim 1.6.12
ocaml 1.ml 1931ms 14ms 69.1MB 1880ms 30ms ocaml 5.0.0
ocaml 2.ml 3617ms 28ms 74.2MB 3557ms 43ms ocaml 5.0.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 231ms 0.7ms 9.5MB 220ms 0ms nim/clang 1.6.12
nim 1.nim 233ms 1.6ms 9.3MB 217ms 0ms nim 1.6.12
ocaml 1.ml 275ms 3.8ms 25.6MB 253ms 3ms ocaml 5.0.0
ocaml 2.ml 629ms 19ms 30.1MB 610ms 7ms ocaml 5.0.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 401ms 1.0ms 1.2MB 390ms 0ms nim/clang 1.6.12
nim 2.nim 404ms 1.6ms 1.4MB 390ms 0ms nim 1.6.12
ocaml 1.ml 546ms 8.2ms 2.9MB 533ms 0ms ocaml 5.0.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 42ms 0.7ms 1.3MB 30ms 0ms nim 1.6.12
nim 2.nim 46ms 2.5ms 1.3MB 33ms 0ms nim/clang 1.6.12
ocaml 1.ml 59ms 0.7ms 2.8MB 50ms 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 667ms 1.4ms 6.4MB 650ms 0ms nim/clang 1.6.12
nim 2.nim 845ms 1.2ms 6.3MB 833ms 0ms nim 1.6.12
nim 1.nim 1190ms 16ms 40.4MB 1167ms 10ms nim 1.6.12
nim 1.nim 1455ms 3.6ms 40.8MB 1427ms 10ms nim/clang 1.6.12
ocaml 2.ml 2718ms 31ms 19.1MB 2703ms 0ms ocaml 5.0.0
ocaml 1.ml 3571ms 30ms 550.6MB 3400ms 157ms ocaml 5.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 131ms 2.3ms 11.3MB 117ms 0ms nim/clang 1.6.12
nim 1.nim 137ms 1.0ms 11.1MB 120ms 0ms nim 1.6.12
nim 2.nim 152ms 0.5ms 3.3MB 140ms 0ms nim/clang 1.6.12
nim 2.nim 198ms 0.4ms 3.1MB 190ms 0ms nim 1.6.12
ocaml 2.ml 640ms 4.4ms 9.3MB 627ms 0ms ocaml 5.0.0
ocaml 1.ml 763ms 24ms 140.2MB 713ms 30ms ocaml 5.0.0

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 2448ms 8.6ms 167.7MB 2377ms 53ms nim/clang 1.6.12
nim 1.nim 2491ms 4.7ms 167.2MB 2417ms 53ms nim 1.6.12
ocaml 2.ml timeout 0.0ms 181.9MB 4887ms 90ms ocaml 5.0.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 250ms 1.4ms 17.1MB 233ms 3ms nim/clang 1.6.12
nim 1.nim 254ms 3.0ms 16.7MB 230ms 7ms nim 1.6.12
ocaml 2.ml 715ms 2.6ms 52.5MB 673ms 27ms 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 3435ms 3.3ms 2.0MB 3423ms 0ms nim/clang 1.6.12
nim 1.nim 3437ms 3.2ms 1.3MB 3423ms 0ms nim 1.6.12
ocaml 2.ml timeout 0.0ms 4.2MB 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 861ms 0.3ms 1.2MB 850ms 0ms nim/clang 1.6.12
nim 1.nim 862ms 1.8ms 1.4MB 850ms 0ms nim 1.6.12
ocaml 2.ml 1540ms 14ms 3.5MB 1527ms 0ms ocaml 5.0.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 219ms 0.8ms 1.3MB 210ms 0ms nim 1.6.12
nim 1.nim 219ms 2.6ms 1.3MB 210ms 0ms nim/clang 1.6.12
ocaml 2.ml 394ms 0.4ms 3.3MB 380ms 0ms ocaml 5.0.0