C VS Ruby benchmarks

Current benchmark data was generated on Sun Jan 29 2023, 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 1.7ms 0.7ms 1.4MB 0ms 0ms clang 14.0.0
c 1.c 1.9ms 0.9ms 1.3MB 0ms 0ms gcc 12.2.0
c 1.c 2.4ms 1.1ms 1.0MB 0ms 0ms zigcc 0.11.0-dev.1480+f68d3c63d
ruby 1.rb 41ms 2.6ms 156.3MB 16ms 26ms truffleruby 22.3.1
ruby 1.rb 72ms 0.3ms 32.5MB 46ms 14ms ruby/yjit 3.2.0
ruby 1.rb 72ms 0.5ms 32.1MB 48ms 12ms ruby 3.2.0

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1-m.c 249ms 1.4ms 23.5MB 413ms 7ms gcc 12.2.0
c 1-m.c 489ms 15ms 20.4MB 847ms 20ms clang 14.0.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1.c 36ms 1.1ms 12.8MB 47ms 0ms gcc 12.2.0
c 1.c 59ms 2.8ms 9.7MB 87ms 0ms clang 14.0.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 8-i.c 318ms 8.8ms 1.3MB 303ms 0ms zigcc 0.11.0-dev.1480+f68d3c63d
c 5.c 323ms 1.9ms 1.3MB 310ms 0ms gcc 12.2.0
c 5.c 329ms 1.3ms 1.4MB 320ms 0ms clang 14.0.0
c 5.c 330ms 1.7ms 1.0MB 320ms 0ms zigcc 0.11.0-dev.1480+f68d3c63d
c 2.c 343ms 2.5ms 1.2MB 330ms 0ms zigcc 0.11.0-dev.1480+f68d3c63d
c 2.c 345ms 3.1ms 1.4MB 330ms 0ms clang 14.0.0
c 8-i.c 365ms 0.3ms 1.3MB 350ms 0ms gcc 12.2.0
c 8-i.c 370ms 3.6ms 1.4MB 357ms 0ms clang 14.0.0
c 2.c 623ms 1.4ms 1.3MB 613ms 0ms gcc 12.2.0
ruby 2.rb 1013ms 1.8ms 306.6MB 1220ms 67ms truffleruby 22.3.1
ruby 2.rb timeout 0.0ms 32.2MB 4973ms 10ms ruby 3.2.0
ruby 2.rb timeout 0.0ms 33.0MB 4967ms 17ms ruby/yjit 3.2.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 5.c 34ms 0.1ms 1.3MB 20ms 0ms gcc 12.2.0
c 8-i.c 35ms 1.3ms 1.2MB 20ms 0ms zigcc 0.11.0-dev.1480+f68d3c63d
c 2.c 36ms 0.5ms 1.2MB 27ms 0ms zigcc 0.11.0-dev.1480+f68d3c63d
c 2.c 36ms 0.4ms 1.4MB 27ms 0ms clang 14.0.0
c 5.c 37ms 1.2ms 1.0MB 27ms 0ms zigcc 0.11.0-dev.1480+f68d3c63d
c 5.c 37ms 3.2ms 1.4MB 27ms 0ms clang 14.0.0
c 8-i.c 39ms 0.5ms 1.4MB 30ms 0ms clang 14.0.0
c 8-i.c 39ms 0.9ms 1.3MB 30ms 0ms gcc 12.2.0
c 2.c 65ms 0.3ms 1.3MB 57ms 0ms gcc 12.2.0
ruby 2-m.rb 380ms 2.8ms 305.0MB 580ms 73ms truffleruby 22.3.1
ruby 2.rb 2169ms 0.8ms 33.0MB 2140ms 10ms ruby/yjit 3.2.0
ruby 2.rb 3369ms 22ms 32.2MB 3340ms 13ms ruby 3.2.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1.c 709ms 14ms 41.1MB 683ms 10ms gcc 12.2.0
c 1.c 726ms 18ms 40.9MB 697ms 10ms clang 14.0.0
c 1.c 760ms 17ms 40.3MB 727ms 13ms zigcc 0.11.0-dev.1480+f68d3c63d
ruby 1.rb timeout 0.0ms 344.6MB 4850ms 123ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 345.1MB 4833ms 143ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 689.3MB 5030ms 153ms truffleruby 22.3.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1.c 120ms 2.6ms 11.6MB 110ms 0ms clang 14.0.0
c 1.c 123ms 0.9ms 11.8MB 113ms 0ms gcc 12.2.0
c 1.c 130ms 2.0ms 11.0MB 113ms 0ms zigcc 0.11.0-dev.1480+f68d3c63d
ruby 1.rb 2733ms 12ms 428.6MB 3227ms 123ms truffleruby 22.3.1
ruby 1.rb timeout 0.0ms 151.1MB 4910ms 70ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 151.5MB 4910ms 70ms ruby/yjit 3.2.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 4-m.c 1394ms 3.2ms 1.3MB 2727ms 3ms gcc 12.2.0
c 6-im.c 1617ms 1.7ms 1.3MB 3173ms 0ms gcc 12.2.0
c 6-im.c 1698ms 19ms 3.3MB 3317ms 0ms clang 14.0.0
c 4-m.c 1717ms 3.2ms 3.2MB 3377ms 0ms clang 14.0.0
c 5-im.c 1856ms 10ms 1.3MB 3637ms 0ms gcc 12.2.0
c 5-im.c 2190ms 17ms 3.3MB 4300ms 0ms clang 14.0.0
c 3-m.c 2204ms 2.6ms 3.2MB 4343ms 0ms clang 14.0.0
c 3-m.c 2205ms 9.5ms 1.3MB 4337ms 0ms gcc 12.2.0
ruby 4.rb timeout 0.0ms 32.2MB 4977ms 7ms ruby 3.2.0
ruby 4.rb timeout 0.0ms 32.8MB 4973ms 10ms ruby/yjit 3.2.0
ruby 4.rb timeout 0.0ms 585.6MB 5217ms 223ms truffleruby 22.3.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 4-m.c 360ms 2.4ms 1.3MB 683ms 0ms gcc 12.2.0
c 6-im.c 415ms 1.3ms 1.3MB 800ms 0ms gcc 12.2.0
c 6-im.c 430ms 2.6ms 3.1MB 820ms 0ms clang 14.0.0
c 4-m.c 438ms 5.2ms 3.1MB 840ms 0ms clang 14.0.0
c 5-im.c 476ms 1.3ms 1.3MB 910ms 0ms gcc 12.2.0
c 5-im.c 555ms 4.2ms 3.3MB 1073ms 0ms clang 14.0.0
c 3-m.c 558ms 1.9ms 1.3MB 1083ms 0ms gcc 12.2.0
c 3-m.c 563ms 1.7ms 3.1MB 1087ms 0ms clang 14.0.0
ruby 4.rb timeout 0.0ms 32.1MB 4970ms 10ms ruby 3.2.0
ruby 4.rb timeout 0.0ms 32.8MB 4973ms 10ms ruby/yjit 3.2.0
ruby 4.rb timeout 0.0ms 580.5MB 5417ms 200ms truffleruby 22.3.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 4-m.c 98ms 1.2ms 1.3MB 170ms 0ms gcc 12.2.0
c 6-im.c 114ms 2.1ms 1.3MB 200ms 0ms gcc 12.2.0
c 6-im.c 116ms 1.6ms 3.1MB 207ms 0ms clang 14.0.0
c 4-m.c 118ms 1.0ms 3.3MB 210ms 0ms clang 14.0.0
c 5-im.c 127ms 1.0ms 1.3MB 230ms 0ms gcc 12.2.0
c 5-im.c 151ms 5.7ms 3.2MB 270ms 0ms clang 14.0.0
c 3-m.c 151ms 1.7ms 3.1MB 277ms 0ms clang 14.0.0
c 3-m.c 153ms 5.1ms 1.3MB 280ms 0ms gcc 12.2.0
ruby 4.rb 2454ms 2.0ms 479.2MB 2940ms 143ms truffleruby 22.3.1
ruby 4.rb timeout 0.0ms 32.4MB 4970ms 7ms ruby 3.2.0
ruby 4.rb timeout 0.0ms 32.8MB 4967ms 13ms ruby/yjit 3.2.0