Zig VS Go benchmarks

Current benchmark data was generated on Fri May 20 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.)

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 3208ms 18ms 45.7MB 4603ms 63ms go 1.18.2
go 1.go 4543ms 15ms 39.4MB 4520ms 7ms tinygo 0.23.0
zig 1.zig timeout 0.0ms 0.0MB 0ms 0ms zig 0.10.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 282ms 9.2ms 8.2MB 330ms 0ms go 1.18.2
go 1.go 360ms 1.9ms 6.3MB 350ms 0ms tinygo 0.23.0
zig 1.zig 3043ms 18ms 8.0MB 2350ms 657ms zig 0.10.0

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 170ms 2.3ms 8.4MB 160ms 0ms go 1.18.2
zig 1.zig 4173ms 2.8ms 1.1MB 3853ms 303ms zig 0.10.0

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 53ms 0.8ms 7.2MB 40ms 0ms go 1.18.2
zig 1.zig 729ms 1.2ms 0.5MB 637ms 77ms zig 0.10.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2-m.zig 1201ms 3.4ms 0.0MB 2350ms 0ms zig 0.10.0
go 3-m.go 1435ms 21ms 4.9MB 2760ms 0ms go 1.18.2
zig 2.zig 2680ms 2.2ms 0.0MB 2670ms 0ms zig 0.10.0
go 3.go 2953ms 2.1ms 49.1MB 2937ms 0ms tinygo 0.23.0
zig 1.zig 3444ms 4.2ms 0.1MB 3430ms 0ms zig 0.10.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2-m.zig 113ms 0.3ms 0.0MB 197ms 0ms zig 0.10.0
go 3-m.go 146ms 1.6ms 4.9MB 220ms 0ms go 1.18.2
zig 2.zig 232ms 1.8ms 0.0MB 220ms 0ms zig 0.10.0
zig 1.zig 290ms 2.1ms 0.1MB 280ms 0ms zig 0.10.0
go 3.go 333ms 0.7ms 48.9MB 317ms 3ms tinygo 0.23.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 155ms 0.1ms 0.0MB 150ms 0ms zig 0.10.0
go 3-m.go 250ms 1.9ms 2.9MB 453ms 3ms go 1.18.2

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 18ms 0.3ms 0.0MB 10ms 0ms zig 0.10.0
go 3.go 32ms 0.5ms 2.9MB 37ms 0ms go 1.18.2

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 0.7ms 0.1ms 0.0MB 0ms 0ms tinygo 0.23.0
zig 1.zig 2.1ms 1.0ms 0.0MB 0ms 0ms zig 0.10.0
go 1.go 2.9ms 0.3ms 2.8MB 0ms 0ms go 1.18.2

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 47ms 1.7ms 1.6MB 37ms 0ms zig 0.10.0
go 3.go 165ms 0.4ms 2.0MB 153ms 0ms tinygo 0.23.0
go 3.go 173ms 2.5ms 2.9MB 160ms 0ms go 1.18.2

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 132ms 0.3ms 1.6MB 120ms 0ms zig 0.10.0
go 3.go 490ms 0.9ms 2.0MB 480ms 0ms tinygo 0.23.0
go 3.go 506ms 3.4ms 2.9MB 490ms 0ms go 1.18.2

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 23ms 1.7ms 0.3MB 10ms 0ms zig 0.10.0
go 3.go 80ms 0.2ms 0.0MB 70ms 0ms tinygo 0.23.0
go 3.go 90ms 0.8ms 3.8MB 80ms 0ms go 1.18.2

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 429ms 0.2ms 3.1MB 420ms 0ms zig 0.10.0
go 1.go 4108ms 1.3ms 7.3MB 4090ms 7ms go 1.18.2
go 1.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.23.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 20ms 1.5ms 0.0MB 10ms 0ms zig 0.10.0
go 1.go 174ms 2.1ms 4.9MB 160ms 0ms go 1.18.2
go 1.go 245ms 0.5ms 2.0MB 233ms 0ms tinygo 0.23.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 2093ms 7.9ms 40.0MB 2973ms 50ms go 1.18.2
go 2.go 2355ms 17ms 49.2MB 3370ms 53ms go 1.18.2
go 1.go 4907ms 0.8ms 160.4MB 4863ms 27ms tinygo 0.23.0
go 2.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.23.0
zig 1.zig timeout 0.0ms 0.0MB 0ms 0ms zig 0.10.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 433ms 9.3ms 12.2MB 590ms 10ms go 1.18.2
go 2.go 497ms 3.8ms 12.9MB 697ms 7ms go 1.18.2
go 1.go 861ms 4.0ms 38.3MB 843ms 0ms tinygo 0.23.0
go 2.go 1481ms 5.6ms 38.6MB 1467ms 0ms tinygo 0.23.0
zig 1.zig timeout 0.0ms 0.0MB 0ms 0ms zig 0.10.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2.zig 303ms 0.6ms 0.0MB 290ms 0ms zig 0.10.0
zig 1.zig 377ms 3.5ms 0.0MB 367ms 0ms zig 0.10.0
go 1.go 456ms 2.9ms 2.8MB 447ms 0ms go 1.18.2
go 1.go 844ms 2.5ms 2.0MB 830ms 0ms tinygo 0.23.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2.zig 33ms 1.6ms 0.0MB 20ms 0ms zig 0.10.0
zig 1.zig 40ms 0.6ms 0.0MB 30ms 0ms zig 0.10.0
go 1.go 52ms 0.6ms 2.8MB 37ms 0ms go 1.18.2
go 1.go 87ms 1.1ms 2.0MB 80ms 0ms tinygo 0.23.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2.zig 423ms 0.2ms 4.9MB 410ms 0ms zig 0.10.0
go 2.go 646ms 5.3ms 17.4MB 637ms 0ms tinygo 0.23.0
zig 1.zig 687ms 54ms 39.1MB 657ms 17ms zig 0.10.0
go 1.go 821ms 37ms 73.6MB 800ms 3ms go 1.18.2
go 1.go 864ms 3.5ms 42.3MB 847ms 3ms tinygo 0.23.0
go 2.go 929ms 3.5ms 20.1MB 923ms 0ms go 1.18.2

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2.zig 95ms 1.2ms 1.1MB 87ms 0ms zig 0.10.0
zig 1.zig 118ms 1.4ms 9.6MB 103ms 0ms zig 0.10.0
go 1.go 120ms 1.0ms 21.9MB 103ms 3ms go 1.18.2
go 1.go 133ms 1.9ms 13.3MB 117ms 0ms tinygo 0.23.0
go 2.go 154ms 2.0ms 5.6MB 140ms 0ms tinygo 0.23.0
go 2.go 221ms 2.3ms 9.5MB 210ms 0ms go 1.18.2

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 1377ms 4.0ms 8.6MB 1357ms 3ms go 1.18.2
zig 1.zig timeout 0.0ms 0.0MB 0ms 0ms zig 0.10.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 329ms 1.8ms 8.5MB 310ms 0ms go 1.18.2
zig 1.zig 2699ms 13ms 0.4MB 980ms 1700ms zig 0.10.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2-m.zig 1070ms 4.8ms 0.3MB 2047ms 0ms zig 0.10.0
zig 2.zig 2064ms 3.4ms 0.0MB 2050ms 0ms zig 0.10.0
go 4-m.go 2513ms 5.8ms 5.3MB 4870ms 7ms go 1.18.2
zig 1.zig 4576ms 0.2ms 0.1MB 4560ms 0ms zig 0.10.0
go 1.go 4978ms 9.8ms 5.4MB 4963ms 0ms go 1.18.2
go 1.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.23.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2-m.zig 278ms 2.3ms 0.2MB 510ms 0ms zig 0.10.0
zig 2.zig 517ms 0.8ms 0.0MB 507ms 0ms zig 0.10.0
go 4-m.go 636ms 1.3ms 3.3MB 1207ms 0ms go 1.18.2
zig 1.zig 1146ms 0.6ms 0.1MB 1133ms 0ms zig 0.10.0
go 1.go 1246ms 1.8ms 3.3MB 1230ms 3ms go 1.18.2
go 1.go 2576ms 0.3ms 0.0MB 2567ms 0ms tinygo 0.23.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2-m.zig 77ms 1.5ms 0.2MB 123ms 0ms zig 0.10.0
zig 2.zig 131ms 2.0ms 0.0MB 120ms 0ms zig 0.10.0
go 4-m.go 168ms 1.2ms 2.8MB 300ms 0ms go 1.18.2
zig 1.zig 289ms 1.4ms 0.1MB 280ms 0ms zig 0.10.0
go 1.go 317ms 2.2ms 2.8MB 303ms 0ms go 1.18.2
go 1.go 647ms 0.4ms 2.0MB 640ms 0ms tinygo 0.23.0