這裡介紹和分析的流水線是乙個五段的精簡指令集(risc)流水線,即每乙個程式指令的執行都分為五段來執行(一般情況下每個階段(週期)占用乙個時鐘週期)。
取指週期(if)
這一階段是將pc(程式計數器指向當前執行指令的下一條指令)中對應位址的指令取出並放入指令暫存器(ir)中,並將pc加四指向下一條要執行的指令。(這裡的一條指令佔4個位元組)
解碼與讀數週期(id)
這一階段是將之前獲取到的指令進行解碼,同時在指令中可能還有資料,比如指向不同的暫存器,在mips指令架構下暫存器共有32個,以乙個五位的資料來表示(0~31),在解碼的過程中,通過這一編碼來獲取對應的暫存器中的資料,這一階段的訪存是對通用暫存器組的訪問。
計算與執行週期(ex)
在這一階段是對之前獲取的資料進行運算處理,但是不同的指令中含有的資料型別不同,比如有的指令中含有的是暫存器型別的資料,有的含有的是立即數。在這一階段中主要的操作部件是alu運算器。根據指令型別與資料型別有以下分類。
儲存器訪存
可能是暫存器的定址,或者是暫存器與偏移量的相對定址,這時候可能需要將有關的立即數進行符號擴充套件或無符號擴充套件,使得其與暫存器中的資料位數相同,再交由alu進行加運算產生有效位址。
暫存器-暫存器
這一型別的指令資料分別來自暫存器與立即數,這裡的立即數可能會需要進行位擴充套件,之後再將處理好的資料放到alu中運算。
分支指令
這一指令的功能是進行跳轉,在跳轉之前要進行條件判斷(算術與邏輯操作由alu執行),之後還要運算跳轉處的位址,使用當前的pc值與目標處的標記位址進行運算(pc加上偏移量)。
訪存與分支跳轉(mem)
這一階段是為處理訪存指令與分支指令設計的,對於訪存指令假設是讀指令load,就是將之前運算出的資料位址作為訪存位址,將對應的資料取出,而若是存指令store,就是把相應的資料寫到對應的記憶體單元中。而如果是分支指令,通過前一週期處理的資料來判斷其是否跳轉,如果跳轉就將新的位址寫到pc中。
寫回週期(wb)
這個週期主要是處理運算結果的,對於運算指令是將其產生的運算結果寫入通用暫存器組中,對於訪存指令是將訪存的資料結果存入通用暫存器中。
對於不同的指令其使用的階段與週期數是不同的,比如有的指令不需要訪存與跳轉那就可以不執行mem段。
相關
對於順序執行的兩條指令之間如果存在下一條指令使用上一條指令的資料即為相關,資料相關具有傳遞性,當後一條指令j與這條指令之前的指令k相關,而指令k又與上面的指令i相關,這反映了資料的流動關係。
對於資料相關,必須要保證對應資料流動的順序,指令必須按照其資料的流動順序來執行。相關即後面的指令(直接或間接的)使用前面指令的結果。
名相關
名是指指令訪問的暫存器或儲存單元的名稱,如果兩條指令使用相同的名,有資料流動(直接或間接)就是上面的資料相關,如果不存在資料相關即使這裡的名相關。名相關根據指令間的關係可以有以下的分類。
反相關(先讀後寫)
指令間讀操作在前,寫操作在後,這是為保證讀到的資料為未被修改的資料,所以必須保證先讀後寫,對指令的執行順序有嚴格要求。
輸出相關(先寫後寫)
指令間寫操作的順序,如果兩條指令同時有寫資料的操作並且其操作的目標物件為同相同的暫存器或者記憶體單元,則也要保證其執行的先後順序,保證最終寫入的資料是最後執行的指令的。
與上面的資料相關不同,真資料相關是資料先寫入,之後的指令以其寫入的結果來作為接下來執行的輸入資料,即先寫後讀。
控制相關
由分支指令形成的相關,分支指令是要先進行判斷之後進行跳轉,所以在指令的執行順序上有要求。類似於if-else語句中括號內的內容,執行順序不能進行更改。
由於硬體資源有限,有時會產生硬體資源無法滿足程式並行執行的情況,這時會產生結構衝突。常常是多個指令的執行向同一硬體資源提出請求。
資料衝突
往往是由於資料相關產生的衝突,後一條指令需要使用前一條指令的執行結果而產生的衝突。
根據讀寫操作的不同會有以下三類的資料衝突。
先寫後讀(raw)
先寫後寫(waw)
先讀後寫(war)
控制衝突
這一衝突與控制相關有關,分支指令在處理時往往要先處理條件判斷,之後再進行跳轉,然而在多指令並行執行時,當分支指令計算出跳轉的位址時,並行執行的其他指令可能就是按順序執行取的,並且已經執行了很久,這樣就會出現問題,本應跳轉執行,但是卻取了順序執行的指令執行。
Jenkins 流水線pineline相關問題
需要歸檔的文件需放在當前job的workplace下,且路徑是相對路徑。歸檔絕對路徑的日誌失敗問題暫未找到解決辦法 1 建立乙個目錄 在pine中建立的目錄,預設的當前路徑是 jenkins workplace your job name 2 將需要的日誌文件等copy到該目錄下 3 對該目錄進行歸...
流水線排程
n個作業要在由2臺機器m1和m2組成的流水線上完成加工。每個作業加工的順序都是先在m1上加工,然後在m2上加工。m1和m2加工作業i所需的時間分別為a i 和b i 你可以安排每個作業的執行順序,使得從第乙個作業在機器m1上開始加工,到最後乙個作業在機器m2上加工完成所需的時間最少。求這個最少的時間...
流水線冒險
流水線冒險 回顧一下常用五階段流水線 f 取指 d 解碼 e 執行 m 訪存 w 寫回 注意 對暫存器檔案的寫只有在時鐘上公升的時候才會更新!資料冒險的原因 對暫存器檔案的讀寫是在不同階段進行的 1.用暫停來避免資料冒險 暫停時,處理器會停止流水線中一條或多條指令,直到冒險條件不再滿足。在本該正常處...