體系結構筆記 流水線衝突處理

2022-09-07 09:51:12 字數 2676 閱讀 1246

資料衝突

控制衝突

由於硬體資源有限導致的,多個指令執行階段對同一硬體提出訪問請求,導致的衝突。

比如在執行時同時有兩個指令對資源提出訪問請求,乙個指令在取指階段提出取指令的請求訪問記憶體,乙個指令在運算階段提出對資料的訪存,這時會產生訪存衝突,這時可以暫停乙個週期,等待上一條指令的訪存結束,之後進行下一條指令的執行,進行取指操作,這樣去除了結構相關,但是對應暫停的那一週期內無指令完成執行。

同樣,對於上面情況中,有同時對記憶體的訪問來獲取資料和指令,我們可以將資料與指令進行分開儲存,設定相互獨立的指令儲存器與資料儲存器。推廣一下就是對於其他的硬體資源都可以通過設定多個備用的硬體資源來防止結構衝突,但是這樣會導致成本的提公升。

如果出現指令的執行依賴於上一條指令的結果的情況,就暫停指令的執行,直到上一條指令的寫回週期結束,再繼續執行當前指令的讀資料操作,也就是第二階段,這一階段一共浪費了三個時間週期。

這樣的效率就大大降低了。

在某條指令產生計算結果之前,其他指令並不真正立即需要該計算結果,如果能夠將該計算結果從其產生的地方直接送到其他指令需要它的地方,那麼就可以避免停頓。如圖:

在具體運算的時候,操作的資料**不是全來自於在第二階段取出的資料,有一部分的資料**於其他流水段直接傳過來的,在實際的流水線中,每乙個流水段之間都有暫存器儲存上一段執行產生的資料,即圖中的灰色的矩形框。

如上圖所示,在對reg的訪問中有的是前半段為虛線有的是後半段為虛線,由於對暫存器的訪問時間很短,所以可以分為前半週期和後半週期分開訪問。

定向技術並不能解決所有的資料衝突,有的時候,上一條指令還沒有執行完,下一條指令就需要其結果來進行資料運算,這時定向無法解決,資料根本就沒有產生,定向也無法獲取,這時就需要流水線暫停之後指令的執行來等待上一條資料的執行結果。

互鎖機制是乙個功能部件,首先這一部件檢測資料衝突,發現後將流水線暫停,等待資料的產生,直至衝突消失,停頓從等待相關資料的指令開始,到相應指令產生資料為止。

讓編譯器重新組織指令順序來消除衝突,這種技術稱為指令排程或流水線排程,具體的實現是將原先放置氣泡的位置執行沒有衝突的其他指令,等到等待的週期結束後再將之前有衝突的指令執行。即充分的利用原先的停頓週期。

控制衝突的關鍵是在流水線的並行處理中,我們無法在乙個流水階段中迅速的得出分支指令的跳轉情況,也就是無法確定並行進行的下一條指令究竟是哪一條。

與之前的暫停類似,這裡的相關在於控制相關,所以我們需要等到分支指令計算出具體的跳轉位址後在進行下一條指令的執行。

由分支指令引起的延遲稱為分支延遲。

減少分支延遲:盡早計算出分支目標位址。流水線中盡早判斷出分支轉移是否成功。

對分支的處理方法在程式的執行過程中始終是不變的,是靜態的。要麼總是**分支成功,要麼總是**分支失敗。

前提保證

分支結果出來之前不會改變處理機的狀態,以便一旦猜錯時,處理機能夠回退到原先的狀態。

**分支失敗

允許分支指令後的指令繼續在流水線中流動,若確定分支失敗,將分支指令看作是一條普通指令,流水線正常流動。

**分支成功

若確定分支成功,流水線就把在分支指令之後取出的所有指令轉化為空操作,並按分支目地重新取指令執行。

延遲分支

從邏輯上「延長」分支指令的執行時間。把延遲分支看成是由原來的分支指令和若干個延遲槽構成,不管分支是否成功,都要按順序執行延遲槽中的指令。

分支延遲槽中的指令「掩蓋」了流水線原來必須插入的暫停週期。

指令的排程

在延遲槽中放入有用的指令。由編譯器完成。能否帶來好處取決於編譯器能否把有用

的指令排程到延遲槽中。

排程方法:從前排程,從目標處排程,從失敗處排程。

分支取消

當分支的實際執行方向和事先所**的一樣時,執行分支延遲槽中的指令,否則就將分支延遲槽中的指令轉化成乙個空操作。

**分支成功的情況下,分支取消機制的執**況,保證執行的正確性。

體系結構 五段流水線 流水線技術

目錄 一條經典的5段流水線 一條指令的執行過程分為以下5個週期 取指令週期 if 指令解碼 讀暫存器週期 id 執行 有效位址計算週期 ex 儲存器訪問 分支完成週期 mem 寫回週期 wb 體系結構 流水線 流水線相關 流水線衝突 以程式計數器 pc中的內容作為位址,從儲存器中取出指令並放入指令暫...

體系結構 五段流水線 流水線技術

以程式計數器pc中的內容作為位址,從儲存器中取出指令並放入指令暫存器ir 同時pc值加4 假設每條指令佔4個位元組 指向順序的下一條指令 對指令進行解碼,並用ir中的暫存器位址去訪問通用暫存器組,讀出所需的運算元 不同指令所進行的操作不同 暫存器 暫存器alu指令 alu按照操作碼指定的操作對從通用...

ARM體系結構(二) 流水線

一 流水線的概念與原理 處理器按照一系列步驟來執行每一條指令,典型的步驟如下 從儲存器讀取指令 fetch 解碼 以鑑別它屬於哪一種指令 dec 從指令中提取指令的運算元 這些運算元往往存在於暫存器中 reg 如將運算元進行組合以得到結果或儲存器位址 alu 如果需要,則訪問儲存器以儲存資料 mem...