Crystal VS OCaml benchmarks

Current benchmark data was generated on Sun Jan 29 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
crystal 1.cr 1798ms 15ms 64.1MB 1773ms 10ms crystal 1.7.2
ocaml 1.ml 4932ms 8.7ms 153.4MB 4857ms 60ms ocaml 5.0.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 142ms 4.4ms 10.9MB 127ms 0ms crystal 1.7.2
ocaml 1.ml 346ms 2.9ms 22.9MB 330ms 0ms ocaml 5.0.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1723ms 16ms 20.3MB 1677ms 30ms crystal 1.7.2

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 97ms 2.1ms 7.3MB 80ms 3ms crystal 1.7.2

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 82ms 3.6ms 6.3MB 60ms 3ms crystal 1.7.2

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 30ms 0.2ms 5.1MB 17ms 0ms crystal 1.7.2

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 3778ms 3.4ms 3.0MB 3763ms 0ms crystal 1.7.2
ocaml 2.ml 3965ms 11ms 2.8MB 3953ms 0ms ocaml 5.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 311ms 0.6ms 3.0MB 300ms 0ms crystal 1.7.2
ocaml 2.ml 329ms 0.4ms 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
ocaml 6.ml 422ms 0.6ms 22.7MB 407ms 0ms ocaml 5.0.0
crystal 2.cr 830ms 0.4ms 3.3MB 717ms 100ms crystal 1.7.2
crystal 1.cr 1067ms 0.1ms 14.6MB 943ms 103ms crystal 1.7.2

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 46ms 0.8ms 4.8MB 40ms 0ms ocaml 5.0.0
crystal 2.cr 87ms 0.9ms 3.2MB 67ms 7ms crystal 1.7.2
crystal 1.cr 111ms 0.9ms 4.5MB 83ms 10ms crystal 1.7.2

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2.2ms 0.7ms 2.9MB 0ms 0ms crystal 1.7.2
ocaml 1.ml 2.5ms 0.8ms 2.8MB 0ms 0ms ocaml 5.0.0

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 3823ms 535ms 207.8MB 477ms 303ms crystal 1.7.2

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1214ms 105ms 51.9MB 63ms 43ms crystal 1.7.2

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 55ms 1.1ms 3.0MB 43ms 0ms crystal 1.7.2
crystal 1.cr 96ms 0.2ms 3.0MB 90ms 0ms crystal 1.7.2
ocaml 1.ml 261ms 2.5ms 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
crystal 0-unsafe.cr 160ms 1.1ms 3.0MB 150ms 0ms crystal 1.7.2
crystal 1.cr 282ms 0.2ms 3.0MB 270ms 0ms crystal 1.7.2
ocaml 1.ml 768ms 0.5ms 6.8MB 760ms 0ms ocaml 5.0.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 27ms 0.3ms 2.9MB 20ms 0ms crystal 1.7.2
crystal 1.cr 48ms 0.4ms 3.0MB 40ms 0ms crystal 1.7.2
ocaml 1.ml 116ms 1.2ms 6.0MB 110ms 0ms ocaml 5.0.0

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 490ms 1.8ms 9.5MB 480ms 0ms crystal 1.7.2

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 26ms 0.1ms 6.8MB 17ms 0ms crystal 1.7.2

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1288ms 25ms 64.1MB 1253ms 20ms crystal 1.7.2
ocaml 1.ml 1554ms 4.5ms 69.1MB 1510ms 23ms ocaml 5.0.0
ocaml 2.ml 3269ms 59ms 74.3MB 3220ms 37ms ocaml 5.0.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 221ms 5.3ms 22.4MB 207ms 0ms crystal 1.7.2
ocaml 1.ml 229ms 1.2ms 25.6MB 213ms 7ms ocaml 5.0.0
ocaml 2.ml 579ms 2.5ms 30.1MB 557ms 0ms ocaml 5.0.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 469ms 0.4ms 2.9MB 460ms 0ms ocaml 5.0.0
crystal 1.cr 514ms 1.1ms 3.0MB 500ms 0ms crystal 1.7.2
crystal 2.cr 535ms 0.2ms 2.9MB 530ms 0ms crystal 1.7.2

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 50ms 0.3ms 3.5MB 40ms 0ms ocaml 5.0.0
crystal 1.cr 54ms 0.2ms 2.9MB 43ms 0ms crystal 1.7.2
crystal 2.cr 56ms 0.1ms 2.9MB 43ms 0ms crystal 1.7.2

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 462ms 0.6ms 7.8MB 450ms 0ms crystal 1.7.2
crystal 1.cr 780ms 7.6ms 42.0MB 760ms 0ms crystal 1.7.2
ocaml 1.ml 1997ms 3.1ms 550.5MB 1863ms 113ms ocaml 5.0.0
ocaml 2.ml 2386ms 11ms 19.0MB 2367ms 3ms ocaml 5.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 105ms 0.1ms 4.1MB 97ms 0ms crystal 1.7.2
crystal 1.cr 133ms 0.7ms 12.9MB 120ms 0ms crystal 1.7.2
ocaml 1.ml 387ms 13ms 140.4MB 350ms 27ms ocaml 5.0.0
ocaml 2.ml 579ms 0.8ms 9.1MB 567ms 0ms ocaml 5.0.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2575ms 99ms 7.3MB 2547ms 10ms crystal 1.7.2

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 588ms 11ms 5.1MB 570ms 3ms crystal 1.7.2

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2371ms 12ms 174.0MB 2317ms 37ms crystal 1.7.2
ocaml 2.ml timeout 0.0ms 181.9MB 4923ms 53ms ocaml 5.0.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 249ms 1.9ms 32.1MB 227ms 7ms crystal 1.7.2
ocaml 2.ml 719ms 5.1ms 52.5MB 677ms 20ms ocaml 5.0.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr timeout 0.0ms 4.1MB 4987ms 0ms crystal 1.7.2
ocaml 2.ml timeout 0.0ms 4.1MB 4987ms 0ms ocaml 5.0.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1559ms 1.5ms 3.8MB 1543ms 0ms crystal 1.7.2
ocaml 2.ml 1633ms 0.1ms 3.6MB 1623ms 0ms ocaml 5.0.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 397ms 2.4ms 3.8MB 390ms 0ms crystal 1.7.2
ocaml 2.ml 411ms 0.7ms 3.3MB 400ms 0ms ocaml 5.0.0