流水線,這個詞語最早出於工廠裡面,是資本家為了提高產品的產量而採用的一種技術。我們姑且不去看他的定義,我們從生活中的例子理解什麼是流水線技術
。假如我們有很多衣服要洗,現在有一台洗衣機和一台乾衣機,洗衣機用時30分鐘,乾衣機用時60分鐘。如果洗一桶衣服,如下圖所示:
很顯然,總時間 = 洗衣時間 + 乾衣時間 = 90 分鐘
那如果洗多桶衣服呢?我們對比如下兩種方案。
方案一:
很明顯,這種方案的總時間為:n*90 分鐘。
當然,我們也沒那麼傻,當乾衣機在工作的時候我們為什麼要讓洗衣機閒著呢?根據這樣的想法,我們得到方案二:
可以很容易得到,方案二所需總時間 = n* 乾衣時間 + 洗衣時間= ( n*60 + 30 )分鐘。
通過上面兩個例子的對比,我們可以清楚發現方案二的好處,明顯提公升了系統的吞吐量
,而這種提公升的背後正是流水線技術
的應用。那麼在我們的數位電路中如何應用流水線技術呢?在繼續這個問題之前,我們先了解兩個概念:延時
和吞吐量。延時
方案一洗衣服的延時
= 90分鐘
方案二洗衣服的延時=120分鐘(為什麼是120分鐘,請讀者仔細思考)
吞吐量:輸出或者輸入的處理速率。
方案一洗衣服的吞吐量= 1/(90分鐘)
方案二洗衣服的吞吐量=1/(60分鐘)(為什麼是60分鐘,請讀者仔細思考)
好,言歸正傳,再返回到電路上。如下圖所示的組合邏輯電路:
電路的延時為t,吞吐量為1/t。工作時序如下圖示意:
對於上面的電路,當h執行計算的時候,f和g是處於閒置狀態的,僅僅為保證各自的輸出不變,那麼我們能否讓f、g走出這種狀態而充分利用他們呢?如果讓f和g走出了閒置狀態,那麼如何保證他們的輸出不變呢?思考後,我們很容易聯想到數電中的暫存器,沒錯,通過暫存器來保證輸出的不變,於是我們得到電路如下:
假定f、g、h的傳播延遲分別為15、20、25ns,我們使用的是理想的0延遲暫存器,於是我們可以得到相關的延時和吞吐量
未加暫存器: 延時45 , 吞吐量1/45 ,加了暫存器:延時50,吞吐量 1/25。在h對xi執行計算的過程中,f和g就可以工作在輸入xi+1上,即可以接受xi+1時候的輸入,這時h的計算和f、g的接收就是並行的了。對比前面的洗衣機例子,這裡正是乙個流水線的應用,而且是乙個二階流水線,至於為什麼是二階流水線,接著往下看。
下面我們再換個角度看看流水線,也就是流水線時空圖,如下:
在談這張圖之前,我們再看乙個概念:k階流水線。
k階段流水線(「k流水線」)是乙個非迴圈電路,對應於從輸入到輸出的每一條路徑恰好有k個暫存器。因此前面的電路為啥是2階應該清楚了。通時,我們還可以知道,1、組合邏輯電路是0階流水線;2、在k階段流水線中,每個流水線階段的輸出(而不是輸入)都有乙個暫存器。好,我們接著談上面的流水線時空圖。
通過流水線時空圖,我們觀察到,當流水線每個階段都開始工作後,每乙個時鐘週期都會有乙個結果的輸出,也就是說k階段流水線的吞吐量即是時鐘頻率,而k階流水線的延時是對所有暫存器公用的時鐘週期的k倍。
同時我們也可以觀察到,所有的流水級都只花費乙個時鐘週期的時間,因此,時鐘週期必須能夠滿足最慢操作的執行需要。
因此我們可以得出
指令執行時間(流水線)=指令執行時間(非流水線)/流水線級數
即在理想情況和有大量指令的情況下,流水線所帶來的加速比與流水線的級數近似相同。例如乙個5級流水線能夠獲得的加速比接近於5。
而這樣一種技術如果用到電腦裡面豈不能提高效能啦?沒錯,我們現在的電腦裡面跑的cpu
就用到了流水線技術,通過這樣的一種技術,提高了指令的吞吐率,從而帶來了效能的提高。注意:流水線所帶來的效能提高是通過增加指令的吞吐率,而不是減少單條指令的執行時間實現的。為什麼呢?這就好像洗衣服,幹衣服用的時間沒變,但是最終的產出卻是增加了的道理一樣。
文章出處:
ARM ARM流水線技術
處理器按照一系列步驟來執行每一條指令,典型的步驟如下 1 從儲存器讀取指令 fetch 2 解碼以鑑別它屬於哪一條指令 decode 3 從指令中提取指令的運算元 這些運算元往往存在於暫存器 reg 中 4 將運算元進行組合以得到結果或儲存器位址 alu 5 如果需要,則訪問儲存器以儲存資料 mem...
體系結構 五段流水線 流水線技術
目錄 一條經典的5段流水線 一條指令的執行過程分為以下5個週期 取指令週期 if 指令解碼 讀暫存器週期 id 執行 有效位址計算週期 ex 儲存器訪問 分支完成週期 mem 寫回週期 wb 體系結構 流水線 流水線相關 流水線衝突 以程式計數器 pc中的內容作為位址,從儲存器中取出指令並放入指令暫...
體系結構 五段流水線 流水線技術
以程式計數器pc中的內容作為位址,從儲存器中取出指令並放入指令暫存器ir 同時pc值加4 假設每條指令佔4個位元組 指向順序的下一條指令 對指令進行解碼,並用ir中的暫存器位址去訪問通用暫存器組,讀出所需的運算元 不同指令所進行的操作不同 暫存器 暫存器alu指令 alu按照操作碼指定的操作對從通用...