Ruby VS D benchmarks

Current benchmark data was generated on Mon Oct 03 2022, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz (Model 106)

* -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
d 1.d 3016ms 25ms 75.2MB 3230ms 23ms ldc2 1.30.0
d 1.d 4680ms 29ms 124.4MB 4780ms 17ms dmd 2.100.2
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
d 1.d 266ms 5.5ms 15.2MB 253ms 0ms ldc2 1.30.0
d 1.d 380ms 9.7ms 16.2MB 370ms 0ms dmd 2.100.2
ruby 1-m.rb 895ms 44ms 398.0MB 1443ms 123ms truffleruby 22.2.0
ruby 1.rb 905ms 6.4ms 292.0MB 750ms 140ms ruby/yjit 3.1.2
ruby 1.rb 973ms 7.5ms 35.5MB 940ms 13ms ruby 3.1.2

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 3004ms 31ms 336.7MB 2820ms 170ms ruby/yjit 3.1.2
ruby 1.rb 3497ms 38ms 80.1MB 3437ms 47ms ruby 3.1.2
d 1.d timeout 0.0ms 0.0MB 0ms 0ms dmd 2.100.2
d 1.d timeout 0.0ms 0.0MB 0ms 0ms ldc2 1.30.0
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 238ms 2.6ms 42.3MB 213ms 10ms ruby 3.1.2
ruby 1.rb 385ms 0.9ms 298.8MB 220ms 147ms ruby/yjit 3.1.2
d 1.d 1304ms 23ms 8.5MB 1287ms 0ms ldc2 1.30.0
d 1.d 1628ms 5.5ms 9.4MB 1610ms 3ms dmd 2.100.2
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
d 1.d 203ms 0.5ms 27.7MB 180ms 10ms ldc2 1.30.0
d 1.d 767ms 1.9ms 46.9MB 753ms 7ms dmd 2.100.2
ruby 6.rb 2830ms 20ms 294.2MB 2673ms 143ms ruby/yjit 3.1.2
ruby 6.rb 4361ms 42ms 39.5MB 4333ms 13ms ruby 3.1.2
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
d 1.d 24ms 0.5ms 7.2MB 13ms 0ms ldc2 1.30.0
d 1.d 81ms 0.7ms 12.5MB 70ms 0ms dmd 2.100.2
ruby 6.rb 505ms 0.8ms 287.7MB 347ms 140ms ruby/yjit 3.1.2
ruby 6.rb 507ms 3.5ms 31.1MB 483ms 10ms ruby 3.1.2
ruby 6-m.rb 1309ms 25ms 359.3MB 2303ms 120ms truffleruby 22.2.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 2.3ms 0.6ms 3.0MB 0ms 0ms ldc2 1.30.0
d 1.d 2.5ms 0.8ms 4.0MB 0ms 0ms dmd 2.100.2
ruby 1.rb 42ms 2.5ms 148.7MB 18ms 22ms truffleruby 22.2.0
ruby 1.rb 70ms 0.2ms 30.0MB 48ms 6ms ruby 3.1.2
ruby 1.rb 238ms 0.3ms 286.6MB 94ms 134ms ruby/yjit 3.1.2

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 437ms 10.0ms 49.4MB 397ms 20ms ruby 3.1.2
ruby 1.rb 601ms 0.7ms 306.3MB 437ms 143ms 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
ruby 1.rb 3871ms 3.8ms 163.2MB 3773ms 80ms ruby 3.1.2
ruby 1.rb 4038ms 3.0ms 419.5MB 3827ms 193ms 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
d 1.d 179ms 0.8ms 4.1MB 170ms 0ms ldc2 1.30.0
d 1.d 245ms 1.5ms 4.9MB 237ms 0ms dmd 2.100.2
ruby 1.rb 615ms 14ms 30.1MB 593ms 10ms ruby 3.1.2
ruby 1.rb 628ms 4.4ms 286.7MB 473ms 137ms ruby/yjit 3.1.2
ruby 1-m.rb 773ms 57ms 312.0MB 1127ms 97ms truffleruby 22.2.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 526ms 1.0ms 4.0MB 520ms 0ms ldc2 1.30.0
d 1.d 722ms 0.5ms 5.0MB 713ms 0ms dmd 2.100.2
ruby 1.rb 1391ms 9.5ms 286.8MB 1243ms 130ms ruby/yjit 3.1.2
ruby 1.rb 1431ms 73ms 353.1MB 1917ms 123ms truffleruby 22.2.0
ruby 1.rb 1660ms 16ms 30.2MB 1640ms 7ms ruby 3.1.2

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 78ms 0.1ms 4.2MB 70ms 0ms ldc2 1.30.0
d 1.d 106ms 0.3ms 4.7MB 97ms 0ms dmd 2.100.2
ruby 1.rb 337ms 2.5ms 29.9MB 317ms 7ms ruby 3.1.2
ruby 1.rb 433ms 1.4ms 286.6MB 270ms 140ms ruby/yjit 3.1.2
ruby 1-m.rb 568ms 48ms 298.6MB 857ms 90ms truffleruby 22.2.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 1405ms 17ms 75.1MB 1467ms 7ms ldc2 1.30.0
d 1.d 2623ms 16ms 153.4MB 2913ms 33ms dmd 2.100.2
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
d 1.d 277ms 1.6ms 38.9MB 260ms 7ms ldc2 1.30.0
d 1.d 543ms 1.1ms 40.0MB 580ms 3ms dmd 2.100.2
ruby 1-m.rb 3172ms 18ms 560.6MB 5827ms 207ms truffleruby 22.2.0
ruby 1.rb 3949ms 15ms 300.8MB 3790ms 140ms ruby/yjit 3.1.2
ruby 1.rb 4772ms 16ms 44.3MB 4743ms 13ms ruby 3.1.2

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 425ms 0.3ms 1.2MB 420ms 0ms ldc2 1.30.0
d 2.d 435ms 0.7ms 1.2MB 427ms 0ms ldc2 1.30.0
ruby 2.rb 1111ms 6.0ms 308.1MB 1390ms 97ms truffleruby 22.2.0
d 1.d 1533ms 0.7ms 1.9MB 1520ms 0ms dmd 2.100.2
d 2.d 2679ms 1.8ms 2.0MB 2663ms 0ms dmd 2.100.2
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
d 1.d 46ms 0.6ms 1.2MB 37ms 0ms ldc2 1.30.0
d 2.d 47ms 0.3ms 1.2MB 40ms 0ms ldc2 1.30.0
d 1.d 157ms 0.5ms 2.0MB 150ms 0ms dmd 2.100.2
d 2.d 271ms 0.7ms 1.9MB 257ms 0ms dmd 2.100.2
ruby 2-m.rb 423ms 4.0ms 302.6MB 670ms 80ms truffleruby 22.2.0
ruby 2.rb 2352ms 4.8ms 286.8MB 2207ms 127ms ruby/yjit 3.1.2
ruby 2.rb 3223ms 7.6ms 29.9MB 3193ms 10ms ruby 3.1.2

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 618ms 34ms 43.8MB 597ms 10ms ldc2 1.30.0
d 1.d 739ms 71ms 75.2MB 717ms 7ms dmd 2.100.2
d 2.d 860ms 2.3ms 48.6MB 837ms 7ms ldc2 1.30.0
d 2.d 1638ms 0.3ms 78.7MB 1613ms 7ms dmd 2.100.2
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
d 1.d 128ms 1.2ms 13.9MB 110ms 0ms ldc2 1.30.0
d 1.d 140ms 3.9ms 23.5MB 127ms 0ms dmd 2.100.2
d 2.d 204ms 0.6ms 14.9MB 190ms 0ms ldc2 1.30.0
d 2.d 408ms 0.5ms 16.5MB 393ms 0ms dmd 2.100.2
ruby 1.rb 3126ms 96ms 474.9MB 3563ms 120ms truffleruby 22.2.0
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
d 1.d 3411ms 0.5ms 7.9MB 3410ms 13ms ldc2 1.30.0
d 1.d timeout 0.0ms 0.0MB 0ms 0ms dmd 2.100.2
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
d 1.d 807ms 2.2ms 7.9MB 800ms 3ms ldc2 1.30.0
d 1.d 1681ms 5.7ms 8.9MB 1670ms 7ms dmd 2.100.2
ruby 1-m.rb 1926ms 9.5ms 380.4MB 3533ms 143ms truffleruby 22.2.0
ruby 1.rb 2511ms 13ms 162.8MB 2427ms 63ms ruby 3.1.2
ruby 1.rb 2672ms 16ms 420.8MB 2457ms 203ms ruby/yjit 3.1.2

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 4594ms 1.9ms 3.8MB 4577ms 0ms ldc2 1.30.0
d 1.d 4786ms 8.0ms 4.5MB 4770ms 0ms dmd 2.100.2
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
d 1.d 1152ms 0.8ms 3.6MB 1140ms 0ms ldc2 1.30.0
d 1.d 1201ms 3.5ms 4.4MB 1190ms 0ms dmd 2.100.2
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
d 1.d 292ms 0.4ms 3.4MB 277ms 0ms ldc2 1.30.0
d 1.d 303ms 0.6ms 4.2MB 290ms 0ms dmd 2.100.2
ruby 4.rb 2469ms 15ms 445.3MB 3007ms 143ms truffleruby 22.2.0
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