为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕沐林林 2021-05-14 18:13:16
我敢肯定,每个人都知道golang知道,博客文章在这里。再读一遍,我想知道是否使用gccgo代替代替go build会增加速度。在我的典型用例(科学计算)中,gccgo-生成的二进制总是比go build-生成的二进制更快。因此,只需获取以下文件:havlak6.go并对其进行编译:go build havlak6.go -O havlak6_gogccgo -o havlak6_gccgo -march=native -Ofast havlak6.go惊喜 !$/usr/bin/time ./havlak6_go5.45user 0.06system 0:05.54elapsed 99%CPU$/usr/bin/time ./havlak6_gccgo11.38user 0.16system 0:11.74elapsed 98%CPU我很好奇,想知道为什么“优化”的编译器的确会产生较慢的代码。我试图gprof在gccgo生成的二进制文件上使用:gccgo -pg -march=native -Ofast havlak6.go./a.outgprof a.out gmon.out没有运气:Flat profile:Each sample counts as 0.01 seconds. no time accumulated如您所见,该代码尚未实际分析。当然,我读过这篇文章,但是如您所见,该程序需要10秒钟以上的时间才能执行...样本数量应> 1000。我也尝试过:rm a.out gmon.outLDFLAGS='-g -pg' gccgo -g -pg -march=native -Ofast havlak6.go./a.outgprof也没有成功。你知道怎么了吗 您是否有一个想法,为什么gccgo它的所有优化例程都无法比gc在这种情况下更快?go版本:1.0.2 gcc版本:4.7.2
查看完整描述

1 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

在Valgrind下运行gccgo生成的二进制文件似乎表明它gccgo的内存分配器效率低下。这可能是gccgo4.7.2慢于go1.0.2的原因之一。无法在Valgrind下运行go 1.0.2生成的二进制文件,因此在这种情况下很难确定内存分配是否是gccgo的主要性能问题。


查看完整回答
反对 回复 2021-05-31
  • 1 回答
  • 0 关注
  • 270 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信