計算流水線
下面的圖就可以知道流水線的思維了,I1 ,I2 ,I3 為需要經過ABC 組合邏輯的信號,可以看到當I1 到了 B 時,I2 已經到了A 了,
同理 I3也一樣,流水線的思維提高了工作效率.
這里說一下吞吐量 , 延遲 , 時間周期的計算,下圖為例,可以看到, 假如我們的時間周期為 70ps. 那么下面一個信號走完就需要 6*70 = 420ps , 那么 420ps 就是延遲, 吞吐量就是單位時間內可以處理的信號量,可以知道用一除以70乘以一個時間單位得到 14.29 GIPS .即是時間周期的倒數.
流水線的局限性
- 不一致的划分
我們可以看到以B 為周期(以為B里的延遲最大,思考一下要是選AC會是怎么樣的),那么AC中會有空閑的地方.
- 流水線過深,收益反而下降
流水線的改進
電路重定時( circuit retiming )
將計算PC的部分移到時序的開頭.具體的查看下面的鏈接
分支預測
當出現分支的時候, 猜測分支的方向並根據猜測的方向進行預測.
流水線冒險
一個准備寫入的時候,一個提前先拿了出來就會造成數據錯誤,解決這個問題可以通過以下的方式
- 用暫停來比避免數據冒險(stalling)
但是這樣會暫停三個周期,嚴重影響了性能.
- 用轉發來避免數據冒險
還是上圖的那種情況,一個寫入,一個讀取,讀取的時候發現這個值需要被其他操作寫入,那么讀取的操作直接就拿寫入的值就夠了,不再等其他操作寫入后,我再讀取了(仔細想想,類型於並發中的可視性啊!!)
- 加載/使用數據冒險
下面為暫停+轉發的方式來解決加載/使用冒險