超標(biāo)量處理器中指令相關(guān)性檢測(cè)的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于處理器架構(gòu)設(shè)計(jì)技術(shù)領(lǐng)域,具體涉及超標(biāo)量處理器中指令相關(guān)性檢測(cè)的方法。
【背景技術(shù)】
[0002]在超標(biāo)量處理器中,指令往往是多發(fā)射的,同一周期內(nèi)最多能夠發(fā)射的指令條數(shù)取決于發(fā)射槽的寬度。超標(biāo)量處理器為了實(shí)現(xiàn)指令級(jí)并行,使用動(dòng)態(tài)調(diào)度的方法。在指令的順序執(zhí)行過程中,除了發(fā)射槽的寬度之外,指令之間存在的數(shù)據(jù)相關(guān)成為了制約最大限度的指令級(jí)并行的重要因素。檢測(cè)同一周期內(nèi)的指令之間是否存在數(shù)據(jù)相關(guān)是實(shí)現(xiàn)指令動(dòng)態(tài)調(diào)度的關(guān)鍵。在超標(biāo)量處理器的體系結(jié)構(gòu)設(shè)計(jì)中多采用流水線技術(shù),實(shí)現(xiàn)指令級(jí)的并行后,檢測(cè)相鄰流水級(jí)的各組指令之間是否存在數(shù)據(jù)相關(guān)也是確保程序能夠正確執(zhí)行,動(dòng)態(tài)調(diào)度指令的關(guān)鍵。
[0003]傳統(tǒng)的檢測(cè)方法使用的是寄存器依賴表,該表存儲(chǔ)了每一條正在執(zhí)行的指令的目的寄存器信息。在經(jīng)過解碼后,每條指令在進(jìn)入下一個(gè)流水級(jí)的同時(shí),其目的寄存器信息寫入寄存器依賴表,以供判定后續(xù)指令發(fā)射的可行性。指令解碼后,其源寄存器、目的寄存器必須與寄存器依賴表中的表項(xiàng)進(jìn)行沖突檢測(cè)作為該指令是否可分發(fā)的條件。這種檢測(cè)方法確實(shí)可行,但是硬件開銷的成本比較大,如果操作數(shù)較多時(shí),會(huì)很大程度增加模塊的面積,帶來功耗的問題,相關(guān)邏輯會(huì)占用很大的資源。
【發(fā)明內(nèi)容】
[0004]為了克服上述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明的目的在于提供一種硬件開銷小的超標(biāo)量處理器中指令相關(guān)性檢測(cè)的方法,該方法不僅適用于檢測(cè)同一周期內(nèi)多條指令能否同時(shí)發(fā)射,也適用于檢測(cè)不同流水級(jí)的各組指令之間的相關(guān)性;為實(shí)現(xiàn)指令的動(dòng)態(tài)調(diào)度提供了基礎(chǔ)的保證,而且方法的實(shí)現(xiàn)并不會(huì)涉及很復(fù)雜的電路設(shè)計(jì),能夠很大程度上減小硬件開銷。
[0005]為了實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案是:
[0006]—種超標(biāo)量處理器中指令相關(guān)性檢測(cè)的方法,設(shè)定一組鎖定標(biāo)識(shí),指令解碼后,其源操作數(shù)與目的操作數(shù)分別與對(duì)應(yīng)的鎖定標(biāo)識(shí)相比較,用來判斷指令的相關(guān)性與并行性。鎖定標(biāo)識(shí)根據(jù)每個(gè)周期指令的解碼信息進(jìn)行更新,每個(gè)周期更新一次。鎖定標(biāo)識(shí)與處理器內(nèi)的通用寄存器組一一對(duì)應(yīng),每個(gè)通用寄存器都有一個(gè)對(duì)應(yīng)的鎖定標(biāo)識(shí)。鎖定標(biāo)識(shí)的內(nèi)容是指令執(zhí)行周期數(shù)減1。
[0007]超標(biāo)量處理器中檢測(cè)指令并行性的方法,包括如下步驟:
[0008]步驟1,獲取指令包,指令包中指令的條數(shù)與發(fā)射槽的數(shù)目相等,指令包根據(jù)每個(gè)周期發(fā)射的指令條數(shù)進(jìn)行相應(yīng)的更新;
[0009]步驟2,將指令包中的指令分別進(jìn)行解碼,解碼后的信息包括源寄存器編號(hào),目的寄存器編號(hào)以及指令執(zhí)行占用的周期數(shù);
[0010]步驟3,將指令包中的第一條指令的源操作數(shù)和目的操作數(shù)分別與對(duì)應(yīng)的鎖定標(biāo)識(shí)進(jìn)行匹配;如果該條指令用到的源操作數(shù)或者目的操作數(shù)被鎖定,則該指令包的所有指令均延遲一個(gè)周期發(fā)射,與下一周期更新后的鎖定標(biāo)識(shí)重新進(jìn)行匹配;否則,第一條指令可以在這個(gè)周期發(fā)射,同時(shí)將該指令的執(zhí)行周期數(shù)傳遞給該指令目的寄存器對(duì)應(yīng)的鎖定標(biāo)識(shí),其余的鎖定標(biāo)識(shí)保持原來的值不變;這樣第一條指令經(jīng)過檢測(cè)后,生成了一組新的鎖定標(biāo)識(shí);
[0011]步驟4,將指令包中的下一條指令的源操作數(shù)和目的操作數(shù)分別與上一條指令判別后得到的鎖定標(biāo)識(shí)組中的鎖定標(biāo)識(shí)進(jìn)行匹配;如果該條指令用到的源操作數(shù)或者目的操作數(shù)被鎖定,則該指令及其后所有指令不能和它前面的指令一起發(fā)射,需要延后一個(gè)周期再做判斷,該指令將會(huì)成為下一周期的指令包中的第一條指令,轉(zhuǎn)步驟6 ;否則,這兩條指令與之間不存在數(shù)據(jù)相關(guān),與上一周期同時(shí)發(fā)射的指令也不存在數(shù)據(jù)相關(guān),進(jìn)行同時(shí)發(fā)射;將該指令的執(zhí)行周期數(shù)傳遞給鎖定標(biāo)識(shí)組中目的寄存器對(duì)應(yīng)的鎖定標(biāo)識(shí),鎖定標(biāo)識(shí)組中其余的鎖定標(biāo)識(shí)保持不變;這樣每條指令經(jīng)過檢測(cè)后,都會(huì)獲得一組新的鎖定標(biāo)識(shí),而下一條指令則根據(jù)新的鎖定標(biāo)識(shí)進(jìn)行匹配性檢測(cè);鎖定標(biāo)識(shí)組的編號(hào)與該指令在指令包中的順序——對(duì)應(yīng);
[0012]步驟5,判斷指令包中的剛剛進(jìn)行并行性檢測(cè)的指令是否為指令包中的最后一條指令,如果不是最后一條指令,轉(zhuǎn)步驟4 ;否則,轉(zhuǎn)步驟6 ;
[0013]步驟6,確定每個(gè)周期內(nèi)同時(shí)發(fā)射的指令條數(shù)以及這個(gè)指令條數(shù)對(duì)應(yīng)的鎖定標(biāo)識(shí)組的編號(hào);在下一個(gè)周期的開始,將該編號(hào)對(duì)應(yīng)的鎖定標(biāo)識(shí)組的值各減去1賦給相應(yīng)的鎖定標(biāo)識(shí),實(shí)現(xiàn)鎖定標(biāo)識(shí)的更新。
[0014]和現(xiàn)有技術(shù)相比較,本發(fā)明具備如下優(yōu)點(diǎn):
[0015]本發(fā)明只需要設(shè)定一組鎖定標(biāo)識(shí),將指令涉及到的寄存器與各自的鎖定標(biāo)識(shí)相匹配即可判斷相鄰指令包之間的指令以及同一指令包里的指令是否具有相關(guān)性,從而實(shí)現(xiàn)超標(biāo)量處理器中指令并行性的檢測(cè)。而現(xiàn)有技術(shù)則側(cè)重于所有源操作數(shù)和目的操作數(shù)與寄存器依賴表中的表項(xiàng)進(jìn)行逐個(gè)比較,從而得到檢測(cè)結(jié)果。本發(fā)明可以很大程度上減小硬件開銷,縮小模塊面積,而且不會(huì)占用很多邏輯資源。
【附圖說明】
[0016]圖1是本發(fā)明檢測(cè)指令相關(guān)的流程圖。
[0017]圖2是本發(fā)明在雙發(fā)射處理器實(shí)例中實(shí)現(xiàn)的原理圖。
[0018]圖3是本發(fā)明獲取指令包的示意圖。
[0019]圖4是雙發(fā)射處理器中鎖定標(biāo)識(shí)更新方法的示意圖。
【具體實(shí)施方式】
[0020]下面結(jié)合附圖和實(shí)施例詳細(xì)說明本發(fā)明的實(shí)施方式。
[0021]如圖1所示,本實(shí)施例一種超標(biāo)量處理器中指令相關(guān)性檢測(cè)的方法,具體包括如下步驟:
[0022]本實(shí)施例在雙發(fā)射處理器中的具體實(shí)現(xiàn)如圖2所示,本實(shí)施例不僅可以判斷指令包中的兩條指令是否可以同時(shí)發(fā)射,也可以檢測(cè)相鄰指令包中的兩組指令之間是否具有數(shù)據(jù)相關(guān)。具體實(shí)現(xiàn)包括以下步驟:
[0023](1)獲取指令包,獲取指令包的方法如圖3所示,緩存包將指令逐級(jí)傳遞給緩存包