Lua VS Ruby benchmarks

Current benchmark data was generated on Fri May 20 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
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms lua 5.4.4
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms luajit 2.1.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
lua 1.lua 452ms 1.9ms 25.4MB 427ms 7ms luajit 2.1.0
ruby 1.rb 897ms 6.4ms 292.1MB 740ms 137ms ruby/yjit 3.1.2
ruby 1-m.rb 951ms 78ms 404.6MB 1523ms 130ms truffleruby 22.1.0
ruby 1.rb 976ms 8.7ms 35.5MB 930ms 23ms ruby 3.1.2
lua 1.lua 1073ms 10ms 17.3MB 1053ms 3ms lua 5.4.4

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
lua 1.lua 2.2ms 0.7ms 2.2MB 0ms 0ms luajit 2.1.0
lua 1.lua 2.5ms 0.9ms 1.1MB 0ms 0ms lua 5.4.4
ruby 1.rb 39ms 1.0ms 134.6MB 20ms 18ms truffleruby 22.1.0
ruby 1.rb 72ms 1.1ms 30.1MB 50ms 10ms ruby 3.1.2
ruby 1.rb 225ms 0.8ms 286.6MB 72ms 138ms ruby/yjit 3.1.2

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms lua 5.4.4
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms luajit 2.1.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
lua 1.lua 1838ms 17ms 35.5MB 1817ms 7ms luajit 2.1.0
lua 1.lua 2924ms 30ms 41.4MB 2900ms 7ms lua 5.4.4
ruby 1-m.rb 3310ms 16ms 583.4MB 6047ms 240ms truffleruby 22.1.0
ruby 1.rb 3946ms 4.7ms 300.9MB 3780ms 147ms ruby/yjit 3.1.2
ruby 1.rb 4797ms 7.7ms 44.4MB 4757ms 23ms ruby 3.1.2

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
lua 4.lua 1145ms 21ms 2.4MB 1137ms 0ms luajit 2.1.0
ruby 2.rb 1338ms 3.0ms 301.9MB 1703ms 93ms truffleruby 22.1.0
lua 4.lua timeout 0.0ms 0.0MB 0ms 0ms lua 5.4.4
ruby 2.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 2.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
lua 4.lua 119ms 0.9ms 2.3MB 110ms 0ms luajit 2.1.0
ruby 2-m.rb 489ms 4.2ms 289.6MB 797ms 83ms truffleruby 22.1.0
lua 4.lua 1178ms 9.7ms 1.1MB 1167ms 0ms lua 5.4.4
ruby 2.rb 2366ms 7.0ms 286.8MB 2220ms 130ms ruby/yjit 3.1.2
ruby 2.rb 3241ms 11ms 30.0MB 3213ms 10ms ruby 3.1.2

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms lua 5.4.4
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms luajit 2.1.0
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
lua 1.lua 1561ms 2.0ms 2.4MB 1550ms 0ms luajit 2.1.0
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms lua 5.4.4
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
lua 1.lua 394ms 0.7ms 2.3MB 380ms 0ms luajit 2.1.0
ruby 4.rb 1862ms 8.4ms 436.8MB 2480ms 127ms truffleruby 22.1.0
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms lua 5.4.4
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
lua 1.lua 520ms 0.3ms 5.0MB 510ms 0ms luajit 2.1.0
ruby 1.rb 3053ms 9.8ms 336.7MB 2847ms 190ms ruby/yjit 3.1.2
ruby 1.rb 3564ms 76ms 80.2MB 3487ms 60ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
lua 1.lua 37ms 0.5ms 2.9MB 23ms 0ms luajit 2.1.0
ruby 1.rb 243ms 3.7ms 42.3MB 203ms 23ms ruby 3.1.2
ruby 1.rb 375ms 3.0ms 298.9MB 220ms 137ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0