我相信知道的每个人都知道golang
这里的博客文章。
再读一遍,我想知道使用gccgo
代替是否go build
会提高速度。在我的典型用例(科学计算)中,生成的gccgo
二进制文件总是比生成的二进制文件快go build
。
所以,只需抓住这个文件:havlak6.go并编译它:
go build havlak6.go -O havlak6_go
gccgo -o havlak6_gccgo -march=native -Ofast havlak6.go
惊喜 !
$/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
我很好奇,想知道为什么“优化”编译器会产生较慢的代码。
我尝试gprof
在gccgo
生成的二进制文件上使用:
gccgo -pg -march=native -Ofast havlak6.go
./a.out
gprof a.out gmon.out
没有运气:
Flat profile:
Each sample counts as 0.01 seconds.
no time accumulated
正如你所看到的,代码实际上并没有被分析。
当然,我读过这个,但正如你所见,程序需要 10+ 秒才能执行......样本数应该 > 1000。
我也试过:
rm a.out gmon.out
LDFLAGS='-g -pg' gccgo -g -pg -march=native -Ofast havlak6.go
./a.out
gprof
也没有成功。
你知道出了什么问题吗?你知道为什么gccgo
,它的所有优化例程都没有比gc
这种情况更快吗?
go
版本:1.0.2
gcc
版本:4.7.2
编辑:
哦,我完全忘了提......我显然在gccgo
-generated 二进制文件上尝试了 pprof ......这是一个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
这就是为什么我在寻找别的东西。
编辑2:
由于似乎有人希望我的问题被关闭,我没有尝试突然使用gprof
:https ://groups.google.com/d/msg/golang-nuts/1xESoT5Xcd0/bpMvxQeJguMJ