Nim VS Go 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
nim 2.nim 2105ms 6.7ms 35.0MB 2087ms 7ms nim/clang 1.6.14
go 1.go 3509ms 41ms 45.0MB 5013ms 43ms go 1.20.6
go 1.go 4400ms 25ms 50.6MB 4380ms 3ms tinygo 0.28.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
go 1.go 308ms 4.5ms 8.1MB 397ms 0ms go 1.20.6
go 1.go 440ms 1.4ms 6.9MB 427ms 0ms tinygo 0.28.1

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 930ms 108ms 13.5MB 1800ms 7ms go 1.20.6
go 1.go 3070ms 9.5ms 253.2MB 2970ms 77ms tinygo 0.28.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
go 1-m.go 79ms 17ms 5.4MB 130ms 0ms go 1.20.6
go 1.go 477ms 0.5ms 65.4MB 457ms 3ms tinygo 0.28.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
go 1.go 163ms 1.2ms 8.3MB 153ms 0ms go 1.20.6
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
go 1.go 48ms 1.4ms 8.1MB 37ms 0ms go 1.20.6
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
go 3-m.go 255ms 4.3ms 2.9MB 457ms 0ms go 1.20.6
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
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
go 3.go 31ms 0.6ms 2.9MB 40ms 0ms go 1.20.6
nim 2.nim 36ms 0.3ms 1.3MB 30ms 0ms nim/clang 1.6.14
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

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
go 1.go 1.6ms 0.4ms 0.0MB 0ms 0ms tinygo 0.28.1
nim 1.nim 2.9ms 2.0ms 1.2MB 0ms 0ms nim/clang 1.6.14
go 1.go 3.0ms 0.2ms 2.9MB 0ms 0ms go 1.20.6

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-http2.go 11ms 2.3ms 17.3MB 0ms 0ms go 1.20.6
go 2-m.go 560ms 15ms 159.4MB 537ms 350ms go 1.20.6
go 1-m.go 610ms 23ms 175.2MB 570ms 397ms go 1.20.6
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
go 1-http2.go 39ms 2.0ms 26.1MB 43ms 3ms go 1.20.6
nim 1.nim 121ms 1.3ms 18.3MB 50ms 53ms nim/clang 1.6.14
go 1.go 122ms 7.7ms 37.4MB 87ms 50ms go 1.20.6
nim 1.nim 124ms 2.1ms 18.0MB 57ms 53ms nim 1.6.14
go 2.go 128ms 8.4ms 38.4MB 87ms 53ms go 1.20.6

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
go 3.go 174ms 0.2ms 0.4MB 160ms 0ms tinygo 0.28.1
go 3.go 177ms 1.4ms 3.4MB 163ms 0ms go 1.20.6
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
go 3.go 516ms 1.1ms 0.4MB 503ms 0ms tinygo 0.28.1
go 3.go 519ms 1.6ms 3.4MB 503ms 0ms go 1.20.6
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
go 3.go 85ms 0.8ms 0.0MB 70ms 0ms tinygo 0.28.1
go 3.go 93ms 3.6ms 3.6MB 80ms 0ms go 1.20.6
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
go 1.go 4379ms 2.8ms 7.3MB 4363ms 0ms go 1.20.6
go 1.go timeout 0.0ms 5.4MB 4983ms 0ms tinygo 0.28.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
go 1.go 182ms 0.2ms 2.9MB 170ms 0ms go 1.20.6
go 1.go 243ms 0.5ms 0.0MB 230ms 0ms tinygo 0.28.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
go 1.go 2080ms 20ms 37.6MB 2947ms 27ms go 1.20.6
go 2.go 2382ms 46ms 49.9MB 3403ms 57ms go 1.20.6
go 1.go 2858ms 2.3ms 51.9MB 2840ms 3ms tinygo 0.28.1
go 2.go 4300ms 6.9ms 120.1MB 4273ms 10ms tinygo 0.28.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
go 1.go 444ms 5.6ms 12.3MB 607ms 7ms go 1.20.6
go 2.go 510ms 1.8ms 13.2MB 720ms 7ms go 1.20.6
go 1.go 607ms 1.8ms 13.1MB 593ms 0ms tinygo 0.28.1
go 2.go 833ms 2.9ms 29.9MB 820ms 0ms tinygo 0.28.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
go 1.go 430ms 0.7ms 0.0MB 420ms 0ms tinygo 0.28.1
go 1.go 456ms 1.6ms 2.9MB 450ms 0ms go 1.20.6

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
go 1.go 45ms 0.7ms 0.0MB 37ms 0ms tinygo 0.28.1
go 1.go 52ms 0.6ms 2.9MB 40ms 0ms go 1.20.6

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
go 1.go 600ms 68ms 43.8MB 580ms 7ms tinygo 0.28.1
nim 2.nim 608ms 6.1ms 6.5MB 597ms 0ms nim/clang 1.6.14
nim 2.nim 633ms 1.1ms 6.1MB 617ms 0ms nim 1.6.14
go 1.go 633ms 64ms 72.4MB 607ms 7ms go 1.20.6
go 2.go 640ms 9.9ms 16.3MB 627ms 0ms tinygo 0.28.1
nim 1.nim 758ms 55ms 41.3MB 743ms 0ms nim/clang 1.6.14
go 2.go 915ms 12ms 21.8MB 887ms 10ms go 1.20.6

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
go 1.go 136ms 2.3ms 21.5MB 117ms 0ms go 1.20.6
nim 1.nim 136ms 0.4ms 11.3MB 123ms 0ms nim/clang 1.6.14
go 1.go 138ms 4.4ms 13.4MB 127ms 0ms tinygo 0.28.1
nim 2.nim 142ms 1.0ms 3.3MB 130ms 0ms nim/clang 1.6.14
nim 2.nim 148ms 0.7ms 3.0MB 140ms 0ms nim 1.6.14
go 2.go 153ms 3.0ms 5.6MB 143ms 0ms tinygo 0.28.1
go 2.go 217ms 1.8ms 7.3MB 207ms 0ms go 1.20.6

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 1388ms 2.0ms 8.5MB 1373ms 0ms go 1.20.6
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
go 8.go 334ms 0.9ms 8.5MB 320ms 0ms go 1.20.6
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
go 3.go timeout 0.0ms 125.9MB 4963ms 93ms go 1.20.6
go 3.go timeout 0.0ms 104.1MB 4960ms 20ms tinygo 0.28.1

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
go 3.go 2500ms 12ms 20.9MB 2480ms 20ms go 1.20.6
go 3.go 3216ms 9.2ms 30.0MB 3193ms 7ms tinygo 0.28.1

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 2512ms 26ms 5.5MB 4843ms 0ms go 1.20.6
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
go 1.go 4902ms 6.8ms 5.5MB 4893ms 0ms go 1.20.6
go 1.go timeout 0.0ms 2.0MB 4990ms 0ms tinygo 0.28.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 631ms 3.4ms 3.4MB 1200ms 0ms go 1.20.6
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
go 1.go 1228ms 11ms 2.9MB 1213ms 0ms go 1.20.6
go 1.go 2577ms 1.8ms 0.0MB 2560ms 0ms tinygo 0.28.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 167ms 1.5ms 3.4MB 297ms 0ms go 1.20.6
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
go 1.go 312ms 3.2ms 2.9MB 300ms 0ms go 1.20.6
go 1.go 646ms 1.0ms 0.0MB 637ms 0ms tinygo 0.28.1