Nim VS Javascript benchmarks

Current benchmark data was generated on Wed May 25 2022, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz (Model 85)

* -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 3281ms 50ms 35.2MB 3253ms 13ms nim 1.6.6
nim 2.nim 3344ms 37ms 34.2MB 3320ms 3ms nim/clang 1.6.6
javascript 1.js 4218ms 14ms 265.6MB 2980ms 1580ms node 18.2.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 1.js 237ms 0.8ms 80.5MB 213ms 33ms node 18.2.0
nim 2.nim 288ms 21ms 5.7MB 273ms 0ms nim/clang 1.6.6
nim 2.nim 304ms 1.5ms 5.5MB 290ms 0ms nim 1.6.6

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 1.js 2607ms 120ms 76.4MB 2667ms 50ms node 18.2.0
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 1.js 237ms 1.3ms 57.5MB 210ms 23ms node 18.2.0
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 235ms 16ms 0.7MB 223ms 0ms nim 1.6.6
nim 2.nim 284ms 20ms 0.9MB 270ms 0ms nim/clang 1.6.6
nim 1.nim 642ms 2.5ms 1.0MB 560ms 70ms nim/clang 1.6.6
nim 1.nim 686ms 49ms 0.7MB 600ms 70ms nim 1.6.6

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 24ms 0.5ms 0.7MB 13ms 0ms nim 1.6.6
nim 2.nim 28ms 0.1ms 0.9MB 20ms 0ms nim/clang 1.6.6
nim 1.nim 71ms 4.9ms 0.7MB 57ms 0ms nim 1.6.6
nim 1.nim 76ms 1.0ms 0.9MB 57ms 3ms nim/clang 1.6.6

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1.5ms 0.3ms 2.0MB 0ms 0ms nim/clang 1.6.6
nim 1.nim 1.7ms 0.6ms 0.7MB 0ms 0ms nim 1.6.6
javascript 1.js 50ms 3.0ms 37.6MB 36ms 4ms node 18.2.0

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 899ms 3.5ms 94.4MB 447ms 420ms nim/clang 1.6.6
nim 1.nim 926ms 6.7ms 94.0MB 493ms 397ms nim 1.6.6
javascript 1.js timeout 0.0ms 0.0MB 0ms 0ms node 18.2.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 134ms 8.4ms 18.7MB 60ms 57ms nim/clang 1.6.6
nim 1.nim 145ms 1.0ms 17.8MB 70ms 60ms nim 1.6.6
javascript 1.js 399ms 7.4ms 68.0MB 357ms 87ms node 18.2.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 148ms 0.5ms 0.9MB 140ms 0ms nim/clang 1.6.6
nim 2.nim 159ms 0.7ms 0.7MB 150ms 0ms nim 1.6.6
javascript 2.js 849ms 2.0ms 55.0MB 833ms 7ms node 18.2.0
javascript 1.js 1145ms 3.1ms 57.1MB 1117ms 20ms node 18.2.0
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 422ms 30ms 0.9MB 405ms 0ms nim/clang 1.6.6
nim 2.nim 467ms 0.4ms 0.7MB 460ms 0ms nim 1.6.6
javascript 2.js 2393ms 20ms 58.1MB 2380ms 13ms node 18.2.0
javascript 1.js 3152ms 220ms 56.9MB 3113ms 30ms node 18.2.0
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 65ms 0.1ms 0.9MB 53ms 0ms nim/clang 1.6.6
nim 2.nim 68ms 0.3ms 0.7MB 60ms 0ms nim 1.6.6
javascript 2.js 440ms 2.4ms 46.5MB 423ms 7ms node 18.2.0
javascript 1.js 465ms 0.8ms 42.7MB 443ms 17ms node 18.2.0
nim 1.nim 467ms 0.9ms 0.7MB 457ms 0ms nim 1.6.6
nim 1.nim 485ms 0.9ms 0.9MB 473ms 0ms nim/clang 1.6.6

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 485ms 35ms 4.9MB 470ms 0ms nim/clang 1.6.6
nim 1.nim 883ms 1.7ms 4.4MB 870ms 0ms nim 1.6.6

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 22ms 1.9ms 1.0MB 10ms 0ms nim/clang 1.6.6
nim 1.nim 40ms 1.2ms 0.7MB 30ms 0ms nim 1.6.6

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 1.js 1071ms 1.7ms 117.0MB 1107ms 53ms node 18.2.0
nim 1.nim 1385ms 10ms 35.0MB 1363ms 3ms nim 1.6.6
nim 1.nim 1590ms 8.8ms 35.1MB 1563ms 7ms nim/clang 1.6.6

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 1.js 302ms 1.3ms 84.4MB 290ms 33ms node 18.2.0
nim 1.nim 322ms 21ms 9.3MB 307ms 0ms nim 1.6.6
nim 1.nim 338ms 0.6ms 10.0MB 323ms 0ms nim/clang 1.6.6

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 418ms 30ms 0.9MB 403ms 0ms nim 1.6.6
nim 2.nim 437ms 11ms 0.9MB 427ms 0ms nim/clang 1.6.6
javascript 6.js 721ms 41ms 42.6MB 703ms 3ms node 18.2.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 43ms 4.2ms 1.0MB 33ms 0ms nim 1.6.6
nim 2.nim 46ms 0.8ms 1.0MB 37ms 0ms nim/clang 1.6.6
javascript 6.js 132ms 11ms 42.5MB 103ms 13ms node 18.2.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 663ms 1.3ms 6.6MB 650ms 0ms nim/clang 1.6.6
nim 2.nim 776ms 0.8ms 6.1MB 760ms 0ms nim 1.6.6
nim 1.nim 1202ms 31ms 41.5MB 1180ms 7ms nim/clang 1.6.6
nim 1.nim 1255ms 71ms 40.4MB 1233ms 7ms nim 1.6.6

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 126ms 0.4ms 11.1MB 110ms 0ms nim 1.6.6
nim 1.nim 130ms 0.8ms 11.4MB 120ms 0ms nim/clang 1.6.6
nim 2.nim 152ms 1.1ms 3.3MB 140ms 0ms nim/clang 1.6.6
nim 2.nim 180ms 0.1ms 3.0MB 167ms 0ms nim 1.6.6

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 3.js timeout 0.0ms 0.0MB 0ms 0ms node 18.2.0
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 3.js 1675ms 7.6ms 58.4MB 1663ms 13ms node 18.2.0
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 6-m.js 2983ms 4.9ms 67.0MB 5593ms 30ms node 18.2.0
nim 1.nim 3300ms 230ms 1.9MB 3287ms 0ms nim 1.6.6
nim 1.nim 3433ms 1.4ms 1.8MB 3420ms 0ms nim/clang 1.6.6

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 861ms 0.9ms 0.9MB 850ms 0ms nim/clang 1.6.6
nim 1.nim 862ms 1.5ms 0.9MB 850ms 0ms nim 1.6.6
javascript 6-m.js 923ms 9.4ms 65.4MB 1623ms 27ms node 18.2.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 210ms 15ms 1.0MB 200ms 0ms nim/clang 1.6.6
nim 1.nim 218ms 0.5ms 0.9MB 207ms 0ms nim 1.6.6
javascript 6-m.js 410ms 6.8ms 65.7MB 593ms 33ms node 18.2.0