C VS Go benchmarks

Current benchmark data was generated on Mon Feb 06 2023, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8272CL 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.)

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1.c 1.5ms 0.4ms 1.5MB 0ms 0ms zigcc 0.11.0-dev.1577+11cc1c16f
c 1.c 2.0ms 0.6ms 1.3MB 0ms 0ms gcc 12.2.0
go 1.go 2.2ms 0.5ms 2.0MB 0ms 0ms tinygo 0.25.0
c 1.c 2.2ms 0.6ms 1.4MB 0ms 0ms clang 14.0.0
go 1.go 2.6ms 0.2ms 3.3MB 0ms 0ms go 1.19.5

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1-m.c 248ms 8.5ms 23.5MB 403ms 13ms gcc 12.2.0
c 1-m.c 512ms 17ms 20.5MB 867ms 17ms clang 14.0.0
go 7-m.go 1422ms 15ms 41.6MB 2607ms 33ms go 1.19.5

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1.c 36ms 1.8ms 13.5MB 43ms 0ms gcc 12.2.0
c 1.c 69ms 16ms 9.8MB 103ms 0ms clang 14.0.0
go 7-m.go 241ms 4.9ms 23.9MB 353ms 23ms go 1.19.5

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 8-i.c 271ms 2.7ms 1.2MB 260ms 0ms zigcc 0.11.0-dev.1577+11cc1c16f
c 8-i.c 331ms 1.3ms 1.3MB 320ms 0ms gcc 12.2.0
c 5.c 335ms 0.5ms 1.3MB 327ms 0ms gcc 12.2.0
c 8-i.c 350ms 0.9ms 1.4MB 340ms 0ms clang 14.0.0
c 5.c 357ms 1.0ms 1.4MB 340ms 0ms clang 14.0.0
c 5.c 357ms 1.9ms 0.9MB 340ms 0ms zigcc 0.11.0-dev.1577+11cc1c16f
c 2.c 362ms 3.2ms 1.2MB 350ms 0ms zigcc 0.11.0-dev.1577+11cc1c16f
c 2.c 389ms 0.2ms 1.4MB 377ms 0ms clang 14.0.0
c 2.c 489ms 8.2ms 1.3MB 473ms 0ms gcc 12.2.0
go 1.go 514ms 14ms 4.9MB 500ms 0ms go 1.19.5
go 1.go 705ms 0.8ms 0.0MB 697ms 0ms tinygo 0.25.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 8-i.c 30ms 0.3ms 1.2MB 20ms 0ms zigcc 0.11.0-dev.1577+11cc1c16f
c 8-i.c 36ms 0.2ms 1.3MB 30ms 0ms gcc 12.2.0
c 5.c 36ms 0.2ms 1.3MB 30ms 0ms gcc 12.2.0
c 5.c 38ms 0.7ms 1.0MB 30ms 0ms zigcc 0.11.0-dev.1577+11cc1c16f
c 5.c 38ms 0.3ms 1.4MB 30ms 0ms clang 14.0.0
c 8-i.c 38ms 0.3ms 1.4MB 30ms 0ms clang 14.0.0
c 2.c 39ms 0.8ms 1.2MB 30ms 0ms zigcc 0.11.0-dev.1577+11cc1c16f
c 2.c 42ms 0.5ms 1.4MB 30ms 0ms clang 14.0.0
c 2.c 52ms 0.3ms 1.3MB 40ms 0ms gcc 12.2.0
go 1.go 59ms 3.3ms 2.9MB 47ms 0ms go 1.19.5
go 1.go 73ms 0.5ms 0.0MB 63ms 0ms tinygo 0.25.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 2.go 699ms 4.4ms 17.4MB 687ms 0ms tinygo 0.25.0
go 2.go 960ms 7.8ms 20.0MB 937ms 13ms go 1.19.5
go 1.go 1168ms 97ms 43.1MB 1153ms 3ms tinygo 0.25.0
c 1.c 1280ms 8.3ms 40.9MB 1247ms 17ms clang 14.0.0
c 1.c 1306ms 10ms 40.0MB 1273ms 13ms zigcc 0.11.0-dev.1577+11cc1c16f
c 1.c 1306ms 19ms 40.9MB 1273ms 13ms gcc 12.2.0
go 1.go 1383ms 3.9ms 73.9MB 1350ms 20ms go 1.19.5

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1.c 136ms 3.6ms 11.0MB 120ms 0ms zigcc 0.11.0-dev.1577+11cc1c16f
c 1.c 138ms 4.0ms 11.8MB 117ms 3ms gcc 12.2.0
c 1.c 139ms 3.4ms 11.7MB 120ms 0ms clang 14.0.0
go 1.go 146ms 0.6ms 13.1MB 137ms 0ms tinygo 0.25.0
go 1.go 148ms 4.3ms 23.5MB 130ms 7ms go 1.19.5
go 2.go 160ms 0.5ms 5.4MB 150ms 0ms tinygo 0.25.0
go 2.go 216ms 1.8ms 7.6MB 203ms 3ms go 1.19.5

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 4-m.c 1280ms 2.8ms 1.3MB 2503ms 0ms gcc 12.2.0
c 4-m.c 1595ms 21ms 3.2MB 3123ms 0ms clang 14.0.0
c 5-im.c 1605ms 1.3ms 1.3MB 3137ms 3ms gcc 12.2.0
c 6-im.c 1644ms 8.7ms 1.3MB 3200ms 0ms gcc 12.2.0
c 6-im.c 1667ms 15ms 3.2MB 3257ms 0ms clang 14.0.0
c 3-m.c 1868ms 4.6ms 3.2MB 3673ms 0ms clang 14.0.0
c 3-m.c 1894ms 21ms 1.3MB 3697ms 0ms gcc 12.2.0
c 5-im.c 2042ms 13ms 3.2MB 3997ms 3ms clang 14.0.0
go 4-m.go 2235ms 18ms 5.4MB 4320ms 3ms go 1.19.5
go 1.go 4404ms 4.0ms 5.5MB 4393ms 3ms go 1.19.5
go 1.go timeout 0.0ms 0.4MB 4987ms 0ms tinygo 0.25.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 4-m.c 333ms 2.4ms 1.3MB 630ms 0ms gcc 12.2.0
c 4-m.c 408ms 1.5ms 3.1MB 777ms 0ms clang 14.0.0
c 5-im.c 416ms 2.7ms 1.3MB 790ms 0ms gcc 12.2.0
c 6-im.c 421ms 2.9ms 2.4MB 800ms 0ms gcc 12.2.0
c 6-im.c 426ms 1.8ms 3.3MB 810ms 0ms clang 14.0.0
c 3-m.c 484ms 1.9ms 1.3MB 933ms 0ms gcc 12.2.0
c 3-m.c 490ms 17ms 3.2MB 930ms 0ms clang 14.0.0
c 5-im.c 524ms 0.6ms 3.2MB 1007ms 0ms clang 14.0.0
go 4-m.go 577ms 7.0ms 2.9MB 1083ms 0ms go 1.19.5
go 1.go 1114ms 1.2ms 2.9MB 1103ms 0ms go 1.19.5
go 1.go timeout 0.0ms 0.0MB 4983ms 0ms tinygo 0.25.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 4-m.c 93ms 3.3ms 1.3MB 157ms 0ms gcc 12.2.0
c 4-m.c 111ms 0.6ms 3.1MB 190ms 0ms clang 14.0.0
c 5-im.c 114ms 0.7ms 1.3MB 200ms 0ms gcc 12.2.0
c 6-im.c 114ms 2.8ms 1.3MB 200ms 0ms gcc 12.2.0
c 6-im.c 117ms 3.2ms 3.3MB 203ms 0ms clang 14.0.0
c 3-m.c 130ms 1.2ms 3.1MB 230ms 0ms clang 14.0.0
c 3-m.c 131ms 0.9ms 1.3MB 237ms 0ms gcc 12.2.0
c 5-im.c 142ms 1.3ms 3.1MB 253ms 0ms clang 14.0.0
go 4-m.go 152ms 2.2ms 2.9MB 270ms 0ms go 1.19.5
go 1.go 284ms 2.4ms 2.9MB 270ms 0ms go 1.19.5
go 1.go 1642ms 4.7ms 0.0MB 1630ms 0ms tinygo 0.25.0