Nim VS Wasm benchmarks

Current benchmark data was generated on Thu Jul 13 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.)

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 1955ms 2.8ms 34.1MB 1930ms 10ms nim 1.6.14
wasm 3.rs 2048ms 5.9ms 60.1MB 2017ms 10ms wasmedgec 0.13.1
wasm 5.rs 2074ms 21ms 44.2MB 2047ms 10ms wasmedgec 0.13.1
nim 2.nim 2105ms 6.7ms 35.0MB 2087ms 7ms nim/clang 1.6.14
wasm 4.rs 2202ms 1.4ms 44.9MB 2170ms 13ms wasmedgec 0.13.1
wasm 3.rs 2272ms 23ms 48.1MB 2243ms 3ms wasmtime 10.0.1
wasm 3.rs 2717ms 81ms 80.1MB 2687ms 27ms node 18.16.1
wasm 4.rs 2770ms 28ms 65.4MB 2747ms 20ms node 18.16.1
wasm 5.rs 2774ms 20ms 65.1MB 2763ms 7ms node 18.16.1
wasm 5.rs 2817ms 17ms 32.3MB 2800ms 7ms wasmtime 10.0.1
wasm 4.rs 2933ms 20ms 32.2MB 2910ms 7ms wasmtime 10.0.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 186ms 1.2ms 5.6MB 177ms 0ms nim 1.6.14
nim 2.nim 194ms 3.4ms 5.7MB 183ms 0ms nim/clang 1.6.14
wasm 3.rs 203ms 4.3ms 32.0MB 180ms 0ms wasmedgec 0.13.1
wasm 5.rs 204ms 1.9ms 30.1MB 187ms 0ms wasmedgec 0.13.1
wasm 3.rs 215ms 5.6ms 20.0MB 200ms 0ms wasmtime 10.0.1
wasm 4.rs 219ms 2.6ms 30.1MB 197ms 3ms wasmedgec 0.13.1
wasm 5.rs 269ms 0.5ms 18.1MB 257ms 0ms wasmtime 10.0.1
wasm 4.rs 284ms 1.1ms 20.0MB 270ms 0ms wasmtime 10.0.1
wasm 3.rs 305ms 8.2ms 52.4MB 290ms 3ms node 18.16.1
wasm 5.rs 308ms 1.0ms 52.2MB 303ms 0ms node 18.16.1
wasm 4.rs 308ms 8.2ms 53.1MB 300ms 7ms node 18.16.1

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 1425ms 14ms 56.6MB 1440ms 10ms node 18.16.1
wasm 3.rs 1520ms 4.5ms 18.5MB 1503ms 3ms wasmtime 10.0.1
wasm 3.rs 2028ms 2.8ms 28.4MB 2010ms 0ms wasmedgec 0.13.1
nim 1.nim timeout 0.0ms 423.4MB 3330ms 1317ms nim 1.6.14
nim 1.nim timeout 0.0ms 424.2MB 3350ms 1300ms nim/clang 1.6.14

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 105ms 0.2ms 16.9MB 90ms 0ms wasmtime 10.0.1
wasm 3.rs 143ms 1.5ms 29.9MB 130ms 0ms wasmedgec 0.13.1
wasm 3.rs 165ms 4.4ms 58.6MB 173ms 10ms node 18.16.1
nim 1.nim timeout 0.0ms 421.6MB 3370ms 1283ms nim 1.6.14
nim 1.nim timeout 0.0ms 423.3MB 3447ms 1203ms nim/clang 1.6.14

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 484ms 1.6ms 28.9MB 463ms 0ms wasmedgec 0.13.1
wasm 1.rs 589ms 0.5ms 17.5MB 570ms 0ms wasmtime 10.0.1
wasm 1.rs 659ms 0.8ms 58.1MB 690ms 7ms node 18.16.1
nim 1.nim timeout 0.0ms 3.0MB 4990ms 0ms nim 1.6.14
nim 1.nim timeout 0.0ms 3.0MB 4983ms 0ms nim/clang 1.6.14

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 132ms 0.7ms 29.7MB 120ms 0ms wasmedgec 0.13.1
wasm 1.rs 157ms 0.3ms 16.7MB 147ms 0ms wasmtime 10.0.1
wasm 1.rs 233ms 3.6ms 57.6MB 260ms 13ms node 18.16.1
nim 1.nim timeout 0.0ms 2.3MB 4990ms 0ms nim 1.6.14
nim 1.nim timeout 0.0ms 2.2MB 4983ms 0ms nim/clang 1.6.14

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 259ms 0.7ms 1.0MB 250ms 0ms nim 1.6.14
nim 2.nim 346ms 1.7ms 1.3MB 330ms 0ms nim/clang 1.6.14
wasm 1.rs 367ms 0.9ms 27.1MB 347ms 3ms wasmedgec 0.13.1
wasm 1.rs 427ms 1.5ms 16.1MB 413ms 0ms wasmtime 10.0.1
wasm 1.rs 470ms 0.8ms 49.4MB 453ms 7ms node 18.16.1
nim 1.nim 785ms 2.8ms 1.0MB 687ms 83ms nim 1.6.14
nim 1.nim 799ms 1.3ms 1.2MB 690ms 90ms nim/clang 1.6.14

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 28ms 0.5ms 1.0MB 20ms 0ms nim 1.6.14
nim 2.nim 36ms 0.3ms 1.3MB 30ms 0ms nim/clang 1.6.14
wasm 1.rs 46ms 0.6ms 28.0MB 30ms 0ms wasmedgec 0.13.1
wasm 1.rs 51ms 1.4ms 16.1MB 37ms 0ms wasmtime 10.0.1
nim 1.nim 81ms 0.5ms 1.0MB 60ms 7ms nim 1.6.14
nim 1.nim 83ms 0.8ms 1.2MB 70ms 0ms nim/clang 1.6.14
wasm 1.rs 92ms 2.7ms 49.5MB 77ms 7ms node 18.16.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1.2ms 0.1ms 1.0MB 0ms 0ms nim 1.6.14
nim 1.nim 2.9ms 2.0ms 1.2MB 0ms 0ms nim/clang 1.6.14
wasm 1.rs 7.0ms 1.0ms 16.1MB 0ms 0ms wasmtime 10.0.1
wasm 1.rs 9.9ms 0.9ms 28.8MB 0ms 0ms wasmedgec 0.13.1
wasm 1.rs 47ms 2.4ms 47.3MB 32ms 2ms node 18.16.1

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 718ms 6.0ms 94.6MB 340ms 347ms nim/clang 1.6.14
nim 1.nim 722ms 2.7ms 94.2MB 313ms 377ms nim 1.6.14

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 121ms 1.3ms 18.3MB 50ms 53ms nim/clang 1.6.14
nim 1.nim 124ms 2.1ms 18.0MB 57ms 53ms nim 1.6.14

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 145ms 0.9ms 1.2MB 137ms 0ms nim/clang 1.6.14
nim 2.nim 152ms 0.8ms 1.1MB 140ms 0ms nim 1.6.14
wasm 1.rs 163ms 1.5ms 28.2MB 147ms 3ms wasmedgec 0.13.1
wasm 1.rs 200ms 0.9ms 16.2MB 187ms 0ms wasmtime 10.0.1
wasm 1.rs 283ms 1.5ms 53.4MB 270ms 10ms node 18.16.1
nim 1.nim timeout 0.0ms 1.1MB 4990ms 0ms nim 1.6.14
nim 1.nim timeout 0.0ms 1.2MB 4983ms 0ms nim/clang 1.6.14

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 428ms 0.6ms 1.3MB 417ms 0ms nim/clang 1.6.14
nim 2.nim 450ms 0.8ms 1.1MB 440ms 0ms nim 1.6.14
wasm 1.rs 466ms 2.2ms 27.6MB 450ms 0ms wasmedgec 0.13.1
wasm 1.rs 584ms 4.8ms 16.2MB 567ms 0ms wasmtime 10.0.1
wasm 1.rs 722ms 2.0ms 53.1MB 710ms 13ms node 18.16.1
nim 1.nim timeout 0.0ms 1.0MB 4987ms 0ms nim 1.6.14
nim 1.nim timeout 0.0ms 1.3MB 4987ms 0ms nim/clang 1.6.14

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 63ms 0.5ms 1.2MB 50ms 0ms nim/clang 1.6.14
nim 2.nim 65ms 1.7ms 1.0MB 57ms 0ms nim 1.6.14
wasm 1.rs 88ms 1.8ms 28.2MB 70ms 3ms wasmedgec 0.13.1
wasm 1.rs 103ms 0.3ms 16.3MB 90ms 0ms wasmtime 10.0.1
wasm 1.rs 159ms 3.7ms 51.3MB 143ms 10ms node 18.16.1
nim 1.nim 389ms 5.3ms 1.2MB 373ms 0ms nim/clang 1.6.14
nim 1.nim 444ms 3.1ms 1.0MB 430ms 0ms nim 1.6.14

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 656ms 0.7ms 4.8MB 647ms 0ms nim/clang 1.6.14
nim 1.nim 983ms 0.4ms 4.3MB 970ms 0ms nim 1.6.14
wasm 8.rs 1095ms 1.0ms 31.9MB 1077ms 3ms wasmedgec 0.13.1
wasm 8.rs 1250ms 0.2ms 19.3MB 1233ms 0ms wasmtime 10.0.1
wasm 8.rs 1369ms 3.6ms 54.1MB 1350ms 13ms node 18.16.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 30ms 0.7ms 1.2MB 20ms 0ms nim/clang 1.6.14
nim 1.nim 43ms 0.7ms 1.1MB 30ms 0ms nim 1.6.14
wasm 8.rs 56ms 0.1ms 28.4MB 50ms 0ms wasmedgec 0.13.1
wasm 8.rs 61ms 0.7ms 15.9MB 47ms 0ms wasmtime 10.0.1
wasm 8.rs 104ms 1.8ms 49.6MB 97ms 3ms node 18.16.1

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 992ms 2.9ms 34.7MB 977ms 0ms nim 1.6.14
nim 1.nim 1065ms 6.2ms 34.5MB 1047ms 3ms nim/clang 1.6.14
wasm 1.rs 1134ms 4.5ms 51.5MB 1103ms 10ms wasmedgec 0.13.1
wasm 1.rs 1354ms 4.0ms 40.3MB 1327ms 10ms wasmtime 10.0.1
wasm 1.rs 1383ms 21ms 73.3MB 1367ms 13ms node 18.16.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 211ms 1.7ms 9.3MB 197ms 0ms nim 1.6.14
nim 1.nim 229ms 2.5ms 9.5MB 217ms 0ms nim/clang 1.6.14
wasm 1.rs 251ms 2.8ms 34.9MB 223ms 10ms wasmedgec 0.13.1
wasm 1.rs 299ms 4.3ms 22.3MB 287ms 0ms wasmtime 10.0.1
wasm 1.rs 340ms 4.2ms 55.4MB 323ms 17ms node 18.16.1

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 382ms 0.6ms 1.3MB 370ms 0ms nim 1.6.14
nim 2.nim 411ms 0.8ms 1.3MB 400ms 0ms nim/clang 1.6.14
wasm 1.rs 472ms 2.5ms 16.1MB 463ms 0ms wasmtime 10.0.1
wasm 1.rs 492ms 0.4ms 28.6MB 477ms 0ms wasmedgec 0.13.1
wasm 2.rs 655ms 4.7ms 27.8MB 633ms 7ms wasmedgec 0.13.1
wasm 2.rs 657ms 1.4ms 16.3MB 643ms 0ms wasmtime 10.0.1
wasm 1.rs 774ms 77ms 48.6MB 760ms 7ms node 18.16.1
wasm 2.rs 943ms 2.4ms 49.3MB 930ms 7ms node 18.16.1

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 41ms 0.3ms 1.3MB 30ms 0ms nim 1.6.14
nim 2.nim 43ms 0.0ms 1.2MB 30ms 0ms nim/clang 1.6.14
wasm 1.rs 55ms 1.7ms 16.1MB 43ms 0ms wasmtime 10.0.1
wasm 1.rs 60ms 2.1ms 27.3MB 50ms 0ms wasmedgec 0.13.1
wasm 2.rs 75ms 1.6ms 16.0MB 63ms 0ms wasmtime 10.0.1
wasm 2.rs 77ms 1.6ms 28.6MB 63ms 3ms wasmedgec 0.13.1
wasm 1.rs 119ms 0.8ms 49.5MB 107ms 0ms node 18.16.1
wasm 2.rs 142ms 2.9ms 49.9MB 127ms 3ms node 18.16.1

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 568ms 14ms 40.3MB 550ms 0ms nim 1.6.14
wasm 2.rs 586ms 9.0ms 31.6MB 567ms 3ms wasmedgec 0.13.1
wasm 2.rs 604ms 0.9ms 21.2MB 590ms 0ms wasmtime 10.0.1
nim 2.nim 608ms 6.1ms 6.5MB 597ms 0ms nim/clang 1.6.14
wasm 1.rs 613ms 36ms 66.5MB 587ms 10ms wasmedgec 0.13.1
wasm 1.rs 624ms 13ms 55.3MB 603ms 7ms wasmtime 10.0.1
nim 2.nim 633ms 1.1ms 6.1MB 617ms 0ms nim 1.6.14
nim 1.nim 758ms 55ms 41.3MB 743ms 0ms nim/clang 1.6.14
wasm 2.rs 1090ms 9.2ms 53.6MB 1067ms 10ms node 18.16.1
wasm 1.rs 1351ms 92ms 87.9MB 1337ms 10ms node 18.16.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 129ms 0.5ms 11.0MB 120ms 0ms nim 1.6.14
nim 1.nim 136ms 0.4ms 11.3MB 123ms 0ms nim/clang 1.6.14
wasm 2.rs 142ms 0.1ms 17.4MB 127ms 0ms wasmtime 10.0.1
nim 2.nim 142ms 1.0ms 3.3MB 130ms 0ms nim/clang 1.6.14
wasm 2.rs 142ms 2.1ms 29.2MB 127ms 3ms wasmedgec 0.13.1
wasm 1.rs 145ms 0.5ms 25.9MB 130ms 0ms wasmtime 10.0.1
nim 2.nim 148ms 0.7ms 3.0MB 140ms 0ms nim 1.6.14
wasm 1.rs 149ms 3.2ms 40.5MB 130ms 3ms wasmedgec 0.13.1
wasm 2.rs 298ms 1.7ms 49.2MB 280ms 10ms node 18.16.1
wasm 1.rs 349ms 2.5ms 58.9MB 333ms 7ms node 18.16.1

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 2761ms 9.1ms 28.6MB 2740ms 3ms wasmedgec 0.13.1
wasm 2.rs 3088ms 0.8ms 17.2MB 3077ms 0ms wasmtime 10.0.1
wasm 2.rs 3251ms 2.8ms 53.8MB 3257ms 10ms node 18.16.1
nim 1.nim timeout 0.0ms 5.9MB 4990ms 0ms nim 1.6.14
nim 1.nim timeout 0.0ms 6.0MB 4990ms 0ms nim/clang 1.6.14

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 652ms 3.8ms 28.8MB 637ms 0ms wasmedgec 0.13.1
wasm 2.rs 727ms 1.0ms 16.9MB 710ms 0ms wasmtime 10.0.1
wasm 2.rs 815ms 2.2ms 54.6MB 827ms 13ms node 18.16.1
nim 1.nim timeout 0.0ms 5.8MB 4990ms 0ms nim 1.6.14
nim 1.nim timeout 0.0ms 6.1MB 4983ms 0ms nim/clang 1.6.14

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 2492ms 6.4ms 168.0MB 2437ms 37ms nim/clang 1.6.14
nim 1.nim 2557ms 7.1ms 167.1MB 2500ms 37ms nim 1.6.14

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 255ms 0.2ms 17.2MB 240ms 0ms nim/clang 1.6.14
nim 1.nim 264ms 1.1ms 16.8MB 250ms 0ms nim 1.6.14

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 4117ms 0.5ms 1.2MB 4103ms 0ms nim/clang 1.6.14
nim 1.nim 4119ms 0.2ms 1.3MB 4110ms 0ms nim 1.6.14
wasm 2.rs 4128ms 1.6ms 32.1MB 4110ms 0ms wasmedgec 0.13.1
wasm 7.rs 4247ms 3.7ms 27.6MB 4233ms 0ms wasmedgec 0.13.1
wasm 2.rs 4317ms 4.1ms 49.0MB 4300ms 0ms node 18.16.1
wasm 2.rs 4425ms 1.5ms 16.3MB 4413ms 0ms wasmtime 10.0.1
wasm 7.rs 4554ms 1.2ms 49.4MB 4540ms 7ms node 18.16.1
wasm 7.rs timeout 0.0ms 16.0MB 4987ms 0ms wasmtime 10.0.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1031ms 0.5ms 1.3MB 1020ms 0ms nim/clang 1.6.14
nim 1.nim 1034ms 3.4ms 1.3MB 1020ms 0ms nim 1.6.14
wasm 2.rs 1042ms 2.4ms 28.8MB 1023ms 0ms wasmedgec 0.13.1
wasm 7.rs 1072ms 1.6ms 29.5MB 1060ms 0ms wasmedgec 0.13.1
wasm 2.rs 1116ms 0.6ms 16.1MB 1103ms 0ms wasmtime 10.0.1
wasm 2.rs 1117ms 3.3ms 48.3MB 1097ms 7ms node 18.16.1
wasm 7.rs 1177ms 0.5ms 48.4MB 1160ms 3ms node 18.16.1
wasm 7.rs 3261ms 2.9ms 16.3MB 3243ms 0ms wasmtime 10.0.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 261ms 0.8ms 1.3MB 250ms 0ms nim/clang 1.6.14
nim 1.nim 261ms 1.1ms 1.3MB 250ms 0ms nim 1.6.14
wasm 2.rs 271ms 0.6ms 28.7MB 250ms 0ms wasmedgec 0.13.1
wasm 7.rs 278ms 0.4ms 27.8MB 260ms 0ms wasmedgec 0.13.1
wasm 2.rs 289ms 5.6ms 16.0MB 270ms 0ms wasmtime 10.0.1
wasm 2.rs 317ms 1.2ms 47.0MB 297ms 10ms node 18.16.1
wasm 7.rs 332ms 1.3ms 48.0MB 313ms 7ms node 18.16.1
wasm 7.rs 822ms 1.0ms 16.1MB 810ms 0ms wasmtime 10.0.1