Ruby VS Python benchmarks

Current benchmark data was generated on Fri Sep 30 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
python 1.py 1760ms 27ms 220.4MB 1617ms 123ms pypy 3.8.13
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7
python 1.py timeout 0.0ms 0.0MB 0ms 0ms pyston 3.8.12
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
python 1.py 143ms 21ms 78.6MB 97ms 23ms pypy 3.8.13
python 1.py 672ms 1.8ms 12.0MB 647ms 10ms pyston 3.8.12
ruby 1.rb 1035ms 3.3ms 292.0MB 857ms 163ms ruby/yjit 3.1.2
ruby 1.rb 1079ms 3.4ms 35.5MB 1033ms 27ms ruby 3.1.2
ruby 1-m.rb 1143ms 28ms 386.2MB 1847ms 157ms truffleruby 22.2.0
python 1.py 1631ms 5.5ms 11.8MB 1610ms 3ms cpython 3.10.7

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1507ms 105ms 221.2MB 1387ms 107ms pypy 3.8.13
ruby 1.rb 3425ms 53ms 336.7MB 3213ms 193ms ruby/yjit 3.1.2
ruby 1.rb 4508ms 91ms 80.1MB 4427ms 60ms ruby 3.1.2
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7
python 1.py timeout 0.0ms 0.0MB 0ms 0ms pyston 3.8.12
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
ruby 1.rb 290ms 3.0ms 42.2MB 250ms 20ms ruby 3.1.2
python 1.py 311ms 11ms 90.3MB 267ms 23ms pypy 3.8.13
ruby 1.rb 428ms 4.6ms 298.7MB 273ms 137ms ruby/yjit 3.1.2
python 1.py 867ms 4.7ms 16.9MB 837ms 7ms pyston 3.8.12
python 1.py 932ms 46ms 16.9MB 883ms 7ms cpython 3.10.7
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
ruby 6.rb 2890ms 6.9ms 295.3MB 2730ms 143ms ruby/yjit 3.1.2
python 1.py 3029ms 165ms 89.2MB 2983ms 27ms pypy 3.8.13
python 5-m.py 3558ms 20ms 12.6MB 5183ms 1190ms pyston 3.8.12
python 1.py 3999ms 58ms 7.9MB 3983ms 0ms pyston 3.8.12
ruby 6.rb 4559ms 42ms 39.4MB 4527ms 13ms ruby 3.1.2
python 5-m.py 4619ms 10ms 12.1MB 6683ms 1273ms cpython 3.10.7
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7
python 5-m.py timeout 0.0ms 0.0MB 0ms 0ms pypy 3.8.13
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
python 1.py 387ms 10.0ms 75.2MB 357ms 17ms pypy 3.8.13
python 1.py 410ms 0.9ms 7.9MB 397ms 0ms pyston 3.8.12
python 5-m.py 438ms 9.0ms 12.7MB 557ms 160ms pyston 3.8.12
ruby 6.rb 517ms 5.9ms 31.1MB 490ms 13ms ruby 3.1.2
ruby 6.rb 530ms 2.3ms 287.7MB 373ms 137ms ruby/yjit 3.1.2
python 5-m.py 575ms 55ms 12.1MB 727ms 160ms cpython 3.10.7
python 1.py 714ms 3.9ms 7.8MB 700ms 0ms cpython 3.10.7
python 5-m.py 916ms 11ms 78.8MB 1077ms 460ms pypy 3.8.13
ruby 6-m.rb 1710ms 5.1ms 368.7MB 3030ms 150ms truffleruby 22.2.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 14ms 0.9ms 7.4MB 10ms 0ms cpython 3.10.7
python 1.py 15ms 2.2ms 7.2MB 10ms 0ms pyston 3.8.12
python 1.py 38ms 0.5ms 55.0MB 12ms 12ms pypy 3.8.13
ruby 1.rb 48ms 0.8ms 145.7MB 22ms 24ms truffleruby 22.2.0
ruby 1.rb 73ms 0.7ms 30.0MB 50ms 10ms ruby 3.1.2
ruby 1.rb 259ms 0.7ms 286.6MB 106ms 136ms ruby/yjit 3.1.2

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 272ms 1.4ms 38.2MB 233ms 23ms pyston 3.8.12
python 1.py 286ms 2.2ms 38.6MB 257ms 13ms cpython 3.10.7
ruby 1.rb 448ms 12ms 48.7MB 413ms 10ms ruby 3.1.2
python 1.py 451ms 0.5ms 104.8MB 403ms 37ms pypy 3.8.13
ruby 1.rb 627ms 2.2ms 305.0MB 440ms 167ms 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
python 1.py 2580ms 13ms 220.7MB 2457ms 103ms cpython 3.10.7
python 1.py 2581ms 3.2ms 220.6MB 2397ms 167ms pyston 3.8.12
python 1.py 2829ms 2.8ms 242.7MB 2720ms 93ms pypy 3.8.13
ruby 1.rb 3913ms 2.7ms 162.4MB 3813ms 83ms ruby 3.1.2
ruby 1.rb 4091ms 3.2ms 419.6MB 3837ms 237ms 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
python 2.py 238ms 4.4ms 73.9MB 200ms 20ms pypy 3.8.13
python 1.py 278ms 1.8ms 75.5MB 240ms 20ms pypy 3.8.13
ruby 1.rb 660ms 1.2ms 286.7MB 510ms 133ms ruby/yjit 3.1.2
ruby 1.rb 676ms 6.3ms 30.1MB 653ms 3ms ruby 3.1.2
python 1.py 937ms 1.0ms 8.9MB 920ms 0ms pyston 3.8.12
ruby 1-m.rb 937ms 23ms 313.9MB 1377ms 110ms truffleruby 22.2.0
python 2.py 1082ms 6.0ms 8.7MB 1070ms 0ms pyston 3.8.12
python 1.py 1759ms 7.5ms 8.4MB 1743ms 3ms cpython 3.10.7
python 2.py 2552ms 33ms 8.3MB 2537ms 0ms cpython 3.10.7

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 2.py 561ms 2.2ms 74.9MB 533ms 13ms pypy 3.8.13
python 1.py 613ms 0.9ms 76.0MB 577ms 23ms pypy 3.8.13
ruby 1.rb 1460ms 4.2ms 286.7MB 1310ms 130ms ruby/yjit 3.1.2
ruby 1.rb 1804ms 16ms 343.9MB 2420ms 137ms truffleruby 22.2.0
ruby 1.rb 1879ms 3.5ms 30.2MB 1850ms 13ms ruby 3.1.2
python 1.py 2803ms 51ms 8.9MB 2783ms 0ms pyston 3.8.12
python 2.py 3188ms 7.1ms 8.6MB 3177ms 0ms pyston 3.8.12
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7
python 2.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 2.py 166ms 0.5ms 74.4MB 137ms 13ms pypy 3.8.13
python 1.py 184ms 1.9ms 74.5MB 153ms 10ms pypy 3.8.13
ruby 1.rb 373ms 2.8ms 29.8MB 353ms 7ms ruby 3.1.2
python 1.py 455ms 3.9ms 8.7MB 440ms 0ms pyston 3.8.12
ruby 1.rb 459ms 1.0ms 286.7MB 297ms 143ms ruby/yjit 3.1.2
python 2.py 503ms 2.3ms 8.2MB 487ms 0ms pyston 3.8.12
ruby 1-m.rb 646ms 3.5ms 299.9MB 960ms 113ms truffleruby 22.2.0
python 1.py 836ms 3.1ms 7.9MB 807ms 3ms cpython 3.10.7
python 2.py 1255ms 20ms 7.3MB 1243ms 0ms cpython 3.10.7

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 2706ms 50ms 233.4MB 2520ms 167ms pypy 3.8.13
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7
python 1.py timeout 0.0ms 0.0MB 0ms 0ms pyston 3.8.12
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
python 1.py 389ms 1.4ms 150.9MB 323ms 47ms pypy 3.8.13
ruby 1-m.rb 3686ms 45ms 554.1MB 6717ms 240ms truffleruby 22.2.0
ruby 1.rb 4073ms 11ms 300.7MB 3900ms 160ms ruby/yjit 3.1.2
ruby 1.rb 4835ms 18ms 44.4MB 4800ms 23ms ruby 3.1.2
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7
python 1.py timeout 0.0ms 0.0MB 0ms 0ms pyston 3.8.12

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 2.rb 1295ms 5.6ms 306.8MB 1593ms 117ms truffleruby 22.2.0
python 2.py 2105ms 22ms 74.5MB 2077ms 10ms pypy 3.8.13
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7
python 2.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7
python 1.py timeout 0.0ms 0.0MB 0ms 0ms pypy 3.8.13
python 1.py timeout 0.0ms 0.0MB 0ms 0ms pyston 3.8.12
python 2.py timeout 0.0ms 0.0MB 0ms 0ms pyston 3.8.12
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
python 2.py 278ms 3.4ms 74.0MB 247ms 13ms pypy 3.8.13
ruby 2-m.rb 493ms 6.7ms 304.9MB 767ms 113ms truffleruby 22.2.0
python 1.py 577ms 5.3ms 73.4MB 550ms 13ms pypy 3.8.13
python 1.py 1154ms 8.4ms 8.3MB 1140ms 0ms pyston 3.8.12
python 2.py 1573ms 0.7ms 8.2MB 1560ms 0ms pyston 3.8.12
ruby 2.rb 2395ms 10ms 286.8MB 2240ms 133ms ruby/yjit 3.1.2
ruby 2.rb 3243ms 20ms 29.9MB 3217ms 13ms ruby 3.1.2
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7
python 2.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7
python 1.py timeout 0.0ms 0.0MB 0ms 0ms pypy 3.8.13
python 1.py timeout 0.0ms 0.0MB 0ms 0ms pyston 3.8.12
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
python 1.py 1332ms 9.4ms 209.6MB 1267ms 47ms pypy 3.8.13
python 1.py 2644ms 32ms 86.0MB 2583ms 40ms pyston 3.8.12
ruby 1.rb 4157ms 8.2ms 458.8MB 4563ms 180ms truffleruby 22.2.0
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7
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
python 4.py 2341ms 0.9ms 8.6MB 2297ms 27ms cpython 3.10.7
python 4.py 2416ms 1.3ms 9.0MB 2387ms 13ms pyston 3.8.12
python 4.py 2613ms 14ms 127.7MB 2547ms 50ms pypy 3.8.13
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
python 4.py 565ms 1.7ms 8.3MB 550ms 0ms cpython 3.10.7
python 4.py 578ms 0.4ms 8.8MB 560ms 0ms pyston 3.8.12
python 4.py 689ms 24ms 80.0MB 653ms 17ms pypy 3.8.13
ruby 1-m.rb 2343ms 8.7ms 410.5MB 4263ms 187ms truffleruby 22.2.0
ruby 1.rb 2950ms 4.1ms 162.2MB 2857ms 77ms ruby 3.1.2
ruby 1.rb 3100ms 8.3ms 420.7MB 2860ms 223ms ruby/yjit 3.1.2

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 8.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7
python 8.py timeout 0.0ms 0.0MB 0ms 0ms pypy 3.8.13
python 8.py timeout 0.0ms 0.0MB 0ms 0ms pyston 3.8.12
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
python 8.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7
python 8.py timeout 0.0ms 0.0MB 0ms 0ms pypy 3.8.13
python 8.py timeout 0.0ms 0.0MB 0ms 0ms pyston 3.8.12
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
ruby 4.rb 3041ms 38ms 368.9MB 3677ms 137ms truffleruby 22.2.0
python 8-m.py 4187ms 29ms 110.1MB 7277ms 400ms pypy 3.8.13
python 8.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.7
python 8.py timeout 0.0ms 0.0MB 0ms 0ms pyston 3.8.12
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