首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在这种情况下gccgo比gc慢?

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

Stack Overflow用户
提问于 2013-02-25 17:41:17
回答 2查看 2.2K关注 0票数 6

我相信每个认识golang的人都知道博客帖子在这里。

再读一遍,我想知道使用gccgo而不是go build是否会提高速度。在我的典型用例(科学计算)中,gccgo-generated二进制总是比go build-generated二进制更快。

因此,只需获取这个文件:havlak6.go并编译它:

代码语言:javascript
复制
go build havlak6.go -O havlak6_go
gccgo -o havlak6_gccgo -march=native -Ofast havlak6.go

惊喜!

代码语言:javascript
复制
$/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

代码语言:javascript
复制
gccgo -pg -march=native -Ofast havlak6.go
./a.out
gprof a.out gmon.out

运气不好:

代码语言:javascript
复制
Flat profile:

Each sample counts as 0.01 seconds.
 no time accumulated

正如您所看到的,代码实际上还没有被分析过。

当然,我读过,但正如您所看到的,程序执行10+需要几秒钟.样品数量应>1000个。

我也试过:

代码语言:javascript
复制
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

代码语言:javascript
复制
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:

由于似乎有人想结束我的问题,我并没有突然使用gprofhttps://groups.google.com/d/msg/golang-nuts/1xESoT5Xcd0/bpMvxQeJguMJ

EN

回答 2

Stack Overflow用户

发布于 2013-02-25 22:54:02

在Val差尔下运行gccgo生成的二进制文件似乎表明gccgo的内存分配程序效率很低。这可能是gccgo 4.7.2比go 1.0.2慢的原因之一。在Val差伦下不可能运行go 1.0.2生成的二进制文件,因此很难确定内存分配在这种情况下是否是gccgo的主要性能问题。

票数 2
EN

Stack Overflow用户

发布于 2014-06-13 18:00:42

记住,go build也默认为静态链接,因此对于苹果到苹果的比较,您应该给gccgo -static-static-libgo选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15073027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档