OCaml VS Zig benchmarks

Current benchmark data was generated on Sat Mar 29 2025, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][4 cores] AMD EPYC 7763 64-Core Processor (Model 1)

* -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
zig 1.zig 2060ms 58ms 49.0MB 2023ms 20ms zig 0.14.0
ocaml 1.ml 3076ms 70ms 157.2MB 2993ms 73ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 154ms 0.4ms 7.0MB 140ms 0ms zig 0.14.0
ocaml 1.ml 223ms 5.5ms 19.1MB 203ms 3ms ocaml 5.3.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2-m.zig 644ms 4.7ms 1.4MB 2407ms 0ms zig 0.14.0
zig 3-i.zig 1767ms 1.5ms 1.0MB 1760ms 0ms zig 0.14.0
zig 1.zig 2718ms 1.7ms 1.0MB 2710ms 0ms zig 0.14.0
ocaml 2.ml 2920ms 14ms 4.9MB 2910ms 0ms ocaml 5.3.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2-m.zig 60ms 1.2ms 1.4MB 200ms 0ms zig 0.14.0
zig 3-i.zig 148ms 0.4ms 1.0MB 140ms 0ms zig 0.14.0
zig 1.zig 230ms 0.9ms 1.0MB 220ms 0ms zig 0.14.0
ocaml 2.ml 246ms 2.4ms 4.9MB 237ms 0ms ocaml 5.3.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 88ms 1.5ms 1.0MB 77ms 0ms zig 0.14.0
ocaml 6.ml 347ms 0.6ms 24.8MB 333ms 0ms ocaml 5.3.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 11ms 0.1ms 1.0MB 0ms 0ms zig 0.14.0
ocaml 6.ml 39ms 0.3ms 7.3MB 30ms 0ms ocaml 5.3.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 1.1ms 0.1ms 1.1MB 0ms 0ms zig 0.14.0
ocaml 1.ml 1.9ms 0.1ms 5.0MB 0ms 0ms ocaml 5.3.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 34ms 1.0ms 2.8MB 23ms 0ms zig 0.14.0
ocaml 1.ml 185ms 5.6ms 6.4MB 173ms 0ms ocaml 5.3.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 94ms 1.8ms 2.8MB 83ms 0ms zig 0.14.0
ocaml 1.ml 537ms 16ms 6.6MB 527ms 0ms ocaml 5.3.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 15ms 0.4ms 1.3MB 10ms 0ms zig 0.14.0
ocaml 1.ml 76ms 0.7ms 5.9MB 70ms 0ms ocaml 5.3.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 899ms 44ms 41.0MB 873ms 13ms zig 0.14.0
ocaml 1.ml 1097ms 8.4ms 70.3MB 1057ms 30ms ocaml 5.3.0
ocaml 2.ml 2087ms 30ms 91.7MB 2037ms 33ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 149ms 1.0ms 21.7MB 133ms 7ms ocaml 5.3.0
zig 1.zig 179ms 3.2ms 11.0MB 167ms 0ms zig 0.14.0
ocaml 2.ml 362ms 2.4ms 27.7MB 343ms 3ms ocaml 5.3.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 3.zig 199ms 0.6ms 1.0MB 190ms 0ms zig 0.14.0
zig 2.zig 280ms 0.6ms 1.0MB 270ms 0ms zig 0.14.0
zig 1.zig 316ms 0.5ms 1.1MB 307ms 0ms zig 0.14.0
ocaml 1.ml 377ms 1.5ms 5.3MB 367ms 0ms ocaml 5.3.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 3.zig 22ms 0.2ms 1.1MB 10ms 0ms zig 0.14.0
zig 2.zig 30ms 0.1ms 1.0MB 20ms 0ms zig 0.14.0
zig 1.zig 34ms 0.4ms 1.1MB 30ms 0ms zig 0.14.0
ocaml 1.ml 40ms 1.1ms 5.2MB 30ms 0ms ocaml 5.3.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 287ms 11ms 40.1MB 267ms 0ms zig 0.14.0
zig 2.zig 330ms 4.7ms 6.0MB 317ms 0ms zig 0.14.0
ocaml 1.ml 961ms 7.1ms 552.4MB 900ms 47ms ocaml 5.3.0
ocaml 2.ml 1888ms 3.0ms 18.9MB 1877ms 0ms ocaml 5.3.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 59ms 2.5ms 10.8MB 50ms 0ms zig 0.14.0
zig 2.zig 82ms 0.6ms 2.3MB 70ms 0ms zig 0.14.0
ocaml 1.ml 191ms 10ms 142.3MB 167ms 10ms ocaml 5.3.0
ocaml 2.ml 465ms 0.7ms 9.1MB 457ms 0ms ocaml 5.3.0

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 474.1MB 4813ms 173ms ocaml 5.3.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 550ms 3.3ms 57.1MB 517ms 20ms ocaml 5.3.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 3693ms 9.0ms 1.4MB 3683ms 0ms zig 0.14.0
ocaml 2.ml 4568ms 13ms 6.4MB 4557ms 0ms ocaml 5.3.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 923ms 1.3ms 1.3MB 913ms 0ms zig 0.14.0
ocaml 2.ml 1153ms 6.9ms 6.1MB 1143ms 0ms ocaml 5.3.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 239ms 8.0ms 1.3MB 230ms 0ms zig 0.14.0
ocaml 2.ml 290ms 2.8ms 5.2MB 280ms 0ms ocaml 5.3.0