Python VS Ruby benchmarks

Current benchmark data was generated on Thu May 04 2023, 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 1790ms 46ms 217.6MB 1663ms 110ms pypy 3.9.16
python 1.py timeout 0.0ms 40.9MB 4960ms 17ms cpython 3.11.3
python 1.py timeout 0.0ms 40.3MB 4917ms 63ms pyston 3.8.12
ruby 1.rb timeout 0.0ms 72.7MB 4957ms 27ms ruby 3.2.2
ruby 1.rb timeout 0.0ms 82.1MB 4917ms 63ms ruby/yjit 3.2.2
ruby 1.rb timeout 0.0ms 493.5MB 8423ms 347ms truffleruby 22.3.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 160ms 14ms 74.6MB 110ms 23ms pypy 3.9.16
ruby 1.rb 625ms 33ms 40.7MB 590ms 20ms ruby/yjit 3.2.2
python 1.py 671ms 2.6ms 12.0MB 633ms 17ms pyston 3.8.12
python 1.py 966ms 14ms 12.5MB 947ms 3ms cpython 3.11.3
ruby 1.rb 1054ms 21ms 40.2MB 1020ms 17ms ruby 3.2.2
ruby 1-m.rb 1308ms 42ms 429.5MB 2093ms 207ms truffleruby 22.3.1

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1514ms 44ms 220.9MB 1403ms 93ms pypy 3.9.16
ruby 1.rb 4132ms 285ms 82.8MB 4050ms 63ms ruby/yjit 3.2.2
ruby 1.rb 4480ms 204ms 82.2MB 4407ms 53ms ruby 3.2.2
python 1.py timeout 0.0ms 20.2MB 4977ms 7ms cpython 3.11.3
python 1.py timeout 0.0ms 17.3MB 4980ms 0ms pyston 3.8.12
ruby 1.rb timeout 0.0ms 836.9MB 4197ms 1300ms truffleruby 22.3.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 265ms 7.2ms 45.0MB 227ms 23ms ruby/yjit 3.2.2
ruby 1.rb 284ms 10ms 44.5MB 240ms 27ms ruby 3.2.2
python 1.py 308ms 11ms 88.1MB 263ms 27ms pypy 3.9.16
python 1.py 799ms 10ms 19.9MB 773ms 3ms cpython 3.11.3
python 1.py 868ms 8.8ms 16.8MB 840ms 7ms pyston 3.8.12
ruby 1.rb timeout 0.0ms 958.8MB 3693ms 1443ms truffleruby 22.3.1

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 605ms 2.5ms 78.3MB 567ms 20ms pypy 3.9.16
python 1.py 1404ms 0.9ms 10.1MB 1387ms 0ms cpython 3.11.3
python 1.py 2300ms 2.5ms 9.7MB 2280ms 3ms pyston 3.8.12

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 172ms 1.4ms 73.2MB 137ms 20ms pypy 3.9.16
python 1.py 263ms 2.3ms 9.3MB 247ms 0ms cpython 3.11.3
python 1.py 405ms 1.5ms 9.0MB 390ms 0ms pyston 3.8.12

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 6.rb 2402ms 31ms 43.5MB 2360ms 23ms ruby/yjit 3.2.2
ruby 6-m.rb 3067ms 177ms 363.7MB 5537ms 270ms truffleruby 22.3.1
python 5-m.py 3471ms 17ms 12.7MB 4990ms 1227ms pyston 3.8.12
python 1.py 3566ms 105ms 85.0MB 3510ms 37ms pypy 3.9.16
python 1.py 3928ms 17ms 8.0MB 3910ms 0ms pyston 3.8.12
python 5-m.py 4067ms 23ms 13.6MB 5703ms 1260ms cpython 3.11.3
ruby 6.rb 4221ms 19ms 43.1MB 4183ms 20ms ruby 3.2.2
python 5-m.py 4917ms 70ms 76.1MB 5657ms 1113ms pypy 3.9.16
python 1.py timeout 0.0ms 8.6MB 4980ms 3ms cpython 3.11.3

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 6.rb 317ms 2.2ms 35.0MB 287ms 13ms ruby/yjit 3.2.2
python 1.py 409ms 0.7ms 7.9MB 393ms 3ms pyston 3.8.12
python 1.py 427ms 11ms 73.7MB 390ms 20ms pypy 3.9.16
python 5-m.py 428ms 8.5ms 12.6MB 557ms 143ms pyston 3.8.12
ruby 6.rb 492ms 0.7ms 34.5MB 467ms 10ms ruby 3.2.2
python 5-m.py 505ms 14ms 13.6MB 593ms 207ms cpython 3.11.3
python 1.py 604ms 1.0ms 8.6MB 587ms 0ms cpython 3.11.3
python 5-m.py 874ms 16ms 76.3MB 983ms 463ms pypy 3.9.16
ruby 6-m.rb 960ms 14ms 318.2MB 1630ms 130ms truffleruby 22.3.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 13ms 0.4ms 7.3MB 10ms 0ms pyston 3.8.12
python 1.py 15ms 0.9ms 8.4MB 7ms 3ms cpython 3.11.3
python 1.py 40ms 2.2ms 52.0MB 14ms 10ms pypy 3.9.16
ruby 1.rb 57ms 5.5ms 157.3MB 30ms 34ms truffleruby 22.3.1
ruby 1.rb 75ms 0.9ms 32.1MB 44ms 18ms ruby 3.2.2
ruby 1.rb 81ms 4.0ms 32.2MB 50ms 16ms ruby/yjit 3.2.2

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1759ms 12ms 33.8MB 1307ms 933ms pyston 3.8.12
python 1.py 2124ms 28ms 29.8MB 1697ms 923ms cpython 3.11.3
python 1.py 4614ms 20ms 126.8MB 3537ms 890ms pypy 3.9.16

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 402ms 6.0ms 30.2MB 293ms 170ms pyston 3.8.12
python 1.py 439ms 8.1ms 24.9MB 333ms 170ms cpython 3.11.3
python 1.py 1170ms 6.1ms 96.5MB 913ms 207ms pypy 3.9.16

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 276ms 1.7ms 38.4MB 247ms 13ms pyston 3.8.12
python 1.py 285ms 7.2ms 41.2MB 253ms 10ms cpython 3.11.3
python 1.py 416ms 1.0ms 98.6MB 373ms 27ms pypy 3.9.16
ruby 1.rb 451ms 2.9ms 50.6MB 403ms 33ms ruby 3.2.2
ruby 1.rb 464ms 15ms 51.8MB 420ms 27ms ruby/yjit 3.2.2
ruby 1.rb timeout 0.0ms 470.5MB 9063ms 293ms truffleruby 22.3.1

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 2584ms 4.8ms 223.0MB 2433ms 133ms cpython 3.11.3
python 1.py 2598ms 22ms 220.7MB 2400ms 177ms pyston 3.8.12
python 1.py 2650ms 20ms 239.6MB 2537ms 97ms pypy 3.9.16
ruby 1.rb 4078ms 5.1ms 175.2MB 3970ms 93ms ruby 3.2.2
ruby 1.rb 4089ms 9.0ms 174.1MB 3973ms 97ms ruby/yjit 3.2.2
ruby 1.rb timeout 0.0ms 423.9MB 9180ms 243ms truffleruby 22.3.1

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 3-m.py 4677ms 58ms 209.3MB 8310ms 410ms pypy 3.9.16
python 3.py timeout 0.0ms 35.2MB 97ms 13ms cpython 3.11.3
python 3.py timeout 0.0ms 34.2MB 73ms 20ms 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 635ms 0.8ms 86.0MB 947ms 127ms pypy 3.9.16
python 3-m.py 676ms 6.7ms 17.7MB 1183ms 33ms pyston 3.8.12
python 3-m.py 943ms 4.1ms 16.7MB 1683ms 53ms cpython 3.11.3

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 2.py 232ms 1.0ms 71.0MB 203ms 17ms pypy 3.9.16
python 1.py 278ms 6.3ms 71.9MB 247ms 13ms pypy 3.9.16
ruby 1.rb 473ms 15ms 32.9MB 450ms 7ms ruby/yjit 3.2.2
ruby 1.rb 658ms 7.7ms 32.4MB 633ms 7ms ruby 3.2.2
python 1.py 925ms 7.8ms 9.0MB 907ms 0ms pyston 3.8.12
ruby 1-m.rb 985ms 50ms 320.7MB 1427ms 120ms truffleruby 22.3.1
python 2.py 1073ms 2.7ms 8.8MB 1057ms 0ms pyston 3.8.12
python 1.py 1276ms 27ms 9.3MB 1257ms 0ms cpython 3.11.3
python 2.py 1421ms 16ms 9.1MB 1407ms 0ms cpython 3.11.3

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 2.py 557ms 2.9ms 71.5MB 527ms 20ms pypy 3.9.16
python 1.py 608ms 1.1ms 72.4MB 587ms 7ms pypy 3.9.16
ruby 1.rb 1241ms 4.1ms 32.9MB 1213ms 17ms ruby/yjit 3.2.2
ruby 1.rb 1814ms 14ms 32.4MB 1790ms 10ms ruby 3.2.2
ruby 1.rb 1843ms 9.4ms 374.4MB 2410ms 177ms truffleruby 22.3.1
python 1.py 2726ms 8.2ms 9.0MB 2710ms 0ms pyston 3.8.12
python 2.py 3173ms 4.4ms 8.7MB 3160ms 0ms pyston 3.8.12
python 1.py 3748ms 29ms 9.2MB 3733ms 0ms cpython 3.11.3
python 2.py 4262ms 61ms 9.1MB 4247ms 0ms cpython 3.11.3

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 2.py 162ms 0.5ms 71.2MB 130ms 13ms pypy 3.9.16
python 1.py 181ms 1.1ms 72.4MB 140ms 23ms pypy 3.9.16
ruby 1.rb 272ms 2.5ms 32.8MB 243ms 13ms ruby/yjit 3.2.2
ruby 1.rb 363ms 3.1ms 32.3MB 333ms 17ms ruby 3.2.2
python 1.py 444ms 1.3ms 8.8MB 430ms 0ms pyston 3.8.12
python 2.py 506ms 6.4ms 8.3MB 490ms 0ms pyston 3.8.12
python 1.py 598ms 1.3ms 8.7MB 583ms 0ms cpython 3.11.3
python 2.py 712ms 6.9ms 8.4MB 697ms 0ms cpython 3.11.3
ruby 1-m.rb 721ms 29ms 322.6MB 1060ms 123ms truffleruby 22.3.1

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 2892ms 160ms 230.4MB 2713ms 160ms pypy 3.9.16
python 1.py timeout 0.0ms 92.9MB 4940ms 40ms cpython 3.11.3
python 1.py timeout 0.0ms 130.3MB 4920ms 53ms pyston 3.8.12
ruby 1.rb timeout 0.0ms 96.4MB 4937ms 47ms ruby 3.2.2
ruby 1.rb timeout 0.0ms 96.9MB 4920ms 60ms ruby/yjit 3.2.2
ruby 1.rb timeout 0.0ms 523.5MB 9013ms 297ms truffleruby 22.3.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 423ms 11ms 149.9MB 360ms 47ms pypy 3.9.16
ruby 1-m.rb 4022ms 46ms 591.0MB 7290ms 320ms truffleruby 22.3.1
ruby 1.rb 4150ms 14ms 53.6MB 4097ms 37ms ruby/yjit 3.2.2
ruby 1.rb 4968ms 17ms 52.8MB 4920ms 30ms ruby 3.2.2
python 1.py timeout 0.0ms 37.1MB 4977ms 7ms cpython 3.11.3
python 1.py timeout 0.0ms 41.4MB 4960ms 17ms pyston 3.8.12

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 2.rb 1283ms 37ms 320.7MB 1533ms 127ms truffleruby 22.3.1
python 2.py 2132ms 23ms 71.3MB 2103ms 10ms pypy 3.9.16
python 1.py 3664ms 19ms 70.4MB 3623ms 23ms pypy 3.9.16
python 1.py timeout 0.0ms 8.4MB 4987ms 0ms cpython 3.11.3
python 2.py timeout 0.0ms 8.6MB 4983ms 0ms cpython 3.11.3
python 1.py timeout 0.0ms 8.3MB 4987ms 0ms pyston 3.8.12
python 2.py timeout 0.0ms 7.9MB 4980ms 0ms pyston 3.8.12
ruby 2.rb timeout 0.0ms 32.1MB 4970ms 17ms ruby 3.2.2
ruby 2.rb timeout 0.0ms 32.9MB 4957ms 23ms ruby/yjit 3.2.2

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 2.py 279ms 3.4ms 71.2MB 253ms 10ms pypy 3.9.16
python 1.py 425ms 14ms 70.4MB 390ms 17ms pypy 3.9.16
ruby 2-m.rb 457ms 19ms 301.8MB 693ms 93ms truffleruby 22.3.1
python 1.py 1156ms 2.0ms 8.4MB 1137ms 3ms pyston 3.8.12
python 2.py 1597ms 31ms 7.9MB 1577ms 3ms pyston 3.8.12
ruby 2.rb 2111ms 10ms 32.9MB 2067ms 23ms ruby/yjit 3.2.2
python 1.py 3179ms 60ms 8.4MB 3167ms 3ms cpython 3.11.3
ruby 2.rb 3201ms 26ms 32.2MB 3180ms 7ms ruby 3.2.2
python 2.py 3574ms 7.6ms 8.6MB 3557ms 0ms cpython 3.11.3

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py timeout 0.0ms 321.0MB 4897ms 80ms cpython 3.11.3
python 2.py timeout 0.0ms 633.5MB 4677ms 307ms cpython 3.11.3
python 1.py timeout 0.0ms 382.8MB 4850ms 133ms pypy 3.9.16
python 2.py timeout 0.0ms 991.9MB 4623ms 360ms pypy 3.9.16
python 1.py timeout 0.0ms 320.4MB 4903ms 80ms pyston 3.8.12
python 2.py timeout 0.0ms 633.3MB 4557ms 423ms pyston 3.8.12
ruby 1.rb timeout 0.0ms 344.6MB 4830ms 147ms ruby 3.2.2
ruby 1.rb timeout 0.0ms 345.2MB 4813ms 163ms ruby/yjit 3.2.2
ruby 1.rb timeout 0.0ms 684.3MB 4993ms 237ms truffleruby 22.3.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1331ms 14ms 207.2MB 1257ms 60ms pypy 3.9.16
python 2.py 1563ms 21ms 164.4MB 1463ms 83ms pyston 3.8.12
python 2.py 2088ms 6.3ms 164.9MB 1990ms 83ms cpython 3.11.3
python 2.py 2161ms 4.7ms 210.5MB 2013ms 133ms pypy 3.9.16
python 1.py 3370ms 74ms 86.0MB 3313ms 37ms pyston 3.8.12
ruby 1.rb 3763ms 62ms 428.9MB 4377ms 187ms truffleruby 22.3.1
python 1.py 4719ms 66ms 86.6MB 4660ms 40ms cpython 3.11.3
ruby 1.rb timeout 0.0ms 150.9MB 4913ms 70ms ruby 3.2.2
ruby 1.rb timeout 0.0ms 151.4MB 4907ms 70ms ruby/yjit 3.2.2

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 4.py 2411ms 1.3ms 9.1MB 2383ms 10ms pyston 3.8.12
python 4.py 2548ms 1.1ms 9.4MB 2503ms 27ms cpython 3.11.3
python 4.py 2622ms 44ms 125.4MB 2547ms 57ms pypy 3.9.16
ruby 1.rb timeout 0.0ms 160.6MB 4903ms 73ms ruby 3.2.2
ruby 1.rb timeout 0.0ms 159.8MB 4903ms 77ms ruby/yjit 3.2.2
ruby 1.rb timeout 0.0ms 435.3MB 9337ms 253ms truffleruby 22.3.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 4.py 576ms 0.8ms 8.8MB 560ms 0ms pyston 3.8.12
python 4.py 607ms 0.3ms 9.1MB 593ms 0ms cpython 3.11.3
python 4.py 672ms 6.8ms 77.0MB 640ms 17ms pypy 3.9.16
ruby 1-m.rb 2292ms 19ms 433.2MB 4103ms 230ms truffleruby 22.3.1
ruby 1.rb 3184ms 12ms 160.5MB 3113ms 50ms ruby 3.2.2
ruby 1.rb 3217ms 26ms 160.1MB 3120ms 80ms ruby/yjit 3.2.2

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 3388ms 38ms 273.2MB 3253ms 117ms pypy 3.9.16
python 1.py timeout 0.0ms 108.2MB 4930ms 57ms cpython 3.11.3
python 1.py timeout 0.0ms 107.6MB 4930ms 53ms pyston 3.8.12

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 475ms 3.2ms 94.3MB 430ms 27ms pypy 3.9.16
python 1.py 774ms 1.5ms 30.6MB 743ms 13ms pyston 3.8.12
python 1.py 821ms 4.6ms 31.9MB 783ms 23ms cpython 3.11.3

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 4417ms 4.1ms 8.5MB 4400ms 0ms pyston 3.8.12
python 1.py 4746ms 16ms 8.4MB 4730ms 0ms cpython 3.11.3
python 1.py timeout 0.0ms 78.0MB 4953ms 23ms pypy 3.9.16

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1117ms 0.5ms 8.4MB 1103ms 0ms pyston 3.8.12
python 1.py 1201ms 7.0ms 8.5MB 1187ms 0ms cpython 3.11.3
python 1.py 1610ms 16ms 75.2MB 1573ms 23ms pypy 3.9.16

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 8.py timeout 0.0ms 16.3MB 50ms 10ms cpython 3.11.3
python 8.py timeout 0.0ms 99.0MB 657ms 100ms pypy 3.9.16
python 8.py timeout 0.0ms 16.3MB 70ms 20ms pyston 3.8.12
ruby 4.rb timeout 0.0ms 32.1MB 4973ms 10ms ruby 3.2.2
ruby 4.rb timeout 0.0ms 32.7MB 4967ms 13ms ruby/yjit 3.2.2
ruby 4.rb timeout 0.0ms 362.6MB 5230ms 183ms truffleruby 22.3.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 8.py timeout 0.0ms 16.2MB 97ms 17ms cpython 3.11.3
python 8.py timeout 0.0ms 102.4MB 1130ms 193ms pypy 3.9.16
python 8.py timeout 0.0ms 17.6MB 167ms 27ms pyston 3.8.12
ruby 4.rb timeout 0.0ms 32.1MB 4970ms 13ms ruby 3.2.2
ruby 4.rb timeout 0.0ms 32.7MB 4970ms 10ms ruby/yjit 3.2.2
ruby 4.rb timeout 0.0ms 432.3MB 5530ms 197ms truffleruby 22.3.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 4.rb 3234ms 30ms 410.8MB 3887ms 177ms truffleruby 22.3.1
python 8-m.py 4105ms 62ms 103.1MB 7120ms 430ms pypy 3.9.16
python 8.py timeout 0.0ms 15.9MB 230ms 23ms cpython 3.11.3
python 8.py timeout 0.0ms 16.7MB 310ms 70ms pyston 3.8.12
ruby 4.rb timeout 0.0ms 32.4MB 4967ms 13ms ruby 3.2.2
ruby 4.rb timeout 0.0ms 32.7MB 4960ms 17ms ruby/yjit 3.2.2