OCaml VS Go benchmarks

Current benchmark data was generated on Sat Jan 28 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
go 1.go 3021ms 13ms 47.5MB 4350ms 33ms go 1.19.5
go 1.go 3856ms 10ms 38.6MB 3840ms 3ms tinygo 0.25.0
ocaml 1.ml 4918ms 27ms 153.4MB 4853ms 47ms ocaml 5.0.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 265ms 1.5ms 9.9MB 340ms 0ms go 1.19.5
ocaml 1.ml 343ms 1.5ms 22.9MB 327ms 3ms ocaml 5.0.0
go 1.go 348ms 1.9ms 6.9MB 337ms 0ms tinygo 0.25.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 1413ms 29ms 5.0MB 2707ms 0ms go 1.19.5
go 3.go 2936ms 4.8ms 49.9MB 2917ms 3ms tinygo 0.25.0
ocaml 2.ml 3975ms 4.3ms 2.8MB 3963ms 0ms ocaml 5.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 142ms 2.3ms 5.0MB 220ms 0ms go 1.19.5
go 3.go 314ms 5.9ms 47.6MB 297ms 3ms tinygo 0.25.0
ocaml 2.ml 330ms 1.2ms 2.9MB 320ms 0ms ocaml 5.0.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 251ms 1.7ms 2.9MB 453ms 0ms go 1.19.5
ocaml 6.ml 421ms 0.7ms 22.7MB 403ms 0ms ocaml 5.0.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 32ms 0.1ms 2.9MB 40ms 0ms go 1.19.5
ocaml 6.ml 46ms 0.5ms 4.9MB 33ms 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 2.0ms 1.3ms 0.0MB 0ms 0ms tinygo 0.25.0
ocaml 1.ml 2.5ms 0.7ms 2.9MB 0ms 0ms ocaml 5.0.0
go 1.go 2.6ms 0.5ms 2.9MB 0ms 0ms go 1.19.5

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 167ms 3.1ms 2.0MB 160ms 0ms tinygo 0.25.0
go 3.go 174ms 2.3ms 3.4MB 163ms 0ms go 1.19.5
ocaml 1.ml 259ms 0.2ms 6.8MB 250ms 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 494ms 6.0ms 0.3MB 483ms 0ms tinygo 0.25.0
go 3.go 518ms 5.6ms 3.4MB 503ms 0ms go 1.19.5
ocaml 1.ml 769ms 4.3ms 6.8MB 757ms 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 83ms 2.9ms 0.0MB 70ms 0ms tinygo 0.25.0
go 3.go 94ms 2.2ms 3.9MB 80ms 0ms go 1.19.5
ocaml 1.ml 115ms 0.5ms 5.9MB 107ms 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 1528ms 14ms 69.1MB 1497ms 13ms ocaml 5.0.0
go 1.go 1950ms 5.8ms 38.1MB 2750ms 33ms go 1.19.5
go 2.go 2283ms 38ms 42.2MB 3207ms 57ms go 1.19.5
ocaml 2.ml 3201ms 10ms 74.3MB 3160ms 27ms ocaml 5.0.0
go 1.go 3802ms 8.7ms 212.8MB 3753ms 33ms tinygo 0.25.0
go 2.go timeout 0.0ms 90.6MB 4980ms 7ms tinygo 0.25.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 223ms 0.9ms 25.6MB 207ms 3ms ocaml 5.0.0
go 1.go 422ms 3.6ms 12.3MB 577ms 7ms go 1.19.5
go 2.go 487ms 5.9ms 13.3MB 670ms 7ms go 1.19.5
ocaml 2.ml 572ms 3.4ms 30.1MB 550ms 3ms ocaml 5.0.0
go 1.go 667ms 22ms 51.6MB 647ms 3ms tinygo 0.25.0
go 2.go 1278ms 8.0ms 38.3MB 1263ms 0ms tinygo 0.25.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 458ms 2.3ms 2.9MB 443ms 0ms go 1.19.5
ocaml 1.ml 468ms 0.1ms 3.0MB 460ms 0ms ocaml 5.0.0
go 1.go 843ms 1.9ms 0.0MB 830ms 0ms tinygo 0.25.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 50ms 2.0ms 2.9MB 40ms 0ms go 1.19.5
ocaml 1.ml 50ms 1.2ms 2.9MB 40ms 0ms ocaml 5.0.0
go 1.go 87ms 1.1ms 0.0MB 80ms 0ms tinygo 0.25.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 617ms 27ms 73.7MB 597ms 7ms go 1.19.5
go 2.go 621ms 0.8ms 17.6MB 610ms 0ms tinygo 0.25.0
go 1.go 764ms 27ms 41.6MB 747ms 0ms tinygo 0.25.0
go 2.go 901ms 1.5ms 20.0MB 887ms 3ms go 1.19.5
ocaml 1.ml 1942ms 9.7ms 550.6MB 1843ms 83ms ocaml 5.0.0
ocaml 2.ml 2416ms 46ms 19.0MB 2403ms 0ms ocaml 5.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 116ms 2.6ms 22.1MB 100ms 0ms go 1.19.5
go 1.go 130ms 1.5ms 13.9MB 117ms 0ms tinygo 0.25.0
go 2.go 146ms 0.6ms 5.6MB 133ms 0ms tinygo 0.25.0
go 2.go 218ms 3.0ms 7.3MB 207ms 0ms go 1.19.5
ocaml 1.ml 354ms 17ms 140.4MB 323ms 13ms ocaml 5.0.0
ocaml 2.ml 602ms 21ms 9.1MB 583ms 0ms 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 116.1MB 4973ms 67ms go 1.19.5
go 3.go timeout 0.0ms 120.9MB 4963ms 20ms tinygo 0.25.0
ocaml 2.ml timeout 0.0ms 181.9MB 4913ms 67ms 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.1ms 52.5MB 687ms 13ms ocaml 5.0.0
go 3.go 2541ms 30ms 18.5MB 2523ms 17ms go 1.19.5
go 3.go timeout 0.0ms 30.0MB 4977ms 3ms tinygo 0.25.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 2484ms 4.4ms 5.4MB 4830ms 0ms go 1.19.5
go 1.go 4964ms 6.5ms 5.4MB 4953ms 0ms go 1.19.5
go 1.go timeout 0.0ms 0.4MB 4983ms 0ms tinygo 0.25.0
ocaml 2.ml timeout 0.0ms 4.2MB 4990ms 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 628ms 2.7ms 3.4MB 1197ms 0ms go 1.19.5
go 1.go 1245ms 4.2ms 2.9MB 1230ms 0ms go 1.19.5
ocaml 2.ml 1634ms 0.6ms 3.7MB 1620ms 0ms ocaml 5.0.0
go 1.go 2577ms 4.4ms 0.0MB 2563ms 0ms tinygo 0.25.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 167ms 2.2ms 2.9MB 297ms 0ms go 1.19.5
go 1.go 313ms 1.7ms 2.9MB 297ms 0ms go 1.19.5
ocaml 2.ml 412ms 0.8ms 3.4MB 400ms 0ms ocaml 5.0.0
go 1.go 647ms 1.1ms 0.0MB 633ms 0ms tinygo 0.25.0