Lua VS Crystal benchmarks

Current benchmark data was generated on Fri May 20 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 1614ms 6.4ms 64.4MB 1927ms 20ms crystal 1.4.1
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms lua 5.4.4
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms luajit 2.1.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 138ms 0.3ms 11.0MB 143ms 0ms crystal 1.4.1
lua 1.lua 452ms 1.9ms 25.4MB 427ms 7ms luajit 2.1.0
lua 1.lua 1073ms 10ms 17.3MB 1053ms 3ms lua 5.4.4

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
lua 1.lua 2.2ms 0.7ms 2.2MB 0ms 0ms luajit 2.1.0
lua 1.lua 2.5ms 0.9ms 1.1MB 0ms 0ms lua 5.4.4
crystal 1.cr 3.0ms 0.6ms 3.0MB 0ms 0ms crystal 1.4.1

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1119ms 48ms 66.2MB 1287ms 13ms crystal 1.4.1
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms lua 5.4.4
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms luajit 2.1.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 226ms 4.8ms 19.4MB 250ms 3ms crystal 1.4.1
lua 1.lua 1838ms 17ms 35.5MB 1817ms 7ms luajit 2.1.0
lua 1.lua 2924ms 30ms 41.4MB 2900ms 7ms lua 5.4.4

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 510ms 0.8ms 3.1MB 500ms 0ms crystal 1.4.1
crystal 2.cr 540ms 0.7ms 3.1MB 530ms 0ms crystal 1.4.1
lua 4.lua 1145ms 21ms 2.4MB 1137ms 0ms luajit 2.1.0
lua 4.lua timeout 0.0ms 0.0MB 0ms 0ms lua 5.4.4

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 55ms 1.3ms 3.0MB 43ms 0ms crystal 1.4.1
crystal 2.cr 59ms 2.2ms 5.1MB 47ms 0ms crystal 1.4.1
lua 4.lua 119ms 0.9ms 2.3MB 110ms 0ms luajit 2.1.0
lua 4.lua 1178ms 9.7ms 1.1MB 1167ms 0ms lua 5.4.4

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr timeout 0.0ms 0.0MB 0ms 0ms crystal 1.4.1
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms lua 5.4.4
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms luajit 2.1.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1507ms 2.2ms 5.6MB 1497ms 0ms crystal 1.4.1
lua 1.lua 1561ms 2.0ms 2.4MB 1550ms 0ms luajit 2.1.0
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms lua 5.4.4

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 381ms 1.5ms 3.8MB 367ms 0ms crystal 1.4.1
lua 1.lua 394ms 0.7ms 2.3MB 380ms 0ms luajit 2.1.0
lua 1.lua timeout 0.0ms 0.0MB 0ms 0ms lua 5.4.4

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
lua 1.lua 520ms 0.3ms 5.0MB 510ms 0ms luajit 2.1.0
crystal 1.cr 1979ms 40ms 20.5MB 1940ms 23ms crystal 1.4.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
lua 1.lua 37ms 0.5ms 2.9MB 23ms 0ms luajit 2.1.0
crystal 1.cr 111ms 1.9ms 7.6MB 97ms 3ms crystal 1.4.1