C++ VS Wasm 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.)

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 1-im.cpp 753ms 4.3ms 1.0MB 1460ms 0ms g++ 12.2.0
cpp 1-im.cpp 772ms 3.1ms 3.5MB 1500ms 0ms clang++ 11.0.0
wasm 1.rs 4690ms 23ms 49.8MB 4697ms 7ms node 16.17.0
wasm 1.rs 4958ms 15ms 4.9MB 4940ms 0ms wasmer/llvm 2.3.0
wasm 1.rs 4993ms 6.7ms 9.3MB 4980ms 0ms wasmtime 1.0.1
wasm 1.rs timeout 0.0ms 0.0MB 0ms 0ms wasmedgec 0.11.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 1-im.cpp 72ms 1.9ms 1.0MB 120ms 0ms g++ 12.2.0
cpp 1-im.cpp 74ms 3.1ms 3.5MB 123ms 0ms clang++ 11.0.0
wasm 1.rs 414ms 0.4ms 4.8MB 400ms 0ms wasmer/llvm 2.3.0
wasm 1.rs 421ms 0.8ms 9.3MB 410ms 0ms wasmtime 1.0.1
wasm 1.rs 446ms 0.4ms 18.7MB 430ms 0ms wasmedgec 0.11.0
wasm 1.rs 468ms 1.6ms 43.8MB 477ms 3ms node 16.17.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 1.cpp 2.4ms 0.6ms 1.1MB 0ms 0ms clang++ 11.0.0
wasm 1.rs 2.9ms 0.7ms 4.9MB 0ms 0ms wasmer/llvm 2.3.0
cpp 1.cpp 3.1ms 2.0ms 1.0MB 0ms 0ms g++ 12.2.0
wasm 1.rs 6.6ms 1.2ms 10.8MB 0ms 0ms wasmtime 1.0.1
wasm 1.rs 6.9ms 0.5ms 18.7MB 0ms 0ms wasmedgec 0.11.0
wasm 1.rs 80ms 1.1ms 43.5MB 96ms 4ms node 16.17.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 0-i.cpp 226ms 1.0ms 0.9MB 220ms 0ms g++ 12.2.0
cpp 0-i.cpp 258ms 1.2ms 1.1MB 247ms 0ms clang++ 11.0.0
cpp 1.cpp 339ms 0.7ms 1.0MB 330ms 0ms g++ 12.2.0
cpp 1.cpp 384ms 0.4ms 1.1MB 370ms 0ms clang++ 11.0.0
wasm 1.rs 468ms 0.9ms 4.9MB 457ms 0ms wasmer/llvm 2.3.0
wasm 1.rs 498ms 0.2ms 9.6MB 487ms 0ms wasmtime 1.0.1
wasm 1.rs 501ms 0.6ms 18.0MB 487ms 0ms wasmedgec 0.11.0
wasm 1.rs 572ms 2.4ms 48.5MB 590ms 10ms node 16.17.0
wasm 2.rs 678ms 0.5ms 19.1MB 667ms 0ms wasmedgec 0.11.0
wasm 2.rs 678ms 0.6ms 9.7MB 667ms 0ms wasmtime 1.0.1
wasm 2.rs 689ms 1.3ms 4.8MB 677ms 0ms wasmer/llvm 2.3.0
wasm 2.rs 756ms 0.6ms 48.8MB 780ms 3ms node 16.17.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 0-i.cpp 26ms 1.3ms 1.0MB 13ms 0ms g++ 12.2.0
cpp 0-i.cpp 29ms 0.6ms 1.1MB 20ms 0ms clang++ 11.0.0
cpp 1.cpp 37ms 0.7ms 1.0MB 30ms 0ms g++ 12.2.0
cpp 1.cpp 41ms 0.2ms 1.1MB 30ms 0ms clang++ 11.0.0
wasm 1.rs 51ms 0.3ms 4.9MB 40ms 0ms wasmer/llvm 2.3.0
wasm 1.rs 57ms 0.4ms 11.0MB 43ms 0ms wasmtime 1.0.1
wasm 1.rs 58ms 0.8ms 18.9MB 50ms 0ms wasmedgec 0.11.0
wasm 2.rs 73ms 0.4ms 4.8MB 60ms 0ms wasmer/llvm 2.3.0
wasm 2.rs 75ms 1.0ms 11.4MB 67ms 0ms wasmtime 1.0.1
wasm 2.rs 76ms 0.1ms 18.7MB 67ms 0ms wasmedgec 0.11.0
wasm 1.rs 149ms 3.1ms 48.3MB 163ms 13ms node 16.17.0
wasm 2.rs 168ms 0.9ms 52.3MB 197ms 3ms node 16.17.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 1.cpp 419ms 3.4ms 7.5MB 407ms 0ms clang++ 11.0.0
wasm 2.rs 509ms 0.8ms 10.6MB 490ms 0ms wasmer/llvm 2.3.0
wasm 2.rs 561ms 4.7ms 23.7MB 543ms 0ms wasmedgec 0.11.0
cpp 1.cpp 644ms 2.2ms 7.7MB 630ms 0ms g++ 12.2.0
wasm 1.rs 665ms 22ms 57.7MB 647ms 3ms wasmedgec 0.11.0
wasm 2.rs 687ms 3.4ms 15.8MB 673ms 0ms wasmtime 1.0.1
wasm 2.rs 727ms 3.0ms 48.9MB 740ms 7ms node 16.17.0
wasm 1.rs 791ms 35ms 83.4MB 793ms 17ms node 16.17.0
wasm 1.rs 802ms 18ms 44.8MB 770ms 13ms wasmer/llvm 2.3.0
wasm 1.rs 1036ms 24ms 50.0MB 1017ms 0ms wasmtime 1.0.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 1.cpp 94ms 0.3ms 3.7MB 80ms 0ms clang++ 11.0.0
wasm 2.rs 116ms 0.8ms 7.1MB 103ms 0ms wasmer/llvm 2.3.0
wasm 2.rs 136ms 0.6ms 20.0MB 127ms 0ms wasmedgec 0.11.0
wasm 1.rs 141ms 2.5ms 15.6MB 127ms 0ms wasmer/llvm 2.3.0
wasm 1.rs 147ms 1.0ms 28.9MB 137ms 0ms wasmedgec 0.11.0
cpp 1.cpp 153ms 0.3ms 4.0MB 143ms 0ms g++ 12.2.0
wasm 2.rs 168ms 0.5ms 12.1MB 157ms 0ms wasmtime 1.0.1
wasm 1.rs 222ms 0.6ms 20.5MB 210ms 0ms wasmtime 1.0.1
wasm 1.rs 233ms 0.9ms 53.7MB 240ms 10ms node 16.17.0
wasm 2.rs 236ms 2.9ms 44.6MB 247ms 3ms node 16.17.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 8-m.cpp 1061ms 1.3ms 3.1MB 2073ms 0ms clang++ 11.0.0
cpp 7-m.cpp 1061ms 3.4ms 3.2MB 2073ms 3ms clang++ 11.0.0
cpp 7-m.cpp 1062ms 2.6ms 0.9MB 2083ms 0ms g++ 12.2.0
cpp 8-m.cpp 1063ms 0.8ms 0.9MB 2077ms 0ms g++ 12.2.0
cpp 6-im.cpp 2243ms 24ms 3.2MB 4400ms 0ms clang++ 11.0.0
cpp 6-im.cpp 2243ms 21ms 1.0MB 4400ms 0ms g++ 12.2.0
wasm 2.rs 4127ms 2.6ms 19.1MB 4113ms 0ms wasmedgec 0.11.0
wasm 7.rs 4198ms 8.5ms 6.5MB 4180ms 0ms wasmer/llvm 2.3.0
wasm 7.rs 4264ms 0.3ms 19.0MB 4250ms 0ms wasmedgec 0.11.0
wasm 2.rs 4302ms 2.2ms 48.7MB 4317ms 10ms node 16.17.0
wasm 2.rs 4399ms 7.8ms 6.0MB 4380ms 0ms wasmer/llvm 2.3.0
wasm 7.rs 4512ms 1.7ms 48.3MB 4537ms 10ms node 16.17.0
wasm 2.rs 4543ms 13ms 11.6MB 4533ms 0ms wasmtime 1.0.1
wasm 7.rs 4610ms 0.1ms 11.1MB 4600ms 0ms wasmtime 1.0.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 8-m.cpp 276ms 1.4ms 3.2MB 517ms 0ms clang++ 11.0.0
cpp 7-m.cpp 279ms 4.6ms 0.9MB 523ms 0ms g++ 12.2.0
cpp 8-m.cpp 279ms 3.6ms 0.9MB 520ms 0ms g++ 12.2.0
cpp 7-m.cpp 279ms 5.3ms 3.2MB 520ms 0ms clang++ 11.0.0
cpp 6-im.cpp 567ms 1.3ms 1.0MB 1100ms 0ms g++ 12.2.0
cpp 6-im.cpp 568ms 1.5ms 3.2MB 1097ms 0ms clang++ 11.0.0
wasm 2.rs 1039ms 0.9ms 19.1MB 1023ms 3ms wasmedgec 0.11.0
wasm 7.rs 1052ms 0.4ms 6.3MB 1040ms 0ms wasmer/llvm 2.3.0
wasm 7.rs 1074ms 0.2ms 18.4MB 1070ms 0ms wasmedgec 0.11.0
wasm 2.rs 1102ms 1.3ms 5.9MB 1090ms 0ms wasmer/llvm 2.3.0
wasm 2.rs 1142ms 1.3ms 48.5MB 1167ms 3ms node 16.17.0
wasm 2.rs 1147ms 0.5ms 11.1MB 1133ms 0ms wasmtime 1.0.1
wasm 7.rs 1161ms 0.3ms 11.1MB 1147ms 0ms wasmtime 1.0.1
wasm 7.rs 1203ms 1.2ms 48.3MB 1230ms 3ms node 16.17.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 8-m.cpp 76ms 1.1ms 3.2MB 130ms 0ms clang++ 11.0.0
cpp 7-m.cpp 76ms 0.8ms 1.0MB 130ms 0ms g++ 12.2.0
cpp 7-m.cpp 76ms 2.1ms 3.2MB 130ms 0ms clang++ 11.0.0
cpp 8-m.cpp 77ms 1.9ms 1.0MB 130ms 0ms g++ 12.2.0
cpp 6-im.cpp 150ms 0.2ms 3.2MB 277ms 0ms clang++ 11.0.0
cpp 6-im.cpp 151ms 1.4ms 1.0MB 280ms 0ms g++ 12.2.0
wasm 7.rs 267ms 0.3ms 4.9MB 257ms 0ms wasmer/llvm 2.3.0
wasm 2.rs 267ms 0.4ms 18.8MB 253ms 0ms wasmedgec 0.11.0
wasm 7.rs 276ms 0.3ms 18.8MB 260ms 0ms wasmedgec 0.11.0
wasm 2.rs 279ms 0.2ms 4.7MB 270ms 0ms wasmer/llvm 2.3.0
wasm 2.rs 293ms 0.7ms 11.4MB 280ms 0ms wasmtime 1.0.1
wasm 7.rs 296ms 0.5ms 9.5MB 287ms 0ms wasmtime 1.0.1
wasm 2.rs 365ms 1.8ms 48.3MB 383ms 7ms node 16.17.0
wasm 7.rs 388ms 5.9ms 48.2MB 400ms 10ms node 16.17.0