Crystal VS Nim benchmarks

Current benchmark data was generated on Sun Jun 01 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 779ms 1.2ms 34.4MB 760ms 3ms nim 2.2.4
nim 2.nim 963ms 9.3ms 35.2MB 940ms 10ms nim/clang 2.2.4
crystal 1.cr 1219ms 8.5ms 64.2MB 1200ms 10ms crystal 1.16.3

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 75ms 4.0ms 5.5MB 63ms 0ms nim 2.2.4
nim 2.nim 91ms 2.7ms 5.8MB 80ms 0ms nim/clang 2.2.4
crystal 1.cr 105ms 2.8ms 10.9MB 97ms 0ms crystal 1.16.3

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1500ms 42ms 19.9MB 1437ms 53ms crystal 1.16.3
nim 1.nim timeout 0.0ms 574.3MB 2627ms 1900ms nim 2.2.4
nim 1.nim timeout 0.0ms 574.8MB 2630ms 1897ms nim/clang 2.2.4

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 81ms 2.1ms 7.1MB 60ms 10ms crystal 1.16.3
nim 1.nim 4103ms 11ms 519.8MB 2090ms 1590ms nim/clang 2.2.4
nim 1.nim 4106ms 11ms 519.3MB 2163ms 1517ms nim 2.2.4

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 57ms 0.6ms 6.5MB 40ms 0ms crystal 1.16.3

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 22ms 1.4ms 5.3MB 10ms 0ms crystal 1.16.3

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2486ms 18ms 2.9MB 2477ms 0ms crystal 1.16.3

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 205ms 2.3ms 2.9MB 197ms 0ms crystal 1.16.3

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 189ms 1.2ms 1.5MB 180ms 0ms nim 2.2.4
nim 2.nim 241ms 2.6ms 1.8MB 230ms 0ms nim/clang 2.2.4
nim 1.nim 535ms 1.0ms 1.8MB 430ms 90ms nim/clang 2.2.4
crystal 2.cr 536ms 2.9ms 3.5MB 450ms 73ms crystal 1.16.3
nim 1.nim 558ms 2.5ms 1.5MB 473ms 67ms nim 2.2.4
crystal 1.cr 678ms 2.3ms 14.6MB 570ms 97ms crystal 1.16.3

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 22ms 0.1ms 1.5MB 13ms 0ms nim 2.2.4
nim 2.nim 27ms 1.0ms 1.8MB 20ms 0ms nim/clang 2.2.4
nim 1.nim 57ms 0.5ms 1.8MB 40ms 3ms nim/clang 2.2.4
nim 1.nim 57ms 0.2ms 1.5MB 40ms 3ms nim 2.2.4
crystal 2.cr 58ms 0.7ms 3.5MB 40ms 10ms crystal 1.16.3
crystal 1.cr 73ms 1.4ms 4.9MB 50ms 7ms crystal 1.16.3

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 0.9ms 0.0ms 1.5MB 0ms 0ms nim 2.2.4
nim 1.nim 1.1ms 0.0ms 1.9MB 0ms 0ms nim/clang 2.2.4
crystal 1.cr 1.9ms 0.2ms 2.9MB 0ms 0ms crystal 1.16.3

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2991ms 528ms 240.7MB 293ms 427ms crystal 1.16.3

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1293ms 19ms 53.3MB 27ms 77ms crystal 1.16.3

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 35ms 0.6ms 3.0MB 30ms 0ms crystal 1.16.3
crystal 1.cr 65ms 1.6ms 3.0MB 57ms 0ms crystal 1.16.3
nim 2.nim 111ms 2.3ms 1.6MB 100ms 0ms nim/clang 2.2.4
nim 2.nim 114ms 1.7ms 1.4MB 110ms 0ms nim 2.2.4
nim 1.nim timeout 0.0ms 1.3MB 4990ms 0ms nim 2.2.4
nim 1.nim timeout 0.0ms 1.5MB 4990ms 0ms nim/clang 2.2.4

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 99ms 1.4ms 3.0MB 90ms 0ms crystal 1.16.3
crystal 1.cr 191ms 5.3ms 3.0MB 183ms 0ms crystal 1.16.3
nim 2.nim 328ms 1.4ms 1.6MB 320ms 0ms nim/clang 2.2.4
nim 2.nim 333ms 1.4ms 1.4MB 323ms 0ms nim 2.2.4
nim 1.nim timeout 0.0ms 1.3MB 4990ms 0ms nim 2.2.4
nim 1.nim timeout 0.0ms 1.5MB 4990ms 0ms nim/clang 2.2.4

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 17ms 0.5ms 3.0MB 10ms 0ms crystal 1.16.3
crystal 1.cr 30ms 0.8ms 3.0MB 20ms 0ms crystal 1.16.3
nim 2.nim 48ms 0.6ms 1.5MB 40ms 0ms nim/clang 2.2.4
nim 2.nim 51ms 0.8ms 1.3MB 40ms 0ms nim 2.2.4
nim 1.nim 476ms 7.0ms 1.5MB 467ms 0ms nim/clang 2.2.4
nim 1.nim 480ms 4.8ms 1.3MB 473ms 0ms nim 2.2.4

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 314ms 0.9ms 9.3MB 300ms 0ms crystal 1.16.3
nim 1.nim 389ms 1.0ms 4.8MB 380ms 0ms nim/clang 2.2.4
nim 1.nim 578ms 2.7ms 4.5MB 567ms 0ms nim 2.2.4

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 17ms 0.0ms 5.4MB 10ms 0ms crystal 1.16.3
nim 1.nim 18ms 0.2ms 1.9MB 10ms 0ms nim/clang 2.2.4
nim 1.nim 26ms 0.6ms 1.6MB 20ms 0ms nim 2.2.4

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 546ms 4.1ms 33.9MB 530ms 3ms nim 2.2.4
nim 1.nim 627ms 11ms 35.2MB 607ms 10ms nim/clang 2.2.4
crystal 1.cr 828ms 9.1ms 64.2MB 810ms 10ms crystal 1.16.3

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 119ms 2.2ms 9.6MB 110ms 0ms nim 2.2.4
nim 1.nim 137ms 5.9ms 9.9MB 123ms 0ms nim/clang 2.2.4
crystal 1.cr 172ms 4.4ms 22.3MB 160ms 0ms crystal 1.16.3

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 318ms 0.5ms 1.8MB 310ms 0ms nim 2.2.4
crystal 2.cr 343ms 2.0ms 3.3MB 333ms 0ms crystal 1.16.3
nim 2.nim 344ms 2.8ms 2.0MB 337ms 0ms nim/clang 2.2.4
crystal 1.cr 345ms 2.9ms 3.4MB 337ms 0ms crystal 1.16.3

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 34ms 0.6ms 1.8MB 30ms 0ms nim 2.2.4
nim 2.nim 37ms 1.1ms 2.0MB 30ms 0ms nim/clang 2.2.4
crystal 1.cr 38ms 1.3ms 3.3MB 30ms 0ms crystal 1.16.3
crystal 2.cr 38ms 0.6ms 3.3MB 30ms 0ms crystal 1.16.3

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 264ms 6.1ms 41.5MB 250ms 0ms nim 2.2.4
nim 1.nim 316ms 7.7ms 41.8MB 300ms 0ms nim/clang 2.2.4
crystal 2.cr 345ms 3.2ms 8.2MB 337ms 0ms crystal 1.16.3
crystal 1.cr 423ms 6.7ms 42.9MB 410ms 0ms crystal 1.16.3

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 52ms 2.1ms 11.5MB 47ms 0ms nim 2.2.4
nim 1.nim 63ms 5.6ms 11.8MB 53ms 0ms nim/clang 2.2.4
crystal 2.cr 87ms 2.3ms 4.5MB 80ms 0ms crystal 1.16.3
crystal 1.cr 91ms 3.5ms 13.2MB 80ms 0ms crystal 1.16.3

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1947ms 50ms 6.3MB 1917ms 20ms crystal 1.16.3

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 450ms 9.9ms 5.0MB 437ms 0ms crystal 1.16.3

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 3587ms 1.2ms 1.6MB 3580ms 0ms nim/clang 2.2.4
nim 1.nim 3604ms 3.0ms 1.8MB 3593ms 0ms nim 2.2.4
crystal 1.cr 3757ms 8.8ms 4.6MB 3743ms 0ms crystal 1.16.3

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 898ms 0.5ms 1.5MB 890ms 0ms nim/clang 2.2.4
nim 1.nim 903ms 2.7ms 1.3MB 893ms 0ms nim 2.2.4
crystal 1.cr 942ms 1.3ms 4.4MB 930ms 0ms crystal 1.16.3

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 226ms 0.4ms 1.5MB 220ms 0ms nim/clang 2.2.4
nim 1.nim 229ms 1.5ms 1.3MB 220ms 0ms nim 2.2.4
crystal 1.cr 240ms 1.7ms 3.9MB 230ms 0ms crystal 1.16.3