OCaml VS Go 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
go 1.go 3836ms 4.3ms 43.9MB 5480ms 57ms go 1.20.4
go 1.go 4878ms 33ms 51.4MB 4847ms 13ms tinygo 0.27.0
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
go 1.go 322ms 1.5ms 8.0MB 410ms 10ms go 1.20.4
ocaml 1.ml 359ms 8.8ms 22.9MB 337ms 7ms ocaml 5.0.0
go 1.go 462ms 3.0ms 6.6MB 450ms 0ms tinygo 0.27.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 1201ms 4.2ms 4.9MB 2313ms 3ms go 1.20.4
go 3.go 2771ms 0.9ms 50.1MB 2747ms 10ms tinygo 0.27.0
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
go 3.go 126ms 1.2ms 2.9MB 183ms 0ms go 1.20.4
ocaml 2.ml 303ms 0.9ms 2.8MB 290ms 0ms ocaml 5.0.0
go 3.go 377ms 1.0ms 48.6MB 357ms 7ms tinygo 0.27.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 208ms 1.9ms 2.9MB 363ms 3ms go 1.20.4
ocaml 6.ml 387ms 4.7ms 22.7MB 360ms 7ms ocaml 5.0.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 30ms 1.9ms 2.9MB 30ms 0ms go 1.20.4
ocaml 6.ml 42ms 0.4ms 4.9MB 30ms 0ms ocaml 5.0.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 1.4ms 0.6ms 0.0MB 0ms 0ms tinygo 0.27.0
ocaml 1.ml 2.9ms 0.5ms 2.7MB 0ms 0ms ocaml 5.0.0
go 1.go 2.9ms 0.9ms 2.9MB 0ms 0ms go 1.20.4

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 167ms 0.6ms 2.0MB 157ms 0ms tinygo 0.27.0
go 3.go 174ms 8.9ms 3.4MB 153ms 0ms go 1.20.4
ocaml 1.ml 250ms 4.9ms 6.7MB 240ms 0ms ocaml 5.0.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 491ms 1.8ms 3.4MB 480ms 0ms go 1.20.4
go 3.go 491ms 0.5ms 0.4MB 480ms 0ms tinygo 0.27.0
ocaml 1.ml 727ms 1.6ms 6.7MB 717ms 0ms ocaml 5.0.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 81ms 0.5ms 0.0MB 70ms 0ms tinygo 0.27.0
go 3.go 93ms 11ms 3.9MB 80ms 0ms go 1.20.4
ocaml 1.ml 110ms 0.4ms 6.0MB 93ms 0ms ocaml 5.0.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 1931ms 14ms 69.1MB 1880ms 30ms ocaml 5.0.0
go 1.go 2296ms 34ms 37.6MB 3233ms 50ms go 1.20.4
go 2.go 2560ms 11ms 39.8MB 3657ms 60ms go 1.20.4
ocaml 2.ml 3617ms 28ms 74.2MB 3557ms 43ms ocaml 5.0.0
go 1.go timeout 0.0ms 68.6MB 4967ms 13ms tinygo 0.27.0
go 2.go timeout 0.0ms 120.8MB 4960ms 20ms tinygo 0.27.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 275ms 3.8ms 25.6MB 253ms 3ms ocaml 5.0.0
go 1.go 480ms 9.0ms 12.1MB 653ms 13ms go 1.20.4
go 2.go 526ms 2.9ms 14.3MB 727ms 10ms go 1.20.4
ocaml 2.ml 629ms 19ms 30.1MB 610ms 7ms ocaml 5.0.0
go 1.go 787ms 2.6ms 23.1MB 763ms 3ms tinygo 0.27.0
go 2.go 1102ms 3.5ms 38.9MB 1080ms 7ms tinygo 0.27.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 459ms 12ms 2.0MB 447ms 0ms tinygo 0.27.0
go 1.go 494ms 2.3ms 2.9MB 480ms 0ms go 1.20.4
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
go 1.go 49ms 0.8ms 2.0MB 40ms 0ms tinygo 0.27.0
go 1.go 55ms 2.8ms 2.9MB 43ms 0ms go 1.20.4
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
go 2.go 744ms 0.8ms 17.4MB 730ms 0ms tinygo 0.27.0
go 2.go 925ms 3.2ms 21.8MB 907ms 7ms go 1.20.4
go 1.go 1116ms 85ms 72.5MB 1090ms 13ms go 1.20.4
go 1.go 1506ms 100ms 42.8MB 1480ms 7ms tinygo 0.27.0
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
go 1.go 133ms 2.2ms 21.5MB 110ms 10ms go 1.20.4
go 1.go 155ms 9.7ms 13.6MB 140ms 0ms tinygo 0.27.0
go 2.go 177ms 1.6ms 5.1MB 160ms 0ms tinygo 0.27.0
go 2.go 213ms 2.3ms 7.5MB 203ms 0ms go 1.20.4
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
go 3.go timeout 0.0ms 113.6MB 4960ms 93ms go 1.20.4
go 3.go timeout 0.0ms 104.0MB 4947ms 30ms tinygo 0.27.0
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
ocaml 2.ml 715ms 2.6ms 52.5MB 673ms 27ms ocaml 5.0.0
go 3.go 2459ms 2.8ms 18.8MB 2430ms 30ms go 1.20.4
go 3.go 3354ms 2.7ms 30.0MB 3330ms 7ms tinygo 0.27.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 2226ms 29ms 4.9MB 4297ms 3ms go 1.20.4
go 1.go 4332ms 1.0ms 5.5MB 4323ms 0ms go 1.20.4
go 1.go timeout 0.0ms 0.4MB 4987ms 0ms tinygo 0.27.0
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
go 4-m.go 566ms 1.0ms 2.9MB 1067ms 0ms go 1.20.4
go 1.go 1088ms 2.9ms 2.9MB 1077ms 0ms go 1.20.4
ocaml 2.ml 1540ms 14ms 3.5MB 1527ms 0ms ocaml 5.0.0
go 1.go timeout 0.0ms 0.0MB 4983ms 0ms tinygo 0.27.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 151ms 0.7ms 2.9MB 263ms 0ms go 1.20.4
go 1.go 276ms 1.8ms 2.9MB 263ms 0ms go 1.20.4
ocaml 2.ml 394ms 0.4ms 3.3MB 380ms 0ms ocaml 5.0.0
go 1.go 1624ms 0.6ms 0.0MB 1610ms 0ms tinygo 0.27.0