Perl VS Ruby benchmarks

Current benchmark data was generated on Wed May 25 2022, 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
perl 1.pl timeout 0.0ms 0.0MB 0ms 0ms perl 5.34.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.1.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 959ms 4.8ms 35.5MB 927ms 20ms ruby 3.1.2
ruby 1.rb 1007ms 63ms 292.1MB 833ms 157ms ruby/yjit 3.1.2
ruby 1-m.rb 1154ms 16ms 374.0MB 1910ms 153ms truffleruby 22.1.0
perl 1.pl 1991ms 5.7ms 14.4MB 1973ms 3ms perl 5.34.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 6.rb 2592ms 2.6ms 296.0MB 2430ms 143ms ruby/yjit 3.1.2
perl 1.pl 3920ms 281ms 10.8MB 3900ms 0ms perl 5.34.1
ruby 6.rb 4521ms 77ms 39.5MB 4483ms 23ms ruby 3.1.2
ruby 6.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
perl 1.pl 435ms 1.0ms 6.6MB 420ms 0ms perl 5.34.1
ruby 6.rb 520ms 7.9ms 31.2MB 493ms 13ms ruby 3.1.2
ruby 6.rb 534ms 1.0ms 287.7MB 367ms 147ms ruby/yjit 3.1.2
ruby 6-m.rb 1815ms 39ms 324.3MB 3240ms 147ms truffleruby 22.1.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
perl 1.pl 4.2ms 1.5ms 5.0MB 0ms 0ms perl 5.34.1
ruby 1.rb 47ms 1.2ms 138.4MB 20ms 30ms truffleruby 22.1.0
ruby 1.rb 68ms 3.3ms 29.9MB 46ms 8ms ruby 3.1.2
ruby 1.rb 255ms 11ms 286.7MB 106ms 136ms ruby/yjit 3.1.2

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 2.rb 1453ms 19ms 300.6MB 1823ms 127ms truffleruby 22.1.0
perl 2.pl timeout 0.0ms 0.0MB 0ms 0ms perl 5.34.1
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
ruby 2-m.rb 547ms 17ms 293.9MB 873ms 107ms truffleruby 22.1.0
ruby 2.rb 2300ms 157ms 286.8MB 2147ms 137ms ruby/yjit 3.1.2
ruby 2.rb 2985ms 224ms 30.0MB 2960ms 10ms ruby 3.1.2
perl 2.pl 3045ms 197ms 6.3MB 3027ms 0ms perl 5.34.1

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
perl 4.pl timeout 0.0ms 0.0MB 0ms 0ms perl 5.34.1
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
perl 4.pl timeout 0.0ms 0.0MB 0ms 0ms perl 5.34.1
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
ruby 4.rb 2702ms 3.9ms 365.9MB 3373ms 150ms truffleruby 22.1.0
perl 4-m.pl 4778ms 29ms 9.4MB 8997ms 0ms perl 5.34.1
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