1989年推出的i486處理器引入了五級流水線。這時,在CPU中不再僅運行一條指令,每一級流水線在同一時刻都運行著不同的指令。這個設計使得i486比同頻率的386處理器性能提升了不止一倍。五級流水線中的取指階段將指令從指令緩存中取出(i486中的指令緩存為8KB);第二級為譯碼階段,將取出的指令翻譯為具體的功能操作;第三級為轉址階段,用來將內存地址和偏移進行轉換;第四級為執(zhí)行階段,指令在該階段真正執(zhí)行運算;第五級為退出階段,運算的結果被寫回寄存器或者內存。由于處理器同時運行了多條指令,大大提升了程序運行的性能。
處理器一般由如下功能單元組成:
取指單元
譯碼單元
執(zhí)行單元
Load/store單元(load用于從內存中取數據,而STORE用于存數據到內存)
例外/中斷單元
電源管理單元
流水線通常由取指、譯碼、執(zhí)行及Load/Store等單元組成。各單元按圖所示的幾個步驟循環(huán)重復自身工作。
流水線的含義:
與工廠生產線類似,將一件工作分成若干個固定的工序進行。
cpu流水線技術是一種將指令分解為多步,并讓不同指令的各步操作重疊,從而實現幾條指令并行處理,以加速程序運行過程的技術。指令的每步有各自獨立的電路來處理,每完成一步,就進到下一步,而前一步則處理后續(xù)指令。(原理和生產流水線一樣)
CPU指令流水線
根據之前描述的基礎,指令進入流水線,通過流水線處理,從流水線出來的過程,對于我們程序員來說,是比較直觀的。
I486擁有五級流水線。分別是:取指(Fetch),譯碼(D1, main decode),轉址(D2, translate),執(zhí)行(EX, execute),寫回(WB)。某個指令可以在流水線的任何一級。
但是這樣的流水線有一個明顯的缺陷。對于下面的指令代碼,它們的功能是將兩個變量的內容進行交換。
1 XOR a, b
2 XOR b, a
3 XOR a, b
從8086直到386處理器都沒有流水線。處理器一次只能執(zhí)行一條指令。再這樣的架構下,上面的代碼執(zhí)行并不會存在問題。
但是i486處理器是首個擁有流水線的x86處理器,它執(zhí)行上面的代碼會發(fā)生什么呢?當你一下去觀察很多指令在流水線中運行,你會覺得混亂,所以你需要回頭參考上面的圖。
1、第一步是第一條指令進入取指階段;
2、然后在第二步第一條指令進入譯碼階段,同時第二條指令進入取指階段;
3、第三步第一條指令進入轉址階段,第二條指令進入譯碼階段,第三條指令進入取指階段。
4、但是在第四步會出現問題,第一條指令會進入執(zhí)行階段,而其他指令卻不能繼續(xù)向前移動。
5、第二條xor指令需要第一條xor指令計算的結果a,但是直到第一條指令執(zhí)行完成才會寫回。
所以流水線的其他指令就會在當前流水級等待直到第一條指令的執(zhí)行和寫回階段完成。第二條指令會等待第一條指令完成才能進入流水線下一級,同樣第三條指令也要等待第二條指令完成。
這個現象被稱為流水線阻塞或者流水線氣泡。
常用概念:
1、流水線級數:流水線的節(jié)拍數。
2、吞吐率:單位時間內流水線能處理的任務數量。
3、最大吞吐率:流水線達到不間斷流水的穩(wěn)定狀態(tài)后可獲得的吞吐率。
4、加速比:流水方式的工作速度與等效的順序工作方式時間的比值。
流水線指標:
1、流水技術無助于減少單個任務的處理延遲(latency),但有助于提高整體工作負載的吞吐率
2、多個不同任務同時操作, 使用不同資源
3、潛在加速比= 流水線級數
4、流水線的速率受限于最慢的流水段
5、流水段的執(zhí)行時間如果不均衡,那么加速比就會降低
6、開始填充流水線的時間和最后排放流水線的時間降低加速比
低功耗嵌入式領域的ARM7就是采用3級流水線結構。
評論
查看更多