Nim VS Crystal benchmarks

Current benchmark data was generated on Wed Feb 08 2023, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8171M 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 2438ms 1.7ms 64.3MB 2393ms 23ms crystal 1.7.2
nim 2.nim 2517ms 18ms 33.9MB 2493ms 3ms nim 1.6.10
nim 2.nim 2531ms 9.3ms 34.8MB 2507ms 7ms nim/clang 1.6.10

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 185ms 11ms 11.0MB 167ms 0ms crystal 1.7.2
nim 2.nim 239ms 0.4ms 5.7MB 227ms 0ms nim/clang 1.6.10
nim 2.nim 240ms 1.4ms 5.5MB 220ms 0ms nim 1.6.10

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2418ms 41ms 20.3MB 2357ms 37ms crystal 1.7.2
nim 1.nim timeout 0.0ms 405.0MB 3300ms 1353ms nim 1.6.10
nim 1.nim timeout 0.0ms 405.5MB 3347ms 1307ms nim/clang 1.6.10

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 136ms 1.4ms 7.2MB 120ms 3ms crystal 1.7.2
nim 1.nim timeout 0.0ms 405.3MB 3357ms 1303ms nim 1.6.10
nim 1.nim timeout 0.0ms 407.5MB 3353ms 1290ms nim/clang 1.6.10

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 95ms 7.6ms 6.4MB 80ms 3ms crystal 1.7.2
nim 1.nim timeout 0.0ms 3.1MB 4990ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 3.0MB 4983ms 0ms nim/clang 1.6.10

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 32ms 0.7ms 5.3MB 20ms 0ms crystal 1.7.2
nim 1.nim timeout 0.0ms 2.3MB 4983ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 2.2MB 4980ms 0ms nim/clang 1.6.10

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 291ms 3.7ms 1.0MB 277ms 0ms nim 1.6.10
nim 2.nim 367ms 10.0ms 1.3MB 353ms 0ms nim/clang 1.6.10
nim 1.nim 823ms 13ms 1.3MB 707ms 97ms nim/clang 1.6.10
nim 1.nim 839ms 20ms 1.0MB 723ms 100ms nim 1.6.10
crystal 2.cr 873ms 17ms 3.1MB 757ms 100ms crystal 1.7.2
crystal 1.cr 1124ms 3.1ms 14.6MB 967ms 137ms crystal 1.7.2

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 34ms 2.2ms 1.1MB 20ms 0ms nim 1.6.10
nim 2.nim 39ms 0.2ms 1.3MB 30ms 0ms nim/clang 1.6.10
nim 1.nim 84ms 1.5ms 1.2MB 63ms 7ms nim/clang 1.6.10
nim 1.nim 89ms 0.6ms 1.1MB 67ms 7ms nim 1.6.10
crystal 2.cr 91ms 0.9ms 3.2MB 73ms 7ms crystal 1.7.2
crystal 1.cr 117ms 0.6ms 4.5MB 90ms 17ms crystal 1.7.2

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 2.1ms 0.5ms 1.0MB 0ms 0ms nim 1.6.10
nim 1.nim 2.3ms 0.9ms 1.9MB 0ms 0ms nim/clang 1.6.10
crystal 1.cr 2.6ms 0.5ms 3.0MB 0ms 0ms crystal 1.7.2

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 954ms 7.7ms 94.1MB 447ms 470ms nim/clang 1.6.10
nim 1.nim 989ms 9.0ms 94.7MB 460ms 487ms nim 1.6.10
crystal 1.cr 3606ms 81ms 193.5MB 693ms 417ms crystal 1.7.2

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 154ms 1.8ms 17.8MB 63ms 73ms nim 1.6.10
nim 1.nim 158ms 3.7ms 18.1MB 60ms 83ms nim/clang 1.6.10
crystal 1.cr 1299ms 5.5ms 43.4MB 73ms 63ms crystal 1.7.2

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 69ms 3.1ms 3.0MB 57ms 0ms crystal 1.7.2
crystal 1.cr 113ms 1.8ms 3.0MB 100ms 0ms crystal 1.7.2
nim 2.nim 180ms 1.4ms 1.3MB 170ms 0ms nim/clang 1.6.10
nim 2.nim 184ms 1.5ms 1.0MB 170ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 1.1MB 4983ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 1.2MB 4987ms 0ms nim/clang 1.6.10

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 195ms 4.7ms 3.0MB 180ms 0ms crystal 1.7.2
crystal 1.cr 324ms 1.4ms 3.0MB 310ms 0ms crystal 1.7.2
nim 2.nim 535ms 14ms 1.3MB 520ms 0ms nim/clang 1.6.10
nim 2.nim 540ms 0.9ms 1.1MB 530ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 1.0MB 4990ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 1.3MB 4983ms 0ms nim/clang 1.6.10

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 36ms 2.2ms 2.9MB 23ms 0ms crystal 1.7.2
crystal 1.cr 56ms 0.1ms 2.9MB 47ms 0ms crystal 1.7.2
nim 2.nim 77ms 2.3ms 1.2MB 67ms 0ms nim/clang 1.6.10
nim 2.nim 80ms 1.7ms 1.0MB 70ms 0ms nim 1.6.10
nim 1.nim 449ms 7.2ms 1.3MB 437ms 0ms nim/clang 1.6.10
nim 1.nim 496ms 1.6ms 1.0MB 483ms 0ms nim 1.6.10

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 492ms 4.7ms 9.8MB 480ms 0ms crystal 1.7.2
nim 1.nim 697ms 0.6ms 4.8MB 687ms 0ms nim/clang 1.6.10
nim 1.nim 1040ms 3.5ms 4.4MB 1030ms 0ms nim 1.6.10

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 26ms 0.0ms 6.7MB 13ms 0ms crystal 1.7.2
nim 1.nim 33ms 0.4ms 1.3MB 20ms 0ms nim/clang 1.6.10
nim 1.nim 49ms 1.0ms 1.0MB 40ms 0ms nim 1.6.10

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1276ms 2.5ms 35.1MB 1243ms 10ms nim/clang 1.6.10
nim 1.nim 1294ms 0.4ms 34.6MB 1267ms 7ms nim 1.6.10
crystal 1.cr 1790ms 9.6ms 64.3MB 1750ms 17ms crystal 1.7.2

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 275ms 0.8ms 9.3MB 260ms 0ms nim 1.6.10
nim 1.nim 275ms 4.2ms 9.5MB 260ms 0ms nim/clang 1.6.10
crystal 1.cr 320ms 17ms 22.1MB 300ms 7ms crystal 1.7.2

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 489ms 4.9ms 1.2MB 477ms 0ms nim/clang 1.6.10
nim 2.nim 489ms 14ms 1.3MB 477ms 0ms nim 1.6.10
crystal 1.cr 670ms 3.5ms 2.9MB 657ms 0ms crystal 1.7.2
crystal 2.cr 694ms 9.6ms 3.0MB 683ms 0ms crystal 1.7.2

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 52ms 1.6ms 1.3MB 43ms 0ms nim 1.6.10
nim 2.nim 53ms 2.1ms 1.2MB 40ms 0ms nim/clang 1.6.10
crystal 1.cr 73ms 1.3ms 3.0MB 60ms 0ms crystal 1.7.2
crystal 2.cr 79ms 4.1ms 2.9MB 70ms 0ms crystal 1.7.2

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 513ms 4.0ms 7.8MB 500ms 0ms crystal 1.7.2
nim 2.nim 782ms 1.9ms 6.3MB 770ms 0ms nim/clang 1.6.10
nim 2.nim 988ms 18ms 6.0MB 973ms 0ms nim 1.6.10
nim 1.nim 1048ms 48ms 41.3MB 1023ms 10ms nim/clang 1.6.10
nim 1.nim 1053ms 31ms 40.6MB 1027ms 7ms nim 1.6.10
crystal 1.cr 1150ms 55ms 41.9MB 1130ms 7ms crystal 1.7.2

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 117ms 2.4ms 4.1MB 103ms 0ms crystal 1.7.2
nim 1.nim 153ms 1.5ms 11.1MB 140ms 0ms nim 1.6.10
nim 1.nim 156ms 2.8ms 11.3MB 140ms 0ms nim/clang 1.6.10
nim 2.nim 174ms 4.5ms 3.2MB 163ms 0ms nim/clang 1.6.10
crystal 1.cr 175ms 1.0ms 12.9MB 160ms 0ms crystal 1.7.2
nim 2.nim 240ms 7.1ms 3.1MB 230ms 0ms nim 1.6.10

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 3260ms 137ms 7.4MB 3223ms 20ms crystal 1.7.2
nim 1.nim timeout 0.0ms 5.6MB 4990ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 5.8MB 4987ms 0ms nim/clang 1.6.10

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 703ms 27ms 5.8MB 677ms 10ms crystal 1.7.2
nim 1.nim timeout 0.0ms 5.6MB 4983ms 0ms nim 1.6.10
nim 1.nim timeout 0.0ms 5.8MB 4990ms 0ms nim/clang 1.6.10

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2759ms 1.3ms 174.0MB 2687ms 57ms crystal 1.7.2
nim 1.nim 2873ms 14ms 168.2MB 2813ms 40ms nim/clang 1.6.10
nim 1.nim 2937ms 11ms 166.9MB 2870ms 50ms nim 1.6.10

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 287ms 1.0ms 32.1MB 260ms 10ms crystal 1.7.2
nim 1.nim 295ms 9.2ms 17.1MB 277ms 3ms nim/clang 1.6.10
nim 1.nim 299ms 3.5ms 16.7MB 280ms 0ms nim 1.6.10

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 4075ms 23ms 1.2MB 4060ms 0ms nim/clang 1.6.10
nim 1.nim 4100ms 19ms 1.3MB 4087ms 0ms nim 1.6.10
crystal 1.cr timeout 0.0ms 4.0MB 4977ms 3ms crystal 1.7.2

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1028ms 4.7ms 1.3MB 1020ms 0ms nim 1.6.10
nim 1.nim 1040ms 16ms 1.2MB 1027ms 0ms nim/clang 1.6.10
crystal 1.cr 1847ms 33ms 3.7MB 1837ms 0ms crystal 1.7.2

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 261ms 1.5ms 1.2MB 250ms 0ms nim/clang 1.6.10
nim 1.nim 262ms 2.0ms 1.3MB 250ms 0ms nim 1.6.10
crystal 1.cr 466ms 4.6ms 3.6MB 453ms 0ms crystal 1.7.2