專利名稱:信息處理單元和信息處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種信息處理技術(shù),并且,更加具體地,涉及一種其中通過使用流水線式處理執(zhí)行指令取出、指令解碼、和指令運行的信息處理技術(shù)。
背景技術(shù):
一種信息處理單元使用流水線式處理來執(zhí)行指令取出、指令解碼、和指令的運行,需要在運行分支(跳轉(zhuǎn))指令的同時,對后續(xù)指令進行解碼。因此,當(dāng)實際上進行一個分支時,在流水線中會產(chǎn)生一個空白時隙,這會導(dǎo)致性能的惡化。為解決這一問題,采用了諸如延遲分支、分支預(yù)測、和雙取出這樣的方法。
在下面的專利文獻1中提到的信息處理單元具有指令取出單元,用于在連續(xù)側(cè)和目標(biāo)側(cè)二者上取出指令序列;高速緩存控制單元,用于響應(yīng)來自指令取出單元的取出請求,從高速緩沖存儲器或主存儲器中取出指令;存儲器總線訪問單元,用于訪問主存儲器;指令緩沖器,用于保持所取出的指令;和分支預(yù)測單元,用于在執(zhí)行分支指令之前,進行存儲在指令緩沖器中的分支指令的分支預(yù)測。當(dāng)分支指令的分支方向沒有確定時,高速緩存控制單元根據(jù)得自分支預(yù)測單元的分支預(yù)測方向,限制對高速緩存未命中后的主存儲器的存儲器總線訪問。因此,在其中帶有高速緩沖存儲器的微處理器中,對外部主存儲器的訪問受到限制,以致提高了訪問主存儲器的效率。
日本專利申請公開第2001-154845號上面所提到的延遲分支是指當(dāng)延遲分支指令出現(xiàn)時,向分支目標(biāo)的分支會發(fā)生在該分支指令后續(xù)的一個指令(延遲時隙)之后。延遲分支操作可能會有這樣一個問題如果沒有指令被插入該延遲時隙,負擔(dān)(penalty)會持續(xù)存在,并且由于通常只有一個指令可以被插入到延遲時隙中,一個為指令取出而占用兩個周期的流水線式結(jié)構(gòu)會導(dǎo)致負擔(dān)的產(chǎn)生。
上面提到的分支預(yù)測是指通過解碼執(zhí)行分支預(yù)測,以執(zhí)行其預(yù)取。如果預(yù)測失誤,分支預(yù)測也會導(dǎo)致負擔(dān)。因此,有必要提高預(yù)測命中率,不過這一提高需要復(fù)雜且大規(guī)模的機構(gòu)。
上面提到的雙取出是指準(zhǔn)備兩個端口,一個用于進行分支的情況,另一個用于沒有進行分支的情況,在雙取出工作過程中,準(zhǔn)備一個預(yù)取緩沖器,預(yù)解碼其內(nèi)容,并且如果給出了一個分支指令,那么分支目標(biāo)指令和連續(xù)側(cè)上的指令都被取出。這導(dǎo)致需要用于取出的兩條總線,這使得機構(gòu)規(guī)模變大并且復(fù)雜化。
而且,當(dāng)分支預(yù)測導(dǎo)致預(yù)測失敗時,或者當(dāng)雙取出導(dǎo)致高速緩存未命中時,會產(chǎn)生對外部主存儲器的不必要的訪問,這將導(dǎo)致負擔(dān)的加劇。
發(fā)明內(nèi)容
本發(fā)明的一個目的是提供一種方法,其中使用一個簡單的邏輯電路代替大規(guī)模電路,以在執(zhí)行分支指令時消除負擔(dān)。
按照本發(fā)明的一個方面,提供一種信息處理單元,包括一個預(yù)取緩沖器,用于通過具有兩倍于指令長度或更大的寬度的總線來取出指令,以存儲所預(yù)取的指令;一個用于對存儲在預(yù)取緩沖器中的指令進行解碼的解碼器;和一個運算單元,用于執(zhí)行已解碼的指令。當(dāng)解碼出分支指令時,一個指令請求控制電路執(zhí)行用于預(yù)取分支目標(biāo)指令的預(yù)取請求,否則該指令請求控制電路順序地執(zhí)行用于預(yù)取指令的預(yù)取請求。當(dāng)通過運行分支指令而確保發(fā)生分支時,一個預(yù)取控制電路把分支目標(biāo)指令取出到預(yù)取緩沖器中,而當(dāng)不發(fā)生分支時,預(yù)取控制電路忽略分支目標(biāo)指令。
當(dāng)解碼出分支指令時,執(zhí)行用于預(yù)取分支目標(biāo)指令的預(yù)取請求,否則順序地執(zhí)行用于預(yù)取指令的預(yù)取請求。這使得準(zhǔn)備兩種指令成為可能,一種是進行分支時的指令,另一種是不進行分支時的指令。因此,不管進行分支與否,無需使用大規(guī)模的預(yù)測電路或類似裝置,它仍然使得消除分支負擔(dān)成為可能。
圖1是表示按照本發(fā)明的一個實施例的信息處理單元的框圖;圖2是表示作為本發(fā)明的實施例中的處理對象的計算機程序(指令組)的一個實例的示意圖;圖3是表示由一個普通信息處理單元執(zhí)行的操作過程的時序圖,其中以簡單的方式一個接一個地處理指令;圖4是表示在按照本發(fā)明的實施例的信息處理單元中,當(dāng)滿足分支條件以致允許分支時的操作過程的時序圖;和圖5是表示在按照本發(fā)明的實施例的信息處理單元中,當(dāng)不滿足分支條件以致不允許分支時的操作過程的時序圖。
具體實施例方式
圖2表示作為本發(fā)明的實施例中的處理對象的計算機程序(指令組)“a”到“v”的一個例子。每個指令“a”到“v”具有16位的指令長度。對應(yīng)于每個地址的一個位置可以存儲一個字節(jié)(8位)。例如,在對應(yīng)于位置200到210的地址中,分別存儲了指令“a”到“f”,而在對應(yīng)于位置400到406的地址中,分別存儲了指令“s”到“v”。位置400被標(biāo)注為“l(fā)abel 0(零)”。在運行程序的時候,首先運行指令“a”。在指令“a”周期中,例如,把寄存器“r0(零)”的值與寄存器“r2”的值進行比較。隨后運行指令“b”。指令“b”是這樣一個指令作為上面所提到的比較的結(jié)果,如果寄存器“r0”和“r2”具有相等的值,則分支到“l(fā)abel 0(零)”(位置400)。如果上述寄存器不具有相同的值,那么指令“b”是用于不進行分支而順序地運行指令的指令。象指令“b”這樣的指令被定義為分支指令。分支指令包括條件分支指令和/或無條件分支指令。在條件分支指令的情況下,象指令“b”中的情況那樣,根據(jù)諸如比較結(jié)果或其它類似條件來進行分支。在無條件分支指令的情況下,象CALL指令和JUMP指令那樣,無條件進行分支。
分支指令“b”特指為延遲分支指令(例如,可以被表示為“D”),下文中,將會對延遲分支指令進行說明。在條件分支指令的情況中,如果符合條件,則分支到某一分支目標(biāo),而如果不滿足條件,則不進行分支。如果不進行分支(不進行跳轉(zhuǎn)),則在指令“b”之后,延遲分支指令“b”順序執(zhí)行指令“c”、“d”、“e”和“f”,如果進行分支(進行跳轉(zhuǎn)),則在指令“b”之后,按順序執(zhí)行指令“c”、“s”、“t”、“u”、和“v”。這意味著,不管進行分支與否,總是要運行延遲分支指令“b”后面的指令“c”,并且隨后進行分支。緊跟在延遲指令“b”后面的指令“c”被稱為延遲時隙指令。
圖1是按照本發(fā)明的實施例的信息處理單元的方框圖。這個信息處理單元執(zhí)行由五個階段組成的流水線式處理,這五個階段包括指令地址請求階段(下文中稱為“IA階段”)131;指令取出階段(下文中稱為“IF階段”)132;指令解碼階段(下文中稱為“ID階段”)133;運行階段(下文中稱為“EX階段”)134;和寄存器反寫階段(下文中稱為“WB階段”)135。將基于諸如指令的位長度為16位的例子這一情況進行下面的說明。
CPU(中央處理單元Central Processing Unit)101通過指令高速緩沖存儲器(下文中稱為“指令高速緩存(instruction cache)”)102與主存儲器121相連接。更加明確地講,諸如SDRAM這樣的主存儲器121通過一個32位總線122與外部總線120相連接。指令高速緩存102通過32位總線117與外部總線120相連接。CPU 101通過用于指令的32位總線112與指令高速緩存102相連接。指令高速緩存102預(yù)先從主存儲器121讀取經(jīng)常用到的指令(程序)的一部分并存儲在其中,而從中趕出很少用到的指令。由CPU 101請求的指令存在于指令高速緩存102中的這種情況稱為高速緩存命中。當(dāng)發(fā)生高速緩存命中時,CPU 101可以接收來自指令高速緩存102的指令。相反,由CPU 101請求的指令不存在于指令高速緩存102中時的這種情況稱為高速緩存未命中。當(dāng)發(fā)生高速緩存未命中時,指令高速緩存102使用總線訪問信號116訪問主存儲器121來執(zhí)行讀出請求以讀出該指令。CPU 101可以通過指令高速緩存102從主存儲器121中讀取指令??偩€112的傳輸速率大大高于外部總線120的傳輸速率。因此發(fā)生高速緩存命中時的指令讀出速度要遠大于發(fā)生高速緩存未命中時的速度。此外,由于指令(程序)被連續(xù)讀出的概率很高,因此高速緩存命中率變高。因此,使用指令高速緩存102使得CPU 101讀出指令的整體速度得到了提高。
CPU 101包括指令隊列(預(yù)取緩沖器)103、指令取出控制單元104、指令解碼器105、分支單元106、運算單元107、載入和存儲單元108、和寄存器109。指令隊列103中例如最多可以存儲每條具有16位長度的四條指令,該指令隊列103通過32位總線112與指令高速緩存102相連接,并通過16位總線115與指令解碼器105相連接。這意味著,指令隊列103以32位為單位在其中寫入來自指令高速緩存102的每條指令,并從其中以16位為單位讀出指令,以將其輸出到指令解碼器105。指令取出控制單元104向指令高速緩存102輸入/從指令高速緩存102輸出一個高速緩存訪問控制信號110,并控制指令隊列103的輸入/輸出。指令解碼器105對存儲在指令隊列103中的每一條指令逐一地進行解碼。運算單元107逐一地運行(操作)每一條經(jīng)指令解碼器105解碼的指令。由運算單元107的運行產(chǎn)生的結(jié)果被寫入到寄存器109中。當(dāng)經(jīng)指令解碼器105解碼的指令表示一個載入/存儲指令時,載入和存儲單元108在寄存器109和主存儲器121之間進行載入或存儲。
指令取出操作過程以這樣的方式執(zhí)行指令取出控制單元104根據(jù)CPU 101的狀態(tài)向指令高速緩存102發(fā)出指令請求(IA階段131),隨后在下一個周期中,指令被取出到指令隊列103中(IF階段132)。不過,需要注意的是由于這里所介紹的實施例的特征在于以在指令隊列103中存儲后續(xù)指令的方式減小分支負擔(dān),因此以32位為單位執(zhí)行指令取出操作(即,以兩個指令為單位),該長度為指令長度的兩倍。然后,指令隊列103中的第一指令由指令解碼器105進行解碼(ID階段133),在隨后的周期中,進行該指令所代表的動作(EX階段134),并且被寫回到寄存器109中(WB階段135),至此結(jié)束一個指令。CPU 101的特征在于,以流水線方式執(zhí)行上述的操作。
如果由指令解碼器105解碼出的指令是分支指令,那么指令解碼器105向指令取出控制單元104和分支單元106輸出一個分支指令解碼通告信號113。當(dāng)分支指令解碼通告信號113輸入到其中時(即,當(dāng)解碼出分支指令時),指令取出控制單元104執(zhí)行一個預(yù)取請求以預(yù)取分支目標(biāo)指令,否則指令取出控制單元104順序地執(zhí)行預(yù)取請求以預(yù)取指令。明確的講,指令取出控制單元104通過向指令高速緩存102輸出高速緩存訪問控制信號110來執(zhí)行預(yù)取請求。該預(yù)取請求使得從指令高速緩存102中預(yù)取出來的指令寫入到指令隊列103。
如上面所述,在運行分支指令之前,在解碼階段,執(zhí)行預(yù)取請求以預(yù)取分支目標(biāo)指令。其后,在執(zhí)行分支指令的階段,確定是否進行分支。這意味著運算單元107的操作導(dǎo)致運行恰在分支指令之前的指令,并且運行結(jié)果被寫入到寄存器109中。寄存器109中的運行結(jié)果被輸入到分支單元106中。運算單元107的操作導(dǎo)致分支指令的運行,并且例如,通過設(shè)置在寄存器109中的標(biāo)記,把表示分支條件是否已經(jīng)實現(xiàn)的信息被輸入到分支單元106中。根據(jù)分支指令解碼通告信號113和分支指令運行結(jié)果119,分支單元106向指令取出控制單元104輸出一個分支指令運行通告信號114。這意味著,根據(jù)分支指令的運行結(jié)果,通過使用分支指令運行通告信號114,分支單元106通告是否進行分支。當(dāng)進行分支時,指令取出控制單元104把分支目標(biāo)指令預(yù)取到指令隊列103,其中已經(jīng)如上所述對該分支目標(biāo)指令進行了預(yù)取請求。當(dāng)分支不進行時,指令取出控制單元104忽略分支目標(biāo)指令(已經(jīng)如上所述對該分支目標(biāo)指令進行了預(yù)取請求)的預(yù)取,并執(zhí)行后續(xù)指令的預(yù)取、解碼和運行,同時向指令高速緩存102輸出一個訪問取消信號111。當(dāng)發(fā)生高速緩存未命中時,已經(jīng)接收到用于預(yù)取上述分支目標(biāo)的預(yù)取請求的指令高速緩存102已經(jīng)準(zhǔn)備好訪問主存儲器121。當(dāng)訪問取消信號111輸入到其中時,指令高速緩存102將取消對主存儲器121的訪問,從而消除了對主存儲器121的不必要的訪問,并防止了性能下降。
需要注意的是,為了簡化說明的目的,該運行結(jié)果119已經(jīng)被解釋為從寄存器109輸入到分支單元106,然而,運行結(jié)果119可以實際上通過使用旁路電路被輸入到分支單元106,而無須等待EX階段134運行完成圖3是表示由普通的信息處理單元執(zhí)行的操作的用于參考的時序圖,其中通過一個簡單的方式一個接一個地對指令進行處理。下面將給出對該圖的說明,其中采用了對圖2中的程序進行處理的情況作為例子。高速緩存訪問地址IA1是當(dāng)分支不進行時指令請求所指向的地址。高速緩存訪問數(shù)據(jù)IF1是當(dāng)分支不進行時由指令高速緩存102輸出給指令隊列103的數(shù)據(jù)。高速緩存訪問地址IA2是當(dāng)進行分支時指令請求所指向的地址。高速緩存訪問數(shù)據(jù)IF2是當(dāng)進行分支時由指令高速緩存102輸出給指令隊列103的數(shù)據(jù)。
在周期CY1中,在IA階段131發(fā)出對指令“a”的指令請求。這里,高速緩存訪問地址IA1和IA2是指令“a”的地址。
接下來,在周期CY2中,在IF階段132取出指令“a”,并且在IA階段131發(fā)出對延遲分支指令(條件分支指令)“b”的指令請求。這里,高速緩存訪問地址IA1和IA2是用于指令“b”的地址,同時高速緩存訪問數(shù)據(jù)IF1和IF2代表指令“a”。
下面,在周期CY3中,在ID階段133對指令“a”進行解碼,在IF階段132取出延遲分支指令“b”,并且在IA階段131發(fā)出對指令“c”(延遲時隙)的指令請求。這里,高速緩存訪問地址IA1和IA2是用于指令“c”的地址,同時高速緩存訪問數(shù)據(jù)IF1和IF2代表指令“b”。
接下來,在周期CY4中,在EX階段134執(zhí)行指令“a”,在ID階段133對延遲分支指令“b”進行解碼,在IF階段132取出指令“c”,在IA階段131發(fā)出對指令“d”的指令請求。這里,高速緩存訪問地址IA1和IA2是用于指令“d”的地址,同時高速緩存訪問數(shù)據(jù)IF1和IF2代表指令“c”。
在上面介紹的延遲分支指令“b”的解碼之后的EX階段134,確定是否進行分支,據(jù)此,跟在周期CY5后面的處理發(fā)生變化。下面將給出對不進行分支的處理過程的說明。
在周期CY5中,在WB階段135將指令“a”寫入到寄存器中,在EX階段134運行延遲分支指令“b”,在ID階段133對指令“c”進行解碼,在IF階段132取出指令“d”,并且在IA階段131發(fā)出對指令“e”的指令請求。這里,高速緩存訪問地址IA1是用于指令“e”的地址,且高速緩存訪問數(shù)據(jù)IF1代表指令“d”。
在后面的周期CY6中,在WB階段135將延遲分支指令“b”寫入到寄存器中,在EX階段134執(zhí)行指令“c”,在ID階段133對指令“d”進行解碼,在IF階段132取出指令“e”,在IA階段131發(fā)出對指令“f”的指令請求。這里,高速緩存訪問地址IA1是用于指令“f”的地址,并且高速緩存訪問數(shù)據(jù)IF1代表指令“e”。
在周期CY7及其后續(xù)的周期中,也會進行與上面所提到的那些操作同樣的操作。如上面所解釋的,當(dāng)不進行分支時,處理是以起始于指令“a”的連續(xù)方式簡單地進行的,導(dǎo)致不存在空白的時隙且實現(xiàn)高效率的流水線式處理。
接下來,將會對進行分支時的情況進行說明。在周期CY5,當(dāng)進行分支時,指令“d”被取消,其中在前面提到的周期CY4中已經(jīng)發(fā)出了對該指令“d”的指令請求。結(jié)果,周期CY4中的IA階段131變成了一個空白時隙,從而引起了不必要的處理操作。在周期CY5中,在WB階段135將指令“a”寫入寄存器,在EX階段134運行延遲分支指令“b”,在ID階段133對指令“c”進行解碼,IF階段132變成了一個空白時隙,并且在IA階段131發(fā)出對分支目標(biāo)指令“s”的指令請求。這里,高速緩存訪問地址IA2是用于指令“s”的地址,并且高速緩存訪問數(shù)據(jù)IF2代表指令“d”。
在隨后的周期CY6中,在WB階段135將延遲分支指令“b”寫入到寄存器中,在EX階段134運行指令“c”,ID階段133變成了一個空白時隙,在IF階段132取出分支目標(biāo)指令“s”,并且在IA階段131發(fā)出對指令“t”的指令請求。這里,高速緩存訪問地址IA1是用于指令“t”的地址,且高速緩存訪問數(shù)據(jù)IF1代表指令“s”。
在后面的周期CY7中,在WB階段135將指令“c”寫入到寄存器中,EX階段134變成了一個空白時隙,在ID階段133對分支目標(biāo)指令“s”進行解碼,在IF階段132取出指令“t”,并且在IA階段131發(fā)出對指令“u”的指令請求。這里,高速緩存訪問地址IA1是用于指令“u”的地址,且高速緩存訪問數(shù)據(jù)IF1代表指令“t”。
在周期CY8和隨后的各周期中,也會執(zhí)行與上面所提到的處理過程相似的處理。如上面所說明的,當(dāng)進行分支時,產(chǎn)生了如陰影部分所示出的空白時隙“d”,從而無法實現(xiàn)高效的流水線式處理。由于直到分支指令“b”的EX階段134之前,都無法做出是否條件允許進行分支的判決,因此,必須要等到直到做出該判決,才能決定在后面的處理中是取出分支目標(biāo)指令還是繼續(xù)取出連續(xù)的指令,這就導(dǎo)致了負擔(dān)。當(dāng)進行分支時,仍要執(zhí)行與分支不進行時相同的操作,直到經(jīng)過了指令“c”之后,但是對于分支目標(biāo)指令“s”的指令請求不會被發(fā)出,直到確定在延遲分支指令“b”的EX階段134要發(fā)生分支。結(jié)果,此前已經(jīng)對其發(fā)出了指令請求的指令“d”被取消,導(dǎo)致在流水線中產(chǎn)生了一個空白時隙。此外,即使執(zhí)行了分支預(yù)測時,如果預(yù)測失誤,負擔(dān)也會出現(xiàn)。
圖4是表示在按照圖1中所示的本發(fā)明的實施例的信息處理單元中,滿足允許分支的分支條件時的操作過程的時序圖。下面所給出的說明,采用了處理圖2中的程序時的情況作為實例。高速緩存訪問地址IA1是向其發(fā)出指令請求的那個地址。高速緩存訪問數(shù)據(jù)IF1是在指令高速緩存102的高速緩存命中時輸出給指令隊列103的數(shù)據(jù)。
首先,在周期CY1中,在IA階段131對兩個指令“a”和“b”發(fā)出指令請求。指令“b”表示延遲分支指令。在IA階段131,可以以32位為單位發(fā)出指令請求,即,以兩個指令為單位。這里,高速緩存訪問地址IA1是用于指令“a”和“b”的地址。
接著,在周期CY2中,在IF階段132取出這兩個指令“a”和“b”,同時在IA階段131對兩個指令“c”和“d”發(fā)出指令請求。在IF階段132,可以以32位為單位執(zhí)行取出,即,以兩個指令為單位。這一取出操作使指令“a”和“b”被存儲在指令隊列103中。這里,高速緩存訪問地址IA1是用于指令“c”和“d”的地址,同時高速緩存訪問數(shù)據(jù)IF1代表指令“a”和“b”。
接下來,在周期CY3中,在ID階段133對一個指令“a”進行解碼,同時在IF階段132取出兩個指令“c”和“d”。在ID階段133,解碼是以16位為單位進行的,即,以一個指令為單位。指令“c”和“d”被輸入給指令隊列103以用于取出,而指令“a”從指令隊列103中輸出以進行解碼,從而指令隊列103具有指令“b”、“c”和“d”存儲在其中。這里,高速緩存訪問數(shù)據(jù)IF1表示指令“c”和“d”。由于在本例中最大只允許指令隊列103存儲四條指令,因此在這個周期內(nèi)沒有執(zhí)行指令請求。
下面,在周期CY4中,在EX階段134中運行指令“a”,在ID階段133對指令“b”進行解碼,并且在IA階段131對兩個分支目標(biāo)指令“s”和“t”發(fā)出指令請求。在EX階段134,運行是以16位為單位進行的,即,以一個指令為單位。指令高速緩存103具有指令“c”和“d”存儲在其中。這里,高速緩存訪問地址IA1是用于分支目標(biāo)指令“s”和“t”的地址。
在上面所說明的周期CY4中,指令解碼器105對分支指令“b”進行解碼,以輸出指令解碼通告信號133。通過接收指令解碼通告信號133,指令取出控制單元104執(zhí)行對分支目標(biāo)指令“s”和“t”的指令請求。這里,不管指令隊列103處于何種狀態(tài)都會發(fā)出該請求。
接下來,在周期CY5中,在WB階段135,指令“a”被寫入到寄存器中,在EX階段134運行延遲分支指令“b”,在ID階段133對指令“c”進行解碼,在IF階段132取出分支目標(biāo)指令“s”和“t”,并且在IA階段131對指令“u”和“v”發(fā)出指令請求。由于指令“c”跟在延遲分支指令“b”的后面,因此即使當(dāng)進行分支時,指令“c”(延遲時隙)也會被發(fā)送到ID階段。當(dāng)通過運行分支指令“b”而確定了滿足分支條件時,對指令“u”和“v”發(fā)出指令請求。在WB階段135,寄存器的寫入是以16位為單位進行的,即,以一個指令為單位。指令高速緩存103具有指令“s”和“t”存儲在其中。這里,高速緩存訪問地址IA1是用于指令“u”和“v”的地址,而高速緩存訪問數(shù)據(jù)IF1代表指令“s”和“t”。
在這一周期CY5中,分支單元106輸出分支指令運行通告信號114,用于表示通過運行分支指令“b”確認了分支條件得到滿足,從而導(dǎo)致發(fā)生分支。指令取出控制單元104通過控制信號118刪除包含在指令隊列103里的指令“d”。
下面,在周期CY6中,在WB階段135,延遲分支指令“b”被寫入到寄存器中,在EX階段134運行指令“c”,在ID階段133對分支目標(biāo)指令“s”進行解碼,并且在IF階段取出指令“u”和“v”。指令隊列103具有指令“t”、“u”和“v”保存在其中。這里,高速緩存訪問數(shù)據(jù)IF1代表指令“u”和“v”。
其后,在周期CY7中和隨后的各個周期中,也會執(zhí)行與上面所提到的那些處理相似的處理。如上面所說明的,當(dāng)進行分支時,陰影部分所表示的空白時隙“d”由分支目標(biāo)指令“s”的時隙填充,從而實現(xiàn)高效流水線式處理和致使沒有產(chǎn)生負擔(dān)。
在這里所介紹的實施例中,用于指令112的總線的寬度被擴展為總線115的寬度(指令長度)的兩倍大小,實現(xiàn)了用于供給指令的帶寬的增大,借此可以利用這額外的帶寬減少進行分支時引起的負擔(dān)。如果用于指令112的總線的寬度(指令長度)是總線115的兩倍或更多,那么用于指令112的總線的寬度就是足夠的。
如前面所述,在周期CY5中,在EX階段確定了延遲條件分支指令“b”的條件。如果此處進行了分支,那么從分支單元106發(fā)送出來的分支指令運行通告信號114被用于通知指令取出控制單元104發(fā)生了分支。指令取出控制單元104通過接收該通告,命令指令隊列103刪除在先數(shù)據(jù)“d”以及取出已經(jīng)在前一周期CY4中請求過的指令“s”和“t”。這意味著使得指令隊列103具有這樣的狀態(tài)分支目標(biāo)指令“s”和隨后的分支目標(biāo)指令“t”存在于其中。而且,指令取出控制單元104對后續(xù)的分支目標(biāo)指令“u”和“v”進行指令請求。通過執(zhí)行上面所說明的指令取出操作,分支目標(biāo)指令“s”可以被送到周期CY6中的ID階段,從而使得進行分支時沒有負擔(dān)周期(penalty cycle)。
圖5是表示在按照圖1中的本發(fā)明的實施例的信息處理單元中,當(dāng)不滿足分支條件以致不允許分支時的操作的時序圖。下文中所說明的操作過程采用了當(dāng)對圖2中的程序進行處理時的情況作為例子。高速緩存訪問地址IA1表示對其發(fā)出指令請求的地址。高速緩存訪問數(shù)據(jù)IF1代表當(dāng)在指令高速緩存102中發(fā)生了高速緩存命中時輸出給指令隊列103的數(shù)據(jù)。
由于在周期CY1到CY4中執(zhí)行的操作與圖4中所示的操作是相同的,所以這里省略了對它們的說明。下述是對周期CY5及其后續(xù)周期進行的說明。
在周期CY5中,在WB階段135,指令“a”被寫入到寄存器中,在EX階段134運行延遲分支指令“b”,在ID階段133對指令“c”(延遲時隙)進行解碼,并且在IA階段131對兩個指令“e”和“f”發(fā)出指令請求。因為指令“c”跟在延遲分支指令“b”的后面,所以即使當(dāng)分支發(fā)生時,指令“c”也會被送到ID階段。當(dāng)通過運行分支指令“b”確定了分支條件不滿足時,會對指令“e”和“f”發(fā)出指令請求,而不會取出分支目標(biāo)指令“s”和“t”。指令高速緩存103具有指令“d”存儲在其中。這里,高速緩存訪問地址IA1是用于指令“e”和“f”的地址。
在這個周期CY5中,分支單元106輸出通告信號114,用以表示通過運行分支指令“b”沒有確認滿足分支條件,從而使得不發(fā)生分支。指令取出控制單元104通過高速緩存訪問控制信號110對指令高速緩存102執(zhí)行關(guān)于指令“e”和“f”的指令請求。
接下來,在周期CY6中,在WB階段135,延遲分支指令“b”被寫入到寄存器中,在EX階段134運行指令“c”,在ID階段133對指令“d”進行解碼,并且在IF階段132取出指令“e”和“f”。指令高速緩存103具有指令“e”和“f”存儲在其中。這里,高速緩存訪問數(shù)據(jù)IF1代表指令“e”和“f”。
其后,在周期CY7及其后續(xù)各周期中,也會執(zhí)行類似于上面所提到的處理過程。如上面所說明的,當(dāng)分支不進行時,對分支目標(biāo)指令“s”發(fā)出的指令請求之后沒有進行在取出后的處理,如陰影部分所示,而是進行了順序處理,例如指令“d”的解碼,從而實現(xiàn)了高效的流水線處理并且未導(dǎo)致負擔(dān)。在周期CY5中,分支指令“b”的條件沒有得到滿足,以致不發(fā)生分支,從分支單元106中發(fā)送出來的分支指令運行通告信號114被用于通知指令取出單元104;通過分支指令,不發(fā)生分支。該指令取出控制單元104通過接收該通知,命令指令隊列103取消分支目標(biāo)指令的取出操作,并為指令“e”和“f”發(fā)出請求,其中指令“e”和“f”是存在于指令隊列103中的指令“d”的后續(xù)指令。
上面所述的取出操作在周期CY6中允許跟在延遲時隙“c”后面的指令“d”被送到ID階段,并且還允許后續(xù)指令“e”和“f”在周期CY6中被取出,從而使得即使在分支不進行時也不會導(dǎo)致負擔(dān)。
此外,在周期CY5中給出來自指令取出控制單元104的訪問取消信號111,該信號能夠阻止對外部主存儲器121的訪問,該訪問是由在請求分支目標(biāo)指令“s”和“t”時產(chǎn)生的高速緩存未命中而引起。更加明確地講,當(dāng)訪問取消信號111被輸入到指令高速緩存102中時,由于該指令高速緩存102不會給出總線請求116,因此該指令高速緩存102不會執(zhí)行對主存儲器121的訪問。結(jié)果,可以防止對總線的不必要的訪問,防止了性能降低。
按照這里所介紹的實施例,所給出的信息處理單元具有預(yù)取緩沖器103,用于通過具有兩倍于指令長度或更大的寬度的總線來取出指令;解碼器105,用于對存儲在預(yù)取緩沖器中的指令進行解碼;和運算單元107,用于運行經(jīng)解碼的指令。在分支指令已被解碼之后,指令取出單元104執(zhí)行用于預(yù)取分支目標(biāo)指令的預(yù)取請求,否則該指令取出控制單元104順序地執(zhí)行用于預(yù)取指令的預(yù)取請求。此外,在通過運行分支指令確認了分支的發(fā)生時,指令取出控制單元104將分支目標(biāo)指令取出到預(yù)取緩沖器103中,而當(dāng)分支不發(fā)生時,該指令取出控制單元104忽略分支目標(biāo)指令。
當(dāng)分支指令已解碼之后,執(zhí)行用于預(yù)取分支目標(biāo)指令的預(yù)取請求,否則順序地執(zhí)行用于預(yù)取指令的預(yù)取請求。這使得同時準(zhǔn)備兩種指令成為可能,其中一種是進行分支時的指令,而另一種是分支不進行時的指令。從而,這還使消除分支負擔(dān)成為可能,不管分支進行與否,無需使用大規(guī)模預(yù)測電路或其它類似機構(gòu)。此外,準(zhǔn)備信號114以用于通知指令高速緩存102或存儲器控制器,在執(zhí)行了分支指令之后不發(fā)生分支,這可以防止由高速緩存未命中引起的對主存儲器121的不必要的訪問。從而,不管分支指令是否被認可,通過使用一個簡單的邏輯電路,而無需使用大規(guī)模預(yù)測電路或其它類似電路,就可以使分支負擔(dān)的消除成為可能,因此避免了對外部總線120的不必要訪問。
本發(fā)明的實施例在所有方面都被看做是示例性的并且并不具有限制性,并且在權(quán)利要求的等價內(nèi)容的范圍和含義之內(nèi)的一切改變都希望包含在其中。本發(fā)明可以以其它具體形式實現(xiàn),而不會超出其主題或基本特征。
如上面所述,在分支指令已經(jīng)解碼之后,執(zhí)行用于預(yù)取分支目標(biāo)指令的預(yù)取請求,否則順序地執(zhí)行用于預(yù)取指令的預(yù)取請求。這使得準(zhǔn)備兩個指令成為可能,其中一個是在進行分支時的指令,而另一個是當(dāng)分支不進行時的指令。因此,不管分支進行與否,無需使用大規(guī)模預(yù)測電路或其它類似電路,可以使消除分支負擔(dān)成為可能。
權(quán)利要求
1.一種信息處理單元,包括一預(yù)取緩沖器,用于通過具有兩倍于指令長度或更大的寬度的總線來取出指令,以存儲所預(yù)取出的指令;一解碼器,用于對存儲在所述預(yù)取緩沖器中的指令進行解碼;一運算單元,用于運行經(jīng)解碼的指令;一指令請求控制電路,當(dāng)解碼出分支指令時,執(zhí)行用于預(yù)取分支目標(biāo)指令的預(yù)取請求,否則順序地執(zhí)行用于預(yù)取指令的預(yù)取請求;和一預(yù)取控制電路,當(dāng)通過運行分支指令確認了分支發(fā)生時,將分支目標(biāo)指令取出到所述預(yù)取緩沖器中,而當(dāng)分支不發(fā)生時,忽略分支目標(biāo)指令。
2.根據(jù)權(quán)利要求1的信息處理單元,其中所述預(yù)取緩沖器通過一指令高速緩沖存儲器從一主存儲器中預(yù)取指令。
3.根據(jù)權(quán)利要求2的信息處理單元,其中當(dāng)分支不產(chǎn)生時,所述預(yù)取控制電路向指令高速緩沖存儲器輸出一個用于取消預(yù)取請求的控制信號,從而防止由高速緩存未命中引起的對主存儲器的訪問,其中該預(yù)取請求已經(jīng)被執(zhí)行以預(yù)取分支目標(biāo)指令。
4.根據(jù)權(quán)利要求2的信息處理單元,其中所述預(yù)取緩沖器通過具有兩倍于指令長度或更大的寬度的總線從指令高速緩沖存儲器中預(yù)取指令,并且通過具有等于指令長度的寬度的總線將該指令輸出到所述解碼器。
5.根據(jù)權(quán)利要求4的信息處理單元,其中所述預(yù)取緩沖器最多存儲四條指令。
6.根據(jù)權(quán)利要求1的信息處理單元,其中所述解碼器和所述運算單元以一條指令為單位執(zhí)行操作。
7.根據(jù)權(quán)利要求1的信息處理單元,其中當(dāng)出現(xiàn)延遲分支指令時,所述指令請求控制電路和所述預(yù)取控制電路執(zhí)行操作,使得分支在跟在延遲分支指令后面的一指令之后發(fā)生。
8.根據(jù)權(quán)利要求1的信息處理單元,其中分支指令包括條件分支指令和/或無條件分支指令。
9.根據(jù)權(quán)利要求1的信息處理單元,還包括一用于在其中寫入所述運算單元的運行結(jié)果的寄存器。
10.一種信息處理方法,包括第一預(yù)取步驟,通過一個具有兩倍于指令長度或更大的寬度的總線來預(yù)取指令,以存儲所預(yù)取的指令;解碼步驟,對預(yù)取到的指令進行解碼;運算步驟,運行經(jīng)解碼的指令;指令請求步驟,當(dāng)解碼出分支指令時,執(zhí)行用于預(yù)取分支目標(biāo)指令的預(yù)取請求,否則順序地執(zhí)行用于預(yù)取指令的預(yù)取請求;和第二預(yù)取步驟,當(dāng)通過運行分支指令確認了分支發(fā)生時,預(yù)取分支目標(biāo)指令,而當(dāng)分支不發(fā)生時,忽略分支目標(biāo)指令。
11.根據(jù)權(quán)利要求10的信息處理方法,其中所述第一預(yù)取步驟通過一指令高速緩沖存儲器從主存儲器中預(yù)取指令。
12.根據(jù)權(quán)利要求11的信息處理方法,其中當(dāng)分支不發(fā)生時,所述第二預(yù)取步驟向指令高速緩沖存儲器輸出一個用于取消預(yù)取請求的控制信號,從而防止由高速緩存未命中引起的對主存儲器的訪問,其中該預(yù)取請求已經(jīng)被執(zhí)行以預(yù)取分支目標(biāo)指令。
13.根據(jù)權(quán)利要求11的信息處理方法,其中所述第一預(yù)取步驟通過具有兩倍于指令長度或更大的寬度的總線從指令高速緩沖存儲器中預(yù)取指令,并且通過具有等于指令長度的寬度的總線將該指令輸出到所述解碼步驟。
14.根據(jù)權(quán)利要求13的信息處理方法,其中所述第一預(yù)取步驟最多存儲四條指令。
15.根據(jù)權(quán)利要求10的信息處理方法,其中所述解碼步驟和所述運行步驟以一條指令為單位執(zhí)行操作。
16.根據(jù)權(quán)利要求10的信息處理方法,其中當(dāng)出現(xiàn)延遲分支指令時,所述指令請求步驟和所述第二預(yù)取步驟執(zhí)行操作,使得分支在跟在延遲分支指令后面的一指令之后發(fā)生。
17.根據(jù)權(quán)利要求10的信息處理方法,其中所述分支指令包括條件分支指令和/或無條件分支指令。
18.根據(jù)權(quán)利要求10的信息處理方法,其中所述運行步驟向一寄存器寫入運行結(jié)果。
全文摘要
本發(fā)明給出一種信息處理單元,包括一預(yù)取緩沖器,用于通過具有兩倍于指令長度或更大的寬度的總線取出指令,以存儲所預(yù)取出的指令;一解碼器,用于對存儲在所述預(yù)取緩沖器中的指令進行解碼;和一運算單元,用于運行經(jīng)解碼的指令。一指令請求控制電路,當(dāng)解碼出分支指令時,執(zhí)行用于預(yù)取分支目標(biāo)指令的預(yù)取請求,否則順序地執(zhí)行用于預(yù)取指令的預(yù)取請求。一預(yù)取控制電路,當(dāng)通過運行分支指令確認了分支發(fā)生時,將分支目標(biāo)指令取出到所述預(yù)取緩沖器中,而當(dāng)分支不發(fā)生時,忽略分支目標(biāo)指令。
文檔編號G06F9/38GK1497436SQ200310101739
公開日2004年5月19日 申請日期2003年10月22日 優(yōu)先權(quán)日2003年10月22日
發(fā)明者猿渡俊明, 末武清次, 次 申請人:富士通株式會社