流水線中的相關培訓教程[3]
流水線中的相關培訓教程[3]
(1) 寫后讀相關(RAW:Read After Write) (命名規則) :j 的執行要用到 i 的計算結果,當它們在流水線中重疊執行時,j 可能在 i 寫入其計算結果之前就先行對保存該結果的寄存器進行讀操作,從而得到錯誤的值。這是最常見的一種數據相關,圖3.3.6和圖3.3.7中采用定向技術消除的數據相關就屬于這種類型。
??? (2) 寫后寫相關(WAW:Write After Write ):j 和 i 的目的寄存器相同,當它們在流水線中重疊執行時,j 可能在 i 寫入其計算結果之前就先行對該結果寄存器進行寫操作,從而導致寫入順序錯誤,在目的寄存器中留下的是 i 寫入的值,而不是 j 寫入的值。
??? 如果在流水線中不只一個段可以進行寫操作,或者當流水線暫停某條指令時,允許該指令之后的指令繼續前進,就可能會產生這種類型的數據相關。由于 DLX 流水線只在 WB 段寫寄存器,所以在 DLX 流水線中執行的指令不會發生這種類型的數據相關。如果我們對DLX流水線作如下改變,在DLX流水線中執行的指令就有可能發生WAW相關。首先,將 ALU 運算結果的寫回操作移到 MEM 段進行,因為這時計算結果已經有效;其次,假設訪問數據存儲器占兩個流水段。下面是兩條指令在修改后的 DLX 流水線中執行的情況:
??? 可以看出,在修改后的 DLX 流水線中執行上述指令序列后,寄存器 R1 中的內容是第一條指令(LW)的寫入結果,而不是 ADD 指令的寫入結果。這就是由于 WAW 相關所帶來的錯誤執行結果。
??? (3) 讀后寫相關(WAR:Write After Read ):j 可能在 i 讀取某個源寄存器的內容之前就先對該寄存器進行寫操作,導致 i 后來讀取到的值是錯誤的。
??? 由于 DLX 流水線在 ID 段完成所有的讀操作,在 WB 段完成所有的寫操作。所以,在 DLX 流水線中不會產生這種類型的數據相關。基于上面修改后的 DLX 流水線,考察下面兩條指令的執行情況:
??? 如果 SW 指令在 MEM2 段的后半部分讀取寄存器 R2 的值,ADD 指令在 WB 段的前半部分將計算結果寫回寄存器 R2,則 SW 將讀取錯誤的值,將 ADD 指令的計算結果寫入存儲器中。值得注意的是,在讀后讀(RAR: Read After Read)的情況下,不存在數據相關問題。
4. 需要暫停的數據相關
??? 前面我們討論了如何利用定向技術消除由于數據相關帶來的暫停。但是,并不是所有數據相關帶來的暫停都可以通過定向技術消除。
??? 為了保證流水線正確執行上述指令序列,可以設置一個稱為流水線互鎖(pipeline interlock)的功能部件。一旦流水線互鎖檢測到上述數據相關,流水線暫停執行LW指令之后的所有指令,直到能夠通過定向解決該數據相關為止。
圖3.3.12為流水線互鎖插入暫停后流水線數據通路;
??? 圖3.3.13是 加入暫停前后的流水線時空圖。
?
非常好我支持^.^
(2) 100%
不好我反對
(0) 0%
相關閱讀:
- [電子說] 淺析OpenVINO 2024.5的新功能 2024-11-25
- [電子說] 工業讀碼器解決方案在自動化流水線上掃描條碼的應用 2024-11-20
- [電子說] SMT流水線布局優化技巧 2024-11-14
- [電子說] 工業流水線的智能助手——智能計數,效率倍增 2024-11-06
- [電子說] 流水線中Half-Buffer與Skid-Buffer的使用 2024-11-05
- [電子說] 使用PVA引擎優化自動駕駛汽車CV開發流水線 2024-11-05
- [電子說] 簡述光電開關在流水線上的應用BR100-DDT如計數等 2024-10-31
- [電子說] 工廠自動化流水線上安裝固定式工業掃描器有什么好處? 2024-10-30
( 發表人:admin )