I'm sure everyone knowing golang knows that blog post here. 
Reading it again, I wondered if using gccgo instead of go build would increase the speed a bit more. In my typical use case (scientific computations), a gccgo-generated binary is always faster than a go build-generated one.
So, just grab this file: havlak6.go and compile it:
go build havlak6.go -O havlak6_go
gccgo -o havlak6_gccgo -march=native -Ofast havlak6.go
Surprise !
$/usr/bin/time ./havlak6_go
5.45user 0.06system 0:05.54elapsed 99%CPU
$/usr/bin/time ./havlak6_gccgo
11.38user 0.16system 0:11.74elapsed 98%CPU
I'm curious and want to know why an "optimizing" compiler does produce slower code.
I tried to use gprof on gccgo generated binary:
gccgo -pg -march=native -Ofast havlak6.go
./a.out
gprof a.out gmon.out
with no luck:
Flat profile:
Each sample counts as 0.01 seconds.
 no time accumulated
As you can see the code has not been actually profiled.
Of course, I read this, but as you can see, the program takes 10+ seconds to execute... The number of samples should be > 1000.
I also tried:
rm a.out gmon.out
LDFLAGS='-g -pg' gccgo -g -pg -march=native -Ofast havlak6.go
./a.out
gprof
No success neither.
Do you know what's wrong? Do you have an idea of why gccgo, with all its optimization routines fails to be faster than gc in this case?
go version: 1.0.2
gcc version: 4.7.2
EDIT:
Oh, I completely forgot to mention... I obviously tried pprof on the gccgo-generated binary... Here is a top10:
Welcome to pprof!  For help, type 'help'.
(pprof) top10
Total: 1143 samples
    1143 100.0% 100.0%     1143 100.0% 0x00007fbfb04cf1f4
       0   0.0% 100.0%      890  77.9% 0x00007fbfaf81101e
       0   0.0% 100.0%        4   0.3% 0x00007fbfaf8deb64
       0   0.0% 100.0%        1   0.1% 0x00007fbfaf8f2faf
       0   0.0% 100.0%        3   0.3% 0x00007fbfaf8f2fc5
       0   0.0% 100.0%        1   0.1% 0x00007fbfaf8f2fc9
       0   0.0% 100.0%        1   0.1% 0x00007fbfaf8f2fd6
       0   0.0% 100.0%        1   0.1% 0x00007fbfaf8f2fdf
       0   0.0% 100.0%        2   0.2% 0x00007fbfaf8f4a2f
       0   0.0% 100.0%        1   0.1% 0x00007fbfaf8f4a33
And that's why I'm looking for something else.
EDIT2:
Since it seems that someone wants my question to be closed, I did not try to use gprof out of the blue: https://groups.google.com/d/msg/golang-nuts/1xESoT5Xcd0/bpMvxQeJguMJ
 
    