Go VS C 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.)

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 3040ms 4.2ms 45.1MB 4367ms 53ms go 1.19.5
go 1.go 3913ms 11ms 39.6MB 3890ms 7ms tinygo 0.25.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 274ms 7.4ms 8.2MB 337ms 7ms go 1.19.5
go 1.go 349ms 1.6ms 7.1MB 337ms 0ms tinygo 0.25.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 736ms 89ms 13.6MB 1430ms 0ms go 1.19.5
go 1.go 1700ms 13ms 257.5MB 1640ms 40ms tinygo 0.25.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 59ms 5.2ms 7.4MB 93ms 0ms go 1.19.5
go 1.go 270ms 1.1ms 66.3MB 250ms 3ms tinygo 0.25.0

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 166ms 2.0ms 8.2MB 150ms 0ms go 1.19.5

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 49ms 1.7ms 8.2MB 37ms 0ms go 1.19.5

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 1395ms 1.7ms 5.0MB 2700ms 7ms go 1.19.5
go 3.go 2942ms 4.0ms 49.9MB 2917ms 3ms tinygo 0.25.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 144ms 2.6ms 5.0MB 220ms 0ms go 1.19.5
go 3.go 312ms 0.4ms 48.4MB 297ms 3ms tinygo 0.25.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 252ms 2.9ms 4.9MB 460ms 0ms go 1.19.5

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 33ms 2.2ms 2.9MB 40ms 0ms go 1.19.5

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 1.4ms 0.5ms 0.1MB 0ms 0ms tinygo 0.25.0
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
go 1.go 2.6ms 0.4ms 2.9MB 0ms 0ms go 1.19.5

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-http2.go 162ms 4.1ms 57.5MB 227ms 53ms go 1.19.5
go 1-m.go 583ms 26ms 174.0MB 557ms 353ms go 1.19.5
go 2-m.go 638ms 88ms 180.1MB 650ms 383ms go 1.19.5

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-http2.go 40ms 1.2ms 24.8MB 37ms 13ms go 1.19.5
go 2.go 102ms 33ms 37.4MB 57ms 47ms go 1.19.5
go 1.go 130ms 16ms 36.9MB 90ms 53ms go 1.19.5

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 2-ffi.go 73ms 2.3ms 41.9MB 57ms 10ms go 1.19.5
go 1.go 171ms 4.2ms 20.2MB 157ms 7ms go 1.19.5

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 2-ffi.go 420ms 3.3ms 188.8MB 380ms 123ms go 1.19.5
go 1.go 1078ms 2.7ms 102.5MB 1053ms 57ms 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 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
go 7-m.go 1498ms 12ms 42.0MB 2803ms 20ms 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.1ms 12.8MB 47ms 0ms gcc 12.2.0
c 1.c 59ms 2.8ms 9.7MB 87ms 0ms clang 14.0.0
go 7-m.go 233ms 8.4ms 24.0MB 363ms 17ms go 1.19.5

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 165ms 0.5ms 0.3MB 160ms 0ms tinygo 0.25.0
go 3.go 175ms 1.8ms 2.9MB 160ms 0ms go 1.19.5

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 490ms 0.1ms 0.3MB 480ms 0ms tinygo 0.25.0
go 3.go 518ms 3.2ms 2.9MB 503ms 0ms go 1.19.5

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 81ms 0.2ms 0.0MB 70ms 0ms tinygo 0.25.0
go 3.go 94ms 2.8ms 3.9MB 87ms 0ms go 1.19.5

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 4384ms 9.5ms 5.4MB 4373ms 0ms go 1.19.5
go 1.go timeout 0.0ms 4.9MB 4990ms 0ms tinygo 0.25.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 185ms 2.5ms 2.9MB 170ms 0ms go 1.19.5
go 1.go 245ms 0.6ms 0.0MB 233ms 0ms tinygo 0.25.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 1997ms 15ms 40.3MB 2810ms 27ms go 1.19.5
go 2.go 2327ms 59ms 41.8MB 3230ms 67ms go 1.19.5
go 1.go 3809ms 7.3ms 213.3MB 3757ms 40ms tinygo 0.25.0
go 2.go timeout 0.0ms 90.8MB 4977ms 10ms tinygo 0.25.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 424ms 6.7ms 12.4MB 573ms 10ms go 1.19.5
go 2.go 492ms 6.9ms 14.7MB 657ms 17ms go 1.19.5
go 1.go 656ms 1.2ms 51.1MB 637ms 3ms tinygo 0.25.0
go 2.go 1264ms 2.6ms 38.6MB 1247ms 3ms tinygo 0.25.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
go 1.go 456ms 1.4ms 2.9MB 440ms 0ms go 1.19.5
c 2.c 623ms 1.4ms 1.3MB 613ms 0ms gcc 12.2.0
go 1.go 843ms 1.0ms 0.0MB 830ms 0ms tinygo 0.25.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
go 1.go 51ms 3.8ms 2.9MB 40ms 0ms go 1.19.5
c 2.c 65ms 0.3ms 1.3MB 57ms 0ms gcc 12.2.0
go 1.go 86ms 0.6ms 0.0MB 80ms 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 623ms 4.5ms 17.6MB 613ms 0ms tinygo 0.25.0
go 1.go 669ms 21ms 75.2MB 640ms 13ms go 1.19.5
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
go 1.go 727ms 17ms 43.1MB 707ms 3ms tinygo 0.25.0
c 1.c 760ms 17ms 40.3MB 727ms 13ms zigcc 0.11.0-dev.1480+f68d3c63d
go 2.go 904ms 0.7ms 20.0MB 883ms 7ms go 1.19.5

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
go 1.go 121ms 2.3ms 22.1MB 107ms 3ms go 1.19.5
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
go 1.go 131ms 0.7ms 13.4MB 120ms 0ms tinygo 0.25.0
go 2.go 146ms 0.4ms 5.6MB 140ms 0ms tinygo 0.25.0
go 2.go 216ms 2.8ms 9.1MB 203ms 3ms go 1.19.5

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 1390ms 1.4ms 8.5MB 1367ms 7ms go 1.19.5

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 335ms 5.3ms 8.4MB 317ms 0ms go 1.19.5

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go timeout 0.0ms 110.9MB 4963ms 83ms go 1.19.5
go 3.go timeout 0.0ms 120.9MB 4960ms 30ms tinygo 0.25.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 2536ms 6.2ms 17.8MB 2510ms 27ms go 1.19.5
go 3.go timeout 0.0ms 30.2MB 4987ms 0ms tinygo 0.25.0

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 0-ffi.go 173ms 4.1ms 10.1MB 160ms 3ms go 1.19.5

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 0-ffi.go 57ms 1.2ms 9.6MB 43ms 0ms 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 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
go 4-m.go 2502ms 32ms 6.9MB 4830ms 3ms go 1.19.5
go 1.go 4961ms 8.6ms 5.5MB 4950ms 0ms 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 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
go 4-m.go 632ms 4.9ms 2.9MB 1197ms 0ms go 1.19.5
go 1.go 1248ms 4.9ms 2.9MB 1230ms 0ms go 1.19.5
go 1.go 2584ms 6.9ms 0.0MB 2567ms 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 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
go 4-m.go 168ms 1.6ms 4.9MB 293ms 0ms go 1.19.5
go 1.go 316ms 2.0ms 4.9MB 303ms 0ms go 1.19.5
go 1.go 645ms 0.1ms 0.0MB 633ms 0ms tinygo 0.25.0