我相信每个认识golang的人都知道博客帖子在这里。
再读一遍,我想知道使用gccgo而不是go build是否会提高速度。在我的典型用例(科学计算)中,gccgo-generated二进制总是比go build-generated二进制更快。
因此,只需获取这个文件: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二进制文件.这是一个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所以我才在找别的东西。
EDIT2:
由于似乎有人想结束我的问题,我并没有突然使用gprof:https://groups.google.com/d/msg/golang-nuts/1xESoT5Xcd0/bpMvxQeJguMJ。
发布于 2013-02-25 22:54:02
在Val差尔下运行gccgo生成的二进制文件似乎表明gccgo的内存分配程序效率很低。这可能是gccgo 4.7.2比go 1.0.2慢的原因之一。在Val差伦下不可能运行go 1.0.2生成的二进制文件,因此很难确定内存分配在这种情况下是否是gccgo的主要性能问题。
发布于 2014-06-13 18:00:42
记住,go build也默认为静态链接,因此对于苹果到苹果的比较,您应该给gccgo -static或-static-libgo选项。
https://stackoverflow.com/questions/15073027
复制相似问题