C VS Ruby benchmarks

Current benchmark data was generated on Thu Sep 22 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.)

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1.c 2.1ms 0.3ms 1.0MB 0ms 0ms gcc 12.2.0
c 1.c 3.1ms 1.7ms 0.6MB 0ms 0ms zigcc 0.10.0-dev.4060+61aaef0b0
c 1.c 3.1ms 1.3ms 1.1MB 0ms 0ms clang 11.0.0
ruby 1.rb 41ms 1.1ms 145.7MB 22ms 16ms truffleruby 22.2.0
ruby 1.rb 70ms 0.9ms 29.9MB 48ms 10ms ruby 3.1.2
ruby 1.rb 240ms 1.6ms 286.6MB 100ms 124ms ruby/yjit 3.1.2

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1-m.c 255ms 11ms 23.5MB 407ms 13ms gcc 12.2.0
c 1-m.c 522ms 38ms 20.3MB 827ms 13ms clang 11.0.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1.c 34ms 0.8ms 12.7MB 40ms 0ms gcc 12.2.0
c 1.c 64ms 5.5ms 9.7MB 90ms 5ms clang 11.0.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 8-i.c 308ms 0.1ms 0.5MB 300ms 0ms zigcc 0.10.0-dev.4060+61aaef0b0
c 5.c 321ms 0.7ms 1.0MB 310ms 0ms gcc 12.2.0
c 5.c 329ms 0.5ms 0.6MB 320ms 0ms zigcc 0.10.0-dev.4060+61aaef0b0
c 2.c 338ms 0.3ms 0.6MB 330ms 0ms zigcc 0.10.0-dev.4060+61aaef0b0
c 8-i.c 346ms 3.0ms 1.1MB 333ms 0ms clang 11.0.0
c 5.c 367ms 0.2ms 1.1MB 357ms 0ms clang 11.0.0
c 8-i.c 367ms 3.6ms 1.0MB 353ms 0ms gcc 12.2.0
c 2.c 415ms 7.0ms 1.0MB 397ms 0ms clang 11.0.0
c 2.c 624ms 0.5ms 1.0MB 610ms 0ms gcc 12.2.0
ruby 2.rb 1108ms 5.4ms 317.8MB 1390ms 100ms truffleruby 22.2.0
ruby 2.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 2.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 8-i.c 33ms 0.4ms 0.6MB 27ms 0ms zigcc 0.10.0-dev.4060+61aaef0b0
c 5.c 35ms 1.3ms 1.0MB 23ms 0ms gcc 12.2.0
c 5.c 36ms 0.3ms 0.6MB 27ms 0ms zigcc 0.10.0-dev.4060+61aaef0b0
c 2.c 36ms 0.1ms 0.6MB 30ms 0ms zigcc 0.10.0-dev.4060+61aaef0b0
c 8-i.c 39ms 0.4ms 1.0MB 30ms 0ms gcc 12.2.0
c 5.c 40ms 0.6ms 1.1MB 30ms 0ms clang 11.0.0
c 8-i.c 41ms 3.3ms 1.1MB 30ms 0ms clang 11.0.0
c 2.c 43ms 0.2ms 1.1MB 33ms 0ms clang 11.0.0
c 2.c 65ms 0.8ms 1.0MB 53ms 0ms gcc 12.2.0
ruby 2-m.rb 421ms 1.4ms 300.5MB 650ms 100ms truffleruby 22.2.0
ruby 2.rb 2353ms 2.0ms 286.7MB 2207ms 123ms ruby/yjit 3.1.2
ruby 2.rb 3241ms 15ms 29.9MB 3217ms 10ms ruby 3.1.2

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1.c 796ms 36ms 40.1MB 757ms 17ms zigcc 0.10.0-dev.4060+61aaef0b0
c 1.c 812ms 22ms 41.0MB 780ms 10ms gcc 12.2.0
c 1.c 820ms 13ms 40.9MB 773ms 27ms clang 11.0.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.2.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1.c 121ms 0.8ms 10.8MB 103ms 7ms zigcc 0.10.0-dev.4060+61aaef0b0
c 1.c 123ms 1.8ms 11.6MB 110ms 0ms clang 11.0.0
c 1.c 124ms 3.2ms 11.9MB 107ms 0ms gcc 12.2.0
ruby 1.rb 3198ms 35ms 463.2MB 3600ms 157ms truffleruby 22.2.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 4-m.c 1397ms 12ms 1.0MB 2733ms 0ms gcc 12.2.0
c 6-im.c 1588ms 6.1ms 1.0MB 3110ms 0ms gcc 12.2.0
c 6-im.c 1722ms 4.5ms 3.0MB 3380ms 0ms clang 11.0.0
c 4-m.c 1749ms 11ms 2.9MB 3420ms 7ms clang 11.0.0
c 5-im.c 1847ms 1.6ms 1.0MB 3633ms 0ms gcc 12.2.0
c 5-im.c 2034ms 11ms 3.1MB 3990ms 0ms clang 11.0.0
c 3-m.c 2218ms 21ms 1.0MB 4350ms 0ms gcc 12.2.0
c 3-m.c 2222ms 12ms 3.2MB 4360ms 0ms clang 11.0.0
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.2.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 4-m.c 358ms 1.4ms 1.0MB 690ms 0ms gcc 12.2.0
c 6-im.c 406ms 1.9ms 1.0MB 780ms 0ms gcc 12.2.0
c 6-im.c 443ms 5.0ms 3.0MB 843ms 0ms clang 11.0.0
c 4-m.c 445ms 2.0ms 3.0MB 853ms 0ms clang 11.0.0
c 5-im.c 473ms 2.7ms 1.0MB 910ms 0ms gcc 12.2.0
c 5-im.c 522ms 9.3ms 3.1MB 1003ms 0ms clang 11.0.0
c 3-m.c 559ms 0.8ms 1.0MB 1087ms 0ms gcc 12.2.0
c 3-m.c 576ms 18ms 3.2MB 1100ms 0ms clang 11.0.0
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.2.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 4-m.c 97ms 0.9ms 1.0MB 170ms 0ms gcc 12.2.0
c 6-im.c 110ms 0.9ms 0.9MB 200ms 0ms gcc 12.2.0
c 6-im.c 118ms 0.6ms 3.1MB 210ms 0ms clang 11.0.0
c 4-m.c 121ms 3.1ms 3.1MB 213ms 0ms clang 11.0.0
c 5-im.c 128ms 2.7ms 1.0MB 233ms 0ms gcc 12.2.0
c 5-im.c 139ms 2.4ms 3.1MB 250ms 0ms clang 11.0.0
c 3-m.c 149ms 0.8ms 1.0MB 277ms 0ms gcc 12.2.0
c 3-m.c 153ms 2.3ms 3.2MB 273ms 0ms clang 11.0.0
ruby 4.rb 2456ms 33ms 462.5MB 2987ms 150ms truffleruby 22.2.0
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2