Odin VS Ruby benchmarks

Current benchmark data was generated on Mon Apr 14 2025, 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
odin 1.odin 2546ms 42ms 49.5MB 2517ms 17ms odin 2024
ruby 1.rb 4815ms 21ms 109.4MB 4710ms 90ms ruby/yjit 3.4.2
ruby 1.rb timeout 0.0ms 70.5MB 4953ms 37ms ruby 3.4.2
ruby 1.rb timeout 0.0ms 758.8MB 6567ms 693ms truffleruby 24.2.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 223ms 1.9ms 7.5MB 210ms 0ms odin 2024
ruby 1.rb 492ms 5.0ms 20.4MB 467ms 10ms ruby/yjit 3.4.2
ruby 1-m.rb 537ms 66ms 418.7MB 1060ms 157ms truffleruby 24.2.0
ruby 1.rb 937ms 8.8ms 19.6MB 910ms 13ms ruby 3.4.2

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 1.2ms 0.1ms 1.6MB 0ms 0ms odin 2024
ruby 1.rb 35ms 0.5ms 141.8MB 14ms 24ms truffleruby 24.2.0
ruby 1.rb 51ms 1.1ms 12.9MB 38ms 0ms ruby 3.4.2
ruby 1.rb 53ms 1.6ms 13.1MB 38ms 2ms ruby/yjit 3.4.2

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 147ms 2.9ms 1.6MB 140ms 0ms odin 2024
ruby 1.rb 334ms 6.3ms 13.5MB 317ms 3ms ruby/yjit 3.4.2
ruby 1.rb 528ms 4.6ms 12.9MB 513ms 3ms ruby 3.4.2
ruby 1-m.rb 680ms 43ms 373.6MB 1197ms 137ms truffleruby 24.2.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 433ms 0.9ms 1.6MB 420ms 0ms odin 2024
ruby 1.rb 883ms 3.5ms 13.5MB 860ms 10ms ruby/yjit 3.4.2
ruby 1-m.rb 1207ms 46ms 407.2MB 1677ms 157ms truffleruby 24.2.0
ruby 1.rb 1475ms 9.5ms 13.0MB 1453ms 10ms ruby 3.4.2

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 67ms 0.8ms 1.6MB 60ms 0ms odin 2024
ruby 1.rb 192ms 1.4ms 13.5MB 177ms 7ms ruby/yjit 3.4.2
ruby 1.rb 294ms 2.8ms 12.9MB 280ms 3ms ruby 3.4.2
ruby 1-m.rb 515ms 15ms 357.6MB 1040ms 137ms truffleruby 24.2.0

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 291ms 2.9ms 4.5MB 280ms 0ms odin 2024

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 15ms 0.1ms 1.6MB 10ms 0ms odin 2024

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 356ms 1.6ms 1.5MB 350ms 0ms odin 2024
odin 1-i.odin 359ms 1.2ms 1.5MB 350ms 0ms odin 2024
ruby 2.rb 825ms 4.5ms 309.8MB 1053ms 117ms truffleruby 24.2.0
ruby 2.rb timeout 0.0ms 12.9MB 4987ms 0ms ruby 3.4.2
ruby 2.rb timeout 0.0ms 13.5MB 4983ms 3ms ruby/yjit 3.4.2

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 39ms 0.4ms 1.5MB 30ms 0ms odin 2024
odin 1-i.odin 39ms 0.4ms 1.5MB 30ms 0ms odin 2024
ruby 2-m.rb 308ms 6.2ms 310.0MB 540ms 117ms truffleruby 24.2.0
ruby 2.rb 1062ms 3.2ms 13.5MB 1047ms 3ms ruby/yjit 3.4.2
ruby 2.rb 2806ms 75ms 12.9MB 2787ms 3ms ruby 3.4.2

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 351ms 14ms 40.5MB 333ms 0ms odin 2024
odin 2.odin 717ms 45ms 6.5MB 703ms 0ms odin 2024
ruby 1.rb timeout 0.0ms 325.4MB 4860ms 130ms ruby 3.4.2
ruby 1.rb timeout 0.0ms 327.0MB 4853ms 137ms ruby/yjit 3.4.2
ruby 1.rb timeout 0.0ms 703.0MB 5090ms 140ms truffleruby 24.2.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 55ms 2.3ms 11.4MB 43ms 0ms odin 2024
odin 2.odin 179ms 13ms 4.1MB 173ms 0ms odin 2024
ruby 1.rb 1725ms 19ms 476.7MB 2387ms 160ms truffleruby 24.2.0
ruby 1.rb 3412ms 46ms 131.8MB 3323ms 73ms ruby/yjit 3.4.2
ruby 1.rb 4494ms 36ms 131.1MB 4403ms 77ms ruby 3.4.2

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 3596ms 1.3ms 2.9MB 3590ms 0ms odin 2024
ruby 4.rb timeout 0.0ms 13.0MB 4983ms 3ms ruby 3.4.2
ruby 4.rb timeout 0.0ms 13.5MB 4983ms 7ms ruby/yjit 3.4.2
ruby 4.rb timeout 0.0ms 434.6MB 5167ms 233ms truffleruby 24.2.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 903ms 1.6ms 2.3MB 890ms 0ms odin 2024
ruby 4.rb 4868ms 23ms 439.6MB 5153ms 217ms truffleruby 24.2.0
ruby 4.rb timeout 0.0ms 13.0MB 4987ms 3ms ruby 3.4.2
ruby 4.rb timeout 0.0ms 13.5MB 4980ms 3ms ruby/yjit 3.4.2

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 229ms 1.8ms 1.9MB 220ms 0ms odin 2024
ruby 4.rb 1435ms 5.1ms 375.6MB 1770ms 137ms truffleruby 24.2.0
ruby 4.rb timeout 0.0ms 13.0MB 4983ms 3ms ruby 3.4.2
ruby 4.rb timeout 0.0ms 13.8MB 4980ms 3ms ruby/yjit 3.4.2