在这种情况下,为什么gccgo比gc慢?

我敢肯定,每个人都知道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


慕沐林林
浏览 271回答 1
1回答

慕雪6442864

在Valgrind下运行gccgo生成的二进制文件似乎表明它gccgo的内存分配器效率低下。这可能是gccgo4.7.2慢于go1.0.2的原因之一。无法在Valgrind下运行go 1.0.2生成的二进制文件,因此在这种情况下很难确定内存分配是否是gccgo的主要性能问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go