Wasm VS OCaml 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
ocaml 1.ml 3047ms 16ms 132.6MB 2977ms 60ms ocaml 5.2.1

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
ocaml 1.ml 217ms 3.2ms 19.2MB 200ms 0ms ocaml 5.2.1

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

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

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
ocaml 2.ml 2908ms 3.8ms 4.9MB 2897ms 0ms ocaml 5.2.1
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
ocaml 2.ml 245ms 2.2ms 4.9MB 233ms 0ms ocaml 5.2.1
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
ocaml 6.ml 347ms 0.9ms 24.9MB 330ms 0ms ocaml 5.2.1

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
ocaml 6.ml 38ms 0.2ms 7.4MB 27ms 0ms ocaml 5.2.1
wasm 1.rs 45ms 0.8ms 37.5MB 23ms 3ms wasmer/llvm 5.0.2

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 1.8ms 0.2ms 4.9MB 0ms 0ms ocaml 5.2.1
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

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
ocaml 1.ml 183ms 10ms 6.4MB 170ms 0ms ocaml 5.2.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
ocaml 1.ml 530ms 20ms 6.6MB 517ms 0ms ocaml 5.2.1

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
ocaml 1.ml 78ms 2.4ms 5.9MB 67ms 0ms ocaml 5.2.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
ocaml 1.ml 1072ms 10ms 70.2MB 1030ms 27ms ocaml 5.2.1
ocaml 2.ml 2064ms 47ms 91.7MB 2007ms 43ms ocaml 5.2.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 150ms 2.7ms 21.6MB 127ms 10ms ocaml 5.2.1
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
ocaml 2.ml 362ms 1.9ms 27.6MB 337ms 7ms ocaml 5.2.1

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
ocaml 1.ml 374ms 0.9ms 5.2MB 363ms 0ms ocaml 5.2.1
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

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 42ms 1.3ms 5.2MB 30ms 0ms ocaml 5.2.1
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

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
ocaml 1.ml 945ms 20ms 551.3MB 877ms 50ms ocaml 5.2.1
ocaml 2.ml 1910ms 4.6ms 18.3MB 1897ms 0ms ocaml 5.2.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
ocaml 1.ml 201ms 5.9ms 142.1MB 173ms 10ms ocaml 5.2.1
ocaml 2.ml 471ms 2.4ms 9.1MB 460ms 0ms ocaml 5.2.1

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

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

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
ocaml 2.ml 4487ms 17ms 6.6MB 4477ms 0ms ocaml 5.2.1
wasm 7.rs 4874ms 3.3ms 20.7MB 4857ms 0ms wasmtime 27.0.0

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
ocaml 2.ml 1126ms 6.0ms 5.9MB 1117ms 0ms ocaml 5.2.1
wasm 7.rs 1233ms 11ms 18.7MB 1220ms 0ms wasmtime 27.0.0

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
ocaml 2.ml 284ms 2.2ms 5.2MB 270ms 0ms ocaml 5.2.1
wasm 7.rs 321ms 11ms 18.8MB 303ms 0ms wasmtime 27.0.0