简单理解Tomasulo算法与重加载缓冲区
參考書:《計算機體系結構量化研究方法》 作者:John L. Hennessy
流水線運行的一個主要限制是:它們使用循序指令發射與執行的方式。把指令執行的流水線簡單比喻為洗衣服:
采用循序發射與執行方式的限制,意思就是,衣服只能一件一件洗,洗完一件才能洗下一件。如果現在洗衣機壞掉了(硬件故障),或者衣服還沒臟(操作數不可用),這個流水線就停頓了,哪怕后面還有指令等待執行。但是我們希望操作數可用的時候就立即執行指令(有臟衣服就洗),這樣的流水線實際上是亂序執行的,意味著它將會亂序完成。這就是動態調度的主要思想。
一、Tomasulo算法
我們的目的是讓操作數可用的時候立即開始執行。于是我們增加了一個“管家”,如圖所示:
Tomasulo算法大概是這樣的:
這家主人說我要洗衣服,告訴了管家,這個步驟叫做指令發射。之前不同的是,這個指令由管家保存,并把相應的操作和衣服放在了新木桶中,這個木桶就是算法中的保留站。這個木桶很大,可以存放多條指令。不像之前,必須一條一條指令循序執行。不過有一點要注意,在Tomasulo算法中,指令仍然是循序發射的。主人1,主人2跟管家說我要洗衣服,這個過程是一個一個來的。
但是動態調度是如何實現的呢?
現在新木桶很大,現在里邊可以存放多條指令和衣服。但是現在管家發現了,雖然主人1說要洗一件衣服,但是衣服還沒來,或者是這件衣服還在洗衣機中洗。那么管家就會在木桶中給主人1留一個位置。因為衣服還沒來,沒辦法洗。這時候管家就會為主人2先洗衣服,同時監視晾衣架上主人1的衣服有沒有洗好。一旦發現晾衣架上主人1的衣服準備好了,那么就立即開始為主人1洗衣服。這就實現了:
- 操作數可用時立即執行程序
- 指令的循序發射以及亂序執行
Tomasulo算法的真實結構圖如下所示:
下面講一下算法的細節問題:
看以下下面這串代碼:
雖然代碼不大,但出現的數據冒險很多,共有5個:
把這個算法寫到保留站時,保留站應該如何處理呢?
寄存器重命名!
保留站會把這個代碼改寫一丟丟,對寄存器進行重命名,使其不在沖突。改寫后的代碼如下:
S,T為重命名的寄存器名稱,這樣就去除了所有的讀后寫WAR冒險和寫后寫WAW冒險。但是如果細心點會發現,改寫后的代碼中還存在寫后讀冒險。應該如何解決呢?因為剛才也介紹到,保留站只會在操作數可用的時候才會執行程序。如果正在寫源寄存器,那么保留站將會先執行其他執行,等待源寄存器寫好,再執行此條指令,這樣就解決了所有的寫后讀RAW冒險??偨Y來說:
- 操作數可用時執行程序,解決了寫后讀RAW冒險
- 寄存器重命名解決了寫后寫WAW,以及讀后寫WAR冒險
另外,在寫結果時,先將計算結果寫到CDB(公共數據總線)中。然后CDB上進行廣播,看這個計算結果有沒有作為是其他指令源操作數的。如果保留站發現有,就會更新保留站源操作數的值。這樣就代替了流水線寄存器。
二、推測
什么是推測呢?舉個例子,現在這家主人說,我要洗衣服,我洗完這件還得洗,不過洗的衣服不確定,要么洗衣服A,要么洗衣服B,或者還有更多的選項。因為管家是提前處理指令的。所以現在他不知道要洗衣服A還是B。就沒辦發提前處理了。所以現在有兩種選擇:
1)等待,直到執行完分支指令,計算出分支地址之后,確定了要洗衣服A還是洗衣服B的時候再開始洗。這種就是無推測的執行方法,但是會產生不小的流水線停頓。
2)猜。洗衣服要么是A要么是B(如果只有兩分支的話),我猜要洗衣服A,就開始先洗了。這樣的提前處理,如果分支猜對了,就節省了很多的時鐘周期。但有個問題猜錯了話,咋辦?
猜錯了的話,首先,你得把衣服B還給人家吧。這種方式就是保持異常行為的一種。意思是:你現在程序執行錯誤,你必須要回到原來的狀態,以重新執行正確的程序。但是怎么正確的處理預測錯誤導致的異常呢?這里增加了一個概念叫:重排序緩沖區(ROB)。它的主要思想是:
- 允許指令亂序執行,但必須循序提交
我們Tomasulo算法中實現重排序緩沖區,其思想就變成了
- 指令循序發射,亂序執行,循序提交
用洗衣服的方式來比喻的話,大概是這樣的(未展示發射邏輯):
現在又增加了一個管家2,管家2干啥呢?他負責整理并保存已經洗好的衣服,按照他發射的順序進行排序?,F在程序可能會出現,已經執行完畢,但是還沒有把結果寫回的情況。因為指令提交就必須循序完成,哪怕你已經執行完畢了,也得在重排序緩沖區中等待循序提交。
重加載緩沖區的實際邏輯如下:
現在對于推測錯誤就很好處理了,因為哪怕已經執行了分支之后的命令,由于之前的指令還沒有執行完畢,分支之后的指令就無法提交,所以很容易的就程序計數器改為正確的分支地址,而不影響其他指令結果。
實際上,預測錯誤的概率還是相對較低的,在Intel Core i7的分支預測器中錯誤預測率平均在5%以下。
總結
以上是生活随笔為你收集整理的简单理解Tomasulo算法与重加载缓冲区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 暗黑2 7+是什么 《暗黑破坏神
- 下一篇: 指令级并行--计算机体系结构