Crystal VS Nim benchmarks

Current benchmark data was generated on Sat Mar 29 2025, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][4 cores] AMD EPYC 7763 64-Core Processor (Model 1)

* -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 939ms 15ms 34.6MB 920ms 0ms nim 2.2.2
nim 2.nim 973ms 14ms 34.9MB 957ms 0ms nim/clang 2.2.2
crystal 1.cr 1256ms 14ms 64.0MB 1233ms 7ms crystal 1.15.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 89ms 2.5ms 5.5MB 80ms 0ms nim 2.2.2
nim 2.nim 92ms 1.1ms 5.9MB 80ms 0ms nim/clang 2.2.2
crystal 1.cr 104ms 3.0ms 10.9MB 90ms 0ms crystal 1.15.1

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1216ms 13ms 19.6MB 1143ms 53ms crystal 1.15.1
nim 1.nim timeout 0.0ms 553.5MB 2477ms 2063ms nim 2.2.2
nim 1.nim timeout 0.0ms 559.8MB 2450ms 2083ms nim/clang 2.2.2

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 71ms 1.5ms 7.0MB 43ms 10ms crystal 1.15.1
nim 1.nim 4293ms 23ms 519.8MB 2077ms 1787ms nim/clang 2.2.2
nim 1.nim 4388ms 8.6ms 519.4MB 2163ms 1797ms nim 2.2.2

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 58ms 0.5ms 6.4MB 43ms 0ms crystal 1.15.1

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 22ms 1.6ms 5.0MB 10ms 0ms crystal 1.15.1

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2498ms 7.0ms 2.8MB 2487ms 0ms crystal 1.15.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 207ms 2.8ms 2.9MB 200ms 0ms crystal 1.15.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 188ms 1.4ms 1.5MB 177ms 0ms nim 2.2.2
nim 2.nim 235ms 2.2ms 1.8MB 220ms 0ms nim/clang 2.2.2
nim 1.nim 557ms 2.8ms 1.8MB 453ms 90ms nim/clang 2.2.2
crystal 2.cr 557ms 5.8ms 3.4MB 460ms 77ms crystal 1.15.1
nim 1.nim 578ms 2.2ms 1.5MB 467ms 97ms nim 2.2.2
crystal 1.cr 698ms 1.4ms 14.4MB 580ms 107ms crystal 1.15.1

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 21ms 0.6ms 1.5MB 10ms 0ms nim 2.2.2
nim 2.nim 26ms 0.1ms 1.8MB 20ms 0ms nim/clang 2.2.2
nim 1.nim 59ms 1.1ms 1.8MB 40ms 7ms nim/clang 2.2.2
crystal 2.cr 59ms 0.6ms 3.5MB 43ms 0ms crystal 1.15.1
nim 1.nim 61ms 1.2ms 1.5MB 40ms 10ms nim 2.2.2
crystal 1.cr 75ms 1.4ms 4.8MB 53ms 10ms crystal 1.15.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1.1ms 0.1ms 1.5MB 0ms 0ms nim 2.2.2
nim 1.nim 1.2ms 0.1ms 1.9MB 0ms 0ms nim/clang 2.2.2
crystal 1.cr 2.0ms 0.2ms 2.9MB 0ms 0ms crystal 1.15.1

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2484ms 156ms 256.0MB 320ms 500ms crystal 1.15.1

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1251ms 108ms 59.4MB 30ms 80ms crystal 1.15.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 37ms 0.6ms 2.9MB 30ms 0ms crystal 1.15.1
crystal 1.cr 66ms 1.0ms 2.9MB 60ms 0ms crystal 1.15.1
nim 2.nim 112ms 2.2ms 1.4MB 103ms 0ms nim 2.2.2
nim 2.nim 113ms 2.4ms 1.6MB 103ms 0ms nim/clang 2.2.2
nim 1.nim timeout 0.0ms 1.3MB 4990ms 0ms nim 2.2.2
nim 1.nim timeout 0.0ms 1.5MB 4990ms 0ms nim/clang 2.2.2

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 100ms 2.3ms 2.9MB 90ms 0ms crystal 1.15.1
crystal 1.cr 186ms 3.7ms 2.9MB 173ms 0ms crystal 1.15.1
nim 2.nim 327ms 2.7ms 1.4MB 317ms 0ms nim 2.2.2
nim 2.nim 333ms 2.8ms 1.6MB 323ms 0ms nim/clang 2.2.2
nim 1.nim timeout 0.0ms 1.3MB 4990ms 0ms nim 2.2.2
nim 1.nim timeout 0.0ms 1.5MB 4990ms 0ms nim/clang 2.2.2

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 18ms 0.8ms 2.9MB 10ms 0ms crystal 1.15.1
crystal 1.cr 32ms 1.0ms 2.9MB 20ms 0ms crystal 1.15.1
nim 2.nim 50ms 1.0ms 1.3MB 40ms 0ms nim 2.2.2
nim 2.nim 50ms 1.3ms 1.5MB 40ms 0ms nim/clang 2.2.2
nim 1.nim 457ms 14ms 1.5MB 447ms 0ms nim/clang 2.2.2
nim 1.nim 485ms 9.7ms 1.3MB 477ms 0ms nim 2.2.2

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 313ms 0.1ms 9.0MB 300ms 0ms crystal 1.15.1
nim 1.nim 388ms 1.1ms 4.7MB 380ms 0ms nim/clang 2.2.2
nim 1.nim 576ms 1.1ms 4.4MB 570ms 0ms nim 2.2.2

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 18ms 0.5ms 6.3MB 10ms 0ms crystal 1.15.1
nim 1.nim 19ms 0.5ms 1.9MB 10ms 0ms nim/clang 2.2.2
nim 1.nim 26ms 0.5ms 1.6MB 20ms 0ms nim 2.2.2

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 536ms 5.2ms 34.6MB 517ms 0ms nim 2.2.2
nim 1.nim 634ms 23ms 34.9MB 617ms 3ms nim/clang 2.2.2
crystal 1.cr 847ms 17ms 64.0MB 823ms 10ms crystal 1.15.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 117ms 2.6ms 9.6MB 103ms 0ms nim 2.2.2
nim 1.nim 136ms 2.3ms 9.9MB 120ms 0ms nim/clang 2.2.2
crystal 1.cr 156ms 3.3ms 22.2MB 140ms 0ms crystal 1.15.1

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 321ms 0.7ms 1.8MB 310ms 0ms nim 2.2.2
crystal 2.cr 343ms 2.0ms 3.1MB 333ms 0ms crystal 1.15.1
crystal 1.cr 345ms 1.8ms 3.1MB 337ms 0ms crystal 1.15.1
nim 2.nim 345ms 0.7ms 2.0MB 337ms 0ms nim/clang 2.2.2

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 35ms 0.6ms 1.8MB 30ms 0ms nim 2.2.2
crystal 1.cr 38ms 1.2ms 3.1MB 30ms 0ms crystal 1.15.1
crystal 2.cr 39ms 0.8ms 3.1MB 30ms 0ms crystal 1.15.1
nim 2.nim 43ms 4.9ms 2.0MB 33ms 0ms nim/clang 2.2.2

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 300ms 2.7ms 8.1MB 290ms 0ms crystal 1.15.1
nim 1.nim 314ms 16ms 41.8MB 303ms 0ms nim/clang 2.2.2
nim 1.nim 316ms 3.7ms 41.5MB 303ms 0ms nim 2.2.2
crystal 1.cr 424ms 4.1ms 42.3MB 413ms 0ms crystal 1.15.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 56ms 2.8ms 11.5MB 47ms 0ms nim 2.2.2
nim 1.nim 60ms 5.5ms 11.8MB 47ms 0ms nim/clang 2.2.2
crystal 2.cr 77ms 0.8ms 4.4MB 70ms 0ms crystal 1.15.1
crystal 1.cr 94ms 1.2ms 13.0MB 80ms 0ms crystal 1.15.1

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1888ms 51ms 6.2MB 1860ms 13ms crystal 1.15.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 458ms 11ms 4.9MB 447ms 0ms crystal 1.15.1

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 3596ms 8.4ms 1.6MB 3587ms 0ms nim/clang 2.2.2
nim 1.nim 3599ms 8.1ms 1.4MB 3593ms 0ms nim 2.2.2
crystal 1.cr 3796ms 8.8ms 4.4MB 3783ms 0ms crystal 1.15.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 899ms 0.6ms 1.5MB 890ms 0ms nim/clang 2.2.2
nim 1.nim 902ms 2.3ms 1.3MB 890ms 0ms nim 2.2.2
crystal 1.cr 955ms 4.2ms 4.3MB 943ms 0ms crystal 1.15.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 227ms 0.5ms 1.5MB 220ms 0ms nim/clang 2.2.2
nim 1.nim 229ms 0.9ms 1.3MB 220ms 0ms nim 2.2.2
crystal 1.cr 243ms 3.1ms 3.8MB 233ms 0ms crystal 1.15.1