计算机系统结构总结_Scoreboard and Tomasulo
Textbook:
《計算機組成與設(shè)計——硬件/軟件接口》 HI
《計算機體系結(jié)構(gòu)——量化研究方法》 QR
超標量
前面講過超標量的概念。超標量的目的就是實現(xiàn)指令級并行(Instruction Level Parallelism),來解決stall太多的問題。
超標量(Super Scalar) 將一條指令分成若干個周期處理以達到多條指令重疊處理,從而提高cpu部件利用率的技術(shù)叫做標量流水技術(shù)。超級標量是指cpu內(nèi)一般能有多條流水線,借助硬件資源重復(fù)(例如有兩套譯碼器和ALU等)來實現(xiàn)空間的并行操作。在單流水線結(jié)構(gòu)中,指令雖然能夠重疊執(zhí)行,但仍然是順序的,每個周期只能發(fā)射(issue)或退休(retire)一條指令。
超級標量結(jié)構(gòu)的cpu支持指令級并行,一個周期可以發(fā)射多條指令(2-4條居多,也叫做多發(fā)射[multiple issue])。這樣可以使得cpu的IPC(Instruction Per Clock)>1 (也就是CPI<1咯),從而提高cpu處理速度。超級標量機能同時對若干條指令進行譯碼,將可以并行執(zhí)行的指令送往不同的執(zhí)行部件(也就是說執(zhí)行過程可以是亂序的)。我們熟知的pentium系列(可能是p-II開始),還有SUNSPARC系列的較高級型號,以及MIPS若干型號等都采用了超級標量技術(shù)。
實現(xiàn)多發(fā)射處理器也有兩種方式,其區(qū)別是將主要工作分給編譯器來做還是硬件來做。由千不同的實現(xiàn)方式將導致某些決策是靜態(tài)進行的(在編譯時)還是動態(tài)進行的(在執(zhí)行時),所以這兩種方式有時也被稱為靜態(tài)多發(fā)射( s tatic mul ti pl e issue) 和動態(tài)多發(fā)射(dynamicmultiple issue) 。
理想情況下我們希望能有這么一個pipeline:
其中IF ID肯定只能是順序執(zhí)行(in order)的。MEM WB這部分也要順序執(zhí)行,畢竟指令的完成順序不能亂嘛。
但是中間功能單元執(zhí)行的環(huán)節(jié)其實可以亂序執(zhí)行(out of order execution)。假設(shè)依次有指令A(yù)、B、C。A和B存在依賴,而C和前面的都沒有依賴。因為A和B的依賴關(guān)系會導致流水線停頓,進而導致C也不能執(zhí)行。如果指令可以亂序執(zhí)行,就可以先執(zhí)行C(指令在所需數(shù)據(jù)可用時立即開始執(zhí)行),提高效率。
scoreboard system
scoreboard是一種古老的方法了...但其實現(xiàn)在在GPU的thread scheduling中仍然在用
......
Tomasulo Algorithm
這是目前的CPU中在廣泛使用的方法。 QR P143
Tomasulo的核心思想是通過寄存器重命名來消除冒險,寄存器重命名功能由保留站(Reservation Station)提供。每個功能單元會有一個保留站。
每個保留站保存一條已經(jīng)被發(fā)射,正在等待功能單元(EX)執(zhí)行的指令。如果該指令的操作數(shù)值已經(jīng)被算出了,也放到保留站里,否則保留站先記錄這些操作數(shù)值對應(yīng)的保留站名稱。
保留站在一個操作數(shù)可用時馬上緩沖一份,這樣就可以為等待發(fā)射的指令緩沖操作數(shù)。
待執(zhí)行的指令也會指定某個保留站作為自己的輸入,并在發(fā)射指令是將寄存器更名為對應(yīng)的保留站的名字,而不再依賴寄存器了。
在對寄存器進行連續(xù)寫入時,只會用最后一個操作(也就是最終的值)來更新寄存器。
保留站的數(shù)量多于寄存器
一個使用了Tomasulo算法的浮點計算單元的結(jié)構(gòu)如下:
保留站相當于“虛擬寄存器”,來make copies of data。用于解決亂序執(zhí)行時,不同指令公用同一個寄存器帶來的冒險。解決Write After Write和Write After Read的依賴。
Common Data Bus能夠?qū)?shù)據(jù)同時Forward到多個位置,同時需要數(shù)據(jù)的保留站也能及時從Common Data Bus上得到自己需要的數(shù)據(jù)。解決Read After Write的依賴。
每個保留站會記錄以下字段:
Op:要執(zhí)行的運算
Qj, Qk:對于還沒生成的源操作數(shù),這里記錄將生成源操作數(shù)的保留站號。
Vj, Vk:對于已經(jīng)available的源操作數(shù),這里記錄源操作數(shù)的值。
A:記錄load/store指令所需的地址
Busy:表示該保留站在用
另外在每個寄存器中,也要加一個字段來記錄 哪個保留站中的指令要修改當前寄存器。
之前提到過有三種數(shù)據(jù)冒險,我們來分別看看它們是如何被消除的:
1. Read after Write PPT P5-7
假設(shè)有這樣的指令:
1: R2:=R0*R4 2: R3:=R0+R2 3: R0:=R1*R2
...
2. Write after Read(比如 r4=r1+r0 和 r0=r3+4) PPT P7-10
假設(shè)有這樣的指令:
1: R3:=R0*R4 2: R4:=R3+R1 3: R1:=R0+R2
...
3. Write after Write(2個指令write the same register) PPT P11-15
假設(shè)有這樣的指令:
1: R3:=R0*R4 2: R1:=R3+R1 3: R3:=R0+R2 4: R0:=R3*R2
...
Memory System Dependency
[PPT P15]
Tomasulo解決了寄存器中的依賴問題,但有些奇怪的指令(比如Load/Store)還可能造成內(nèi)存的依賴,比如對同一個內(nèi)存地址的RAW / WAR / WAW。這種用Tomasulo就搞不定了。因為有些情況下雖然內(nèi)存地址不同,但實際上落到了同一個block(前面講過),還是不能同時access。這種用Tomasulo就搞不定了。我們可以定義兩個人工規(guī)則:
Load:Proceed only when no prior instruction store to the sameaddress
Store:Proceed only when no prior instruction load/store to thesame location
但是在load/store中也會設(shè)計地址的計算(也就是前面的ALU指令了)。因此我們把這個規(guī)則套用到tomasulo里面:
如圖,Addr Unit負責計算地址,送入Store buffer和Load buffer。
以一個RAW的例子為例:
i1: R1 := load 0(R0) //write R1 i2: 0(R1) := store R2 //Read R1 when calculating address 0[R1]
...
...
總結(jié)
以上是生活随笔為你收集整理的计算机系统结构总结_Scoreboard and Tomasulo的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WLYX官方团队の规则
- 下一篇: ABAP基础篇2 数据类型