Perl VS Ruby benchmarks

Current benchmark data was generated on Tue Apr 01 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
ruby 1-m.rb 4767ms 126ms 811.9MB 6707ms 477ms truffleruby 24.2.0
ruby 1.rb 4863ms 1.8ms 109.4MB 4763ms 83ms ruby/yjit 3.4.2
perl 1.pl timeout 0.0ms 77.8MB 4957ms 30ms perl 5.40.1
ruby 1.rb timeout 0.0ms 70.1MB 4940ms 43ms ruby 3.4.2

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 508ms 33ms 20.3MB 483ms 10ms ruby/yjit 3.4.2
ruby 1-m.rb 555ms 69ms 418.8MB 1097ms 167ms truffleruby 24.2.0
ruby 1.rb 928ms 2.7ms 19.6MB 903ms 10ms ruby 3.4.2
perl 1.pl 1821ms 7.9ms 14.4MB 1807ms 0ms perl 5.40.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 6.rb 2077ms 33ms 23.0MB 2053ms 10ms ruby/yjit 3.4.2
ruby 6-m.rb 2154ms 27ms 419.9MB 5600ms 347ms truffleruby 24.2.0
perl 1.pl 3620ms 21ms 10.9MB 3607ms 0ms perl 5.40.1
ruby 6.rb 3878ms 66ms 22.5MB 3853ms 13ms ruby 3.4.2

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 6.rb 265ms 3.1ms 15.0MB 247ms 7ms ruby/yjit 3.4.2
perl 1.pl 371ms 2.6ms 6.6MB 360ms 0ms perl 5.40.1
ruby 6.rb 439ms 2.9ms 14.5MB 420ms 3ms ruby 3.4.2
ruby 6-m.rb 812ms 40ms 382.1MB 2017ms 183ms truffleruby 24.2.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
perl 1.pl 2.7ms 0.2ms 5.3MB 0ms 0ms perl 5.40.1
ruby 1.rb 35ms 0.3ms 139.0MB 12ms 24ms truffleruby 24.2.0
ruby 1.rb 53ms 1.0ms 13.1MB 40ms 2ms ruby/yjit 3.4.2
ruby 1.rb 54ms 1.4ms 12.9MB 40ms 2ms ruby 3.4.2

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 2.rb 827ms 10ms 306.8MB 1060ms 120ms truffleruby 24.2.0
perl 2.pl timeout 0.0ms 6.1MB 4990ms 0ms perl 5.40.1
ruby 2.rb timeout 0.0ms 12.9MB 4980ms 7ms ruby 3.4.2
ruby 2.rb timeout 0.0ms 13.5MB 4980ms 7ms ruby/yjit 3.4.2

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 2-m.rb 312ms 17ms 309.9MB 547ms 110ms truffleruby 24.2.0
ruby 2.rb 1069ms 6.2ms 13.5MB 1050ms 7ms ruby/yjit 3.4.2
perl 2.pl 2724ms 26ms 6.1MB 2713ms 0ms perl 5.40.1
ruby 2.rb 2781ms 57ms 12.9MB 2763ms 7ms ruby 3.4.2

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
perl 4.pl timeout 0.0ms 9.9MB 19727ms 10ms perl 5.40.1
ruby 4.rb timeout 0.0ms 12.9MB 4987ms 0ms ruby 3.4.2
ruby 4.rb timeout 0.0ms 13.5MB 4983ms 3ms ruby/yjit 3.4.2
ruby 4.rb timeout 0.0ms 425.1MB 5170ms 247ms truffleruby 24.2.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 4.rb 4858ms 56ms 417.3MB 5143ms 210ms truffleruby 24.2.0
perl 4.pl timeout 0.0ms 10.1MB 19560ms 10ms perl 5.40.1
ruby 4.rb timeout 0.0ms 12.9MB 4983ms 7ms ruby 3.4.2
ruby 4.rb timeout 0.0ms 13.5MB 4980ms 7ms ruby/yjit 3.4.2

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 4.rb 1459ms 49ms 378.8MB 1800ms 147ms truffleruby 24.2.0
perl 4-m.pl 3427ms 15ms 9.4MB 13227ms 3ms perl 5.40.1
ruby 4.rb timeout 0.0ms 13.0MB 4983ms 0ms ruby 3.4.2
ruby 4.rb timeout 0.0ms 13.8MB 4980ms 3ms ruby/yjit 3.4.2