Perl VS Ruby benchmarks

Current benchmark data was generated on Sat Mar 29 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.rb 4816ms 115ms 110.0MB 4720ms 83ms ruby/yjit 3.4.2
perl 1.pl timeout 0.0ms 77.8MB 4963ms 27ms perl 5.40.1
ruby 1.rb timeout 0.0ms 70.6MB 4940ms 47ms ruby 3.4.2
ruby 1.rb timeout 0.0ms 767.2MB 6573ms 687ms truffleruby 24.2.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 493ms 0.5ms 20.3MB 467ms 7ms ruby/yjit 3.4.2
ruby 1-m.rb 559ms 80ms 422.2MB 1103ms 163ms truffleruby 24.2.0
ruby 1.rb 937ms 4.5ms 19.6MB 913ms 10ms ruby 3.4.2
perl 1.pl 1805ms 9.4ms 14.4MB 1790ms 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 2064ms 15ms 23.0MB 2037ms 10ms ruby/yjit 3.4.2
ruby 6-m.rb 2289ms 237ms 407.7MB 5830ms 393ms truffleruby 24.2.0
perl 1.pl 3618ms 29ms 10.9MB 3607ms 0ms perl 5.40.1
ruby 6.rb 3860ms 29ms 22.5MB 3833ms 10ms ruby 3.4.2

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 6.rb 267ms 1.8ms 15.0MB 247ms 7ms ruby/yjit 3.4.2
perl 1.pl 369ms 1.3ms 6.6MB 360ms 0ms perl 5.40.1
ruby 6.rb 439ms 3.5ms 14.6MB 420ms 7ms ruby 3.4.2
ruby 6-m.rb 753ms 86ms 387.0MB 1863ms 167ms 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.6ms 0.2ms 5.1MB 0ms 0ms perl 5.40.1
ruby 1.rb 36ms 0.6ms 142.1MB 12ms 30ms truffleruby 24.2.0
ruby 1.rb 53ms 1.6ms 13.0MB 38ms 2ms ruby/yjit 3.4.2
ruby 1.rb 54ms 2.2ms 12.9MB 40ms 4ms ruby 3.4.2

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 2.rb 824ms 13ms 322.6MB 1073ms 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 4983ms 7ms ruby 3.4.2
ruby 2.rb timeout 0.0ms 13.5MB 4977ms 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 321ms 4.1ms 314.2MB 577ms 113ms truffleruby 24.2.0
ruby 2.rb 1076ms 10ms 13.6MB 1057ms 7ms ruby/yjit 3.4.2
perl 2.pl 2754ms 16ms 6.1MB 2743ms 0ms perl 5.40.1
ruby 2.rb 2866ms 27ms 12.9MB 2847ms 3ms 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.8MB 19777ms 7ms perl 5.40.1
ruby 4.rb timeout 0.0ms 13.0MB 4983ms 3ms 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 455.8MB 5153ms 247ms truffleruby 24.2.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 4.rb 4895ms 35ms 451.9MB 5170ms 223ms truffleruby 24.2.0
perl 4.pl timeout 0.0ms 10.3MB 19540ms 17ms perl 5.40.1
ruby 4.rb timeout 0.0ms 12.9MB 4983ms 3ms ruby 3.4.2
ruby 4.rb timeout 0.0ms 13.5MB 4983ms 3ms ruby/yjit 3.4.2

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 4.rb 1440ms 22ms 426.8MB 1757ms 150ms truffleruby 24.2.0
perl 4-m.pl 3406ms 19ms 9.6MB 13200ms 10ms perl 5.40.1
ruby 4.rb timeout 0.0ms 13.0MB 4983ms 3ms ruby 3.4.2
ruby 4.rb timeout 0.0ms 13.8MB 4983ms 3ms ruby/yjit 3.4.2