Wasm VS Ruby benchmarks

Current benchmark data was generated on Sun Dec 01 2024, 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
wasm 5.rs 1531ms 12ms 55.1MB 1500ms 13ms wasmer/llvm 5.0.2
wasm 4.rs 1599ms 10.0ms 54.8MB 1570ms 17ms wasmer/llvm 5.0.2
wasm 3.rs 1644ms 39ms 71.3MB 1600ms 27ms wasmer/llvm 5.0.2
wasm 5.rs 1750ms 25ms 34.8MB 1723ms 10ms wasmtime 27.0.0
wasm 4.rs 1794ms 30ms 34.9MB 1777ms 3ms wasmtime 27.0.0
wasm 3.rs 1860ms 47ms 52.9MB 1830ms 17ms wasmtime 27.0.0
ruby 1-m.rb 3037ms 2639ms 793.8MB 6587ms 477ms truffleruby 24.1.1
ruby 1.rb 3763ms 40ms 113.5MB 3657ms 90ms ruby/yjit 3.3.6
ruby 1.rb timeout 0.0ms 78.9MB 4930ms 50ms ruby 3.3.6

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 5.rs 152ms 0.8ms 41.0MB 140ms 0ms wasmer/llvm 5.0.2
wasm 4.rs 161ms 3.1ms 41.0MB 143ms 3ms wasmer/llvm 5.0.2
wasm 3.rs 165ms 6.6ms 42.9MB 143ms 7ms wasmer/llvm 5.0.2
wasm 4.rs 171ms 1.2ms 21.0MB 157ms 3ms wasmtime 27.0.0
wasm 3.rs 174ms 3.1ms 22.9MB 157ms 3ms wasmtime 27.0.0
wasm 5.rs 181ms 18ms 22.9MB 163ms 0ms wasmtime 27.0.0
ruby 1.rb 411ms 3.8ms 36.4MB 370ms 23ms ruby/yjit 3.3.6
ruby 1-m.rb 587ms 83ms 434.3MB 1170ms 163ms truffleruby 24.1.1
ruby 1.rb 847ms 11ms 36.3MB 807ms 27ms ruby 3.3.6

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 1094ms 34ms 38.6MB 1077ms 3ms wasmer/llvm 5.0.2
wasm 3.rs 1163ms 43ms 21.3MB 1150ms 0ms wasmtime 27.0.0
ruby 1.rb 1415ms 30ms 78.4MB 1310ms 93ms ruby/yjit 3.3.6
ruby 1.rb 1783ms 20ms 78.3MB 1687ms 80ms ruby 3.3.6
ruby 1.rb timeout 0.0ms 768.0MB 4493ms 1697ms truffleruby 24.1.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 80ms 1.4ms 21.8MB 63ms 0ms wasmtime 27.0.0
wasm 3.rs 81ms 2.4ms 39.2MB 63ms 3ms wasmer/llvm 5.0.2
ruby 1.rb 172ms 3.9ms 40.4MB 120ms 37ms ruby/yjit 3.3.6
ruby 1.rb 197ms 2.8ms 40.1MB 143ms 37ms ruby 3.3.6
ruby 1.rb timeout 0.0ms 670.5MB 4720ms 1480ms truffleruby 24.1.1

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 357ms 2.7ms 38.5MB 343ms 0ms wasmer/llvm 5.0.2
wasm 1.rs 418ms 3.7ms 20.2MB 403ms 3ms wasmtime 27.0.0

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 101ms 0.3ms 38.5MB 87ms 3ms wasmer/llvm 5.0.2
wasm 1.rs 113ms 1.8ms 21.7MB 100ms 0ms wasmtime 27.0.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 3274ms 9.3ms 39.0MB 3263ms 0ms wasmer/llvm 5.0.2
wasm 1.rs 4081ms 22ms 18.6MB 4063ms 0ms wasmtime 27.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 285ms 1.7ms 36.9MB 270ms 0ms wasmer/llvm 5.0.2
wasm 1.rs 341ms 0.3ms 18.5MB 327ms 0ms wasmtime 27.0.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 230ms 2.2ms 19.0MB 213ms 0ms wasmtime 27.0.0
wasm 1.rs 331ms 4.4ms 37.5MB 233ms 70ms wasmer/llvm 5.0.2
ruby 6.rb 2124ms 38ms 37.6MB 2080ms 27ms ruby/yjit 3.3.6
ruby 6-m.rb 2363ms 337ms 455.2MB 5933ms 410ms truffleruby 24.1.1
ruby 6.rb 3752ms 11ms 39.3MB 3713ms 27ms ruby 3.3.6

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 34ms 5.0ms 19.0MB 20ms 3ms wasmtime 27.0.0
wasm 1.rs 45ms 0.8ms 37.5MB 23ms 3ms wasmer/llvm 5.0.2
ruby 6.rb 286ms 3.9ms 30.8MB 253ms 17ms ruby/yjit 3.3.6
ruby 6.rb 441ms 2.4ms 31.0MB 410ms 17ms ruby 3.3.6
ruby 6-m.rb 845ms 16ms 397.2MB 2117ms 157ms truffleruby 24.1.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 7.4ms 0.3ms 21.1MB 0ms 0ms wasmtime 27.0.0
wasm 1.rs 12ms 0.4ms 38.6MB 0ms 0ms wasmer/llvm 5.0.2
ruby 1.rb 41ms 0.8ms 168.5MB 20ms 26ms truffleruby 24.1.1
ruby 1.rb 69ms 1.8ms 28.0MB 48ms 12ms ruby 3.3.6
ruby 1.rb 70ms 0.6ms 28.1MB 42ms 14ms ruby/yjit 3.3.6

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 79ms 1.1ms 20.7MB 60ms 0ms wasmtime 27.0.0
wasm 1.rs 80ms 0.5ms 37.2MB 63ms 0ms wasmer/llvm 5.0.2
ruby 1.rb 327ms 4.3ms 28.4MB 293ms 20ms ruby/yjit 3.3.6
ruby 1.rb 541ms 51ms 28.3MB 510ms 17ms ruby 3.3.6
ruby 1-m.rb 688ms 35ms 390.9MB 1207ms 143ms truffleruby 24.1.1

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 220ms 0.7ms 37.4MB 207ms 3ms wasmer/llvm 5.0.2
wasm 1.rs 224ms 4.2ms 19.1MB 210ms 0ms wasmtime 27.0.0
ruby 1.rb 834ms 9.1ms 28.5MB 800ms 20ms ruby/yjit 3.3.6
ruby 1-m.rb 1270ms 23ms 436.7MB 1760ms 173ms truffleruby 24.1.1
ruby 1.rb 1406ms 22ms 28.3MB 1373ms 23ms ruby 3.3.6

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 46ms 0.7ms 19.2MB 37ms 0ms wasmtime 27.0.0
wasm 1.rs 49ms 1.3ms 38.5MB 37ms 0ms wasmer/llvm 5.0.2
ruby 1.rb 197ms 0.7ms 28.4MB 167ms 13ms ruby/yjit 3.3.6
ruby 1.rb 290ms 3.2ms 28.3MB 260ms 13ms ruby 3.3.6
ruby 1-m.rb 555ms 11ms 368.8MB 1063ms 157ms truffleruby 24.1.1

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 8.rs 698ms 1.7ms 40.4MB 677ms 7ms wasmer/llvm 5.0.2
wasm 8.rs 821ms 15ms 24.0MB 810ms 0ms wasmtime 27.0.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 8.rs 42ms 0.2ms 37.5MB 27ms 3ms wasmer/llvm 5.0.2
wasm 8.rs 43ms 0.8ms 19.1MB 33ms 0ms wasmtime 27.0.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 774ms 5.0ms 61.2MB 737ms 23ms wasmer/llvm 5.0.2
wasm 1.rs 868ms 25ms 42.9MB 840ms 13ms wasmtime 27.0.0
ruby 1-m.rb 4499ms 14ms 553.8MB 11583ms 350ms truffleruby 24.1.1
ruby 1.rb timeout 0.0ms 88.0MB 4917ms 70ms ruby 3.3.6
ruby 1.rb timeout 0.0ms 88.2MB 4910ms 70ms ruby/yjit 3.3.6

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 175ms 0.7ms 45.1MB 153ms 10ms wasmer/llvm 5.0.2
wasm 1.rs 192ms 10ms 24.9MB 180ms 3ms wasmtime 27.0.0
ruby 1-m.rb 2205ms 87ms 510.9MB 5660ms 270ms truffleruby 24.1.1
ruby 1.rb 3025ms 9.5ms 47.1MB 2983ms 27ms ruby/yjit 3.3.6
ruby 1.rb 4035ms 24ms 46.9MB 3990ms 30ms ruby 3.3.6

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 343ms 1.8ms 37.1MB 323ms 3ms wasmer/llvm 5.0.2
wasm 1.rs 406ms 1.4ms 20.8MB 390ms 0ms wasmtime 27.0.0
wasm 2.rs 552ms 37ms 39.3MB 540ms 0ms wasmer/llvm 5.0.2
wasm 2.rs 576ms 0.6ms 20.8MB 560ms 0ms wasmtime 27.0.0
ruby 2.rb 861ms 20ms 329.1MB 1117ms 120ms truffleruby 24.1.1
ruby 2.rb timeout 0.0ms 28.0MB 4967ms 17ms ruby 3.3.6
ruby 2.rb timeout 0.0ms 28.3MB 4963ms 17ms ruby/yjit 3.3.6

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 47ms 0.8ms 38.4MB 30ms 3ms wasmer/llvm 5.0.2
wasm 1.rs 49ms 0.5ms 20.8MB 33ms 3ms wasmtime 27.0.0
wasm 2.rs 66ms 0.8ms 20.8MB 50ms 3ms wasmtime 27.0.0
wasm 2.rs 67ms 3.4ms 37.4MB 50ms 7ms wasmer/llvm 5.0.2
ruby 2-m.rb 323ms 3.4ms 328.9MB 570ms 107ms truffleruby 24.1.1
ruby 2.rb 1450ms 8.5ms 28.3MB 1413ms 23ms ruby/yjit 3.3.6
ruby 2.rb 2881ms 59ms 28.1MB 2850ms 20ms ruby 3.3.6

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 351ms 5.0ms 42.1MB 333ms 3ms wasmer/llvm 5.0.2
wasm 1.rs 364ms 8.8ms 76.2MB 350ms 3ms wasmer/llvm 5.0.2
wasm 2.rs 381ms 11ms 23.8MB 370ms 0ms wasmtime 27.0.0
wasm 1.rs 510ms 6.0ms 58.2MB 490ms 7ms wasmtime 27.0.0
ruby 1.rb timeout 0.0ms 340.6MB 4843ms 143ms ruby 3.3.6
ruby 1.rb timeout 0.0ms 341.9MB 4833ms 150ms ruby/yjit 3.3.6
ruby 1.rb timeout 0.0ms 764.3MB 5047ms 183ms truffleruby 24.1.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 70ms 1.4ms 47.0MB 57ms 0ms wasmer/llvm 5.0.2
wasm 2.rs 95ms 1.1ms 38.6MB 80ms 0ms wasmer/llvm 5.0.2
wasm 2.rs 96ms 1.1ms 20.1MB 80ms 7ms wasmtime 27.0.0
wasm 1.rs 97ms 1.5ms 28.7MB 90ms 0ms wasmtime 27.0.0
ruby 1-m.rb 1748ms 14ms 492.6MB 2550ms 163ms truffleruby 24.1.1
ruby 1.rb 3501ms 85ms 146.6MB 3403ms 80ms ruby/yjit 3.3.6
ruby 1.rb 4518ms 42ms 146.4MB 4413ms 83ms ruby 3.3.6

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 2075ms 6.3ms 37.6MB 2053ms 3ms wasmer/llvm 5.0.2
wasm 2.rs 2160ms 7.6ms 19.7MB 2147ms 0ms wasmtime 27.0.0
ruby 1.rb timeout 0.0ms 107.6MB 4920ms 60ms ruby 3.3.6
ruby 1.rb timeout 0.0ms 108.8MB 4927ms 60ms ruby/yjit 3.3.6
ruby 1.rb timeout 0.0ms 469.5MB 13213ms 420ms truffleruby 24.1.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 493ms 3.2ms 39.4MB 480ms 0ms wasmer/llvm 5.0.2
wasm 2.rs 514ms 2.4ms 19.2MB 497ms 0ms wasmtime 27.0.0
ruby 1.rb 1669ms 22ms 108.8MB 1587ms 70ms ruby/yjit 3.3.6
ruby 1.rb 1701ms 13ms 108.5MB 1623ms 60ms ruby 3.3.6
ruby 1-m.rb 1776ms 25ms 405.6MB 4673ms 213ms truffleruby 24.1.1

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 3108ms 21ms 37.1MB 3093ms 3ms wasmer/llvm 5.0.2
wasm 1.rs 3496ms 1.3ms 20.6MB 3480ms 0ms wasmtime 27.0.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 787ms 3.0ms 39.0MB 773ms 3ms wasmer/llvm 5.0.2
wasm 1.rs 887ms 3.6ms 20.7MB 877ms 0ms wasmtime 27.0.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 3587ms 3.9ms 37.2MB 3573ms 3ms wasmer/llvm 5.0.2
wasm 2.rs 3589ms 8.6ms 18.9MB 3573ms 0ms wasmtime 27.0.0
wasm 7.rs 3597ms 1.9ms 38.9MB 3580ms 3ms wasmer/llvm 5.0.2
wasm 7.rs 4874ms 3.3ms 20.7MB 4857ms 0ms wasmtime 27.0.0
ruby 4.rb timeout 0.0ms 28.1MB 4970ms 20ms ruby 3.3.6
ruby 4.rb timeout 0.0ms 28.3MB 4967ms 17ms ruby/yjit 3.3.6
ruby 4.rb timeout 0.0ms 455.7MB 5143ms 237ms truffleruby 24.1.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 906ms 2.5ms 18.7MB 890ms 0ms wasmtime 27.0.0
wasm 2.rs 909ms 1.3ms 38.9MB 893ms 0ms wasmer/llvm 5.0.2
wasm 7.rs 909ms 0.8ms 39.0MB 893ms 0ms wasmer/llvm 5.0.2
wasm 7.rs 1233ms 11ms 18.7MB 1220ms 0ms wasmtime 27.0.0
ruby 4.rb 4475ms 23ms 439.6MB 4760ms 200ms truffleruby 24.1.1
ruby 4.rb timeout 0.0ms 28.0MB 4960ms 20ms ruby 3.3.6
ruby 4.rb timeout 0.0ms 28.3MB 4963ms 20ms ruby/yjit 3.3.6

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 234ms 2.2ms 18.5MB 220ms 0ms wasmtime 27.0.0
wasm 2.rs 238ms 1.1ms 38.9MB 227ms 0ms wasmer/llvm 5.0.2
wasm 7.rs 239ms 1.1ms 37.2MB 223ms 0ms wasmer/llvm 5.0.2
wasm 7.rs 321ms 11ms 18.8MB 303ms 0ms wasmtime 27.0.0
ruby 4.rb 1235ms 59ms 393.4MB 1547ms 143ms truffleruby 24.1.1
ruby 4.rb timeout 0.0ms 28.1MB 4973ms 13ms ruby 3.3.6
ruby 4.rb timeout 0.0ms 28.3MB 4963ms 20ms ruby/yjit 3.3.6