引用:
作者murodoch
我所說的並不是分支預測的錯誤率 而是在通過鎖存器往流水綫當中打入任務和數據的時候所發生的錯誤。在目前的技術條件下,流水綫的增加必將導致錯誤率的上升。而目前無論是intel和AMD都採用很愚蠢的辦法 那就是從頭再來。因此。流水綫的增加又必將導致再重新填充任務的時候浪費更多的時脈。這就是intel的執行效率很低的原因所在。如果intel可以將因爲重新填充任務和數據所帶來的時脈的浪費挽救回來的話。性能必將有極大的提升。
對於分支預測,我想現在intel和AMD沒有多大的差別。因爲如果分支預測發生錯誤而導致無法在L2當中找到需要的指令或者數據的話就需要到内存當中去尋找指令或者數據。這個問題無論是在intel還是AMD當中都是實實在在存在著的。雖然這個過程必將浪費很多時脈,但這並不是intel性能平平而功耗驚人的主要原因所在。 不過目前無論是intel還是AMD 在...
|
老實講還是有一些錯誤:
1) "流水綫的增加必將導致錯誤率的上升",是 pipeline stage 增加吧!!! pipeline 增加觀念差很多!!!
2) 目前分支預測錯誤都是得清除重來!!! 因為 pipeline 的設計,到後面的 stage 才能知道真正的分支方向(因為要參考的 flag 通常是在前幾個指令運算,就是 data dependency 的關係,而前幾個指令也還在 pipeline 裡,還要等過了算術的 stage,才輪到 flag,你看有多後面),所以只能在前頭先猜啦!!! 到後面已經來不及啦!!!
除非採用像 sun niagara 的 multi-thread 設計,遇到分支就換一個 thread,但是 niagara 最後還是得面臨用到分支預測啊!!! 猜錯還是要清空錯誤的指令。
3) 分支預測錯誤與到 L2 cache 與 memory 存取資料或指令是兩回事。那叫快取失誤,那是要提高快取命中率才行的,或是使用 multi-thread 的技術。