Python 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
python 1.py 1831ms 34ms 220.3MB 1667ms 147ms pypy 3.8.13
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4
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.1.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 140ms 3.4ms 78.6MB 107ms 20ms pypy 3.8.13
python 1.py 682ms 3.3ms 12.4MB 657ms 7ms pyston 3.8.12
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
python 1.py 1619ms 7.5ms 11.8MB 1603ms 0ms cpython 3.10.4

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1538ms 8.5ms 221.3MB 1423ms 100ms pypy 3.8.13
ruby 1.rb 3734ms 38ms 336.8MB 3510ms 207ms ruby/yjit 3.1.2
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4
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 truffleruby 22.1.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 274ms 3.5ms 42.3MB 230ms 23ms ruby 3.1.2
python 1.py 312ms 8.1ms 90.4MB 270ms 23ms pypy 3.8.13
ruby 1.rb 439ms 2.5ms 298.8MB 270ms 150ms ruby/yjit 3.1.2
python 1.py 864ms 4.1ms 17.2MB 843ms 0ms pyston 3.8.12
python 1.py 910ms 2.7ms 17.0MB 887ms 7ms cpython 3.10.4
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 753ms 3.4ms 82.9MB 707ms 27ms pypy 3.8.13
python 1.py 2245ms 159ms 9.3MB 2230ms 0ms cpython 3.10.4
python 1.py 2294ms 0.4ms 10.0MB 2283ms 0ms pyston 3.8.12

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 199ms 12ms 76.2MB 163ms 17ms pypy 3.8.13
python 1.py 404ms 0.7ms 9.1MB 390ms 0ms pyston 3.8.12
python 1.py 419ms 0.5ms 8.5MB 407ms 0ms cpython 3.10.4

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
python 1.py 2907ms 44ms 89.2MB 2870ms 23ms pypy 3.8.13
python 5-m.py 3562ms 19ms 12.9MB 5000ms 1320ms pyston 3.8.12
python 1.py 4022ms 316ms 8.2MB 4003ms 3ms pyston 3.8.12
python 5-m.py 4407ms 159ms 12.1MB 6360ms 1213ms cpython 3.10.4
ruby 6.rb 4521ms 77ms 39.5MB 4483ms 23ms ruby 3.1.2
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4
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.1.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 368ms 2.0ms 75.5MB 337ms 17ms pypy 3.8.13
python 5-m.py 432ms 6.5ms 12.9MB 537ms 173ms pyston 3.8.12
python 1.py 434ms 31ms 8.2MB 420ms 0ms pyston 3.8.12
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
python 5-m.py 545ms 3.4ms 12.1MB 683ms 197ms cpython 3.10.4
python 1.py 678ms 48ms 7.7MB 663ms 0ms cpython 3.10.4
python 5-m.py 910ms 3.9ms 78.8MB 1063ms 467ms pypy 3.8.13
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
python 1.py 14ms 1.8ms 7.6MB 10ms 0ms pyston 3.8.12
python 1.py 16ms 2.8ms 7.3MB 10ms 0ms cpython 3.10.4
python 1.py 37ms 1.1ms 54.6MB 12ms 10ms pypy 3.8.13
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

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1696ms 20ms 29.7MB 1390ms 973ms pyston 3.8.12
python 1.py 2385ms 42ms 29.1MB 2103ms 1053ms cpython 3.10.4
python 1.py 4919ms 7.5ms 131.9MB 3857ms 917ms pypy 3.8.13

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 380ms 7.0ms 24.2MB 313ms 160ms pyston 3.8.12
python 1.py 474ms 5.9ms 21.8MB 407ms 180ms cpython 3.10.4
python 1.py 1186ms 25ms 99.4MB 973ms 177ms pypy 3.8.13

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 278ms 3.3ms 38.9MB 227ms 30ms pyston 3.8.12
python 1.py 282ms 2.0ms 39.5MB 243ms 20ms cpython 3.10.4
ruby 1.rb 395ms 1.2ms 48.4MB 353ms 27ms ruby 3.1.2
python 1.py 454ms 1.0ms 103.8MB 403ms 30ms pypy 3.8.13
ruby 1.rb 572ms 1.1ms 305.6MB 413ms 140ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 2590ms 4.0ms 219.6MB 2427ms 143ms cpython 3.10.4
python 1.py 2634ms 4.5ms 221.0MB 2460ms 160ms pyston 3.8.12
python 1.py 2857ms 2.6ms 242.5MB 2740ms 97ms pypy 3.8.13
ruby 1.rb 3803ms 283ms 419.3MB 3567ms 220ms ruby/yjit 3.1.2
ruby 1.rb 3923ms 1.6ms 162.5MB 3800ms 103ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 3-m.py 4821ms 7.2ms 212.7MB 8583ms 417ms pypy 3.8.13
python 3.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4
python 3.py timeout 0.0ms 0.0MB 0ms 0ms pyston 3.8.12

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 3-m.py 665ms 7.3ms 88.7MB 983ms 137ms pypy 3.8.13
python 3-m.py 668ms 5.8ms 16.2MB 1170ms 37ms pyston 3.8.12
python 3-m.py 965ms 12ms 15.3MB 1743ms 37ms cpython 3.10.4

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 2.py 235ms 0.8ms 74.1MB 203ms 13ms pypy 3.8.13
python 1.py 280ms 0.3ms 75.4MB 250ms 17ms pypy 3.8.13
ruby 1.rb 601ms 3.2ms 30.2MB 573ms 13ms ruby 3.1.2
ruby 1.rb 668ms 1.4ms 286.7MB 507ms 147ms ruby/yjit 3.1.2
python 1.py 878ms 5.1ms 9.3MB 867ms 0ms pyston 3.8.12
python 2.py 1055ms 2.7ms 9.1MB 1040ms 0ms pyston 3.8.12
ruby 1-m.rb 1118ms 34ms 324.3MB 1683ms 130ms truffleruby 22.1.0
python 1.py 1743ms 15ms 8.4MB 1730ms 0ms cpython 3.10.4
python 2.py 2570ms 50ms 8.3MB 2557ms 0ms cpython 3.10.4

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 2.py 562ms 4.3ms 74.6MB 523ms 17ms pypy 3.8.13
python 1.py 614ms 2.1ms 76.1MB 583ms 17ms pypy 3.8.13
ruby 1.rb 1454ms 1.2ms 286.8MB 1283ms 153ms ruby/yjit 3.1.2
ruby 1.rb 1827ms 148ms 30.2MB 1800ms 10ms ruby 3.1.2
ruby 1-m.rb 1929ms 66ms 366.3MB 2780ms 180ms truffleruby 22.1.0
python 1.py 2586ms 14ms 9.3MB 2570ms 0ms pyston 3.8.12
python 2.py 3121ms 7.9ms 9.0MB 3107ms 0ms pyston 3.8.12
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4
python 2.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 2.py 167ms 1.7ms 74.0MB 133ms 17ms pypy 3.8.13
python 1.py 184ms 0.5ms 74.3MB 143ms 17ms pypy 3.8.13
ruby 1.rb 334ms 0.5ms 30.0MB 313ms 3ms ruby 3.1.2
ruby 1.rb 419ms 1.1ms 286.8MB 280ms 123ms ruby/yjit 3.1.2
python 1.py 431ms 5.2ms 8.9MB 413ms 0ms pyston 3.8.12
python 2.py 487ms 2.4ms 8.5MB 477ms 0ms pyston 3.8.12
ruby 1-m.rb 801ms 86ms 311.0MB 1277ms 97ms truffleruby 22.1.0
python 1.py 811ms 4.9ms 7.8MB 793ms 3ms cpython 3.10.4
python 2.py 1234ms 16ms 7.3MB 1217ms 0ms cpython 3.10.4

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 2988ms 32ms 233.4MB 2767ms 203ms pypy 3.8.13
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4
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.1.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 443ms 13ms 151.0MB 363ms 60ms pypy 3.8.13
ruby 1-m.rb 3899ms 12ms 522.4MB 7130ms 253ms truffleruby 22.1.0
ruby 1.rb 3919ms 269ms 300.9MB 3750ms 147ms ruby/yjit 3.1.2
ruby 1.rb 4824ms 19ms 44.4MB 4790ms 17ms ruby 3.1.2
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4
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 1453ms 19ms 300.6MB 1823ms 127ms truffleruby 22.1.0
python 2.py 2271ms 62ms 74.5MB 2243ms 13ms pypy 3.8.13
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4
python 2.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4
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 294ms 5.0ms 74.1MB 253ms 27ms pypy 3.8.13
ruby 2-m.rb 547ms 17ms 293.9MB 873ms 107ms truffleruby 22.1.0
python 1.py 583ms 1.7ms 73.4MB 557ms 13ms pypy 3.8.13
python 1.py 1420ms 106ms 8.7MB 1407ms 0ms pyston 3.8.12
python 2.py 2057ms 12ms 8.5MB 2043ms 0ms pyston 3.8.12
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
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4
python 2.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4

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.4
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.1.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1357ms 20ms 209.6MB 1277ms 70ms pypy 3.8.13
python 1.py 2822ms 61ms 86.4MB 2770ms 37ms pyston 3.8.12
ruby 1.rb 4255ms 11ms 450.1MB 4693ms 197ms truffleruby 22.1.0
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4
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 2069ms 2.9ms 8.6MB 2037ms 20ms cpython 3.10.4
python 4.py 2237ms 2.1ms 9.4MB 2207ms 10ms pyston 3.8.12
python 4.py 2733ms 28ms 127.6MB 2640ms 73ms 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.1.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 4.py 502ms 4.7ms 8.4MB 480ms 0ms cpython 3.10.4
python 4.py 535ms 1.2ms 9.1MB 520ms 0ms pyston 3.8.12
python 4.py 702ms 4.2ms 79.7MB 670ms 20ms pypy 3.8.13
ruby 1-m.rb 2398ms 14ms 380.8MB 4403ms 170ms truffleruby 22.1.0
ruby 1.rb 2920ms 118ms 162.8MB 2817ms 83ms ruby 3.1.2
ruby 1.rb 3138ms 10ms 420.7MB 2910ms 213ms ruby/yjit 3.1.2

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 3387ms 11ms 274.3MB 3267ms 103ms pypy 3.8.13
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4
python 1.py timeout 0.0ms 0.0MB 0ms 0ms pyston 3.8.12

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 478ms 2.4ms 98.3MB 430ms 27ms pypy 3.8.13
python 1.py 745ms 2.1ms 30.7MB 697ms 30ms pyston 3.8.12
python 1.py 757ms 1.3ms 30.7MB 723ms 20ms cpython 3.10.4

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 4296ms 306ms 8.6MB 4283ms 0ms pyston 3.8.12
python 1.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4
python 1.py timeout 0.0ms 0.0MB 0ms 0ms pypy 3.8.13

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1128ms 4.1ms 8.7MB 1113ms 0ms pyston 3.8.12
python 1.py 1465ms 5.2ms 7.3MB 1450ms 0ms cpython 3.10.4
python 1.py 1600ms 4.0ms 80.0MB 1570ms 17ms pypy 3.8.13

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.4
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.1.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.4
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.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
python 8-m.py 4206ms 35ms 105.3MB 7317ms 397ms pypy 3.8.13
python 8.py timeout 0.0ms 0.0MB 0ms 0ms cpython 3.10.4
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