Ruby VS Crystal benchmarks

Current benchmark data was generated on Mon Dec 30 2024, 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
crystal 1.cr 1344ms 19ms 64.2MB 1317ms 10ms crystal 1.14.0
ruby 1-m.rb 4559ms 99ms 826.4MB 6440ms 460ms truffleruby 24.1.1
ruby 1.rb 4582ms 104ms 110.1MB 4487ms 73ms ruby/yjit 3.4.1
ruby 1.rb timeout 0.0ms 70.5MB 4947ms 37ms ruby 3.4.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 105ms 3.9ms 11.1MB 93ms 0ms crystal 1.14.0
ruby 1.rb 478ms 0.9ms 20.4MB 450ms 20ms ruby/yjit 3.4.1
ruby 1-m.rb 600ms 8.2ms 437.8MB 1227ms 167ms truffleruby 24.1.1
ruby 1.rb 940ms 8.6ms 19.6MB 913ms 10ms ruby 3.4.1

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1293ms 57ms 20.1MB 1223ms 53ms crystal 1.14.0
ruby 1.rb 1426ms 6.5ms 63.9MB 1353ms 57ms ruby/yjit 3.4.1
ruby 1.rb 1877ms 44ms 63.1MB 1780ms 83ms ruby 3.4.1
ruby 1.rb timeout 0.0ms 725.4MB 4653ms 1547ms truffleruby 24.1.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 74ms 0.3ms 7.5MB 47ms 7ms crystal 1.14.0
ruby 1.rb 155ms 1.0ms 25.8MB 123ms 17ms ruby/yjit 3.4.1
ruby 1.rb 178ms 2.1ms 25.1MB 143ms 17ms ruby 3.4.1
ruby 1.rb timeout 0.0ms 741.3MB 4710ms 1493ms truffleruby 24.1.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 543ms 3.5ms 3.4MB 413ms 110ms crystal 1.14.0
crystal 1.cr 731ms 4.9ms 14.7MB 607ms 107ms crystal 1.14.0
ruby 6.rb 2042ms 9.8ms 23.1MB 2013ms 10ms ruby/yjit 3.4.1
ruby 6-m.rb 2044ms 111ms 402.5MB 5243ms 363ms truffleruby 24.1.1
ruby 6.rb 3669ms 34ms 22.5MB 3643ms 10ms ruby 3.4.1

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 58ms 1.3ms 3.4MB 33ms 13ms crystal 1.14.0
crystal 1.cr 77ms 0.9ms 4.5MB 50ms 13ms crystal 1.14.0
ruby 6.rb 256ms 0.8ms 15.2MB 230ms 13ms ruby/yjit 3.4.1
ruby 6.rb 419ms 6.7ms 14.5MB 400ms 7ms ruby 3.4.1
ruby 6-m.rb 819ms 5.3ms 387.6MB 1987ms 200ms truffleruby 24.1.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2.0ms 0.2ms 3.0MB 0ms 0ms crystal 1.14.0
ruby 1.rb 39ms 0.5ms 165.1MB 12ms 32ms truffleruby 24.1.1
ruby 1.rb 51ms 1.2ms 13.1MB 38ms 2ms ruby/yjit 3.4.1
ruby 1.rb 53ms 0.7ms 12.9MB 40ms 4ms ruby 3.4.1

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 247ms 1.2ms 28.6MB 217ms 20ms ruby 3.4.1
ruby 1.rb 250ms 5.0ms 31.1MB 217ms 17ms ruby/yjit 3.4.1
ruby 1-m.rb 4304ms 152ms 528.0MB 11207ms 323ms truffleruby 24.1.1

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 2089ms 23ms 134.4MB 1993ms 80ms ruby 3.4.1
ruby 1.rb 2090ms 42ms 135.4MB 2010ms 67ms ruby/yjit 3.4.1
ruby 1.rb timeout 0.0ms 595.9MB 13137ms 367ms truffleruby 24.1.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 36ms 1.6ms 3.1MB 27ms 0ms crystal 1.14.0
crystal 1.cr 65ms 2.3ms 3.1MB 53ms 0ms crystal 1.14.0
ruby 1.rb 330ms 1.9ms 13.6MB 307ms 10ms ruby/yjit 3.4.1
ruby 1.rb 537ms 2.5ms 13.0MB 523ms 3ms ruby 3.4.1
ruby 1-m.rb 717ms 35ms 391.9MB 1247ms 167ms truffleruby 24.1.1

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 99ms 1.9ms 3.1MB 90ms 0ms crystal 1.14.0
crystal 1.cr 190ms 11ms 3.1MB 180ms 0ms crystal 1.14.0
ruby 1.rb 882ms 5.3ms 13.6MB 853ms 17ms ruby/yjit 3.4.1
ruby 1-m.rb 1201ms 51ms 421.0MB 1657ms 177ms truffleruby 24.1.1
ruby 1.rb 1493ms 8.9ms 12.9MB 1473ms 7ms ruby 3.4.1

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 18ms 1.3ms 3.0MB 10ms 0ms crystal 1.14.0
crystal 1.cr 30ms 1.6ms 3.0MB 20ms 0ms crystal 1.14.0
ruby 1.rb 196ms 4.3ms 13.5MB 177ms 3ms ruby/yjit 3.4.1
ruby 1.rb 292ms 5.8ms 12.9MB 273ms 0ms ruby 3.4.1
ruby 1-m.rb 515ms 25ms 371.7MB 1013ms 110ms truffleruby 24.1.1

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 794ms 8.6ms 81.7MB 767ms 13ms crystal 1.14.0
ruby 1-m.rb 4577ms 143ms 578.9MB 11673ms 380ms truffleruby 24.1.1
ruby 1.rb timeout 0.0ms 94.0MB 4940ms 40ms ruby 3.4.1
ruby 1.rb timeout 0.0ms 97.5MB 4920ms 63ms ruby/yjit 3.4.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 164ms 7.9ms 22.3MB 150ms 0ms crystal 1.14.0
ruby 1-m.rb 2187ms 101ms 525.8MB 5677ms 230ms truffleruby 24.1.1
ruby 1.rb 3238ms 7.5ms 38.4MB 3203ms 17ms ruby/yjit 3.4.1
ruby 1.rb 4306ms 3.3ms 37.8MB 4267ms 23ms ruby 3.4.1

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 341ms 1.2ms 3.4MB 330ms 0ms crystal 1.14.0
crystal 1.cr 343ms 3.1ms 3.4MB 333ms 0ms crystal 1.14.0
ruby 2.rb 835ms 6.7ms 327.0MB 1073ms 117ms truffleruby 24.1.1
ruby 2.rb timeout 0.0ms 12.9MB 4980ms 3ms ruby 3.4.1
ruby 2.rb timeout 0.0ms 13.6MB 4980ms 3ms ruby/yjit 3.4.1

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 37ms 0.3ms 3.4MB 30ms 0ms crystal 1.14.0
crystal 1.cr 37ms 0.7ms 3.4MB 30ms 0ms crystal 1.14.0
ruby 2-m.rb 322ms 4.0ms 333.7MB 590ms 100ms truffleruby 24.1.1
ruby 2.rb 1053ms 5.8ms 13.6MB 1037ms 3ms ruby/yjit 3.4.1
ruby 2.rb 2816ms 74ms 12.9MB 2800ms 3ms ruby 3.4.1

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 349ms 5.0ms 8.4MB 333ms 0ms crystal 1.14.0
crystal 1.cr 374ms 7.6ms 62.7MB 360ms 0ms crystal 1.14.0
ruby 1.rb timeout 0.0ms 325.4MB 4850ms 133ms ruby 3.4.1
ruby 1.rb timeout 0.0ms 327.1MB 4843ms 133ms ruby/yjit 3.4.1
ruby 1.rb timeout 0.0ms 762.9MB 5063ms 167ms truffleruby 24.1.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 77ms 0.7ms 13.3MB 67ms 0ms crystal 1.14.0
crystal 2.cr 86ms 1.2ms 4.6MB 77ms 0ms crystal 1.14.0
ruby 1-m.rb 1740ms 47ms 486.8MB 2463ms 153ms truffleruby 24.1.1
ruby 1.rb 3441ms 129ms 131.9MB 3357ms 70ms ruby/yjit 3.4.1
ruby 1.rb 4493ms 12ms 131.1MB 4407ms 73ms ruby 3.4.1

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2009ms 29ms 6.5MB 1970ms 23ms crystal 1.14.0
ruby 1.rb timeout 0.0ms 46.5MB 4910ms 77ms ruby 3.4.1
ruby 1.rb timeout 0.0ms 47.2MB 4937ms 47ms ruby/yjit 3.4.1
ruby 1.rb timeout 0.0ms 467.9MB 13150ms 400ms truffleruby 24.1.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 446ms 7.5ms 5.3MB 430ms 7ms crystal 1.14.0
ruby 1.rb 1638ms 12ms 46.1MB 1587ms 37ms ruby 3.4.1
ruby 1.rb 1713ms 72ms 127.8MB 1603ms 93ms ruby/yjit 3.4.1
ruby 1-m.rb 1790ms 18ms 406.6MB 4713ms 200ms truffleruby 24.1.1

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 3905ms 37ms 4.6MB 3897ms 0ms crystal 1.14.0
ruby 4.rb timeout 0.0ms 13.0MB 4980ms 3ms ruby 3.4.1
ruby 4.rb timeout 0.0ms 13.6MB 4980ms 7ms ruby/yjit 3.4.1
ruby 4.rb timeout 0.0ms 467.6MB 5170ms 207ms truffleruby 24.1.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 981ms 4.6ms 4.5MB 967ms 0ms crystal 1.14.0
ruby 4.rb 4492ms 21ms 467.4MB 4820ms 187ms truffleruby 24.1.1
ruby 4.rb timeout 0.0ms 13.0MB 4980ms 3ms ruby 3.4.1
ruby 4.rb timeout 0.0ms 13.6MB 4973ms 13ms ruby/yjit 3.4.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 247ms 2.1ms 4.0MB 233ms 0ms crystal 1.14.0
ruby 4.rb 1289ms 48ms 390.0MB 1640ms 137ms truffleruby 24.1.1
ruby 4.rb timeout 0.0ms 13.0MB 4983ms 7ms ruby 3.4.1
ruby 4.rb timeout 0.0ms 13.9MB 4980ms 3ms ruby/yjit 3.4.1