OCaml VS Zig benchmarks

Current benchmark data was generated on Tue Jul 01 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 2079ms 56ms 49.0MB 2047ms 17ms zig 0.14.1
ocaml 1.ml 3177ms 13ms 157.2MB 3097ms 63ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 152ms 1.7ms 7.0MB 140ms 0ms zig 0.14.1
ocaml 1.ml 234ms 3.5ms 19.2MB 217ms 0ms 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 634ms 3.4ms 1.4MB 2393ms 0ms zig 0.14.1
zig 3-i.zig 1791ms 48ms 1.0MB 1780ms 0ms zig 0.14.1
zig 1.zig 2728ms 20ms 1.0MB 2720ms 0ms zig 0.14.1
ocaml 2.ml 2910ms 4.7ms 4.9MB 2900ms 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 0.4ms 1.4MB 200ms 0ms zig 0.14.1
zig 3-i.zig 147ms 0.3ms 1.0MB 140ms 0ms zig 0.14.1
zig 1.zig 228ms 1.0ms 1.0MB 220ms 0ms zig 0.14.1
ocaml 2.ml 245ms 1.0ms 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 0.6ms 1.0MB 80ms 0ms zig 0.14.1
ocaml 6.ml 348ms 0.3ms 24.8MB 337ms 0ms ocaml 5.3.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 10ms 0.1ms 1.0MB 0ms 0ms zig 0.14.1
ocaml 6.ml 39ms 0.9ms 7.6MB 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 0.9ms 0.0ms 1.1MB 0ms 0ms zig 0.14.1
ocaml 1.ml 1.8ms 0.2ms 5.1MB 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 36ms 0.2ms 2.8MB 30ms 0ms zig 0.14.1
ocaml 1.ml 180ms 10ms 6.4MB 170ms 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 90ms 0.4ms 2.8MB 80ms 0ms zig 0.14.1
ocaml 1.ml 537ms 22ms 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 14ms 0.1ms 1.3MB 10ms 0ms zig 0.14.1
ocaml 1.ml 77ms 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 877ms 11ms 41.0MB 850ms 13ms zig 0.14.1
ocaml 1.ml 1078ms 7.3ms 70.2MB 1040ms 27ms ocaml 5.3.0
ocaml 2.ml 2068ms 16ms 91.7MB 2013ms 40ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 145ms 3.7ms 21.7MB 130ms 0ms ocaml 5.3.0
zig 1.zig 178ms 3.0ms 11.0MB 163ms 0ms zig 0.14.1
ocaml 2.ml 361ms 9.3ms 27.7MB 340ms 7ms ocaml 5.3.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 3.zig 198ms 1.0ms 1.0MB 190ms 0ms zig 0.14.1
zig 2.zig 279ms 0.3ms 1.0MB 270ms 0ms zig 0.14.1
zig 1.zig 315ms 1.5ms 1.1MB 307ms 0ms zig 0.14.1
ocaml 1.ml 375ms 3.2ms 5.3MB 363ms 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.1ms 1.0MB 10ms 0ms zig 0.14.1
zig 2.zig 30ms 0.0ms 1.0MB 20ms 0ms zig 0.14.1
zig 1.zig 33ms 0.1ms 1.1MB 30ms 0ms zig 0.14.1
ocaml 1.ml 41ms 1.9ms 5.2MB 33ms 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 274ms 3.8ms 40.2MB 257ms 0ms zig 0.14.1
zig 2.zig 325ms 2.5ms 6.0MB 313ms 0ms zig 0.14.1
ocaml 1.ml 949ms 8.7ms 543.2MB 887ms 47ms ocaml 5.3.0
ocaml 2.ml 1888ms 14ms 17.7MB 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 50ms 2.9ms 10.9MB 40ms 0ms zig 0.14.1
zig 2.zig 81ms 0.8ms 2.3MB 70ms 0ms zig 0.14.1
ocaml 1.ml 179ms 2.9ms 142.3MB 157ms 10ms ocaml 5.3.0
ocaml 2.ml 466ms 5.7ms 9.1MB 453ms 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 463.0MB 4823ms 163ms ocaml 5.3.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 552ms 6.9ms 57.1MB 520ms 23ms 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 3691ms 6.4ms 1.4MB 3683ms 0ms zig 0.14.1
ocaml 2.ml 4567ms 4.6ms 6.4MB 4553ms 0ms ocaml 5.3.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 925ms 2.3ms 1.3MB 913ms 0ms zig 0.14.1
ocaml 2.ml 1145ms 4.4ms 6.1MB 1137ms 0ms ocaml 5.3.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 233ms 1.3ms 1.3MB 223ms 0ms zig 0.14.1
ocaml 2.ml 291ms 2.2ms 5.2MB 283ms 0ms ocaml 5.3.0