天天看點

7.1 流水線

7.1 流水線
7.1 流水線
7.1 流水線
7.1 流水線

這一塊的題解起來比較容易,産生一些容易讓考生混淆的一些東西.

準并行,并不是完全意義上的并行處理.那麼流水線它是如何提高速度的呢?是不是我一條指令要運作,隻要采用了流水線這一個技術,就能夠提高這一個指令的運作速度呢?答案是否定的.你用流水線來執行一條指令,和沒用流水線它的速度是一樣的.為什麼是一樣的呢?我們就要分析流水線是依仗什麼來節省時間,如何提高裝置的使用率,了解到了這一點我們以後的一些計算、一些概念的了解也就容易了.

執行一條指令需要經過取址->分析->執行三個步驟,正常情況下我們指令一條一條的來處理,

為了好計算,取址、分析、執行都是定為1毫秒.那麼三條指令執行下來就需要9毫秒,大家從這個圖就可以看出一點裝置的使用率非常的低.取址隻有在1、4、7毫秒的位置才使用,其他的位置時刻2、3毫秒、5、6、毫秒、8、9毫秒這些時候裝置都沒有利用上來,在空閑.

因為在執行一條指令的時候它隻有1/3的時間在取址,取址的這個裝置做完取址的工作以後它就空閑了,空閑了就等到下一條指令的時候才會要用到.是以這樣子中間就産生了很多裝置的空閑,産生了裝置的空閑那麼我們就要想辦法如何解決這個問題,那麼流水線就是解決這種問題非常好的一種方式.它對這個執行過程進行了壓縮和緊湊. 

這就是一個流水線執行的一個時空圖.它按這個裝置進行了細分.取址的裝置隻要完成了第一條指令的取址它就立即進入第二條指令的取址.第二條指令取址完畢之後馬上取第三條.

分析這一步也是一樣.一條執行完之後立即執行第二條,再執行第三條.是以我們就從這兩個圖可以直覺地看出實際上流水線執行這三條指令就已經占了很大的優勢.因為它在五毫秒的位置就能夠把三條指令全部執行完畢.但如果系統隻有一條指令,那情況是如何的呢?如果隻有一條指令,它要第三毫秒才能完成,和不利用流水線情況是一樣的,都是三毫秒完成.是以利用流水線它并不能夠提高單個指令它的運作速度,也不能夠說把取址由以前的1毫秒壓縮到0.5毫秒來完成.并不是這樣子的,而是它把中間空閑的裝置利用起來了,減少了空閑時間.是以它提高了速度而不是因為提高它的效率、不是提高執行速度、執行效率來提高速度.

了解了這一點,後面的問題也就好解決了.

7.1 流水線
7.1 流水線

主要有哪一些類别的流水線.如果說某一個運算過程、做某一件事情要用到流水線,它必須這一件事情分幾個階段完成.用的最多的就是指令流水線,也就是我們剛才示意圖的那種,就是指令它的執行要分成幾個步驟,這幾個步驟就成為了流水線的幾個階段,然後運算操作的時候也有可能應用到流水線的技術.因為運算的時候你比如說浮點運算,浮點運算它就要進行對階->尾數計算->結果格式化等等操作.這些操作都是分階段進行的,我們可以用流水線提高它的運算速度.

7.1 流水線

實質性的問題:如何求解流水線指令運作的時間.

比如說像這種情況,每一條指令的運作分三個步驟,它們分别是多少時間.然後我總共要執行多少條指令,執行這些指令用流水線技術完成需要多少時間,這是考題當中出現的最為頻繁的一類題.

7.1 流水線
7.1 流水線
7.1 流水線

從i=1到i=m,這是一條指令運作所要花費的時間,

7.1 流水線

表示第幾步要花費的時間.

比如說

7.1 流水線

就表示指令執行的第一個階段要花費多少時間,我們剛才所說的就是1毫秒.

7.1 流水線

指令運作的第二步,也就是對應剛才的這個分析這一步要用多少時間.然後就是執行要用多少時間.

7.1 流水線

7.1 流水線
7.1 流水線

都是1,把它們加起來這樣子就是公式的前一部分,就是1+1+1,後面這一部分有一個

7.1 流水線

,

7.1 流水線

是指的流水線當中也可以說是指令執行過程中最慢的一個步驟.

當然我們剛才舉的例子比較極端,t1、t2、t3它都是相等的,都是1.那麼1也就是最大值了.就是1+1+1+(n-1)*1.這樣子就能夠計算出總運作所要花費的時間.

具體的例題:

7.1 流水線

就是指的這幾個部分當中最耗時間的一部分.2、2、1,是以最耗時間的是2納秒.

7.1 流水線

再來一道軟考當中出現過的題:

7.1 流水線

操作周期其實就是

7.1 流水線

,也就是各個步驟當中運作的最慢的一段就作為流水線的操作周期.完成第一條指令其實很容易計算,就是60+100+50+70得到,結果加出來的數值應該是280.完成這段程式需要多少納秒?用280+(20-1)*100=2180.很多人都求出這個數,但是問題是答案中沒有這個數可選.是以有人質疑,流水線的計算到底它前面的一部分,前面的幾條指令,第一條指令它的執行是每個周期都按最大的值執行,還是按這個每一步原有的這個值來執行.

實際上正确的答案應該是這種形式.把流水線每一步包括第一條指令的執行都統一周期為100納秒,這種做法是不合理的.為什麼不合理呢?

再來看一個曆年試題:

7.1 流水線

這種題出現比較多,而且我們平時畫這個流水線的一個時空圖的時候,也會給人一種錯覺.我們平常畫流水線的時空圖是這樣畫的,

