C++ VS Wasm benchmarks

Current benchmark data was generated on Sat Jan 28 2023, 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 756ms 13ms 1.4MB 1457ms 0ms g++ 12.2.0
cpp 1-im.cpp 763ms 5.8ms 4.0MB 1487ms 0ms clang++ 14.0.0
wasm 1.rs 4719ms 21ms 44.2MB 4730ms 10ms node 16.19.0
wasm 1.rs timeout 0.0ms 15.7MB 4987ms 0ms wasmedgec 0.11.2
wasm 1.rs timeout 0.0ms 9.1MB 4990ms 0ms wasmtime 5.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 1-im.cpp 70ms 0.3ms 1.4MB 117ms 0ms g++ 12.2.0
cpp 1-im.cpp 72ms 1.8ms 4.0MB 123ms 0ms clang++ 14.0.0
wasm 1.rs 431ms 1.7ms 9.2MB 413ms 0ms wasmtime 5.0.0
wasm 1.rs 448ms 0.5ms 14.3MB 437ms 0ms wasmedgec 0.11.2
wasm 1.rs 470ms 13ms 44.3MB 480ms 3ms node 16.19.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 1.cpp 1.7ms 0.8ms 2.4MB 0ms 0ms g++ 12.2.0
cpp 1.cpp 2.1ms 0.6ms 1.4MB 0ms 0ms clang++ 14.0.0
wasm 1.rs 6.0ms 0.3ms 10.8MB 0ms 0ms wasmtime 5.0.0
wasm 1.rs 6.3ms 0.3ms 15.9MB 0ms 0ms wasmedgec 0.11.2
wasm 1.rs 81ms 1.5ms 43.3MB 96ms 4ms node 16.19.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 0-i.cpp 225ms 0.5ms 1.3MB 213ms 0ms g++ 12.2.0
cpp 0-i.cpp 255ms 3.2ms 1.4MB 240ms 0ms clang++ 14.0.0
cpp 1.cpp 326ms 1.8ms 1.4MB 313ms 0ms clang++ 14.0.0
cpp 1.cpp 341ms 1.0ms 1.3MB 330ms 0ms g++ 12.2.0
wasm 1.rs 497ms 15ms 9.3MB 483ms 0ms wasmtime 5.0.0
wasm 1.rs 502ms 2.4ms 15.3MB 487ms 0ms wasmedgec 0.11.2
wasm 1.rs 576ms 5.1ms 48.0MB 593ms 7ms node 16.19.0
wasm 2.rs 673ms 5.3ms 9.4MB 657ms 0ms wasmtime 5.0.0
wasm 2.rs 694ms 1.0ms 15.8MB 680ms 0ms wasmedgec 0.11.2
wasm 2.rs 751ms 0.9ms 50.7MB 763ms 13ms node 16.19.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 0-i.cpp 25ms 0.0ms 1.3MB 17ms 0ms g++ 12.2.0
cpp 0-i.cpp 29ms 2.1ms 1.4MB 20ms 0ms clang++ 14.0.0
cpp 1.cpp 36ms 0.8ms 1.4MB 27ms 0ms clang++ 14.0.0
cpp 1.cpp 36ms 0.4ms 1.4MB 30ms 0ms g++ 12.2.0
wasm 1.rs 56ms 0.4ms 10.8MB 43ms 0ms wasmtime 5.0.0
wasm 1.rs 58ms 0.6ms 15.8MB 47ms 0ms wasmedgec 0.11.2
wasm 2.rs 75ms 1.4ms 9.4MB 60ms 0ms wasmtime 5.0.0
wasm 2.rs 77ms 1.0ms 15.4MB 63ms 0ms wasmedgec 0.11.2
wasm 1.rs 147ms 5.0ms 48.1MB 163ms 7ms node 16.19.0
wasm 2.rs 171ms 1.8ms 48.8MB 187ms 10ms node 16.19.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 565ms 5.4ms 20.6MB 547ms 0ms wasmedgec 0.11.2
cpp 1.cpp 644ms 12ms 7.8MB 633ms 0ms g++ 12.2.0
cpp 1.cpp 711ms 5.6ms 7.7MB 697ms 0ms clang++ 14.0.0
wasm 2.rs 741ms 3.2ms 15.9MB 727ms 0ms wasmtime 5.0.0
wasm 2.rs 743ms 13ms 48.5MB 747ms 10ms node 16.19.0
wasm 1.rs 1448ms 159ms 54.0MB 1423ms 10ms wasmedgec 0.11.2
wasm 1.rs 1486ms 103ms 82.8MB 1483ms 20ms node 16.19.0
wasm 1.rs 2121ms 90ms 50.1MB 2100ms 3ms wasmtime 5.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 137ms 2.3ms 16.9MB 120ms 0ms wasmedgec 0.11.2
cpp 1.cpp 154ms 2.5ms 4.0MB 143ms 0ms g++ 12.2.0
cpp 1.cpp 169ms 0.6ms 4.0MB 160ms 0ms clang++ 14.0.0
wasm 2.rs 176ms 0.6ms 12.1MB 163ms 0ms wasmtime 5.0.0
wasm 1.rs 182ms 9.1ms 25.3MB 167ms 0ms wasmedgec 0.11.2
wasm 1.rs 234ms 4.1ms 20.7MB 210ms 3ms wasmtime 5.0.0
wasm 2.rs 238ms 3.0ms 44.7MB 243ms 7ms node 16.19.0
wasm 1.rs 244ms 12ms 53.3MB 243ms 13ms node 16.19.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 7-m.cpp 1059ms 3.0ms 3.3MB 2077ms 0ms clang++ 14.0.0
cpp 7-m.cpp 1061ms 5.4ms 1.3MB 2080ms 0ms g++ 12.2.0
cpp 8-m.cpp 1065ms 0.4ms 1.4MB 2080ms 0ms g++ 12.2.0
cpp 8-m.cpp 1069ms 14ms 3.5MB 2080ms 0ms clang++ 14.0.0
cpp 6-im.cpp 2223ms 8.8ms 3.3MB 4353ms 3ms clang++ 14.0.0
cpp 6-im.cpp 2238ms 14ms 1.3MB 4390ms 0ms g++ 12.2.0
wasm 2.rs 4128ms 2.4ms 15.4MB 4110ms 3ms wasmedgec 0.11.2
wasm 7.rs 4266ms 34ms 16.0MB 4250ms 0ms wasmedgec 0.11.2
wasm 2.rs 4306ms 3.2ms 48.5MB 4323ms 10ms node 16.19.0
wasm 2.rs 4413ms 29ms 11.3MB 4400ms 0ms wasmtime 5.0.0
wasm 7.rs 4514ms 17ms 48.9MB 4530ms 10ms node 16.19.0
wasm 7.rs 4629ms 19ms 11.3MB 4617ms 0ms wasmtime 5.0.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 7-m.cpp 273ms 0.1ms 3.4MB 520ms 0ms clang++ 14.0.0
cpp 8-m.cpp 274ms 0.9ms 1.4MB 520ms 0ms g++ 12.2.0
cpp 7-m.cpp 275ms 2.4ms 1.3MB 520ms 0ms g++ 12.2.0
cpp 8-m.cpp 276ms 3.9ms 3.3MB 517ms 0ms clang++ 14.0.0
cpp 6-im.cpp 562ms 1.6ms 3.5MB 1087ms 0ms clang++ 14.0.0
cpp 6-im.cpp 566ms 3.0ms 1.4MB 1097ms 0ms g++ 12.2.0
wasm 2.rs 1044ms 6.9ms 16.2MB 1030ms 0ms wasmedgec 0.11.2
wasm 7.rs 1068ms 1.1ms 15.7MB 1057ms 0ms wasmedgec 0.11.2
wasm 2.rs 1113ms 0.1ms 11.3MB 1100ms 0ms wasmtime 5.0.0
wasm 2.rs 1157ms 5.8ms 48.5MB 1167ms 17ms node 16.19.0
wasm 7.rs 1162ms 0.5ms 11.3MB 1150ms 0ms wasmtime 5.0.0
wasm 7.rs 1206ms 3.5ms 48.8MB 1217ms 17ms node 16.19.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 7-m.cpp 75ms 0.9ms 1.3MB 130ms 0ms g++ 12.2.0
cpp 7-m.cpp 76ms 2.0ms 3.3MB 130ms 0ms clang++ 14.0.0
cpp 8-m.cpp 76ms 1.2ms 3.3MB 127ms 0ms clang++ 14.0.0
cpp 8-m.cpp 78ms 4.9ms 1.3MB 130ms 0ms g++ 12.2.0
cpp 6-im.cpp 149ms 0.8ms 3.3MB 270ms 0ms clang++ 14.0.0
cpp 6-im.cpp 151ms 1.5ms 1.3MB 277ms 0ms g++ 12.2.0
wasm 2.rs 268ms 0.8ms 14.9MB 257ms 0ms wasmedgec 0.11.2
wasm 7.rs 279ms 6.0ms 16.1MB 257ms 0ms wasmedgec 0.11.2
wasm 2.rs 288ms 6.1ms 9.4MB 277ms 0ms wasmtime 5.0.0
wasm 7.rs 299ms 2.6ms 9.5MB 290ms 0ms wasmtime 5.0.0
wasm 2.rs 375ms 13ms 48.5MB 387ms 17ms node 16.19.0
wasm 7.rs 384ms 2.8ms 48.9MB 410ms 7ms node 16.19.0