Crystal VS Wasm benchmarks

Current benchmark data was generated on Fri May 20 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
crystal 1.cr 1614ms 6.4ms 64.4MB 1927ms 20ms crystal 1.4.1
wasm 3.rs 2001ms 12ms 40.9MB 1977ms 10ms wasmedgec 0.9.1
wasm 3.rs 2003ms 12ms 38.0MB 1960ms 27ms wasmer/llvm 2.2.1
wasm 5.rs 2010ms 5.6ms 24.9MB 1987ms 3ms wasmedgec 0.9.1
wasm 4.rs 2213ms 9.5ms 24.9MB 2197ms 0ms wasmedgec 0.9.1
wasm 5.rs 2617ms 4.8ms 22.3MB 2593ms 3ms wasmer/llvm 2.2.1
wasm 3.rs 2632ms 10ms 42.2MB 2607ms 10ms wasmtime 0.36.0
wasm 4.rs 2698ms 39ms 22.2MB 2670ms 13ms wasmer/llvm 2.2.1
wasm 5.rs 2882ms 50ms 58.7MB 2883ms 13ms node 16.15.0
wasm 3.rs 2936ms 43ms 74.8MB 2913ms 20ms node 16.15.0
wasm 4.rs 2969ms 12ms 58.8MB 2963ms 13ms node 16.15.0
wasm 4.rs 3209ms 19ms 26.3MB 3183ms 7ms wasmtime 0.36.0
wasm 5.rs 3225ms 37ms 26.3MB 3207ms 3ms wasmtime 0.36.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 138ms 0.3ms 11.0MB 143ms 0ms crystal 1.4.1
wasm 5.rs 196ms 0.7ms 10.9MB 183ms 0ms wasmedgec 0.9.1
wasm 3.rs 196ms 14ms 10.1MB 170ms 0ms wasmer/llvm 2.2.1
wasm 3.rs 198ms 4.8ms 12.9MB 183ms 0ms wasmedgec 0.9.1
wasm 4.rs 216ms 3.1ms 10.9MB 203ms 0ms wasmedgec 0.9.1
wasm 5.rs 253ms 10ms 8.1MB 237ms 0ms wasmer/llvm 2.2.1
wasm 4.rs 259ms 8.1ms 8.2MB 240ms 0ms wasmer/llvm 2.2.1
wasm 3.rs 261ms 16ms 14.3MB 233ms 0ms wasmtime 0.36.0
wasm 5.rs 310ms 7.3ms 12.4MB 293ms 0ms wasmtime 0.36.0
wasm 4.rs 316ms 9.1ms 12.4MB 303ms 0ms wasmtime 0.36.0
wasm 4.rs 347ms 6.1ms 44.5MB 350ms 10ms node 16.15.0
wasm 5.rs 356ms 15ms 44.3MB 367ms 3ms node 16.15.0
wasm 3.rs 356ms 18ms 49.2MB 350ms 13ms node 16.15.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 1337ms 61ms 8.5MB 1327ms 0ms wasmer/llvm 2.2.1
wasm 3.rs 1508ms 36ms 47.7MB 1560ms 3ms node 16.15.0
wasm 3.rs 1825ms 10ms 12.3MB 1810ms 0ms wasmtime 0.36.0
crystal 1.cr 1979ms 40ms 20.5MB 1940ms 23ms crystal 1.4.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 91ms 10ms 6.8MB 73ms 0ms wasmer/llvm 2.2.1
crystal 1.cr 111ms 1.9ms 7.6MB 97ms 3ms crystal 1.4.1
wasm 3.rs 124ms 1.7ms 11.0MB 113ms 0ms wasmtime 0.36.0
wasm 3.rs 215ms 3.8ms 48.3MB 257ms 7ms node 16.15.0

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 84ms 3.2ms 9.3MB 67ms 3ms crystal 1.4.1
wasm 1.rs 477ms 0.5ms 7.9MB 463ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 498ms 1.6ms 11.3MB 483ms 0ms wasmedgec 0.9.1
wasm 1.rs 604ms 0.5ms 13.6MB 590ms 0ms wasmtime 0.36.0
wasm 1.rs 706ms 1.0ms 51.5MB 753ms 3ms node 16.15.0

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 31ms 0.3ms 7.0MB 20ms 0ms crystal 1.4.1
wasm 1.rs 131ms 9.4ms 6.9MB 117ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 140ms 1.9ms 10.7MB 130ms 0ms wasmedgec 0.9.1
wasm 1.rs 161ms 1.4ms 11.1MB 150ms 0ms wasmtime 0.36.0
wasm 1.rs 270ms 1.2ms 47.5MB 313ms 7ms node 16.15.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 3816ms 3.5ms 3.0MB 3800ms 0ms crystal 1.4.1
wasm 1.rs 4702ms 36ms 43.5MB 4700ms 7ms node 16.15.0
wasm 1.rs timeout 0.0ms 0.0MB 0ms 0ms wasmedgec 0.9.1
wasm 1.rs timeout 0.0ms 0.0MB 0ms 0ms wasmer/llvm 2.2.1
wasm 1.rs timeout 0.0ms 0.0MB 0ms 0ms wasmtime 0.36.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 315ms 1.6ms 3.0MB 303ms 0ms crystal 1.4.1
wasm 1.rs 420ms 12ms 5.9MB 400ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 464ms 2.1ms 9.0MB 450ms 0ms wasmtime 0.36.0
wasm 1.rs 466ms 3.6ms 43.5MB 473ms 7ms node 16.15.0
wasm 1.rs 467ms 0.5ms 8.8MB 457ms 0ms wasmedgec 0.9.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 348ms 0.4ms 6.4MB 333ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 357ms 1.4ms 10.9MB 347ms 0ms wasmtime 0.36.0
wasm 1.rs 366ms 0.6ms 8.8MB 353ms 0ms wasmedgec 0.9.1
wasm 1.rs 462ms 4.7ms 43.1MB 480ms 3ms node 16.15.0
crystal 2.cr 842ms 6.9ms 3.6MB 683ms 143ms crystal 1.4.1
crystal 1.cr 1030ms 0.5ms 14.8MB 857ms 160ms crystal 1.4.1

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 43ms 0.7ms 11.0MB 30ms 0ms wasmtime 0.36.0
wasm 1.rs 46ms 15ms 6.4MB 27ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 49ms 3.4ms 9.1MB 33ms 0ms wasmedgec 0.9.1
crystal 2.cr 88ms 0.7ms 3.5MB 70ms 10ms crystal 1.4.1
crystal 1.cr 109ms 2.2ms 4.6MB 83ms 13ms crystal 1.4.1
wasm 1.rs 125ms 3.2ms 43.3MB 143ms 3ms node 16.15.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 3.0ms 0.6ms 3.0MB 0ms 0ms crystal 1.4.1
wasm 1.rs 6.3ms 0.6ms 10.2MB 0ms 0ms wasmtime 0.36.0
wasm 1.rs 6.3ms 6.5ms 5.7MB 0ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 9.0ms 0.7ms 8.6MB 0ms 0ms wasmedgec 0.9.1
wasm 1.rs 75ms 1.7ms 42.1MB 90ms 2ms node 16.15.0

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2833ms 1054ms 131.4MB 303ms 290ms crystal 1.4.1

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1242ms 112ms 32.7MB 20ms 63ms crystal 1.4.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 63ms 2.1ms 5.0MB 50ms 0ms crystal 1.4.1
crystal 1.cr 108ms 1.8ms 3.0MB 100ms 0ms crystal 1.4.1
wasm 1.rs 125ms 0.5ms 6.4MB 117ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 139ms 3.1ms 9.3MB 127ms 0ms wasmedgec 0.9.1
wasm 1.rs 158ms 2.5ms 10.7MB 143ms 0ms wasmtime 0.36.0
wasm 1.rs 218ms 2.1ms 43.5MB 230ms 7ms node 16.15.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 175ms 1.0ms 3.0MB 163ms 0ms crystal 1.4.1
crystal 1.cr 313ms 0.4ms 3.1MB 300ms 0ms crystal 1.4.1
wasm 1.rs 369ms 3.8ms 6.4MB 357ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 396ms 3.4ms 9.3MB 387ms 0ms wasmedgec 0.9.1
wasm 1.rs 448ms 0.7ms 11.0MB 437ms 0ms wasmtime 0.36.0
wasm 1.rs 483ms 2.8ms 43.4MB 497ms 7ms node 16.15.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 32ms 2.1ms 3.1MB 20ms 0ms crystal 1.4.1
crystal 1.cr 55ms 1.2ms 5.1MB 47ms 0ms crystal 1.4.1
wasm 1.rs 71ms 15ms 6.2MB 50ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 75ms 2.8ms 9.2MB 67ms 0ms wasmedgec 0.9.1
wasm 1.rs 77ms 1.4ms 9.3MB 63ms 0ms wasmtime 0.36.0
wasm 1.rs 151ms 1.5ms 43.4MB 170ms 0ms node 16.15.0

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 996ms 1.0ms 9.6MB 980ms 0ms crystal 1.4.1
wasm 8.rs 1061ms 2.0ms 46.5MB 1073ms 0ms node 16.15.0
wasm 8.rs 1099ms 1.0ms 12.0MB 1090ms 0ms wasmedgec 0.9.1
wasm 8.rs 1168ms 0.3ms 9.4MB 1153ms 0ms wasmer/llvm 2.2.1
wasm 8.rs 1479ms 0.6ms 13.5MB 1470ms 0ms wasmtime 0.36.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 46ms 0.6ms 5.0MB 33ms 0ms crystal 1.4.1
wasm 8.rs 57ms 0.9ms 9.2MB 40ms 0ms wasmedgec 0.9.1
wasm 8.rs 57ms 9.9ms 6.3MB 40ms 0ms wasmer/llvm 2.2.1
wasm 8.rs 70ms 0.3ms 10.7MB 60ms 0ms wasmtime 0.36.0
wasm 8.rs 123ms 0.6ms 43.8MB 133ms 13ms node 16.15.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1119ms 48ms 66.2MB 1287ms 13ms crystal 1.4.1
wasm 1.rs 1149ms 49ms 33.0MB 1127ms 7ms wasmedgec 0.9.1
wasm 1.rs 1284ms 26ms 30.0MB 1250ms 17ms wasmer/llvm 2.2.1
wasm 1.rs 1469ms 18ms 66.7MB 1470ms 13ms node 16.15.0
wasm 1.rs 1524ms 3.3ms 34.3MB 1503ms 3ms wasmtime 0.36.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 226ms 4.8ms 19.4MB 250ms 3ms crystal 1.4.1
wasm 1.rs 246ms 3.9ms 15.0MB 233ms 0ms wasmedgec 0.9.1
wasm 1.rs 277ms 16ms 12.2MB 250ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 333ms 7.8ms 16.4MB 320ms 0ms wasmtime 0.36.0
wasm 1.rs 370ms 7.6ms 48.5MB 370ms 10ms node 16.15.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 470ms 1.7ms 4.9MB 457ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 503ms 0.2ms 9.3MB 490ms 0ms wasmedgec 0.9.1
crystal 1.cr 510ms 0.8ms 3.1MB 500ms 0ms crystal 1.4.1
wasm 1.rs 519ms 0.1ms 9.0MB 503ms 0ms wasmtime 0.36.0
crystal 2.cr 540ms 0.7ms 3.1MB 530ms 0ms crystal 1.4.1
wasm 1.rs 566ms 1.9ms 47.5MB 590ms 0ms node 16.15.0
wasm 2.rs 664ms 3.3ms 5.1MB 653ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 685ms 0.8ms 9.2MB 673ms 0ms wasmedgec 0.9.1
wasm 2.rs 721ms 0.3ms 9.0MB 710ms 0ms wasmtime 0.36.0
wasm 2.rs 753ms 1.5ms 47.4MB 773ms 10ms node 16.15.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 55ms 1.3ms 3.0MB 43ms 0ms crystal 1.4.1
wasm 1.rs 56ms 11ms 6.0MB 40ms 0ms wasmer/llvm 2.2.1
crystal 2.cr 59ms 2.2ms 5.1MB 47ms 0ms crystal 1.4.1
wasm 1.rs 59ms 0.7ms 11.2MB 43ms 0ms wasmtime 0.36.0
wasm 1.rs 61ms 0.8ms 9.3MB 50ms 0ms wasmedgec 0.9.1
wasm 2.rs 75ms 8.8ms 5.8MB 57ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 80ms 1.2ms 9.7MB 70ms 0ms wasmedgec 0.9.1
wasm 2.rs 81ms 4.3ms 9.4MB 67ms 0ms wasmtime 0.36.0
wasm 1.rs 143ms 2.4ms 47.4MB 167ms 10ms node 16.15.0
wasm 2.rs 166ms 3.4ms 47.5MB 180ms 10ms node 16.15.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 466ms 1.2ms 10.1MB 450ms 0ms crystal 1.4.1
wasm 2.rs 517ms 5.8ms 11.1MB 507ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 563ms 0.8ms 13.8MB 547ms 0ms wasmedgec 0.9.1
wasm 2.rs 634ms 4.3ms 15.3MB 623ms 0ms wasmtime 0.36.0
wasm 1.rs 700ms 8.8ms 47.9MB 683ms 7ms wasmedgec 0.9.1
wasm 1.rs 704ms 2.2ms 49.4MB 680ms 7ms wasmtime 0.36.0
wasm 2.rs 753ms 2.6ms 47.6MB 763ms 3ms node 16.15.0
wasm 1.rs 794ms 61ms 82.0MB 800ms 13ms node 16.15.0
wasm 1.rs 801ms 1.6ms 45.2MB 767ms 13ms wasmer/llvm 2.2.1
crystal 1.cr 878ms 62ms 44.5MB 853ms 10ms crystal 1.4.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 108ms 1.9ms 4.4MB 100ms 0ms crystal 1.4.1
wasm 2.rs 125ms 13ms 7.2MB 107ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 137ms 0.4ms 9.9MB 127ms 0ms wasmedgec 0.9.1
crystal 1.cr 147ms 1.5ms 14.8MB 133ms 0ms crystal 1.4.1
wasm 1.rs 151ms 1.7ms 18.7MB 133ms 0ms wasmedgec 0.9.1
wasm 1.rs 151ms 11ms 15.8MB 130ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 155ms 1.0ms 11.6MB 140ms 0ms wasmtime 0.36.0
wasm 1.rs 161ms 2.1ms 20.1MB 140ms 0ms wasmtime 0.36.0
wasm 1.rs 229ms 1.4ms 52.9MB 237ms 3ms node 16.15.0
wasm 2.rs 237ms 1.6ms 43.9MB 247ms 7ms node 16.15.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2771ms 83ms 6.8MB 3037ms 267ms crystal 1.4.1
wasm 2.rs 3578ms 0.2ms 6.9MB 3567ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 3678ms 24ms 10.9MB 3667ms 0ms wasmedgec 0.9.1
wasm 2.rs 4112ms 42ms 47.5MB 4150ms 17ms node 16.15.0
wasm 2.rs 4174ms 1.4ms 10.9MB 4160ms 0ms wasmtime 0.36.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 653ms 3.5ms 5.4MB 680ms 73ms crystal 1.4.1
wasm 2.rs 848ms 13ms 6.6MB 830ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 878ms 4.6ms 10.6MB 863ms 0ms wasmedgec 0.9.1
wasm 2.rs 988ms 1.7ms 10.6MB 977ms 0ms wasmtime 0.36.0
wasm 2.rs 1052ms 10ms 47.4MB 1097ms 10ms node 16.15.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 4132ms 6.0ms 9.7MB 4120ms 0ms wasmedgec 0.9.1
wasm 7.rs 4217ms 0.7ms 6.1MB 4203ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 4257ms 1.8ms 51.2MB 4283ms 3ms node 16.15.0
wasm 7.rs 4268ms 0.6ms 9.7MB 4253ms 0ms wasmedgec 0.9.1
wasm 2.rs 4393ms 0.8ms 6.3MB 4380ms 0ms wasmer/llvm 2.2.1
wasm 7.rs 4502ms 10ms 47.6MB 4520ms 7ms node 16.15.0
wasm 2.rs 4525ms 3.3ms 10.5MB 4510ms 0ms wasmtime 0.36.0
wasm 7.rs 4615ms 1.5ms 10.5MB 4600ms 0ms wasmtime 0.36.0
crystal 1.cr timeout 0.0ms 0.0MB 0ms 0ms crystal 1.4.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 1041ms 0.4ms 9.6MB 1023ms 3ms wasmedgec 0.9.1
wasm 7.rs 1059ms 2.5ms 6.1MB 1050ms 0ms wasmer/llvm 2.2.1
wasm 7.rs 1076ms 0.7ms 9.6MB 1060ms 0ms wasmedgec 0.9.1
wasm 2.rs 1102ms 1.0ms 6.2MB 1090ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 1137ms 0.7ms 10.5MB 1120ms 0ms wasmtime 0.36.0
wasm 2.rs 1137ms 0.7ms 47.5MB 1160ms 10ms node 16.15.0
wasm 7.rs 1160ms 0.7ms 11.0MB 1147ms 0ms wasmtime 0.36.0
wasm 7.rs 1197ms 3.5ms 47.5MB 1227ms 3ms node 16.15.0
crystal 1.cr 1507ms 2.2ms 5.6MB 1497ms 0ms crystal 1.4.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 270ms 0.9ms 9.6MB 257ms 0ms wasmedgec 0.9.1
wasm 7.rs 274ms 9.0ms 5.8MB 257ms 0ms wasmer/llvm 2.2.1
wasm 7.rs 279ms 1.1ms 9.6MB 267ms 0ms wasmedgec 0.9.1
wasm 2.rs 286ms 13ms 5.8MB 270ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 293ms 2.3ms 11.0MB 280ms 0ms wasmtime 0.36.0
wasm 7.rs 297ms 1.1ms 9.4MB 287ms 0ms wasmtime 0.36.0
wasm 2.rs 363ms 4.7ms 47.4MB 380ms 10ms node 16.15.0
wasm 7.rs 374ms 2.0ms 47.5MB 397ms 7ms node 16.15.0
crystal 1.cr 381ms 1.5ms 3.8MB 367ms 0ms crystal 1.4.1