Crystal VS Go benchmarks

Current benchmark data was generated on Wed Sep 28 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
crystal 1.cr 1546ms 11ms 66.3MB 1850ms 13ms crystal 1.5.1
go 1.go 2897ms 7.4ms 44.7MB 4130ms 57ms go 1.19.1
go 1.go 3962ms 29ms 39.1MB 3947ms 0ms tinygo 0.25.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 131ms 2.0ms 13.1MB 133ms 7ms crystal 1.5.1
go 1.go 257ms 2.9ms 8.2MB 333ms 3ms go 1.19.1
go 1.go 303ms 0.3ms 6.0MB 290ms 0ms tinygo 0.25.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 741ms 41ms 13.6MB 1443ms 0ms go 1.19.1
go 1.go 1717ms 3.5ms 253.7MB 1650ms 50ms tinygo 0.25.0
crystal 1.cr 1885ms 14ms 20.5MB 1843ms 30ms crystal 1.5.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 56ms 5.7ms 5.4MB 93ms 0ms go 1.19.1
crystal 1.cr 108ms 3.0ms 9.4MB 93ms 3ms crystal 1.5.1
go 1.go 270ms 0.7ms 66.7MB 243ms 7ms tinygo 0.25.0

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 84ms 0.5ms 7.3MB 70ms 0ms crystal 1.5.1
go 1.go 169ms 2.8ms 8.5MB 153ms 3ms go 1.19.1

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 32ms 0.7ms 7.3MB 13ms 0ms crystal 1.5.1
go 1.go 49ms 2.5ms 8.2MB 40ms 0ms go 1.19.1

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 1448ms 9.9ms 3.0MB 2803ms 0ms go 1.19.1
go 3.go 2930ms 1.7ms 49.1MB 2910ms 10ms tinygo 0.25.0
crystal 1.cr 3970ms 3.9ms 5.0MB 3960ms 0ms crystal 1.5.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 144ms 1.8ms 5.0MB 223ms 0ms go 1.19.1
go 3.go 309ms 0.7ms 50.1MB 297ms 0ms tinygo 0.25.0
crystal 1.cr 322ms 2.7ms 3.0MB 310ms 0ms crystal 1.5.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 238ms 0.4ms 2.9MB 440ms 0ms go 1.19.1
crystal 2.cr 860ms 0.3ms 3.5MB 740ms 107ms crystal 1.5.1
crystal 1.cr 1054ms 0.6ms 14.7MB 907ms 133ms crystal 1.5.1

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 30ms 0.2ms 2.9MB 40ms 0ms go 1.19.1
crystal 2.cr 91ms 1.0ms 5.2MB 67ms 7ms crystal 1.5.1
crystal 1.cr 111ms 1.8ms 6.5MB 97ms 3ms crystal 1.5.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 1.8ms 0.7ms 2.0MB 0ms 0ms tinygo 0.25.0
go 1.go 2.7ms 0.4ms 2.9MB 0ms 0ms go 1.19.1
crystal 1.cr 3.5ms 0.7ms 3.2MB 0ms 0ms crystal 1.5.1

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-http2.go 162ms 5.8ms 58.4MB 243ms 37ms go 1.19.1
go 1-m.go 567ms 30ms 179.2MB 543ms 323ms go 1.19.1
go 2-m.go 585ms 63ms 176.1MB 580ms 343ms go 1.19.1
crystal 1.cr 2919ms 976ms 134.4MB 287ms 280ms crystal 1.5.1

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-http2.go 40ms 3.1ms 22.7MB 40ms 10ms go 1.19.1
go 2.go 113ms 1.2ms 39.1MB 80ms 43ms go 1.19.1
go 1.go 119ms 8.4ms 38.0MB 77ms 50ms go 1.19.1
crystal 1.cr 1309ms 5.1ms 31.3MB 37ms 47ms crystal 1.5.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 62ms 1.9ms 4.9MB 50ms 0ms crystal 1.5.1
crystal 1.cr 107ms 1.7ms 3.1MB 100ms 0ms crystal 1.5.1
go 3.go 166ms 0.4ms 0.3MB 160ms 0ms tinygo 0.25.0
go 3.go 173ms 1.4ms 2.8MB 160ms 0ms go 1.19.1

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 174ms 1.4ms 5.1MB 160ms 0ms crystal 1.5.1
crystal 1.cr 314ms 2.6ms 3.1MB 300ms 0ms crystal 1.5.1
go 3.go 491ms 0.3ms 0.3MB 480ms 0ms tinygo 0.25.0
go 3.go 514ms 3.1ms 3.4MB 500ms 0ms go 1.19.1

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 31ms 0.6ms 4.9MB 20ms 0ms crystal 1.5.1
crystal 1.cr 53ms 0.6ms 3.1MB 47ms 0ms crystal 1.5.1
go 3.go 81ms 0.5ms 0.0MB 70ms 0ms tinygo 0.25.0
go 3.go 93ms 2.3ms 5.6MB 83ms 0ms go 1.19.1

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 994ms 0.9ms 7.6MB 987ms 0ms crystal 1.5.1
go 1.go 4110ms 15ms 6.9MB 4093ms 0ms go 1.19.1
go 1.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.25.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 45ms 0.2ms 6.4MB 33ms 0ms crystal 1.5.1
go 1.go 171ms 0.3ms 2.8MB 160ms 0ms go 1.19.1
go 1.go 245ms 0.3ms 0.0MB 233ms 0ms tinygo 0.25.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1021ms 28ms 64.4MB 1143ms 27ms crystal 1.5.1
go 1.go 1891ms 8.9ms 38.2MB 2680ms 17ms go 1.19.1
go 2.go 2233ms 22ms 52.9MB 3143ms 57ms go 1.19.1
go 1.go 3053ms 3.0ms 159.8MB 3003ms 37ms tinygo 0.25.0
go 2.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.25.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 197ms 2.5ms 17.7MB 210ms 3ms crystal 1.5.1
go 1.go 409ms 5.1ms 12.5MB 563ms 10ms go 1.19.1
go 2.go 477ms 1.5ms 14.3MB 647ms 20ms go 1.19.1
go 1.go 800ms 6.4ms 39.1MB 783ms 3ms tinygo 0.25.0
go 2.go 1329ms 3.7ms 52.1MB 1313ms 0ms tinygo 0.25.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 454ms 2.2ms 2.9MB 440ms 0ms go 1.19.1
crystal 1.cr 509ms 0.5ms 4.9MB 500ms 0ms crystal 1.5.1
crystal 2.cr 540ms 0.8ms 3.0MB 530ms 0ms crystal 1.5.1
go 1.go 842ms 0.7ms 0.0MB 830ms 0ms tinygo 0.25.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 49ms 1.8ms 2.9MB 37ms 0ms go 1.19.1
crystal 1.cr 56ms 1.9ms 4.9MB 43ms 0ms crystal 1.5.1
crystal 2.cr 60ms 0.4ms 4.8MB 47ms 0ms crystal 1.5.1
go 1.go 86ms 0.5ms 0.0MB 80ms 0ms tinygo 0.25.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 470ms 6.4ms 8.1MB 457ms 0ms crystal 1.5.1
go 1.go 574ms 29ms 75.2MB 540ms 13ms go 1.19.1
go 2.go 632ms 2.0ms 17.4MB 613ms 0ms tinygo 0.25.0
crystal 1.cr 748ms 29ms 42.2MB 727ms 0ms crystal 1.5.1
go 1.go 749ms 39ms 43.8MB 727ms 7ms tinygo 0.25.0
go 2.go 915ms 14ms 20.0MB 897ms 10ms go 1.19.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 111ms 1.8ms 6.3MB 97ms 3ms crystal 1.5.1
go 1.go 133ms 1.5ms 13.9MB 120ms 0ms tinygo 0.25.0
go 1.go 134ms 8.0ms 21.9MB 120ms 0ms go 1.19.1
go 2.go 146ms 0.6ms 5.4MB 133ms 0ms tinygo 0.25.0
crystal 1.cr 155ms 0.2ms 12.9MB 143ms 0ms crystal 1.5.1
go 2.go 218ms 2.3ms 8.1MB 200ms 3ms go 1.19.1

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 1425ms 2.8ms 8.4MB 1393ms 10ms go 1.19.1
crystal 1.cr 2672ms 123ms 8.8MB 2923ms 230ms crystal 1.5.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 338ms 1.2ms 8.4MB 323ms 0ms go 1.19.1
crystal 1.cr 644ms 8.4ms 5.5MB 687ms 57ms crystal 1.5.1

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2462ms 7.1ms 194.3MB 2383ms 60ms crystal 1.5.1
go 3.go timeout 0.0ms 0.0MB 0ms 0ms go 1.19.1
go 3.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.25.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 253ms 0.8ms 22.8MB 233ms 7ms crystal 1.5.1
go 3.go 2475ms 29ms 18.2MB 2460ms 20ms go 1.19.1
go 3.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.25.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 2499ms 19ms 5.5MB 4830ms 0ms go 1.19.1
go 1.go 4890ms 3.2ms 5.5MB 4880ms 0ms go 1.19.1
crystal 1.cr timeout 0.0ms 0.0MB 0ms 0ms crystal 1.5.1
go 1.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.25.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 627ms 1.2ms 2.9MB 1193ms 0ms go 1.19.1
go 1.go 1227ms 6.7ms 2.9MB 1213ms 0ms go 1.19.1
crystal 1.cr 1504ms 0.6ms 4.1MB 1490ms 3ms crystal 1.5.1
go 1.go 2576ms 1.3ms 0.0MB 2563ms 0ms tinygo 0.25.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 165ms 0.6ms 2.9MB 297ms 0ms go 1.19.1
go 1.go 310ms 1.4ms 2.9MB 300ms 0ms go 1.19.1
crystal 1.cr 382ms 2.0ms 5.6MB 370ms 0ms crystal 1.5.1
go 1.go 646ms 0.6ms 2.0MB 640ms 0ms tinygo 0.25.0