Ruby VS Odin 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
odin 1.odin 4635ms 17ms 49.5MB 4597ms 17ms odin 2023
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
odin 1.odin 398ms 6.4ms 7.5MB 383ms 0ms odin 2023
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
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
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

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
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
odin 1.odin 1.8ms 0.7ms 1.3MB 0ms 0ms odin 2023
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

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 462ms 4.3ms 54.5MB 423ms 20ms ruby/yjit 3.2.0
ruby 1.rb 472ms 2.2ms 51.8MB 430ms 23ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 460.8MB 9140ms 237ms truffleruby 22.3.1

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 4072ms 8.8ms 175.6MB 3980ms 70ms ruby/yjit 3.2.0
ruby 1.rb 4077ms 0.4ms 174.4MB 3957ms 103ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 414.1MB 9210ms 220ms truffleruby 22.3.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 268ms 1.7ms 1.3MB 260ms 0ms odin 2023
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
odin 1.odin 809ms 3.6ms 1.2MB 800ms 0ms odin 2023
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
odin 1.odin 113ms 1.7ms 1.3MB 100ms 0ms odin 2023
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

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
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
odin 1-i.odin 559ms 1.2ms 1.3MB 550ms 0ms odin 2023
ruby 2.rb 1216ms 34ms 313.2MB 1420ms 117ms truffleruby 22.3.1
odin 1.odin 2350ms 2.1ms 1.3MB 2337ms 0ms odin 2023
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
odin 1-i.odin 58ms 0.6ms 1.3MB 50ms 0ms odin 2023
odin 1.odin 237ms 0.2ms 1.2MB 230ms 0ms odin 2023
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
odin 2.odin 1058ms 1.6ms 6.4MB 1050ms 0ms odin 2023
odin 1.odin 1118ms 56ms 40.5MB 1090ms 10ms odin 2023
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
odin 1.odin 132ms 0.5ms 11.3MB 117ms 3ms odin 2023
odin 2.odin 253ms 0.2ms 2.7MB 240ms 0ms odin 2023
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
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
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

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 3552ms 1.5ms 2.8MB 3540ms 0ms odin 2023
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
odin 1.odin 891ms 1.2ms 2.1MB 877ms 0ms odin 2023
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
odin 1.odin 225ms 0.1ms 1.9MB 213ms 0ms odin 2023
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