超標量技術


超標量技術:核心,為了最大化指令的吞吐率,必須減少分支指令,ALU指令,load/store指令的開銷。

超標量處理器可以是只並行化EX段的流水段。

可以具體細分為:1)指令流;    2)寄存器數據流;     3)存儲器數據流;

 

 

指令流:一般用在超標量流水線的前端,即取指段和譯碼段。流水線機器只有在流水模式下才能達到最大的吞吐率,

        對於無條件分支指令,分支地址確定后,下一條指令就能取出;

        對於條件分支,只有在分支部件執行結束,條件和分支地址都確定后,取指段才能讀取下一條指令。

                      可以具體細分為:生成目標地址的開銷和條件判斷引起的開銷。超標量處理器的總開銷等於停頓周期數和流水線寬度的乘積。

                      生成目標地址的開銷還取決於分支指令的尋址模式,

分支預測技術:對分支指令的目標地址和判定條件進行推測,任意一種推測機制都必須能夠驗證分支預測的結果,並且在預測失敗時恢復正確的執行方式。

分支目標地址的推測通過設置分支目標緩沖BTB(Branch target Buffer)來實現,BTB用來保存前幾次分支執行時的目標地址。包括兩個域:

                                 分支指令地址和分支目標地址

使用分支指令的地址訪問BTB以及檢索分支目標地址的工作都是在取指段執行的,若預測分支結果為跳轉,則目標地址在下一個周期就被取指段使用。

雖然有了分支預測部件,分支指令還是要取出並送往流水線進行執行,以便確定預測是否正確,如果預測失敗,恢復執行,需要更新BTB表中BTA的內容。

 

分支方向的預測中,最簡單的方法是,總是預測為不跳轉。對for循環不友好。

                                  編譯器優化,對不同的指令,設置靜態的軟件預測技術。不盡合理。

                                  基於分支目標地址偏移的預測,相對偏移為正值,預測不跳轉,相對偏移為負值,預測跳轉。

                                  普遍采用的是基於歷史信息的分支預測技術

采用基於歷史信息的分支預測策略對分支方向進行預測時,跳轉還是不跳轉取決於先前已經發生的分支方向。BTB在每條記錄中增加一個歷史信息位。

                                      歷史信息位作為FSM的狀態變量,FSM的輸出邏輯即分支預測方向。

預測算法有很多,如只要最近分支有一次以上的跳轉,就執行跳轉,除非最近兩次都沒有跳轉,才不跳轉。這些的設計策略都需要進行評估。

分支預測失敗的恢復:

分支驗證在分支指令執行完畢,正確方向已經確定后進行,前端預測結果的正確與否在此時判定。

               如果結果證明預測正確,釋放推測標識,所有的相關指令都變為非推測的,繼續執行。

               如果預測失敗,結束當前指令流並從新的地址取指。指令流的改變通過修改PC來實現。

先進的分支預測技術

更精確的分支預測算法應該考慮其他關聯分支指令的歷史行為,從而動態的調整分支策略。之前的預測僅僅是靜態方法。

Yeh和Patt提出的兩級自適應分支預測技術,分支地址索引一個分支歷史信息集合,稱為模式歷史信息表(PHT)。

                      然后通過預測算法FSM,來輸出預測結果。以及之后的關聯分支預測器。

對於那些沒有很強的傾向性的分支和分支序列,預測是十分困難的。

寄存器數據流技術:

寄存器數據流主要是指ALU指令的執行,涉及到的問題主要是數據相關性,正相關,反相關,輸出相關。

數據的相關性主要是由於寄存器重用引起的,靜態的寄存器重用是一種編譯器的優化,

    編譯主要是代碼生成和寄存器分配。代碼生成,值機器代碼的生成,寄存器分配,盡可能的保證中間數據駐留在寄存器中,

            同時避免存儲器和寄存器之間頻繁的數據移動。

    在超標量機器中,由於指令是可以亂序執行的,所以寄存器的讀寫操作,並不按照程序的原始順序,為了保證語義的正確性,

            所有的反相關和輸出相關必須被檢測並消除。

 

寄存器重命名,同一體系結構寄存器中的多個定義動態分配不同的名字,寄存器重命名需要硬件的支持,在執行時可以撤銷寄存器重用,來恢復

                    所有當前命令的值與寄存器之間的一一對應的關系。

                    主要作用是可以用來消除假相關,使得本來可以假相關的指令可以並行的執行了。

寄存器數據流技術的特點在Tomasulo算法中,得到了很大的應用。

 

存儲器數據流技術:

存儲器數據流指令執行的三個步驟:生成存儲器地址,存儲器地址轉換,數據訪問,

                  存儲器地址一般由一個寄存器和一個偏移量通過計算生成,因此地址生成包括寄存器訪問和偏移量的計算。

                                load指令,地址寄存器就緒,就可發射,store指令,地址寄存器和數據寄存器都就緒后,發射。

                  虛擬地址到物理地址的轉換,查表操作,一般通過訪問快表TLB來完成,TLB是硬件控制的表結構,保存着虛擬地址到物理地址的

                                映射,本質上是存儲器中頁表的cache,

                  load指令,數據從數據存儲器中檢索出來並寫入重命名寄存器或者再定序緩沖,

                  store命令,在地址轉換結束后,要存儲的寄存器數據保存在再定序緩沖中,store命令再提交時,再將數據寫入存儲器,

                                  就CPU狀態而言,在數據保存到存儲緩沖之后,就已經完成,就存儲器狀態而言,在store提交之后,得到更新。

 

訪問多端口存儲器的兩種基本方法:地址索引和標簽相聯查找。地址索引---不靈活但是實現簡單,全相連---靈活但是實現復雜。

                                             折中方案:組相連方案。

存儲器的層次組織,為了使得整個存儲系統達到高容量,地延時的目的。cache屬於那種小而快的存儲器。

組相連的cache結構:標簽,索引,塊內地址

虛擬存儲器要求,必須有一個虛擬地址到物理地址的轉換,

1)顆粒度一般以頁表(page table)為單位,以字為單位,表項太多。

2)由於頁表也是保存在存儲器中,所以每次訪問存儲器的操作,需要兩次訪存操作。

TLB就是對頁表的緩存,也可以使用組相連的方式來實現。

                       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM