OCaml VS Javascript benchmarks

Current benchmark data was generated on Wed Jan 22 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
javascript 1-m.js 950ms 61ms 187.4MB 1437ms 247ms bun 1.1.45
javascript 1-m.js 1251ms 9.3ms 276.4MB 2177ms 160ms node 23.6.0
ocaml 1.ml 2977ms 13ms 132.6MB 2900ms 60ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 1.js 95ms 0.8ms 79.4MB 77ms 23ms bun 1.1.45
javascript 1.js 127ms 2.0ms 82.4MB 117ms 33ms node 23.6.0
ocaml 1.ml 214ms 3.1ms 19.2MB 197ms 3ms ocaml 5.3.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 2911ms 3.1ms 4.9MB 2900ms 0ms ocaml 5.3.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 245ms 4.0ms 4.9MB 233ms 0ms ocaml 5.3.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 345ms 2.4ms 24.9MB 333ms 0ms ocaml 5.3.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 38ms 0.2ms 7.5MB 23ms 0ms ocaml 5.3.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 1.9ms 0.2ms 5.0MB 0ms 0ms ocaml 5.3.0
javascript 1.js 13ms 0.5ms 32.3MB 0ms 10ms bun 1.1.45
javascript 1.js 31ms 0.6ms 52.0MB 14ms 8ms node 23.6.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 181ms 7.0ms 6.5MB 167ms 0ms ocaml 5.3.0
javascript 2.js 307ms 1.4ms 66.8MB 297ms 13ms node 23.6.0
javascript 1.js 559ms 2.7ms 64.5MB 543ms 13ms node 23.6.0
javascript 2.js 640ms 0.8ms 127.1MB 687ms 63ms bun 1.1.45
javascript 1.js 826ms 4.8ms 110.7MB 910ms 77ms bun 1.1.45

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 540ms 16ms 6.6MB 527ms 0ms ocaml 5.3.0
javascript 2.js 840ms 3.3ms 72.4MB 823ms 17ms node 23.6.0
javascript 1.js 1586ms 6.0ms 71.4MB 1567ms 17ms node 23.6.0
javascript 2.js 1816ms 29ms 122.9MB 1960ms 60ms bun 1.1.45
javascript 1.js 2536ms 140ms 112.1MB 2847ms 137ms bun 1.1.45

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 77ms 0.8ms 6.0MB 63ms 0ms ocaml 5.3.0
javascript 1.js 164ms 2.5ms 61.8MB 150ms 7ms node 23.6.0
javascript 2.js 164ms 0.9ms 60.8MB 157ms 10ms node 23.6.0
javascript 1.js 323ms 3.2ms 133.9MB 347ms 83ms bun 1.1.45
javascript 2.js 359ms 16ms 126.8MB 380ms 60ms bun 1.1.45

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 1-m.js 485ms 10ms 141.8MB 623ms 127ms bun 1.1.45
javascript 1.js 526ms 3.4ms 134.5MB 583ms 83ms node 23.6.0
ocaml 1.ml 1060ms 22ms 71.2MB 1023ms 27ms ocaml 5.3.0
ocaml 2.ml 2025ms 10ms 91.8MB 1973ms 37ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 1.js 119ms 1.0ms 87.0MB 107ms 27ms bun 1.1.45
ocaml 1.ml 148ms 2.0ms 21.6MB 133ms 0ms ocaml 5.3.0
javascript 1.js 157ms 2.1ms 102.3MB 137ms 47ms node 23.6.0
ocaml 2.ml 352ms 1.6ms 27.7MB 327ms 7ms ocaml 5.3.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 373ms 4.8ms 5.3MB 363ms 0ms ocaml 5.3.0
javascript 6.js 459ms 2.4ms 59.7MB 447ms 7ms node 23.6.0
javascript 6.js 658ms 0.3ms 45.6MB 653ms 7ms bun 1.1.45

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 40ms 0.1ms 5.3MB 30ms 0ms ocaml 5.3.0
javascript 6.js 77ms 1.0ms 59.8MB 60ms 10ms node 23.6.0
javascript 6.js 85ms 2.1ms 45.4MB 83ms 3ms bun 1.1.45

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 914ms 6.3ms 552.5MB 853ms 43ms ocaml 5.3.0
ocaml 2.ml 1875ms 8.7ms 18.6MB 1857ms 0ms ocaml 5.3.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 176ms 3.5ms 142.3MB 153ms 7ms ocaml 5.3.0
ocaml 2.ml 466ms 4.9ms 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 484.8MB 4803ms 180ms ocaml 5.3.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 545ms 6.3ms 57.2MB 507ms 27ms ocaml 5.3.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 6-m.js 2158ms 5.7ms 116.7MB 8230ms 53ms node 23.6.0
ocaml 2.ml 4564ms 17ms 6.3MB 4553ms 0ms ocaml 5.3.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 6-m.js 642ms 4.1ms 114.0MB 2290ms 50ms node 23.6.0
ocaml 2.ml 1141ms 5.8ms 6.1MB 1130ms 0ms ocaml 5.3.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 6-m.js 263ms 2.0ms 113.2MB 823ms 40ms node 23.6.0
ocaml 2.ml 292ms 4.1ms 5.3MB 283ms 0ms ocaml 5.3.0