專利名稱::具有預(yù)取指令的微處理器及預(yù)取至其高速緩存的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及微處理器的預(yù)取指令(prefetchinstruction)的領(lǐng)域,尤指一具有預(yù)取指令的微處理器及預(yù)取至其高速緩存的方法,該預(yù)取指令是可預(yù)取一特定數(shù)量的快取線(cacheline)。
背景技術(shù):
:現(xiàn)代的微處理器皆包含高速緩存。高速緩存儲(chǔ)存了一部份存于計(jì)算機(jī)系統(tǒng)的其它內(nèi)存的數(shù)據(jù)。當(dāng)處理器執(zhí)行一需參照數(shù)據(jù)的指令時(shí),處理器首先檢查該數(shù)據(jù)是否存于高速緩存中。若是,則既然數(shù)據(jù)已存在高速緩存中,該指令便可立即執(zhí)行。否則,該指令必須等到數(shù)據(jù)從其它內(nèi)存提取至高速緩存時(shí),才能執(zhí)行。數(shù)據(jù)的提取可能得花相當(dāng)長(zhǎng)的時(shí)間一一在某些情況下,所花時(shí)間是處理器執(zhí)行指令所需的一個(gè)數(shù)量級(jí)以上。許多在微處理器上執(zhí)行的軟件程序需要處理大量的連續(xù)數(shù)據(jù)。例如,這大量的連續(xù)數(shù)據(jù)可能介于一百到一百萬個(gè)字節(jié)之間。此種程序的例子如多媒體相關(guān)的音頻或視頻程序,其處理大量的數(shù)據(jù),像是視頻數(shù)據(jù)或波形文件(Wavefile)數(shù)據(jù)。一般大量的數(shù)據(jù)都存在外部的內(nèi)存,諸如系統(tǒng)內(nèi)存或視頻頁框緩沖器(videoframebuffer)。為了讓處理器能處理數(shù)據(jù),必須將數(shù)據(jù)從外部?jī)?nèi)存提取至處理器。若所需的一部分?jǐn)?shù)據(jù)不在高速緩存中,則由于數(shù)據(jù)的提取及處理所需時(shí)間并不相同,便可能造成一種情形,即處理器已準(zhǔn)備好執(zhí)行另一個(gè)指令以處理數(shù)據(jù),但卻無法動(dòng)作,而須坐等數(shù)據(jù)被提取至處理器。如此處理器的使用便缺乏效率,并可能導(dǎo)致如多媒體系統(tǒng)效能的降低。在解決這項(xiàng)問題上,現(xiàn)代的微處理器已覺察到在很多時(shí)候,程序員會(huì)在實(shí)際處理數(shù)據(jù)的指令執(zhí)行前,像是算術(shù)指令(arithmeticinstruction),便已知道他需要這些數(shù)據(jù)。因此,現(xiàn)代的微處理器已將預(yù)取指令加入或包含在其指令集中,這些預(yù)取指令是在數(shù)據(jù)被需要前,即提取該數(shù)據(jù)的一快取線至處理器的高速緩存中。快取線是能在高速緩存與其它內(nèi)存間移轉(zhuǎn)的最小單位數(shù)據(jù)。此種具預(yù)取指令的微處理器的一例即英特爾(Intel)PentiumIII處理器。PentiumIII在其串流SIMD延伸(StreamingSIMDExtensions,SSE)指令集中,包含了PREFETCH指令。在許多軟件應(yīng)用程序中,程序員知道他將要處理到大量的連續(xù)數(shù)據(jù),即許多快取線。因此,程序員在其程序中加入預(yù)取指令,像是PentiumIII的PREFETCH,以預(yù)取一快取線。程序員在實(shí)際要執(zhí)行快取線數(shù)據(jù)的算術(shù)或邏輯運(yùn)算的指令的多個(gè)指令前,加入預(yù)取指令。因此,程序可能有許多預(yù)取指令呈點(diǎn)狀分布其間。所加入的這些預(yù)取指令使得程序代碼以及所需執(zhí)行的指令數(shù)都增加了。再者,在常見的方法中,程序員不僅使預(yù)取指令呈點(diǎn)狀分布于程序代碼中,還需努力將其放至適當(dāng)位置,使其執(zhí)行能最佳化。也就是,程序員必須嘗試去決定預(yù)取指令的執(zhí)行時(shí)機(jī),以使得數(shù)據(jù)在指令需要用到時(shí),就已經(jīng)在高速緩存中了。特別是,程序員在將預(yù)取指令放進(jìn)程序代碼時(shí),要嘗試使其不會(huì)相互干擾。即,在現(xiàn)有的處理器中,若一預(yù)取指令正在執(zhí)行且一后續(xù)的預(yù)取指令隨之出現(xiàn),則其中一預(yù)取指令可能會(huì)被視為虛擬操作指令(no-opinstruction),只耗費(fèi)脈沖而未實(shí)際執(zhí)行預(yù)取。這樣就無法完成程序員想做的,且很可能使效能變得較差。程序員靠自己動(dòng)手加入預(yù)取指令時(shí),所面臨的一項(xiàng)問題是,核心/總線脈沖比(core/busclockratio)是不固定的。在許多現(xiàn)代的微處理器中,連接處理器與系統(tǒng)其它部分的處理器總線,其脈沖頻率不同于處理器內(nèi)部邏輯運(yùn)作的脈沖頻率,后者一般稱為核心脈沖頻率。核心/總線脈沖比即為處理器核心脈沖頻率對(duì)處理器總線脈沖頻率的比率。核心脈沖與處理器總線脈沖頻率的差異,部分要?dú)w固于在分類所生產(chǎn)的處理器時(shí),常依據(jù)一已知集成電路所能穩(wěn)定維持的核心脈沖頻率。因此,情況可能是,一種已知的處理器設(shè)計(jì)可能會(huì)被分到四個(gè)不同核心脈沖頻率的類別中,像是800MHz、900MHz、1GHz以及1.2GHz。然而,所有這些處理器類別皆必須在設(shè)計(jì)為以一或二個(gè)固定總線脈沖頻率,如100MHz或133MHz來在主機(jī)板上運(yùn)作。所以,在上例中,就可能產(chǎn)生八種不同的核心/總線脈沖比。因此,要完成一典型的預(yù)取動(dòng)作,其所需的核心脈沖有八種不同的可能值。要完成一典型的預(yù)取動(dòng)作,其所需核心脈沖是存在一變動(dòng)范圍的這個(gè)事實(shí),使得程序員很難有效地自己動(dòng)手加入常見的預(yù)取指令。假定最高的核心/總線脈沖比是12,并假設(shè)一典型的預(yù)取指令要花約10個(gè)總線脈沖或約120個(gè)核心脈沖。假定程序員正在寫一個(gè)循環(huán)(loop),其用來處理單一快取線的數(shù)據(jù),并花大約60個(gè)核心脈沖執(zhí)行,而且除了預(yù)取指令所產(chǎn)生的總線動(dòng)作外,不需要依靠其它總線的動(dòng)作。在此例中,程序員可能選擇每重復(fù)(iteration)一次該循環(huán),即每120個(gè)核心脈沖就執(zhí)行一預(yù)取指令,以顧及最高核心/總線脈沖比的情形。在脈沖比為12時(shí),程序員的這項(xiàng)選擇可能運(yùn)作得很好。然而,若使用者系統(tǒng)的脈沖比為6,一典型的預(yù)取指令僅需約60個(gè)核心脈沖,這只重復(fù)一次循環(huán)而已。在此情況下,預(yù)取指令只有一半的時(shí)間有在運(yùn)作,如此可能導(dǎo)致處理器停頓下來,等待數(shù)據(jù)被提取至高速緩存中。因此,我們所需要的是一種具備可有效進(jìn)行預(yù)取的預(yù)取指令的微處理器,并且,該預(yù)取指令可有效地置入PentiumIII的運(yùn)算碼空間。
發(fā)明內(nèi)容本發(fā)明提供一種微處理器,其支持一種可允許程序員指定快取線預(yù)取數(shù)量的預(yù)取指令。于是,為達(dá)到前述目的,本發(fā)明的一項(xiàng)特征是,提供一種微處理器,其執(zhí)行一預(yù)取指令,該預(yù)取指令指定一組快取線,以便將其從一系統(tǒng)內(nèi)存預(yù)取至該微處理器的一高速緩存中。該微處理器包括一預(yù)取計(jì)數(shù)緩存器(prefetchcountregister),以儲(chǔ)存所余的待預(yù)取快取線的一計(jì)數(shù)。該微處理器也包括一通用緩存器(generalpurposeregister),耦接至該預(yù)取計(jì)數(shù)緩存器,用以儲(chǔ)存該計(jì)數(shù)的一初始值。該初始值由先于該預(yù)取指令執(zhí)行的一指令加載該通用緩存器。該微處理器也包括一控制邏輯電路(controllogic),耦接至該預(yù)取計(jì)數(shù)緩存器,用以將該初始值從通用緩存器復(fù)制至預(yù)取計(jì)數(shù)緩存器,以響應(yīng)譯碼該預(yù)取指令的動(dòng)作。該微處理器還包括一預(yù)取地址緩存器,耦接至該控制邏輯電路,用以儲(chǔ)存該組快取線中,所要預(yù)取的下一條快取線地址;一比較器,耦接至該控制邏輯電路,用以在存取該組快取線之前,判斷微處理器中自由響應(yīng)緩沖器的數(shù)量是否大于一門檻值;一仲裁器,耦接至該控制邏輯電路,用以決定在有其它要求者的情形下,該預(yù)取指令是否被允許存取該高速緩存;一重新執(zhí)行緩沖器,耦接至該控制邏輯電路,在該仲裁器不允許該預(yù)取指令存取該高速緩存的情況下,用以儲(chǔ)存關(guān)聯(lián)于該預(yù)取指令的狀態(tài);其中,所述的控制邏輯電路是在預(yù)取該組快取線前,將該計(jì)數(shù)的該初始值從通用緩存器復(fù)制至預(yù)取計(jì)數(shù)緩存器。另一方面,本發(fā)明的一項(xiàng)特征是,提供一種微處理器。該微處理器包括一指令譯碼器(instructiondecoder),其譯碼-指令集中的指令。該指令集包含由一英特爾PentiumIII處理器所定義的一多個(gè)指令的集合。該指令集也包括一重復(fù)預(yù)取指令。該重復(fù)預(yù)取指令包含一PentiumIIIPREFETCH指令運(yùn)算碼。一位在該運(yùn)算碼前的PentiumIIIREP字符串指令前置碼(prefix)以及指定預(yù)取快取線數(shù)量的一計(jì)數(shù)。另一方面,本發(fā)明的一項(xiàng)特征是,提供一種用于具一系統(tǒng)內(nèi)存的系統(tǒng)中的微處理器。該微處理器包括一用以譯碼一預(yù)取指令的指令譯碼器,該預(yù)取指令指定了從系統(tǒng)內(nèi)存所要預(yù)取快取線的一計(jì)數(shù)及該快取線在系統(tǒng)內(nèi)存中的一地址。該微處理器也包括一地址緩存器(addressregister),耦接至該指令譯碼器,用以儲(chǔ)存該預(yù)取指令所指定的地址。該微處理器也包括一計(jì)數(shù)緩存器,耦接至指令譯碼器,用以儲(chǔ)存指定于該預(yù)取指令的該計(jì)數(shù)。該微處理器也包括一控制邏輯電路,耦接至該地址緩存器,用以控制微處理器從系統(tǒng)內(nèi)存預(yù)取地址緩存器與計(jì)數(shù)緩存器中所指定的快取線至微處理器的一高速緩存中。另一方面,本發(fā)明的一項(xiàng)特征是,提供一種微處理器預(yù)取指令或者快取線至其高速緩存的方法。該方法包括偵測(cè)一重復(fù)預(yù)取指令,該重復(fù)預(yù)取指令是指定一計(jì)數(shù)值的快取線,以從一系統(tǒng)內(nèi)存地址進(jìn)行預(yù)取,并將該計(jì)數(shù)值從微處理器的一通用緩存器復(fù)制至一預(yù)取計(jì)數(shù)緩存器,以及儲(chǔ)存該地址于一預(yù)取地址緩存器中。該方法也包括預(yù)取該預(yù)取地址緩存器所指定的一快取線至該高速緩存,遞減該預(yù)取計(jì)數(shù)緩存器中的計(jì)數(shù),以及遞增該預(yù)取地址緩存器中的地址。該方法也包括重復(fù)該預(yù)取遞減及遞增的步驟,直到預(yù)取計(jì)數(shù)緩存器的值為零。本發(fā)明的一個(gè)優(yōu)點(diǎn)是,其可向下兼容于現(xiàn)有的x86指令集架構(gòu)。此因PentiumIII在一REP前置碼位于PREFETCH指令之前時(shí),不會(huì)產(chǎn)生異常(exception)。因而,依據(jù)本發(fā)明,包含本發(fā)明的重復(fù)預(yù)取指令的軟件程序,可在一支持重復(fù)預(yù)取指令的微處理器上執(zhí)行得更有效率,且該程序也能在一PentiumIII處理器上正確執(zhí)行。本發(fā)明的另一個(gè)優(yōu)點(diǎn)是,通過再使用PREFETCH運(yùn)算碼與REP前置碼組合起來,以虛擬地產(chǎn)生新的運(yùn)算碼,而保留x86的運(yùn)算碼空間。再一個(gè)優(yōu)點(diǎn)則是,相較于常見的單一快取線預(yù)取指令,本發(fā)明潛在地縮短了軟件程序代碼,此因程序所需的預(yù)取指令更少了。還有一個(gè)優(yōu)點(diǎn)是,本發(fā)明通過較常見方法更有效率地使用處理器總線,而潛在地增進(jìn)系統(tǒng)的效能。再有一個(gè)優(yōu)點(diǎn)則是,本發(fā)明由于減輕了可能存在不同的核心/總線脈沖比所帶來的問題,而能較常見方法將數(shù)據(jù)更有效率地移入微處理器的高速緩存中,借以潛在地促進(jìn)處理效能。本發(fā)明的其它特征與優(yōu)點(diǎn),與考察本說明書其余部分與附圖后,將可更加明白。圖1為本發(fā)明的一微處理器的方塊圖;圖2為相關(guān)技術(shù)的PentiumIIIPREFETCH指令的方塊圖;圖3為相關(guān)技術(shù)的附有一REP字符串運(yùn)算前置碼的PentiumIII字符串指令的方塊圖;圖4為本發(fā)明的一重復(fù)預(yù)取指令的方塊圖;圖5為依本發(fā)明解說圖1的微處理器如何執(zhí)行圖4的重復(fù)預(yù)取指令的運(yùn)作流程圖;圖6為依本發(fā)明進(jìn)一步解說圖1的微處理器如何執(zhí)行圖4的重復(fù)預(yù)取指令的運(yùn)作流程圖。具體實(shí)施例方式現(xiàn)請(qǐng)參閱圖1,其顯示本發(fā)明的一微處理器100的方塊圖。微處理器100包含一指令譯碼器102,其從一指令高速緩存(未顯示于圖中)接收指令字節(jié)。在一具體實(shí)施例中,該指令字節(jié)包含x86架構(gòu)的指令字節(jié)。指令譯碼器102譯碼該指令字節(jié),尤其,指令譯碼器102依據(jù)本發(fā)明,組態(tài)為譯碼一重復(fù)預(yù)取指令,此將在關(guān)于圖4部分?jǐn)⑹?。在敘述圖4的重復(fù)預(yù)取指令前,以下關(guān)于圖2與圖3部份,將先敘述PentiumIII的PREFETCH與REP字符串指令?,F(xiàn)請(qǐng)參閱圖2,其顯示一相關(guān)技術(shù)的PentiumIIIPREFETCH指令200的方塊圖。PentiumIII處理器的指令集包括一PREFETCH指令,其將一快取線從系統(tǒng)內(nèi)存提取至處理器的快取層級(jí)體(cachehierarchy)中一位置。PentiumIIIPREFETCH指令是詳述于IA-32IntelArchitectureSoftwareDeveloper’sManual,Volume2InstructionSetReference,2001的3-600至3-601頁,通過參照可將此數(shù)據(jù)并入本說明書。PREFETCH指令200包含一PREFETCH運(yùn)算碼202。PREFETCH運(yùn)算碼202具一默認(rèn)值0x0F18,以便將PREFETCH指令200與PentiumIII指令集的其它指令區(qū)分開來。PREFETCH指令200也包含一ModR/M字節(jié)204。PREFETCH指令200也包含地址操作數(shù)(addressoperands)206,其指定系統(tǒng)內(nèi)存中一字節(jié)的地址。PREFETCH指令200從系統(tǒng)內(nèi)存預(yù)取含有指定字節(jié)的快取線至處理器的快取層級(jí)體。ModR/M字節(jié)204在PREFETCH指令200中執(zhí)行兩項(xiàng)功能。第一項(xiàng)功能是指定一尋址模式(addressingmode)。該尋址模式?jīng)Q定了地址操作數(shù)206將如何用于產(chǎn)生包含所要預(yù)取快取線的字節(jié)的一有效地址。該有效地址可用不同的方式指定。例如,有效地址操作數(shù)206可在處理器的緩存器檔案(registerfile)的緩存器中,像是DSESI緩存器,以節(jié)區(qū)偏移量(segmentoffset)的格式來指定。依照該尋址模式,附加的字節(jié),諸如SIB字節(jié)、位移(displacement)及/或直接(immediate)字節(jié),可能包含用于產(chǎn)生有效地址的地址操作數(shù)206。PentiumIII指令的一般格式以及該尋址模式的解釋是詳述于IA-32IntelArehitectureSoftwareDeveloper’sManual,Volume2InstructionSetReference,2001的2-1至2-7頁,通過參照可將此數(shù)據(jù)并入本說明書。PREFETCH指令200的ModR/M字節(jié)204的第二項(xiàng)功能是指定一位置指示(localityhint)。該位置指示指明要將所指定的快取線預(yù)取至PentiumIII處理器的快取層級(jí)體中哪個(gè)位置。由每一位置指示204默認(rèn)值所指明的快取層級(jí)體的位置,是因處理器不同而改變。PentiumIIIPREFETCH指令200的一項(xiàng)缺點(diǎn)是,其不允許程序員一指定多條所要預(yù)取的快取線,而只能確保單一快取線的預(yù)取功能?,F(xiàn)請(qǐng)參閱圖3,其顯示一相關(guān)技術(shù)的附有一REP字符串運(yùn)算前置碼的PentiumIII字符串指令300的方塊圖。x86架構(gòu)的指令集,包括PentiumIII處理器包含了執(zhí)行字節(jié)、字組或雙字組(duble-words)數(shù)據(jù)演算的字符串運(yùn)算指令。此種運(yùn)算的例子()從一連接埠輸入、輸出至一連接端口、從內(nèi)存一位置移至另一位置、從內(nèi)存加載至處理器的緩存器、從處理器的緩存器儲(chǔ)存到內(nèi)存中、比較或搜尋。字符串運(yùn)算是由一字符串指令運(yùn)算碼304所指定,其包含于REP字符串指令300。REP字符串指令300包含一REP前置碼302,可指示處理器重復(fù)執(zhí)字符串指令運(yùn)算碼304所指定的字符串運(yùn)算,其重復(fù)次數(shù)則由REP字符串指令300一計(jì)數(shù)306來指定。REP前置碼302具下面兩個(gè)默認(rèn)值其中的一0xF2或0xF3,其視所要重復(fù)執(zhí)行的特定字符串指令而定。程序員在執(zhí)行REP字符串指令300前,即將計(jì)數(shù)300加載PentiumIII緩存器檔案盼ECX緩存器中。REP字符串運(yùn)算前置碼指令300詳述于IA-32IntelArchitectureSoft()areDeveloper’sManual,Volume2I()tructionSetReference,2001的3-677至3-679頁,通過參照可將此數(shù)據(jù)并入本說明書?,F(xiàn)請(qǐng)參閱圖4,其顯示本發(fā)明的一重復(fù)預(yù)取指令(REPPREMTCH)400的方塊圖。重復(fù)預(yù)取指令400包含一REP前置碼402,其后則有一PREFETCH運(yùn)算碼404、一ModR/M字節(jié)406、地址操作數(shù)408以及一計(jì)數(shù)412。REP前置碼402類似于圖3的REP前置碼302。重復(fù)預(yù)取指令400中REP前置碼402的存在,顯示將要預(yù)取多條快取線。在一具體實(shí)施例中,所要預(yù)取快取線的數(shù)量,即計(jì)數(shù)412,是由圖1的ECX緩存器106所指定。PREFETCH運(yùn)算碼404類似于圖2的PREFETCH運(yùn)算碼202,而ModR/M字節(jié)406則類似于圖2的ModR/M字節(jié)204。同樣地,地址操作數(shù)408類似于圖2的地址操作數(shù)206。有利地,重復(fù)預(yù)取指令400使程序員能指定預(yù)取多條快取線。重復(fù)預(yù)取指令400的其它優(yōu)點(diǎn)將敘述于后。請(qǐng)?jiān)賲㈤唸D1,微處理器100也包含耦接至指令譯碼器102的控制邏輯電路144。在譯碼圖4的重復(fù)預(yù)取指令400后,指令譯碼器102即告知控制邏輯電路144,一重復(fù)預(yù)取指令400已被譯碼。微處理器100也包含一緩存器檔案104,耦接至指令譯碼器102。在一具體實(shí)施例中,緩存器檔案104包含實(shí)質(zhì)上近似于PentiumIII緩存器檔案的緩存器。尤其,緩存器檔案104包含類似于PentiumIII緩存器檔案的ECX緩存器的一ECX緩存器106。在執(zhí)行重復(fù)預(yù)取指令400之前,ECX緩存器106加載了重復(fù)預(yù)取指令400所要預(yù)取快取線的計(jì)數(shù)值。緩存器檔案104也包含其它用來儲(chǔ)存圖4重復(fù)預(yù)取指令400的地址操作數(shù)408的緩存器。該地址操作數(shù)408是用以計(jì)算重復(fù)預(yù)取指令400的有效地址。在譯碼重復(fù)預(yù)取指令400后,指令譯碼器102及/或緩存器檔案104即提供地址操作數(shù)408至地址產(chǎn)生器114。微處理器100也包含一地址產(chǎn)生器114,耦接至緩存器檔案104。地址產(chǎn)生器114從緩存器檔案104及/或指令譯碼器102接收地址操作數(shù)408,并依據(jù)地址操作數(shù)408產(chǎn)生一有效地址108。微處理器100也包含一多任務(wù)器116,耦接至地址產(chǎn)生器114。多任務(wù)器116的第一輸入端從地址產(chǎn)生器114接收有效地址108。多任務(wù)器116的第二輸入端接收一遞增器(incrementer)126的輸出。多任務(wù)器116依據(jù)由控制邏輯電路144而來的一控制信號(hào),選取兩輸入端其中之一。微處理器100也包含一重復(fù)預(yù)取地址(RPA)緩存器122,耦接至多任務(wù)器116的輸出端。RPA緩存器122儲(chǔ)存及輸出一重復(fù)預(yù)取地址(RPA)186,其是所要預(yù)取的快取線的當(dāng)前地址(currentaddress)。一開始,RPA緩存器122儲(chǔ)存了地址產(chǎn)生器114所產(chǎn)生的有效地址108。RPA186則由RPA緩存器122輸出至遞增器126。遞增器126將RPA186遞增一快取線的大小,并將遞增后的地址送回至多任務(wù)器116的第二輸入端,以使得每次預(yù)取一快取線時(shí),RPA緩存器122中的RPA186可以被更新。在一具體實(shí)施例中,一快取線的大小為32字節(jié)。微處理器100也包含一第二多任務(wù)器146,耦接至RPA緩存器122。多任務(wù)器146從RPA緩存器122接收RPA186。多任務(wù)器146也從地址產(chǎn)生器114接收有效地址108。多任務(wù)器146也接收一重新執(zhí)行緩沖地址(replaybufferaddress)132、儲(chǔ)存緩沖(SB)地址134。表格掃描地址(tablewalkaddress)136以及響應(yīng)緩沖(RB)地址138。微處理器100也包含一耦接至多任務(wù)器146的高速緩存154,其由多任務(wù)器146的輸出來尋址。高速緩存154是代表微處理器100的快取層級(jí)體。在一具體實(shí)施例中,高速緩存154包含一一階(level-1)數(shù)據(jù)高速緩存與一二階(level-2)數(shù)據(jù)高速緩存。重復(fù)預(yù)取指令400從系統(tǒng)內(nèi)存所預(yù)取的快取線則提取至高速緩存154。微處理器100也包含一標(biāo)志數(shù)組152,或目錄152,耦接至多任務(wù)器146。標(biāo)志數(shù)組152也由多任務(wù)器146的輸出加以尋址。標(biāo)志數(shù)組152儲(chǔ)存了關(guān)聯(lián)于存在高速緩存154中的快取線的標(biāo)志與狀態(tài)。標(biāo)志數(shù)組152產(chǎn)生一快取命中信號(hào)(cachehitsignal)162。若多任務(wù)器的輸出吻合于存于標(biāo)志數(shù)組152的一有效標(biāo)志,則標(biāo)志數(shù)組152產(chǎn)生一真值的快取命中信號(hào)162。否則,標(biāo)志數(shù)組152產(chǎn)生一假值的快取命中信號(hào)162??烊∶行盘?hào)162是被送至控制邏輯電路144。微處理器100也包含一耦接至多任務(wù)器146的轉(zhuǎn)換參照緩沖器(translationlookasidebuffer,TLB)156。TLB156也由多任務(wù)器146的輸出來尋址。TLB156快取了頁碼表(pagetable)目錄信息,以減少轉(zhuǎn)換頁碼所需的時(shí)間。TLB156產(chǎn)生一TLB命中信號(hào)164。若關(guān)聯(lián)于多任務(wù)器146所輸出地址的有效頁碼目錄信息是存在于TLB156則TLB156產(chǎn)生一真值的TLB命中信號(hào)164。反的,則TLB156產(chǎn)生一假值的TLB命中信號(hào)164,且必須執(zhí)行表格掃描以獲得所要的頁碼目錄信息。TLB命中信號(hào)164則被送至控制邏輯電路144。微處理器100也包含一耦接至ECX緩存器106的第三多任務(wù)器118,其在一第一輸入端,從ECX緩存器106接收?qǐng)D4的重復(fù)預(yù)取指令400的計(jì)數(shù)值412。多任務(wù)器118在上第二輸入端接收一遞減器(decrementer)128的輸出。多任務(wù)器118依據(jù)由控制邏輯電路144而來的一控制信號(hào),選取兩輸入端其中之一。微處理器100也包含一重復(fù)預(yù)取計(jì)數(shù)(RPC)緩存器124,耦接至多任務(wù)器118的輸出。RPC緩存器124儲(chǔ)存并輸出一重復(fù)預(yù)取計(jì)數(shù)(RPC)188,其為重復(fù)預(yù)取指令400當(dāng)前所余的預(yù)取快取線的數(shù)量。一開始,RPC緩存器124儲(chǔ)存了存于ECX緩存器106的重復(fù)預(yù)取指令400的計(jì)數(shù)值412。RPC188則由RPC緩存器124輸出至遞減器128。遞減器128將RPC188遞減一,并將遞減后的計(jì)數(shù)值送回至多任務(wù)器118的第二輸入端,以使得每次預(yù)取一快取線時(shí),RPC緩存器124中的RPC188可以被更新。RPC188也由RPC緩存器124送至控制邏輯電路144。微處理器100也包含一重復(fù)預(yù)取有效(RPV)緩存器142,耦接至控制邏輯電路144。RPV緩存器142儲(chǔ)存及輸出一重復(fù)預(yù)取有效(RPV)位184。若一重復(fù)預(yù)取指令400將要執(zhí)行,則RPV位184為真,如下文關(guān)于圖5及圖6部分所述。微處理器100也包含一耦接至多任務(wù)器146的仲裁器(arbiter)148,其從RPV緩存器142接受RPV位184。仲裁器148也與控制邏輯電路144進(jìn)行溝通。仲裁器148在微處理器100內(nèi)的各項(xiàng)資源間進(jìn)行仲裁,這些資源是要求存取高速緩存154。標(biāo)志數(shù)組152及/或TLB156。在一具體實(shí)施例中,這些資源包括重復(fù)預(yù)取指令400、表格掃描邏輯電路、儲(chǔ)存緩沖器、響應(yīng)緩沖器166及一重新執(zhí)行緩沖器158。依據(jù)RPV位184及來自控制邏輯電路144的信息(如下所述),仲裁器148控制多任務(wù)器146選取多任務(wù)器146前述的其中一輸入端,以使得其中一項(xiàng)資源可以存取高速緩存154、標(biāo)志數(shù)組152及/或TLB156的內(nèi)容。在一具體實(shí)施例中,在競(jìng)逐高速緩存154、標(biāo)志數(shù)組152及/或TLB156的存取權(quán)的各項(xiàng)資源中,重復(fù)預(yù)取指令400所具的優(yōu)先權(quán)為最低的。微處理器100也包含一耦接至控制邏輯電路144的重新執(zhí)行緩沖器158。當(dāng)一重復(fù)預(yù)取指令400未贏得仲裁器148對(duì)高速緩存154、標(biāo)志數(shù)組152及/或TLB156存取權(quán)的仲裁,重新執(zhí)行緩沖器158便用來儲(chǔ)存該重復(fù)預(yù)取指令400的某些狀態(tài)。重新執(zhí)行緩沖器158有利地使該重復(fù)預(yù)取指令400能持續(xù)其壽命。這特別重要,因?yàn)橹貜?fù)預(yù)取指令400很少能贏得足夠時(shí)間的存取權(quán),以在一具更高優(yōu)先權(quán)的資源先取得存取權(quán)前,完成計(jì)數(shù)412所指定的全部快取線的預(yù)取動(dòng)作。微處理器100也包含一耦接至控制邏輯電路144的當(dāng)前處理器級(jí)(currentprocessorlevel,CPL緩存器112,其儲(chǔ)存了微處理器100的CPL。CPL指定了微處理器100的一當(dāng)前特權(quán)級(jí)(currentprivilegelevel)。CPL通常被操作系統(tǒng)用來作為一種保護(hù)系統(tǒng)的工具。例如,特權(quán)級(jí)不足的程序可能無法執(zhí)行某些特定指令,例如輸入/輸出指令。在一具體實(shí)施例中,CPL包含一范圍由0到3的值,實(shí)際對(duì)應(yīng)至PentiumIII處理器的第0至第3環(huán)層級(jí)(ringlevel)。微處理器100也包含一耦接至控制邏輯電路144的總線接口單元(businterfaceunit)172,其將微處理器100耦接至一處理器總線174,微處理器乃借以從系統(tǒng)內(nèi)存提取數(shù)據(jù)。在本說明書中,系統(tǒng)內(nèi)存是指微處理器100的高速緩存154外的內(nèi)存,像是系統(tǒng)的DRAM或視頻頁框緩沖器。尤其,總線接口單元172從系統(tǒng)內(nèi)存預(yù)取了一重復(fù)預(yù)取指令400所指定的多條快取線。微處理器100也包含一耦接至總線接口單元172的響應(yīng)緩沖器(RB)166。響應(yīng)緩沖器166通過總線接口單元172接收從系統(tǒng)內(nèi)存提取的數(shù)據(jù)。尤其,響應(yīng)緩沖器166從系統(tǒng)內(nèi)存接收由重復(fù)預(yù)取指令400所指定預(yù)取的快取線。儲(chǔ)存于響應(yīng)緩沖器166的預(yù)取快取線被送至高速緩存154以存于其中。在一具體實(shí)施例中,除了重復(fù)預(yù)取指令400,響應(yīng)緩沖器166也由從處理器總線174提取數(shù)據(jù)的其它指令所共享。因此,重復(fù)預(yù)取指令400與其它可能具更高優(yōu)先權(quán)的指令竟逐響應(yīng)緩沖器166資源的使用權(quán)。在一具體實(shí)施例中,有八個(gè)響應(yīng)緩沖器166。微處理器100也包含一耦接至控制邏輯電路144的自由響應(yīng)緩沖器(freeRB)緩存器168。每次有一響應(yīng)緩沖器166被配置或釋出,控制邏輯電路144即以自由響應(yīng)緩沖器166的數(shù)量更新自由RB緩存器168的值。微處理器100也包含一響應(yīng)緩沖器門檻(RBthreshold)緩存器182,其儲(chǔ)存下文會(huì)提及的一門檻值。在一具體實(shí)施例中,該門檻值是預(yù)定的。在另一具體實(shí)施例中,該門檻值則可由系統(tǒng)程序員以程控。在又一具體實(shí)施例中,該門檻值則可由微處理器100的一外在輸入端加以控制。微處理器100也包含一比較器(comparator)178,耦接至自由RB緩存器168及RB門檻緩存器182。比較器178將門檻值182與自由響應(yīng)緩沖器166的數(shù)量做比較,并響應(yīng)地產(chǎn)生一結(jié)果信號(hào)192。在一具體實(shí)施例中,若自由響應(yīng)緩沖器166的數(shù)量比門檻值182還大,則比較器178產(chǎn)生一真值的信號(hào)192。否則,比較器178產(chǎn)生一假值的信號(hào)192。結(jié)果信號(hào)192接著被送至控制邏輯電路144?,F(xiàn)請(qǐng)參閱圖5,其為依本發(fā)明解說圖1的微處理器100如何執(zhí)行圖4的重復(fù)預(yù)取指令400的運(yùn)作流程圖。在執(zhí)行重復(fù)預(yù)取指令400之前,另一個(gè)指令加載圖1ECX緩存器106中的計(jì)數(shù)值。流程開始于方塊502。于方塊502中,圖1的指令譯碼器102偵測(cè)出圖4的REP前置碼字節(jié)402,其后則為圖4的PREFETCH運(yùn)算碼404。也就是,指令譯碼器102譯碼了圖4的重復(fù)預(yù)取指令400流程則自方塊502進(jìn)行到方塊504。于方塊504中,圖1的地址產(chǎn)生器114依據(jù)圖4的ModR/M字節(jié)406與地址操作數(shù)408,產(chǎn)生重復(fù)預(yù)取指令400的圖1的有效地址108。流程則自方塊504進(jìn)行到方塊506。于方塊506中,控制邏輯電路144將ECX緩存器106中的計(jì)數(shù)值復(fù)制至RPC緩存器124,并將有效地址108復(fù)制至圖1的RPA緩存器122。ECX緩存器106中的計(jì)數(shù)值由重復(fù)預(yù)取指令400前的一指令加載。流程則自方塊506進(jìn)行到方塊508。于方塊508中,控制邏輯電路144設(shè)定圖1RPV緩存器142的RPV位184的值為真,以向圖1的仲裁器148指明,一有效的重復(fù)預(yù)取指令400已準(zhǔn)備好取得圖1高速緩存154的存取權(quán),以執(zhí)行快取線的預(yù)取動(dòng)作。流程則自方塊508進(jìn)行到判斷方塊(decisionblock)512。于方塊512中,仲裁器148確定RPV位184的值是否被設(shè)定為真。若是,流程則進(jìn)行至判斷方塊514。否則,流程即結(jié)束。于判斷方塊514中,仲裁器148決定了重復(fù)預(yù)取指令400是否贏得了對(duì)圖1的高速緩存154、標(biāo)志數(shù)組152及/或TLBI56存取權(quán)的仲裁。若否,流程進(jìn)行至方塊516。否則,流程進(jìn)行至方塊518。于方塊516中,控制邏輯電路144將重復(fù)預(yù)取指令400的狀態(tài)存入圖1的重新執(zhí)行緩沖器158,以使得重復(fù)預(yù)取指令400未來一旦贏得存取權(quán)時(shí),能繼續(xù)執(zhí)行。流程從方塊516返回至判斷方塊512,以嘗試?yán)^續(xù)進(jìn)行重復(fù)預(yù)取指令400。在流程返回至判斷方塊512后,若一重復(fù)預(yù)取指令于方塊514中贏得了存取權(quán)的仲裁,則該重復(fù)預(yù)取指令400即從重新執(zhí)行緩沖器回復(fù)原來狀態(tài),以便于該重復(fù)預(yù)取指令400可繼續(xù)執(zhí)行。于方塊518中,RPA186被送至TLB156,以便在TLB156中查詢RPA186,產(chǎn)生圖1的TLB命中信號(hào)164。流程則自方塊518進(jìn)行到判斷方塊522。于判斷方塊522中,控制邏輯電路144確定TLB命中信號(hào)164的值是否為真。若否,則流程進(jìn)行至方塊524。否則,流程進(jìn)行至方塊526。于方塊524中,控制邏輯電路144清除RPV緩存器142的RPV位184,以顯示重復(fù)預(yù)取指令400不再有效,即重復(fù)預(yù)取指令400不再要求存取圖1的高速緩存154、標(biāo)志數(shù)組152及/或TLB156。本發(fā)明的優(yōu)點(diǎn)是,若未命中TLB156,則重復(fù)預(yù)取指令400即停止預(yù)取快取線,因?yàn)閷⑿枰獔?zhí)行一頁碼表格掃描。通過不增加處理器總線174額外的流量,而可執(zhí)行完成重復(fù)預(yù)取指令400所必須的頁碼表格掃描,如此潛在地增進(jìn)了微處理器100及/或系統(tǒng)的效率。流程即結(jié)束于方塊524。于方塊526中,RPA186被送至標(biāo)志數(shù)組152,以便在標(biāo)志數(shù)組152中查詢RPA186,而產(chǎn)生圖1的快取命中信號(hào)162。流程則自方塊526進(jìn)行到判斷方塊528。于方塊528中,控制邏輯電路144確定快取命中信號(hào)162的值是否為真。若是,則流程進(jìn)行至方塊532。否則,流程進(jìn)行至判斷方塊536。于方塊532中,發(fā)生一快取命中。結(jié)果是,由RPA186指定的快取線即不需被預(yù)取,因?yàn)槠湟汛嬖谟诟咚倬彺?54。因此,控制邏輯電路144遞增RPA186及遞減RPC188,具有不執(zhí)行不必要的快取線預(yù)取動(dòng)作的好處,此種預(yù)取動(dòng)作會(huì)造成處理器總線174上非必要的流量,而借以潛在地增加微處理器100及/或系統(tǒng)的效率。流程則自方塊532進(jìn)行到判斷方塊534。于判斷方塊534中,控制邏輯電路144判斷RPC188的值是否為0,以確定重復(fù)預(yù)取指令400所指定的全部快取線是否皆已被預(yù)取。若否,流程返回至判斷方塊512以預(yù)取另一快取線。否則,流程結(jié)束。于判斷方塊536中,控制邏輯電路144判斷由圖1比較器178產(chǎn)生的圖1結(jié)果信號(hào)192,是否指示出圖1自由響應(yīng)緩沖器緩存器168的值大于圖1門檻緩存器182所存的值。若否,流程進(jìn)行至方塊516。否則,流程進(jìn)行至方塊538。為了預(yù)取一快取線,控制邏輯電路144必須配置某一響應(yīng)緩沖器166,這可能導(dǎo)致后續(xù)一具高優(yōu)先權(quán)的指令無法配置其急需的響應(yīng)緩沖器166。本發(fā)明的優(yōu)點(diǎn)是,通過在自由響應(yīng)緩沖器166不足時(shí)即不預(yù)取快取線,可潛在地增加微處理器100的效率。于方塊538中,重復(fù)預(yù)取指令400要預(yù)取下一快取線的所有條件皆已符合。因此,控制邏輯電路144配置一響應(yīng)緩沖器166,并指示圖1的總線接口單元172從系統(tǒng)內(nèi)存提取RPA186所指定的快取線至所配置的響應(yīng)緩沖器166。當(dāng)總線接口單元172將該快取線提取至響應(yīng)緩沖器166時(shí),該快取線即依據(jù)圖4ModR/M字節(jié)406所指定的位置指示而被寫入高速緩存154。流程則自方塊538進(jìn)行至方塊532,以遞增RPA186及遞減RPC188,若有需要且所有條件皆符合,則預(yù)取下一條快取線。現(xiàn)請(qǐng)參閱圖6,其為依本發(fā)明進(jìn)一步解說圖1的微處理器100如何執(zhí)行圖4的重復(fù)預(yù)取指令400的運(yùn)作流程圖。流程開始于方塊602。于方塊602中,圖1的控制邏輯電路144偵測(cè)出存于圖1CPL緩存器112的CPL產(chǎn)生變化。CPL的變化可能是異步地產(chǎn)生,諸如由于微處理器的中斷或異常。流程自方塊602進(jìn)行到判斷方塊604。于方塊604中,控制邏輯電路144清除圖1的RPV位184,如此即能有效地中止重復(fù)預(yù)取指令400,因?yàn)橄麓瘟鞒淘龠M(jìn)行至圖5的判斷方塊512時(shí),重復(fù)預(yù)取指令400將被停止。在一具體實(shí)施例中,控制邏輯電路144只有在方塊602中所偵測(cè)的CPL的變化,是從低優(yōu)先權(quán)至高優(yōu)先權(quán)的情況下,才清除RPV位184。有利地,本發(fā)明通過在一具高優(yōu)先權(quán)的工作或程控了微處理器100的情形下,中止重復(fù)預(yù)取指令的執(zhí)行,而得以潛在地增進(jìn)微處理器100的效率。流程則結(jié)束于方塊604。從前述可看出,本發(fā)明有利地提供一種重復(fù)預(yù)取指令,處理器本身可用一有效率的方式,借以控制大方塊數(shù)據(jù)的預(yù)取動(dòng)作,而不用靠程序員手動(dòng)地加入單一快取線的預(yù)取指令,后者是受制于例如可能存在有不同的核心/總線脈沖比所造成的無效率。雖然本發(fā)明及其目的、特征與優(yōu)點(diǎn)已詳細(xì)敘述了,其它具體實(shí)施例仍涵蓋在本發(fā)明的范圍內(nèi)。例如,本發(fā)明可適用于具有不同指令集與快取層級(jí)架構(gòu)的微處理器中。雖然本發(fā)明已以較佳實(shí)施例公開如上,然其并非用以限定本發(fā)明,任何本領(lǐng)域普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),當(dāng)可作等效變化與修改,因此本發(fā)明的保護(hù)范圍以權(quán)利要求為準(zhǔn)。權(quán)利要求1.一種具有預(yù)取指令的微處理器,其特征在于,它包含一指令譯碼器,用以譯碼一指令集中的指令,該指令集至少包含由一英特爾PentiumIII處理器所定義的一多個(gè)指令的集合,該指令集還包含一重復(fù)預(yù)取指令;以及該重復(fù)預(yù)取指令包含一PentiumIIIPREFETCH指令運(yùn)算碼;一位在該運(yùn)算碼前的PentiumIIIREP字符串指令前置碼;以及一指定所要預(yù)取快取線的數(shù)量的計(jì)數(shù)。2.如權(quán)利要求1所述的微處理器,其特征在于,它還包括一緩存器檔案,耦接至該指令譯碼器,該緩存器檔案包含一ECX緩存器,其中該計(jì)數(shù)是儲(chǔ)存于該ECX緩存器中。3.如權(quán)利要求2所述的微處理器,其特征在于所述的計(jì)數(shù)是由該重復(fù)預(yù)取指令前的一指令加載該ECX緩存器中。4.如權(quán)利要求1所述的微處理器,其特征在于,它還包括一重復(fù)預(yù)取計(jì)數(shù)緩存器,耦接至該指令譯碼器,其中該計(jì)數(shù)最初是從該EC調(diào)緩存器復(fù)制至該重復(fù)預(yù)取計(jì)數(shù)緩存器中。5.如權(quán)利要求4所述的微處理器,其特征在于所述的重復(fù)預(yù)取計(jì)數(shù)緩存器于該重復(fù)預(yù)取指令的執(zhí)行期間,以可更新的方式儲(chǔ)存該計(jì)數(shù)。6.如權(quán)利要求1所述的微處理器,其特征在于所述的重復(fù)預(yù)取指令還包括一或多個(gè)地址操作數(shù),用以指定該快取線的一有效地址。7.如權(quán)利要求6所述的微處理器,其特征在于,它還包括一重復(fù)預(yù)取地址緩存器,耦接至該指令譯碼器,在該重復(fù)預(yù)取指令的執(zhí)行期間,以可更新的方式儲(chǔ)存該快取線的該有效地址。全文摘要本發(fā)明涉及一種執(zhí)行重復(fù)預(yù)取指令(REPPREFETCH)的微處理器及預(yù)取快取線至其高速緩存的方法。該重復(fù)預(yù)取指令預(yù)取多條快取線,其中快取線的數(shù)量可于指令中指定。該指令是由PentiumIIIPREFETCH運(yùn)算碼所指定,運(yùn)算碼前則有REP字符串指令前置碼。程序員于ECX緩存器中知道所要預(yù)取快取線的計(jì)數(shù)值,類似于REP字符串指令的重復(fù)計(jì)數(shù)值。第一條快取線的有效地址,則以類似常見PREFETCH指令的方式來指定。若當(dāng)前預(yù)取的快取線的地址未命中TLB,或者當(dāng)前處理器級(jí)緩存器中的當(dāng)前特權(quán)級(jí)改變,則停止REPPREFETCH指令的執(zhí)行。此外,只有在自由響應(yīng)緩沖器的數(shù)量大于一可程序化的門檻值時(shí),才預(yù)取一快取線。該預(yù)取動(dòng)作時(shí)在比其它需要存取高速緩存或TLB的動(dòng)作還低的優(yōu)先權(quán)下執(zhí)行。文檔編號(hào)G06F12/08GK1716188SQ20051008366公開日2006年1月4日申請(qǐng)日期2002年7月5日優(yōu)先權(quán)日2002年4月9日發(fā)明者羅德尼·虎克申請(qǐng)人:智慧第一公司