go ``` cmd/compile: Fannkuch benchmark performance regression ```

j2cgzkjk  于 6个月前  发布在  Go
关注(0)|答案(5)|浏览(52)

请在提交问题之前回答以下问题。谢谢!

您使用的Go版本是什么( go version )?

go version go1.11rc1 darwin/amd64

这个问题在最新版本的发布中是否重现?

否。

您正在使用什么操作系统和处理器架构( go env )?

macOS 10.13.6 (darwin/amd64)

您做了什么?

测试了基准测试:
https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/fannkuchredux-go-1.html
使用1.10.3和1.11rc1进行:
time go run fannkuchredux.go 12
time go1.11rc1 run fannkuchredux.go 12
结果:
1.10.3: go run fannkuchredux.go 12 44.65s user 0.21s system 372% cpu 12.033 total
1.11rc1: go1.11rc1 run fannkuchredux.go 12 57.70s user 0.24s system 373% cpu 15.528 total

您期望看到什么?

1.11rc1的时间接近于1.10.3

您看到了什么?

1.11rc1的时间比1.10.3慢

myzjeezk

myzjeezk2#

禁用分支剪枝似乎将性能恢复到1.10级别。有趣的是,在测试/基准测试/go1/fannkuch中禁用CMOV会降低性能20%。

iyfjxgzm

iyfjxgzm3#

可能与未解决的Fannkuch11性能回归有关的问题,从Go1.8升级到Go1.9的时间:#18977
参考:Fannkuch11的性能在很大程度上取决于BCE:#24660

mznpcxlj

mznpcxlj4#

我已经查看了指令级配置文件,并发现所有条件移动都超出了热点。主要问题是启用分支消除传递导致不同的寄存器分配,这反过来将寄存器溢出/填充放入内部循环中。

h22fl7wq

h22fl7wq5#

将价格下调至1.13,1.12已经太晚了,无法实现任何重大目标。

相关问题