Ocaml VS Ruby benchmarks

Current benchmark data was generated on Wed May 25 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
ocaml 1.ml 4123ms 259ms 120.7MB 4060ms 43ms ocaml 4.14.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 285ms 2.1ms 17.4MB 267ms 3ms ocaml 4.14.0
ruby 1.rb 959ms 4.8ms 35.5MB 927ms 20ms ruby 3.1.2
ruby 1.rb 1007ms 63ms 292.1MB 833ms 157ms ruby/yjit 3.1.2
ruby 1-m.rb 1154ms 16ms 374.0MB 1910ms 153ms truffleruby 22.1.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 3161ms 11ms 2.6MB 3147ms 0ms ocaml 4.14.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 262ms 0.5ms 2.5MB 250ms 0ms ocaml 4.14.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 357ms 26ms 25.6MB 340ms 3ms ocaml 4.14.0
ruby 6.rb 2592ms 2.6ms 296.0MB 2430ms 143ms ruby/yjit 3.1.2
ruby 6.rb 4521ms 77ms 39.5MB 4483ms 23ms ruby 3.1.2
ruby 6.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 43ms 0.5ms 4.9MB 30ms 0ms ocaml 4.14.0
ruby 6.rb 520ms 7.9ms 31.2MB 493ms 13ms ruby 3.1.2
ruby 6.rb 534ms 1.0ms 287.7MB 367ms 147ms ruby/yjit 3.1.2
ruby 6-m.rb 1815ms 39ms 324.3MB 3240ms 147ms truffleruby 22.1.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 2.3ms 0.4ms 2.9MB 0ms 0ms ocaml 4.14.0
ruby 1.rb 47ms 1.2ms 138.4MB 20ms 30ms truffleruby 22.1.0
ruby 1.rb 68ms 3.3ms 29.9MB 46ms 8ms ruby 3.1.2
ruby 1.rb 255ms 11ms 286.7MB 106ms 136ms ruby/yjit 3.1.2

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 203ms 0.4ms 5.8MB 190ms 0ms ocaml 4.14.0
ruby 1.rb 601ms 3.2ms 30.2MB 573ms 13ms ruby 3.1.2
ruby 1.rb 668ms 1.4ms 286.7MB 507ms 147ms ruby/yjit 3.1.2
ruby 1-m.rb 1118ms 34ms 324.3MB 1683ms 130ms truffleruby 22.1.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 627ms 47ms 5.9MB 610ms 0ms ocaml 4.14.0
ruby 1.rb 1454ms 1.2ms 286.8MB 1283ms 153ms ruby/yjit 3.1.2
ruby 1.rb 1827ms 148ms 30.2MB 1800ms 10ms ruby 3.1.2
ruby 1-m.rb 1929ms 66ms 366.3MB 2780ms 180ms truffleruby 22.1.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 91ms 0.4ms 5.1MB 80ms 0ms ocaml 4.14.0
ruby 1.rb 334ms 0.5ms 30.0MB 313ms 3ms ruby 3.1.2
ruby 1.rb 419ms 1.1ms 286.8MB 280ms 123ms ruby/yjit 3.1.2
ruby 1-m.rb 801ms 86ms 311.0MB 1277ms 97ms truffleruby 22.1.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 1709ms 12ms 62.6MB 1673ms 17ms ocaml 4.14.0
ocaml 2.ml 2842ms 3.0ms 71.2MB 2803ms 20ms ocaml 4.14.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 205ms 0.5ms 18.6MB 180ms 10ms ocaml 4.14.0
ocaml 2.ml 460ms 5.6ms 25.2MB 440ms 3ms ocaml 4.14.0
ruby 1-m.rb 3899ms 12ms 522.4MB 7130ms 253ms truffleruby 22.1.0
ruby 1.rb 3919ms 269ms 300.9MB 3750ms 147ms ruby/yjit 3.1.2
ruby 1.rb 4824ms 19ms 44.4MB 4790ms 17ms ruby 3.1.2

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 526ms 39ms 2.4MB 513ms 0ms ocaml 4.14.0
ruby 2.rb 1453ms 19ms 300.6MB 1823ms 127ms truffleruby 22.1.0
ruby 2.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 2.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 59ms 0.6ms 2.6MB 50ms 0ms ocaml 4.14.0
ruby 2-m.rb 547ms 17ms 293.9MB 873ms 107ms truffleruby 22.1.0
ruby 2.rb 2300ms 157ms 286.8MB 2147ms 137ms ruby/yjit 3.1.2
ruby 2.rb 2985ms 224ms 30.0MB 2960ms 10ms ruby 3.1.2

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 2591ms 2.3ms 19.8MB 2577ms 3ms ocaml 4.14.0
ocaml 1.ml 3328ms 22ms 555.2MB 3160ms 150ms ocaml 4.14.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 612ms 2.4ms 8.9MB 593ms 0ms ocaml 4.14.0
ocaml 1.ml 678ms 11ms 142.5MB 630ms 30ms ocaml 4.14.0
ruby 1.rb 4255ms 11ms 450.1MB 4693ms 197ms truffleruby 22.1.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
ocaml 2.ml 667ms 1.2ms 50.3MB 630ms 20ms ocaml 4.14.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml timeout 0.0ms 0.0MB 0ms 0ms ocaml 4.14.0
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 1344ms 0.8ms 3.4MB 1330ms 0ms ocaml 4.14.0
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 385ms 0.1ms 3.1MB 373ms 0ms ocaml 4.14.0
ruby 4.rb 2702ms 3.9ms 365.9MB 3373ms 150ms truffleruby 22.1.0
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2