Ruby VS Go benchmarks

Current benchmark data was generated on Wed Sep 28 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
go 1.go 2897ms 7.4ms 44.7MB 4130ms 57ms go 1.19.1
go 1.go 3962ms 29ms 39.1MB 3947ms 0ms tinygo 0.25.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.2.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 257ms 2.9ms 8.2MB 333ms 3ms go 1.19.1
go 1.go 303ms 0.3ms 6.0MB 290ms 0ms tinygo 0.25.0
ruby 1-m.rb 876ms 6.5ms 391.6MB 1427ms 120ms truffleruby 22.2.0
ruby 1.rb 901ms 1.2ms 292.0MB 743ms 147ms ruby/yjit 3.1.2
ruby 1.rb 975ms 28ms 35.5MB 947ms 10ms ruby 3.1.2

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 741ms 41ms 13.6MB 1443ms 0ms go 1.19.1
go 1.go 1717ms 3.5ms 253.7MB 1650ms 50ms tinygo 0.25.0
ruby 1.rb 3086ms 135ms 336.7MB 2877ms 193ms ruby/yjit 3.1.2
ruby 1.rb 3557ms 173ms 80.1MB 3480ms 57ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.2.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 56ms 5.7ms 5.4MB 93ms 0ms go 1.19.1
ruby 1.rb 244ms 1.2ms 42.3MB 210ms 20ms ruby 3.1.2
go 1.go 270ms 0.7ms 66.7MB 243ms 7ms tinygo 0.25.0
ruby 1.rb 382ms 8.4ms 298.8MB 223ms 140ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.2.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 238ms 0.4ms 2.9MB 440ms 0ms go 1.19.1
ruby 6.rb 2858ms 22ms 296.0MB 2707ms 133ms ruby/yjit 3.1.2
ruby 6.rb 4371ms 79ms 39.5MB 4343ms 17ms ruby 3.1.2
ruby 6.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.2.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 30ms 0.2ms 2.9MB 40ms 0ms go 1.19.1
ruby 6.rb 500ms 2.0ms 287.7MB 340ms 143ms ruby/yjit 3.1.2
ruby 6.rb 508ms 11ms 31.1MB 480ms 10ms ruby 3.1.2
ruby 6-m.rb 1299ms 7.3ms 329.0MB 2303ms 103ms truffleruby 22.2.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 1.8ms 0.7ms 2.0MB 0ms 0ms tinygo 0.25.0
go 1.go 2.7ms 0.4ms 2.9MB 0ms 0ms go 1.19.1
ruby 1.rb 40ms 2.2ms 146.9MB 22ms 18ms truffleruby 22.2.0
ruby 1.rb 70ms 0.7ms 29.9MB 48ms 10ms ruby 3.1.2
ruby 1.rb 233ms 0.5ms 286.6MB 96ms 124ms ruby/yjit 3.1.2

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 2-ffi.go 71ms 0.4ms 39.5MB 53ms 13ms go 1.19.1
go 1.go 171ms 2.1ms 20.2MB 157ms 7ms go 1.19.1
ruby 1.rb 427ms 0.9ms 47.3MB 397ms 13ms ruby 3.1.2
ruby 1.rb 590ms 2.4ms 305.4MB 437ms 140ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.2.0

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 2-ffi.go 396ms 8.4ms 187.8MB 373ms 90ms go 1.19.1
go 1.go 1039ms 5.9ms 106.0MB 1003ms 63ms go 1.19.1
ruby 1.rb 3979ms 199ms 162.0MB 3883ms 77ms ruby 3.1.2
ruby 1.rb 4022ms 3.4ms 419.0MB 3823ms 180ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.2.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 166ms 0.4ms 0.3MB 160ms 0ms tinygo 0.25.0
go 3.go 173ms 1.4ms 2.8MB 160ms 0ms go 1.19.1
ruby 1.rb 608ms 8.8ms 30.2MB 583ms 10ms ruby 3.1.2
ruby 1.rb 618ms 2.7ms 286.7MB 470ms 137ms ruby/yjit 3.1.2
ruby 1-m.rb 796ms 85ms 353.7MB 1177ms 83ms truffleruby 22.2.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 491ms 0.3ms 0.3MB 480ms 0ms tinygo 0.25.0
go 3.go 514ms 3.1ms 3.4MB 500ms 0ms go 1.19.1
ruby 1.rb 1376ms 7.7ms 286.7MB 1237ms 123ms ruby/yjit 3.1.2
ruby 1.rb 1392ms 11ms 339.9MB 1927ms 120ms truffleruby 22.2.0
ruby 1.rb 1664ms 3.2ms 30.2MB 1647ms 7ms ruby 3.1.2

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 81ms 0.5ms 0.0MB 70ms 0ms tinygo 0.25.0
go 3.go 93ms 2.3ms 5.6MB 83ms 0ms go 1.19.1
ruby 1.rb 335ms 4.9ms 29.9MB 320ms 3ms ruby 3.1.2
ruby 1.rb 427ms 1.6ms 286.6MB 283ms 127ms ruby/yjit 3.1.2
ruby 1-m.rb 536ms 8.3ms 301.8MB 823ms 80ms truffleruby 22.2.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 1891ms 8.9ms 38.2MB 2680ms 17ms go 1.19.1
go 2.go 2233ms 22ms 52.9MB 3143ms 57ms go 1.19.1
go 1.go 3053ms 3.0ms 159.8MB 3003ms 37ms tinygo 0.25.0
go 2.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.25.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.2.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 409ms 5.1ms 12.5MB 563ms 10ms go 1.19.1
go 2.go 477ms 1.5ms 14.3MB 647ms 20ms go 1.19.1
go 1.go 800ms 6.4ms 39.1MB 783ms 3ms tinygo 0.25.0
go 2.go 1329ms 3.7ms 52.1MB 1313ms 0ms tinygo 0.25.0
ruby 1-m.rb 3188ms 28ms 570.1MB 5863ms 187ms truffleruby 22.2.0
ruby 1.rb 3898ms 7.4ms 300.7MB 3730ms 153ms ruby/yjit 3.1.2
ruby 1.rb 4753ms 18ms 44.3MB 4720ms 17ms ruby 3.1.2

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 454ms 2.2ms 2.9MB 440ms 0ms go 1.19.1
go 1.go 842ms 0.7ms 0.0MB 830ms 0ms tinygo 0.25.0
ruby 2.rb 1099ms 4.0ms 307.0MB 1397ms 73ms truffleruby 22.2.0
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
go 1.go 49ms 1.8ms 2.9MB 37ms 0ms go 1.19.1
go 1.go 86ms 0.5ms 0.0MB 80ms 0ms tinygo 0.25.0
ruby 2-m.rb 424ms 5.3ms 303.8MB 673ms 80ms truffleruby 22.2.0
ruby 2.rb 2352ms 3.8ms 286.7MB 2193ms 140ms ruby/yjit 3.1.2
ruby 2.rb 3236ms 19ms 29.9MB 3217ms 0ms ruby 3.1.2

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 574ms 29ms 75.2MB 540ms 13ms go 1.19.1
go 2.go 632ms 2.0ms 17.4MB 613ms 0ms tinygo 0.25.0
go 1.go 749ms 39ms 43.8MB 727ms 7ms tinygo 0.25.0
go 2.go 915ms 14ms 20.0MB 897ms 10ms go 1.19.1
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.2.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 133ms 1.5ms 13.9MB 120ms 0ms tinygo 0.25.0
go 1.go 134ms 8.0ms 21.9MB 120ms 0ms go 1.19.1
go 2.go 146ms 0.6ms 5.4MB 133ms 0ms tinygo 0.25.0
go 2.go 218ms 2.3ms 8.1MB 200ms 3ms go 1.19.1
ruby 1.rb 3222ms 43ms 475.3MB 3633ms 153ms truffleruby 22.2.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

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 1425ms 2.8ms 8.4MB 1393ms 10ms go 1.19.1
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.2.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 338ms 1.2ms 8.4MB 323ms 0ms go 1.19.1
ruby 1-m.rb 1915ms 11ms 398.1MB 3513ms 133ms truffleruby 22.2.0
ruby 1.rb 2479ms 4.7ms 162.9MB 2393ms 70ms ruby 3.1.2
ruby 1.rb 2632ms 6.4ms 420.7MB 2430ms 183ms ruby/yjit 3.1.2

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 2499ms 19ms 5.5MB 4830ms 0ms go 1.19.1
go 1.go 4890ms 3.2ms 5.5MB 4880ms 0ms go 1.19.1
go 1.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.25.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.2.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 627ms 1.2ms 2.9MB 1193ms 0ms go 1.19.1
go 1.go 1227ms 6.7ms 2.9MB 1213ms 0ms go 1.19.1
go 1.go 2576ms 1.3ms 0.0MB 2563ms 0ms tinygo 0.25.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.2.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 165ms 0.6ms 2.9MB 297ms 0ms go 1.19.1
go 1.go 310ms 1.4ms 2.9MB 300ms 0ms go 1.19.1
go 1.go 646ms 0.6ms 2.0MB 640ms 0ms tinygo 0.25.0
ruby 4.rb 2453ms 17ms 460.5MB 2993ms 143ms truffleruby 22.2.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