Zig VS Crystal 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
crystal 1.cr 1959ms 5.7ms 64.5MB 2317ms 27ms crystal 1.4.1
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
crystal 1.cr 143ms 1.4ms 12.9MB 150ms 0ms crystal 1.4.1
zig 1.zig 3757ms 23ms 8.0MB 3033ms 690ms zig 0.10.0

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 74ms 6.3ms 9.1MB 60ms 0ms crystal 1.4.1
zig 1.zig timeout 0.0ms 0.0MB 0ms 0ms zig 0.10.0

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 28ms 1.1ms 5.3MB 13ms 0ms crystal 1.4.1
zig 1.zig 907ms 1.0ms 0.5MB 813ms 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 1127ms 11ms 0.0MB 2177ms 0ms zig 0.10.0
zig 2.zig 2403ms 4.4ms 0.0MB 2387ms 3ms zig 0.10.0
zig 1.zig 3174ms 228ms 0.1MB 3163ms 0ms zig 0.10.0
crystal 1.cr 4207ms 3.7ms 3.1MB 4190ms 0ms crystal 1.4.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2-m.zig 99ms 0.3ms 0.0MB 170ms 0ms zig 0.10.0
zig 2.zig 197ms 14ms 0.0MB 183ms 0ms zig 0.10.0
zig 1.zig 269ms 8.6ms 0.1MB 257ms 0ms zig 0.10.0
crystal 1.cr 321ms 21ms 5.1MB 307ms 0ms crystal 1.4.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 138ms 0.7ms 0.0MB 120ms 0ms zig 0.10.0
crystal 2.cr 757ms 52ms 5.3MB 650ms 90ms crystal 1.4.1
crystal 1.cr 1008ms 2.5ms 14.6MB 893ms 107ms crystal 1.4.1

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 16ms 0.3ms 0.0MB 10ms 0ms zig 0.10.0
crystal 2.cr 80ms 5.6ms 3.6MB 63ms 3ms crystal 1.4.1
crystal 1.cr 106ms 0.8ms 6.7MB 80ms 13ms crystal 1.4.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 1.8ms 0.8ms 0.1MB 0ms 0ms zig 0.10.0
crystal 1.cr 3.8ms 0.8ms 2.8MB 0ms 0ms crystal 1.4.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 50ms 0.3ms 1.6MB 40ms 0ms zig 0.10.0
crystal 0-unsafe.cr 63ms 1.8ms 3.0MB 50ms 0ms crystal 1.4.1
crystal 1.cr 110ms 0.2ms 3.1MB 100ms 0ms crystal 1.4.1

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 145ms 2.9ms 1.6MB 133ms 0ms zig 0.10.0
crystal 0-unsafe.cr 176ms 0.2ms 4.9MB 160ms 0ms crystal 1.4.1
crystal 1.cr 323ms 4.4ms 5.1MB 310ms 0ms crystal 1.4.1

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 24ms 0.2ms 0.0MB 10ms 0ms zig 0.10.0
crystal 0-unsafe.cr 31ms 2.3ms 3.1MB 20ms 0ms crystal 1.4.1
crystal 1.cr 57ms 1.1ms 5.1MB 47ms 0ms crystal 1.4.1

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 349ms 20ms 3.1MB 337ms 0ms zig 0.10.0
crystal 1.cr 882ms 4.1ms 7.6MB 867ms 0ms crystal 1.4.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 17ms 1.0ms 0.0MB 10ms 0ms zig 0.10.0
crystal 1.cr 42ms 0.8ms 4.9MB 30ms 0ms crystal 1.4.1

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1471ms 5.0ms 64.3MB 1713ms 20ms crystal 1.4.1
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
crystal 1.cr 246ms 2.3ms 17.7MB 260ms 13ms crystal 1.4.1
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 255ms 2.2ms 0.0MB 240ms 0ms zig 0.10.0
zig 1.zig 383ms 3.0ms 0.0MB 370ms 0ms zig 0.10.0
crystal 1.cr 593ms 0.5ms 3.2MB 577ms 0ms crystal 1.4.1
crystal 2.cr 623ms 0.5ms 3.4MB 610ms 0ms crystal 1.4.1

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2.zig 29ms 2.9ms 0.0MB 20ms 0ms zig 0.10.0
zig 1.zig 41ms 1.0ms 0.0MB 30ms 0ms zig 0.10.0
crystal 1.cr 65ms 1.7ms 5.0MB 53ms 0ms crystal 1.4.1
crystal 2.cr 67ms 1.8ms 3.2MB 57ms 0ms crystal 1.4.1

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2.zig 378ms 1.9ms 4.9MB 367ms 0ms zig 0.10.0
crystal 2.cr 451ms 0.3ms 9.9MB 440ms 0ms crystal 1.4.1
zig 1.zig 1136ms 42ms 39.1MB 1107ms 13ms zig 0.10.0
crystal 1.cr 1312ms 19ms 44.1MB 1287ms 7ms crystal 1.4.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2.zig 82ms 4.7ms 1.1MB 70ms 0ms zig 0.10.0
crystal 2.cr 101ms 0.1ms 6.3MB 90ms 0ms crystal 1.4.1
zig 1.zig 119ms 7.8ms 9.6MB 103ms 0ms zig 0.10.0
crystal 1.cr 140ms 1.0ms 12.9MB 127ms 0ms crystal 1.4.1

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2792ms 50ms 8.8MB 3063ms 283ms crystal 1.4.1
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
crystal 1.cr 645ms 7.0ms 7.5MB 663ms 83ms crystal 1.4.1
zig 1.zig 2845ms 10ms 0.4MB 1060ms 1770ms 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 893ms 1.7ms 0.3MB 1660ms 0ms zig 0.10.0
zig 2.zig 1660ms 114ms 0.0MB 1650ms 0ms zig 0.10.0
zig 1.zig 3381ms 16ms 0.1MB 3370ms 0ms zig 0.10.0
crystal 1.cr timeout 0.0ms 0.0MB 0ms 0ms crystal 1.4.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2-m.zig 230ms 1.2ms 0.2MB 410ms 0ms zig 0.10.0
zig 2.zig 420ms 28ms 0.0MB 413ms 0ms zig 0.10.0
zig 1.zig 850ms 1.6ms 0.1MB 840ms 0ms zig 0.10.0
crystal 1.cr 1386ms 101ms 6.1MB 1370ms 0ms crystal 1.4.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2-m.zig 65ms 2.2ms 0.2MB 93ms 0ms zig 0.10.0
zig 2.zig 100ms 0.4ms 0.0MB 90ms 0ms zig 0.10.0
zig 1.zig 226ms 22ms 0.1MB 213ms 0ms zig 0.10.0
crystal 1.cr 381ms 1.7ms 3.8MB 370ms 0ms crystal 1.4.1