Crystal VS Ruby benchmarks

Current benchmark data was generated on Mon Feb 06 2023, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz (Model 85)

* -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 2277ms 6.4ms 64.1MB 2247ms 20ms crystal 1.7.2
ruby 1.rb timeout 0.0ms 72.6MB 4943ms 40ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 100.2MB 4937ms 43ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 499.1MB 8423ms 310ms truffleruby 22.3.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 166ms 2.6ms 10.9MB 153ms 0ms crystal 1.7.2
ruby 1.rb 600ms 3.1ms 40.7MB 567ms 17ms ruby/yjit 3.2.0
ruby 1.rb 1122ms 5.1ms 40.2MB 1097ms 13ms ruby 3.2.0
ruby 1-m.rb 1195ms 48ms 434.8MB 1953ms 170ms truffleruby 22.3.1

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2381ms 14ms 20.3MB 2337ms 30ms crystal 1.7.2
ruby 1.rb 4122ms 30ms 82.7MB 4040ms 63ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 77.8MB 4917ms 63ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 1107.6MB 4193ms 1413ms truffleruby 22.3.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 125ms 1.4ms 7.5MB 107ms 3ms crystal 1.7.2
ruby 1.rb 266ms 2.2ms 45.1MB 227ms 23ms ruby/yjit 3.2.0
ruby 1.rb 304ms 3.5ms 44.3MB 257ms 30ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 1091.8MB 4383ms 1290ms truffleruby 22.3.1

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 77ms 0.3ms 6.5MB 57ms 7ms 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.2MB 13ms 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 3751ms 1.7ms 3.0MB 3737ms 0ms crystal 1.7.2

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 304ms 0.8ms 2.9MB 290ms 0ms crystal 1.7.2

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 725ms 2.3ms 3.2MB 637ms 73ms crystal 1.7.2
crystal 1.cr 963ms 1.4ms 14.6MB 850ms 100ms crystal 1.7.2
ruby 6.rb 2378ms 0.7ms 43.6MB 2337ms 27ms ruby/yjit 3.2.0
ruby 6-m.rb 2793ms 58ms 383.3MB 4990ms 307ms truffleruby 22.3.1
ruby 6.rb 4253ms 47ms 43.1MB 4210ms 27ms ruby 3.2.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 76ms 0.3ms 3.3MB 60ms 0ms crystal 1.7.2
crystal 1.cr 101ms 0.7ms 4.6MB 77ms 10ms crystal 1.7.2
ruby 6.rb 312ms 1.0ms 35.0MB 277ms 17ms ruby/yjit 3.2.0
ruby 6.rb 502ms 6.0ms 34.4MB 473ms 13ms ruby 3.2.0
ruby 6-m.rb 905ms 19ms 321.2MB 1523ms 133ms truffleruby 22.3.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2.9ms 0.7ms 2.9MB 0ms 0ms crystal 1.7.2
ruby 1.rb 52ms 3.6ms 165.0MB 28ms 30ms truffleruby 22.3.1
ruby 1.rb 77ms 1.6ms 32.3MB 52ms 10ms ruby/yjit 3.2.0
ruby 1.rb 81ms 1.0ms 32.2MB 54ms 16ms ruby 3.2.0

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 3536ms 60ms 207.5MB 597ms 383ms crystal 1.7.2

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1358ms 112ms 52.9MB 73ms 63ms 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 56ms 0.2ms 2.9MB 47ms 0ms crystal 1.7.2
crystal 1.cr 93ms 0.4ms 3.0MB 80ms 0ms crystal 1.7.2
ruby 1.rb 467ms 3.7ms 33.0MB 430ms 23ms ruby/yjit 3.2.0
ruby 1.rb 670ms 10ms 32.4MB 637ms 13ms ruby 3.2.0
ruby 1-m.rb 892ms 15ms 329.9MB 1300ms 120ms truffleruby 22.3.1

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 161ms 0.9ms 3.0MB 150ms 0ms crystal 1.7.2
crystal 1.cr 270ms 0.9ms 3.0MB 260ms 0ms crystal 1.7.2
ruby 1.rb 1239ms 3.7ms 32.9MB 1210ms 13ms ruby/yjit 3.2.0
ruby 1.rb 1672ms 87ms 359.1MB 2143ms 143ms truffleruby 22.3.1
ruby 1.rb 1812ms 11ms 32.4MB 1783ms 13ms ruby 3.2.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 29ms 0.4ms 3.0MB 20ms 0ms crystal 1.7.2
crystal 1.cr 47ms 0.6ms 2.9MB 40ms 0ms crystal 1.7.2
ruby 1.rb 270ms 0.7ms 32.9MB 240ms 13ms ruby/yjit 3.2.0
ruby 1.rb 371ms 2.0ms 32.3MB 340ms 17ms ruby 3.2.0
ruby 1-m.rb 639ms 18ms 319.0MB 957ms 107ms truffleruby 22.3.1

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 413ms 0.6ms 9.6MB 400ms 0ms crystal 1.7.2

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 23ms 0.3ms 6.9MB 10ms 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 1618ms 9.5ms 64.2MB 1590ms 13ms crystal 1.7.2
ruby 1.rb timeout 0.0ms 96.5MB 4927ms 57ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 97.1MB 4927ms 53ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 515.5MB 9077ms 260ms truffleruby 22.3.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 288ms 7.9ms 22.2MB 267ms 10ms crystal 1.7.2
ruby 1.rb 3322ms 2877ms 52.8MB 4930ms 40ms ruby 3.2.0
ruby 1-m.rb 3712ms 39ms 590.9MB 6777ms 257ms truffleruby 22.3.1
ruby 1.rb 4121ms 6.3ms 53.6MB 4070ms 30ms ruby/yjit 3.2.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 547ms 0.9ms 3.0MB 537ms 0ms crystal 1.7.2
crystal 2.cr 575ms 6.4ms 2.9MB 563ms 0ms crystal 1.7.2
ruby 2.rb 1216ms 34ms 313.2MB 1420ms 117ms truffleruby 22.3.1
ruby 2.rb timeout 0.0ms 32.1MB 4970ms 13ms ruby 3.2.0
ruby 2.rb timeout 0.0ms 33.0MB 4967ms 17ms ruby/yjit 3.2.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 60ms 0.5ms 2.9MB 50ms 0ms crystal 1.7.2
crystal 1.cr 60ms 1.8ms 2.9MB 50ms 0ms crystal 1.7.2
ruby 2-m.rb 452ms 38ms 311.2MB 690ms 93ms truffleruby 22.3.1
ruby 2.rb 2122ms 1.9ms 32.9MB 2093ms 13ms ruby/yjit 3.2.0
ruby 2.rb 3393ms 17ms 32.2MB 3363ms 17ms ruby 3.2.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 441ms 2.4ms 7.8MB 423ms 0ms crystal 1.7.2
crystal 1.cr 1153ms 37ms 42.3MB 1130ms 10ms crystal 1.7.2
ruby 1.rb timeout 0.0ms 344.6MB 4847ms 130ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 345.0MB 4833ms 147ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 684.4MB 5003ms 193ms truffleruby 22.3.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 97ms 0.5ms 4.1MB 90ms 0ms crystal 1.7.2
crystal 1.cr 149ms 0.7ms 12.8MB 140ms 0ms crystal 1.7.2
ruby 1.rb 3311ms 25ms 430.9MB 3863ms 153ms truffleruby 22.3.1
ruby 1.rb timeout 0.0ms 151.0MB 4900ms 77ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 151.6MB 4913ms 63ms ruby/yjit 3.2.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2850ms 21ms 7.5MB 2820ms 17ms crystal 1.7.2
ruby 1.rb timeout 0.0ms 157.8MB 4917ms 67ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 158.5MB 4903ms 77ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 431.5MB 9403ms 223ms truffleruby 22.3.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 614ms 9.2ms 5.3MB 587ms 10ms crystal 1.7.2
ruby 1-m.rb 2269ms 60ms 418.2MB 4133ms 190ms truffleruby 22.3.1
ruby 1.rb 3194ms 6.2ms 158.6MB 3097ms 77ms ruby/yjit 3.2.0
ruby 1.rb 3219ms 10ms 157.8MB 3123ms 77ms ruby 3.2.0

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2316ms 4.3ms 173.9MB 2247ms 53ms crystal 1.7.2

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 243ms 1.6ms 32.0MB 220ms 3ms crystal 1.7.2

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.0MB 4983ms 0ms crystal 1.7.2
ruby 4.rb timeout 0.0ms 32.1MB 4970ms 13ms ruby 3.2.0
ruby 4.rb timeout 0.0ms 32.8MB 4963ms 13ms ruby/yjit 3.2.0
ruby 4.rb timeout 0.0ms 389.6MB 5257ms 167ms truffleruby 22.3.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1524ms 1.0ms 3.8MB 1507ms 0ms crystal 1.7.2
ruby 4.rb timeout 0.0ms 32.2MB 4973ms 7ms ruby 3.2.0
ruby 4.rb timeout 0.0ms 32.8MB 4967ms 17ms ruby/yjit 3.2.0
ruby 4.rb timeout 0.0ms 457.7MB 5487ms 180ms truffleruby 22.3.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 385ms 0.4ms 3.8MB 373ms 0ms crystal 1.7.2
ruby 4.rb 2875ms 14ms 407.1MB 3453ms 140ms truffleruby 22.3.1
ruby 4.rb timeout 0.0ms 32.4MB 4970ms 10ms ruby 3.2.0
ruby 4.rb timeout 0.0ms 32.8MB 4970ms 10ms ruby/yjit 3.2.0