7.1 流水線

就包括第一條指令,它的每一個周期都是一個恒定的值.但是這種畫法是不科學的.我們可以再細化來分析這一個流水線的一個執行圖,

7.1 流水線

這一段是5納秒,由于取址需要5納秒,就是2号指令進行取址所用到的時間.但是分析隻需要2納秒,如果說這一段有5納秒,那麼這個執行過程就有技巧性可言了,就是說我這個2納秒是在前一部分執行呢還是在後一部分執行.如果說這一個分析這一個步驟是在取址之後立馬就執行的話它隻需要2納秒也就是總共時間運作到7納秒的時候就完成了分析這一個動作,就可以進入第三部分的執行了.這樣子一執行下來,我們就發現第一條指令實際上在12納秒的時候就已經執行完了,而不必等到15納秒.我為什麼提出來這個分析時間可以在取址之後馬上就執行呢?我們結合一個作業系統當中講過的一個内容來看待,就是前趨圖.這一個圖就是流水線執行的一個前趨圖,這個圖中就把它們之間的一個邏輯一個關系執行的順序的關系寫的非常的清楚了.第一條指令的取址完成之後這兩條線就去掉了,就是I1->I2和I1->C1執行的因素就去除了,就表明I2和C1可以開始運作了.而當C1運作完之後,C1->C2和C1->P1的條件也去除了.但是這裡還有一個因素,C2不但是要C1完成,還要I2完成才能夠執行C2.

是以從這個流水線的圖我們也可以看出,雖然分析這一步分析完了I1,分析完了第一條指令,但是這一部分還是處于一個空閑的狀态,沒有分析I2.而等到I2的取址取完了之後,才執行C2的.是以用這一個前趨圖分析這一個過程就可以比我們光看這一個流水線的示意圖要清楚一些.它們之間的關系會明了一些.是以說正規的計算方式應該就是我們開始公式所指出來的,就是用1條指令它的執行時間加上(n-1)*周期時間

7.1 流水線

.如果說我們考試遇到了這種類型的題,應該要如何處理呢?然後如果遇到這種問題,我們清楚2180才是正确的.這一點沒錯但是為了得分,因為我們這裡面沒有2180,我們得考慮第二種方案:就是每一個周期都相等的,每一個周期都相等的我們再來計算一次.就是第一條指令變成了4個周期都是100,是以100*4+(20-1)*100=2300.而第一條指令的執行時間為400納秒.

這樣子來靈活處理,首先按正常方式計算,計算得不到答案我們就用等周期的進行計算,答案之中不可能會兩種都出現.

7.1 流水線

下面我們來看流水線相關的第二個計算:流水線的吞吐率.

流水線的所有的計算其實都是基于我們剛才講的流水線運作時間的一個概念來進行擴充的,這個吞吐率就是這樣子的.

Tk也就是我們剛才所計算出來的運作n條指令所要花費的時間.n是所運作的指令的條數.

7.1 流水線

流水線的吞吐率是怎麼來計算的?比如這一個題我們計算出總時間為203納秒,而指令條數為100,用100除以203得到的就是吞吐率TP.這個計算很容易.

7.1 流水線

再看一個吞吐率的考試的考題.

不清楚的是執行這10條指令所要花費的時間. 我們就可以先計算出總時間來,總時間套公式就可以了.1條指令所要花費的時間再加上(n-1)*周期,這裡面周期是3

7.1 流水線

,3

7.1 流水線

是執行時間最長的.

7.1 流水線

下面我們再來看流水線的加速比.

7.1 流水線

 這些概念是相當重要的.如果說告訴你這個加速比的概念,在考場上要你求加速比,肯定很容易就求出來了.因為不使用流水線和使用流水線所用的時間都很容易求.但是一旦你如果說這個加速比的概念都不清楚,那麼解題就困難了.是以大家在平常應該多注意一些這種概念、這種公式,把這些東西記下來,然後再記一些基本的運算.這方面的題也就不成問題了.

不用流水線所用的時間是

7.1 流水線

,使用流水線所用的時間為

7.1 流水線

,用

7.1 流水線

7.1 流水線

就得到了加速比.我們可以以這一個試題為例,這裡我們已經求出了利用流水線它所要消耗的時間,不利用流水線執行10條指令所要花費的時間更好計算,就用(

7.1 流水線

+3

7.1 流水線

+

7.1 流水線

+2

7.1 流水線
7.1 流水線

)*10就可以了.它們相加之後是8

7.1 流水線

,也就是說執行單條的指令需要8

7.1 流水線

的時間,是以執行10條的指令不用流水線就要80

7.1 流水線

.我們用80

7.1 流水線

除以35

7.1 流水線

就得到了加速比.也就是順序執行的時間除以35

7.1 流水線

也就是流水線執行時間.這樣子我們就得到了加速比.加速比的公式就是這個公式.

7.1 流水線

再看一個例題.

唯一的一點不同就是沒有告訴你指令的條數.但是這個不要緊,我們可以用n代表指定的條數.把這五段時間加起來乘以n得到的就是不使用流水線所要花費的時間,而用底下這種方式就是一條指令執行所消耗的時間加上(n-1)乘以流水線周期得到的就是使用流水線所要花費的時間,然後一比就得到了結果.就是4n/4+n-1.然後最大加速比我們可以用一個極限的公式把它求出來,就是當這個指令的數量趨向于無窮大的時候這個n:指令的數量趨向于無窮大的時候,這個加速比為4,也就是說它可能産生的最大加速比就是4.

7.1 流水線

最後一點來講一講流水線的效率.

繼續閱讀