Crystal VS OCaml benchmarks

Current benchmark data was generated on Thu Sep 22 2022, 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 1541ms 5.5ms 66.2MB 1840ms 17ms crystal 1.5.1
ocaml 1.ml 3969ms 9.3ms 121.0MB 3927ms 23ms ocaml 4.14.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 131ms 0.2ms 13.1MB 140ms 0ms crystal 1.5.1
ocaml 1.ml 271ms 1.1ms 17.4MB 250ms 3ms ocaml 4.14.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1972ms 20ms 22.3MB 1920ms 30ms crystal 1.5.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 110ms 4.1ms 7.6MB 97ms 3ms crystal 1.5.1

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 85ms 3.4ms 9.2MB 70ms 0ms crystal 1.5.1

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 31ms 0.4ms 7.0MB 20ms 0ms crystal 1.5.1

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 3940ms 31ms 2.5MB 3927ms 0ms ocaml 4.14.0
crystal 1.cr 3970ms 6.7ms 3.0MB 3957ms 0ms crystal 1.5.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 323ms 0.4ms 3.0MB 310ms 0ms crystal 1.5.1
ocaml 2.ml 326ms 0.7ms 2.6MB 313ms 0ms ocaml 4.14.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 423ms 2.2ms 23.9MB 403ms 0ms ocaml 4.14.0
crystal 2.cr 859ms 3.2ms 5.6MB 750ms 97ms crystal 1.5.1
crystal 1.cr 1059ms 1.3ms 16.7MB 903ms 140ms crystal 1.5.1

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 49ms 3.5ms 4.8MB 37ms 0ms ocaml 4.14.0
crystal 2.cr 91ms 1.0ms 5.3MB 70ms 3ms crystal 1.5.1
crystal 1.cr 111ms 0.2ms 4.6MB 87ms 10ms crystal 1.5.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 1.9ms 0.5ms 2.5MB 0ms 0ms ocaml 4.14.0
crystal 1.cr 4.6ms 2.2ms 3.1MB 0ms 0ms crystal 1.5.1

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 3369ms 198ms 152.7MB 297ms 283ms crystal 1.5.1

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1173ms 102ms 32.3MB 40ms 40ms crystal 1.5.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 61ms 0.9ms 5.0MB 50ms 0ms crystal 1.5.1
crystal 1.cr 108ms 0.4ms 3.0MB 97ms 0ms crystal 1.5.1
ocaml 1.ml 238ms 0.5ms 5.9MB 227ms 0ms ocaml 4.14.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 174ms 0.5ms 3.1MB 160ms 0ms crystal 1.5.1
crystal 1.cr 312ms 1.3ms 3.0MB 300ms 0ms crystal 1.5.1
ocaml 1.ml 707ms 1.5ms 5.8MB 693ms 0ms ocaml 4.14.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 31ms 0.8ms 5.0MB 20ms 0ms crystal 1.5.1
crystal 1.cr 55ms 2.1ms 3.1MB 47ms 0ms crystal 1.5.1
ocaml 1.ml 104ms 0.4ms 5.1MB 90ms 0ms ocaml 4.14.0

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 994ms 0.9ms 7.6MB 980ms 0ms crystal 1.5.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 46ms 0.5ms 6.4MB 40ms 0ms crystal 1.5.1

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1083ms 49ms 64.3MB 1230ms 23ms crystal 1.5.1
ocaml 1.ml 1503ms 5.0ms 62.6MB 1460ms 23ms ocaml 4.14.0
ocaml 2.ml 2552ms 7.6ms 71.4MB 2520ms 20ms ocaml 4.14.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 192ms 0.9ms 18.6MB 177ms 0ms ocaml 4.14.0
crystal 1.cr 207ms 6.9ms 17.5MB 223ms 3ms crystal 1.5.1
ocaml 2.ml 430ms 3.0ms 23.6MB 410ms 3ms ocaml 4.14.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 470ms 0.2ms 2.6MB 460ms 0ms ocaml 4.14.0
crystal 1.cr 516ms 4.8ms 2.9MB 500ms 0ms crystal 1.5.1
crystal 2.cr 540ms 0.7ms 2.9MB 530ms 0ms crystal 1.5.1

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 52ms 3.8ms 2.6MB 40ms 0ms ocaml 4.14.0
crystal 1.cr 56ms 1.6ms 3.0MB 50ms 0ms crystal 1.5.1
crystal 2.cr 60ms 2.8ms 2.9MB 43ms 0ms crystal 1.5.1

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 467ms 2.2ms 9.8MB 453ms 0ms crystal 1.5.1
crystal 1.cr 851ms 16ms 42.7MB 827ms 7ms crystal 1.5.1
ocaml 1.ml 1976ms 10ms 555.7MB 1877ms 87ms ocaml 4.14.0
ocaml 2.ml 2265ms 1.2ms 19.9MB 2247ms 0ms ocaml 4.14.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 108ms 0.2ms 4.4MB 97ms 0ms crystal 1.5.1
crystal 1.cr 151ms 1.6ms 12.9MB 137ms 0ms crystal 1.5.1
ocaml 1.ml 390ms 10ms 142.6MB 353ms 20ms ocaml 4.14.0
ocaml 2.ml 551ms 4.1ms 9.5MB 537ms 0ms ocaml 4.14.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2779ms 53ms 9.0MB 3030ms 280ms crystal 1.5.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 644ms 5.5ms 5.3MB 670ms 70ms crystal 1.5.1

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2474ms 0.8ms 196.1MB 2397ms 57ms crystal 1.5.1
ocaml 2.ml timeout 0.0ms 0.0MB 0ms 0ms ocaml 4.14.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 256ms 2.5ms 24.5MB 237ms 3ms crystal 1.5.1
ocaml 2.ml 683ms 0.6ms 50.4MB 657ms 10ms ocaml 4.14.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 0.0MB 0ms 0ms crystal 1.5.1
ocaml 2.ml timeout 0.0ms 0.0MB 0ms 0ms ocaml 4.14.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1510ms 2.5ms 5.8MB 1493ms 0ms crystal 1.5.1
ocaml 2.ml 1645ms 0.1ms 3.4MB 1633ms 0ms ocaml 4.14.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 382ms 1.3ms 3.8MB 370ms 0ms crystal 1.5.1
ocaml 2.ml 415ms 0.7ms 3.1MB 400ms 0ms ocaml 4.14.0