Crystal VS Python 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
python 1.py 1922ms 8.8ms 217.4MB 1770ms 137ms pypy 3.9.16
crystal 1.cr 2438ms 1.7ms 64.3MB 2393ms 23ms crystal 1.7.2
python 1.py timeout 0.0ms 40.8MB 4963ms 17ms cpython 3.11.2
python 1.py timeout 0.0ms 40.3MB 4950ms 27ms pyston 3.8.12

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 148ms 2.4ms 74.3MB 113ms 13ms pypy 3.9.16
crystal 1.cr 185ms 11ms 11.0MB 167ms 0ms crystal 1.7.2
python 1.py 776ms 2.6ms 11.9MB 753ms 7ms pyston 3.8.12
python 1.py 1144ms 6.2ms 12.5MB 1120ms 3ms cpython 3.11.2

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1472ms 22ms 227.4MB 1350ms 107ms pypy 3.9.16
crystal 1.cr 2418ms 41ms 20.3MB 2357ms 37ms crystal 1.7.2
python 1.py timeout 0.0ms 20.1MB 4973ms 7ms cpython 3.11.2
python 1.py timeout 0.0ms 17.1MB 4977ms 3ms pyston 3.8.12

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
python 1.py 312ms 5.3ms 87.6MB 267ms 27ms pypy 3.9.16
python 1.py 913ms 1.0ms 19.9MB 897ms 3ms cpython 3.11.2
python 1.py 989ms 2.8ms 16.9MB 973ms 0ms pyston 3.8.12

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
python 1.py 706ms 5.1ms 78.4MB 660ms 27ms pypy 3.9.16
python 1.py 1670ms 7.4ms 10.1MB 1657ms 0ms cpython 3.11.2
python 1.py 2754ms 4.2ms 9.6MB 2730ms 3ms pyston 3.8.12

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
python 1.py 196ms 1.0ms 73.2MB 163ms 13ms pypy 3.9.16
python 1.py 310ms 1.7ms 9.4MB 297ms 3ms cpython 3.11.2
python 1.py 482ms 2.3ms 8.9MB 463ms 3ms pyston 3.8.12

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 4460ms 4.4ms 3.0MB 4447ms 0ms crystal 1.7.2

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 372ms 15ms 3.0MB 360ms 0ms crystal 1.7.2

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
python 5-m.py 3319ms 2874ms 76.1MB 6847ms 1390ms pypy 3.9.16
python 1.py 3477ms 32ms 84.7MB 3433ms 23ms pypy 3.9.16
python 5-m.py 3960ms 31ms 12.5MB 5733ms 1390ms pyston 3.8.12
python 1.py 4684ms 24ms 7.9MB 4667ms 0ms pyston 3.8.12
python 5-m.py 4713ms 13ms 13.6MB 6807ms 1347ms cpython 3.11.2
python 1.py timeout 0.0ms 8.6MB 4977ms 3ms cpython 3.11.2

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
python 1.py 425ms 2.0ms 73.7MB 383ms 23ms pypy 3.9.16
python 5-m.py 479ms 2.6ms 12.6MB 630ms 173ms pyston 3.8.12
python 1.py 495ms 15ms 7.9MB 480ms 0ms pyston 3.8.12
python 5-m.py 559ms 1.6ms 13.5MB 737ms 167ms cpython 3.11.2
python 1.py 715ms 1.6ms 8.7MB 700ms 0ms cpython 3.11.2
python 5-m.py 932ms 8.4ms 76.0MB 1000ms 530ms pypy 3.9.16

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2.6ms 0.5ms 3.0MB 0ms 0ms crystal 1.7.2
python 1.py 15ms 0.7ms 7.3MB 10ms 0ms pyston 3.8.12
python 1.py 16ms 1.3ms 8.5MB 10ms 0ms cpython 3.11.2
python 1.py 39ms 0.9ms 52.8MB 12ms 12ms pypy 3.9.16

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1999ms 21ms 33.2MB 1513ms 1027ms pyston 3.8.12
python 1.py 2432ms 32ms 31.7MB 1927ms 1063ms cpython 3.11.2
crystal 1.cr 3606ms 81ms 193.5MB 693ms 417ms crystal 1.7.2
python 1.py timeout 0.0ms 123.9MB 3880ms 1013ms pypy 3.9.16

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 444ms 7.4ms 27.9MB 337ms 183ms pyston 3.8.12
python 1.py 486ms 14ms 24.9MB 383ms 177ms cpython 3.11.2
python 1.py 1219ms 33ms 95.5MB 953ms 227ms pypy 3.9.16
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
python 2.py 284ms 4.9ms 70.9MB 253ms 13ms pypy 3.9.16
python 1.py 313ms 4.7ms 72.0MB 270ms 27ms pypy 3.9.16
python 1.py 1120ms 2.0ms 9.0MB 1107ms 0ms pyston 3.8.12
python 2.py 1293ms 9.6ms 8.7MB 1273ms 3ms pyston 3.8.12
python 1.py 1484ms 19ms 9.4MB 1467ms 0ms cpython 3.11.2
python 2.py 1699ms 14ms 9.1MB 1687ms 0ms cpython 3.11.2

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
python 2.py 667ms 16ms 71.1MB 630ms 23ms pypy 3.9.16
python 1.py 711ms 2.5ms 72.3MB 680ms 13ms pypy 3.9.16
python 2-m.py 3295ms 2854ms 9.2MB 4943ms 0ms cpython 3.11.2
python 1.py 3305ms 23ms 9.0MB 3287ms 0ms pyston 3.8.12
python 2.py 3823ms 41ms 8.6MB 3810ms 0ms pyston 3.8.12
python 1.py 4427ms 18ms 9.3MB 4410ms 0ms cpython 3.11.2

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
python 2.py 188ms 6.7ms 71.4MB 157ms 20ms pypy 3.9.16
python 1.py 206ms 1.7ms 72.5MB 170ms 20ms pypy 3.9.16
python 1.py 540ms 9.0ms 8.7MB 527ms 0ms pyston 3.8.12
python 2.py 602ms 4.0ms 8.2MB 583ms 0ms pyston 3.8.12
python 1.py 707ms 4.4ms 8.7MB 693ms 0ms cpython 3.11.2
python 2.py 854ms 5.2ms 8.4MB 837ms 0ms cpython 3.11.2

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

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

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1790ms 9.6ms 64.3MB 1750ms 17ms crystal 1.7.2
python 1.py 2976ms 31ms 230.6MB 2797ms 163ms pypy 3.9.16
python 1.py timeout 0.0ms 92.9MB 4933ms 47ms cpython 3.11.2
python 1.py timeout 0.0ms 130.2MB 4930ms 50ms pyston 3.8.12

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 320ms 17ms 22.1MB 300ms 7ms crystal 1.7.2
python 1.py 453ms 12ms 149.9MB 370ms 63ms pypy 3.9.16
python 1.py timeout 0.0ms 37.3MB 4967ms 17ms cpython 3.11.2
python 1.py timeout 0.0ms 41.4MB 4967ms 13ms pyston 3.8.12

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
python 2.py 2414ms 33ms 71.4MB 2383ms 17ms pypy 3.9.16
python 1.py 4354ms 39ms 70.3MB 4317ms 17ms pypy 3.9.16
python 1.py timeout 0.0ms 8.4MB 4983ms 0ms cpython 3.11.2
python 2.py timeout 0.0ms 8.6MB 4987ms 0ms cpython 3.11.2
python 1.py timeout 0.0ms 8.4MB 4983ms 3ms pyston 3.8.12
python 2.py timeout 0.0ms 7.9MB 4973ms 7ms pyston 3.8.12

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
python 2.py 309ms 3.3ms 71.0MB 277ms 17ms pypy 3.9.16
python 1.py 499ms 4.8ms 70.3MB 460ms 20ms pypy 3.9.16
python 1.py 1397ms 19ms 8.3MB 1380ms 0ms pyston 3.8.12
python 2.py 1891ms 7.9ms 7.9MB 1873ms 3ms pyston 3.8.12
python 1.py 3917ms 146ms 8.4MB 3903ms 0ms cpython 3.11.2
python 2.py 4128ms 39ms 8.6MB 4107ms 0ms cpython 3.11.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
crystal 1.cr 1150ms 55ms 41.9MB 1130ms 7ms crystal 1.7.2
python 1.py timeout 0.0ms 321.1MB 4883ms 97ms cpython 3.11.2
python 2.py timeout 0.0ms 633.7MB 4543ms 437ms cpython 3.11.2
python 1.py timeout 0.0ms 382.8MB 4817ms 160ms pypy 3.9.16
python 2.py timeout 0.0ms 984.6MB 4567ms 407ms pypy 3.9.16
python 1.py timeout 0.0ms 320.4MB 4907ms 73ms pyston 3.8.12
python 2.py timeout 0.0ms 633.0MB 4470ms 513ms pyston 3.8.12

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
crystal 1.cr 175ms 1.0ms 12.9MB 160ms 0ms crystal 1.7.2
python 1.py 1274ms 13ms 207.0MB 1197ms 60ms pypy 3.9.16
python 2.py 1351ms 12ms 164.3MB 1267ms 73ms pyston 3.8.12
python 2.py 2045ms 5.7ms 164.8MB 1947ms 80ms cpython 3.11.2
python 2.py 2170ms 38ms 210.3MB 2020ms 130ms pypy 3.9.16
python 1.py 2641ms 32ms 86.0MB 2583ms 40ms pyston 3.8.12
python 1.py 4357ms 11ms 86.7MB 4297ms 40ms cpython 3.11.2

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 4.py 2886ms 4.0ms 9.0MB 2840ms 27ms pyston 3.8.12
python 4.py 2892ms 0.9ms 9.5MB 2843ms 33ms cpython 3.11.2
python 4.py 2991ms 35ms 125.0MB 2913ms 57ms pypy 3.9.16
crystal 1.cr 3260ms 137ms 7.4MB 3223ms 20ms crystal 1.7.2

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
python 4.py 705ms 18ms 9.1MB 687ms 0ms cpython 3.11.2
python 4.py 713ms 23ms 8.8MB 700ms 0ms pyston 3.8.12
python 4.py 774ms 10ms 77.2MB 730ms 23ms pypy 3.9.16

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
python 1.py 3909ms 20ms 273.0MB 3747ms 143ms pypy 3.9.16
python 1.py timeout 0.0ms 106.7MB 4930ms 57ms cpython 3.11.2
python 1.py timeout 0.0ms 108.8MB 4920ms 60ms pyston 3.8.12

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
python 1.py 537ms 4.5ms 95.5MB 483ms 40ms pypy 3.9.16
python 1.py 932ms 27ms 30.5MB 890ms 23ms pyston 3.8.12
python 1.py 982ms 2.5ms 31.9MB 937ms 30ms cpython 3.11.2

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr timeout 0.0ms 4.0MB 4977ms 3ms crystal 1.7.2
python 8.py timeout 0.0ms 16.5MB 60ms 17ms cpython 3.11.2
python 8.py timeout 0.0ms 98.9MB 643ms 93ms pypy 3.9.16
python 8.py timeout 0.0ms 17.5MB 57ms 20ms pyston 3.8.12

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1847ms 33ms 3.7MB 1837ms 0ms crystal 1.7.2
python 8.py timeout 0.0ms 14.3MB 133ms 20ms cpython 3.11.2
python 8.py timeout 0.0ms 103.4MB 1023ms 183ms pypy 3.9.16
python 8.py timeout 0.0ms 17.1MB 150ms 33ms pyston 3.8.12

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 466ms 4.6ms 3.6MB 453ms 0ms crystal 1.7.2
python 8-m.py 4367ms 34ms 102.1MB 7580ms 460ms pypy 3.9.16
python 8.py timeout 0.0ms 15.9MB 243ms 33ms cpython 3.11.2
python 8.py timeout 0.0ms 17.1MB 333ms 63ms pyston 3.8.12