當前位置: 華文星空 > 知識

CPU可以動態關閉分支預測以降低功耗嗎?

2020-05-25知識

先說結論,可以是可以,關分支預測會損失>95%的效能,然後頂破天節約不到20%的功耗,這種虧斷腿的買賣,誰做誰傻。

關掉分支預測損失的效能主要取決於兩個因子,一個是分支指令密度,一個是分支resolve的平均時間。

分支指令的密度,在real silicon上就能測到,在SPECint06 - 17上,用新版本的編譯器,大概每隔4.6 - 5.2條指令就有一個分支,其中包括call和direct jump這種非條件分支,但並不影響主要結論。

分支resolve的平均時間,決定了你如果不做分支預測,平均要花多長時間等分支出結果,這個精確統計只能在模擬器上做,real silicon上可以粗略估計,對於Skylake跑SPECint,大概20-30個cycle(因為load-dependent branch的存在,導致這個數碼會長於流水線長度)。

也就是說你每發射5條指令,都要等待20-30個cycle,也就是說你關掉分支預測之後,效能會斷崖式下跌到開啟分支預測狀態的3% - 5%。

然後功耗收益呢,這個是可以透過寫microbenchmark大致估計的,這個我和隔壁組的同學正在做,手上還沒有準確的數據,根據目前的進展估計的話,哪怕關掉整個front-end,功耗收益可能也就不到20%的樣子。