專利名稱:對高速緩存界線進行更名的裝置與方法
技術領域:
本發(fā)明涉及一種有關微電子學(Microelectronics)的領域,尤其是一種使程序員得以命令微處理器對其內部高速緩存(Internal Cache)中的高速緩存界線(Cache Line)進行更名(Rename)的裝置和方法。
背景技術:
在今日的微處理器,其內部邏輯區(qū)段(logic block)間的數據傳輸速度遠超過于其與外部內存的存取速度。在一個x86桌上型計算機系統(tǒng)中,其總線(bus)與系統(tǒng)內存之間的界面運作速率是以兆赫(megahertz)的百倍計,但是其內部微處理器時脈速率卻已接近數十倍的千兆赫(gigahertz)。因此,近年來已發(fā)展出一個階層式的高速緩存架構,此架構使得高效能微處理器得以高速運作,而不必在每次讀取(read)或寫入(write)數據時停滯(stall),以等待在一個緩慢的內存總線(memory bus)上執(zhí)行作業(yè)(transaction)。
一個機載(on-board)或區(qū)域(local)高速緩存在一個管線化(pipeline)微處理器中是一個獨立的單位,在本質上,其運作方式對于在管線化微處理器中流動的指令而言是透明(transparent)的,以確保一個應用程序(application program)中的指令所需要的數據已經存在于其高速緩存內,且得以用管線速度存取,而非以內存總線速度。不同的技術使用不同的高速緩存架構,有些是由多層(multiple levels)高速緩存所組成第一層高速緩存是非常接近處理器的執(zhí)行邏輯(execution logic),第二層高速緩存可以是芯片上(on-chip)或非芯片上,是用來儲存較不常存取的數據,第三層高速緩存則可能是在存儲卡(memory card)上,以此類推。不論應用那一種架構,熟悉此領域技術人員將發(fā)現使用高速緩存的目的,在于排除當對一緩慢的內存總線發(fā)布總線作業(yè)時,微處理器管線中指令的停滯(stall);此總線作業(yè)是為了取得一待決的(pending)讀取或寫入運算所需的數據,當此狀況發(fā)生,程序的執(zhí)行將產生令人難以忍受的暫停(halt),直到得到所需數據為止。
今日計算機系統(tǒng)裝置(device)間共享內存區(qū)域的現象使得情況更為復雜。舉例而言,主微處理器(primary microprocessor)與通訊微處理器(communications microprocessor)之間的通訊,藉由對一指定內存區(qū)域中讀取及寫入數據以相互聯絡;另一個常見的例子,便是視頻裝置(video device)上顯示數據予操作員(operator)的視頻卡(video card)的微處理器與主微處理器共享一些被稱之為視頻緩沖器(video buffers)的內存區(qū)域。
在共享內存系統(tǒng)中,可能發(fā)生來自一個共享區(qū)域(region)的數據存在于兩個不同微處理器的區(qū)域(local)高速緩存中,或是存在于連結到同一個內存總線的不同裝置上。若所有裝置只是單純的讀取數據,則允許它們將數據常駐于其區(qū)域高速緩存結構,并不會造成任何傷害。但是當它們均被允許修改(modify)存在于其區(qū)域高速緩存的數據時,即可能造成不可預期的后果。
為防止此情況發(fā)生,系統(tǒng)設計者開發(fā)了高速緩存一致性協(xié)議以標示高速緩存中數據的狀態(tài),其中MESI是最普遍使用的協(xié)議。依照MESI來維護區(qū)域高速緩存可以確保同一數據的兩個副本不會在同一時間被修改。MESI共享狀態(tài)告知區(qū)域高速緩存一特定區(qū)段的數據是否為共享(shared)狀態(tài)。如為共享狀態(tài),則區(qū)域處理器在經由一較慢的內存總線上執(zhí)行作業(yè)取得排他許可(exclusivepermission)之前,不得修改數據。若欲修改數據,處理器需先取得數據的排他所有權。
本發(fā)明在此強調的問題是有關于欲將數據寫入內存時,所導致發(fā)生在應用程序內的延遲。熟悉此領域技術人員將發(fā)現高速緩存并無合理的方法以得知何時對一特定內存區(qū)域有首次需求,因此當該特定內存區(qū)域第一次被加載到區(qū)域高速緩存時,總是會引起內存總線延遲。認知此項事實,本發(fā)明提供了一可在微處理器上執(zhí)行的預取指令。然而,預取指令并不能直接在微處理器的指令管線中運作。確切的說,預取指令命令區(qū)域高速緩存從內存上加載操作數(operand)到該高速緩存以備未來之用。而且因為高速緩存單元與內存間的運作方式,對一微處理器管線內的指令流程而言,是透明的,因此審慎地在需用數據之前發(fā)出預取指令,使得高速緩存可以在需用數據之前,利用與主程序流程(primaryprogram flow)中其它指令的執(zhí)行平行處理的方式,從內存提取數據。然后當執(zhí)行至隨后的指令(subsequence instruction),并且需要存取已預取的數據時,此數據已經在高速緩存中立即可存取(readily accessible),所以程序的執(zhí)行不會因為等待從內存提取數據而停滯。已預取的數據在高速緩存中立即可存取是僅指其將要被讀取而已。如果此預取的數據會被隨后的指令所修改,則程序的執(zhí)行或許必須延遲以等待高速緩存單元到總線去請求共享數據的排他所有權,而后區(qū)域處理器始可改動此數據。
如上所述,今日的運算系統(tǒng)中廣泛地運用共享內存區(qū)域,以達成各裝置間的通訊。其中內存復制是一極為常見的運算,幾乎在所有現今的應用中都會遇到。內存復制運算是將一內存位置中的內容復制到另一內存位置。舉例而言,一即將為提供顯示而傳送數據的視頻緩沖器,經常是由一些較小的緩沖器(Buffer)所組成。一第一較小的緩沖器為了提供顯示而設定其內容,并復制到一第二內存位置,該第二內存假定是監(jiān)視器顯示畫面的四個象限之一。在設定該顯示象限之后,其內存位置的內容就會被復制到第三內存位置,該位置存放整個監(jiān)視器顯示畫面的內容。熟悉此領域技術人員將發(fā)現顯示緩沖器的數據產生,只是應用程序執(zhí)行將數據由一內存位置,復制至另一內存位置的許多不同類型工作之一。
內存復制運算看來好象相當直觀,但以今日運用階層式快取架構的微處理器觀點而言,這樣的運算在實際上有相當的困難。考慮一存在于今日的高速緩存中做為來源(SRC)的第一數據結構,且其已被分配(allocate)并修改,為實現一內存復制運算,后續(xù)必需執(zhí)行的運算為(一)分配一做為目的地(DEST)的第二數據結構以供復制來源(SRC)中的內容,并確保目的地(DEST)擁有排他所有權,和(二)更改目的地(DEST)中的內容使其與來源(SRC)中的內容相符合。如前所述,若目的地(DEST)之前并未被于快取中分配過,或是目的地(DEST)已被分配,但其內容正被共享中,則為確保目的地(DEST)的排他所有權,應用程序須停滯以配合內存總線進行適當的總線執(zhí)行作業(yè),而這會是一個問題。
發(fā)明內容
因此,需要一裝置及方法,使得程序員得以命令微處理器取得一第一高速緩存界線的排他所有權,并由一第二高速緩存界線以平行于后續(xù)程序指令執(zhí)行的方式,將數據復制至該第一高速緩存界線。
此外,亦需要一裝置和方法,使得程序員得以命令微處理器將該第一高速緩存界線的數據寫回內存中。
本發(fā)明為解決其它應用中一些問題,以及公知技術未能妥善處理的部分。本發(fā)明提供一較佳的技術,針對將數據由一高速緩存中的高速緩存界線,復制到一高速緩存中的第二高速緩存界線,并與應用程序中的后續(xù)指令平行地執(zhí)行。在一實施例中,有一微處理器裝置,該微處理器裝置包含轉譯邏輯與執(zhí)行邏輯。該轉譯邏輯將一分配并更名指令(allocate and rename instruction)轉譯為一微指令序列,以命令微處理器分配一第一高速緩存界線于排他狀態(tài),并將一第二高速緩存界線中的內容復制至該第一高速緩存界線。該執(zhí)行邏輯接收該微指令序列,并對內存總線發(fā)布第一高速緩存界線為排他狀態(tài)的執(zhí)行作業(yè)。在得到排他權的授權后,該執(zhí)行邏輯將該第二高速緩存界線中的內容復制至該第一高速緩存界線。
一方面而言,本發(fā)明提供一種微處理器中針對實現一高速緩存界線更名運算的裝置,該裝置包含一分配并更名指令與一轉譯器。該分配并更名指令命令微處理器分配一第一高速緩存界線于排他狀態(tài),并將一第二高速緩存界線的內容復制至該第一高速緩存界線。該轉譯器接收該分配并更名指令,并將該分配并更名指令轉譯為相對應的微指令,這些相對應的微指令命令微處理器中的執(zhí)行邏輯對一內存總線發(fā)布復數的總線執(zhí)行作業(yè),以要求該第一總線的排他所有權,且將該第二高速緩存界線中的內容復制至該第一高速緩存界線。
另一方面,本發(fā)明提供一種實現一高速緩存界線內存復制運算的方法。該方法包含提取(Retrieving)一分配并更名指令,將該分配并更名指令轉譯為一微指令序列,此微指令序列是用以命令微處理器分配一第一總線于排他狀態(tài),將該第二高速緩存界線中的內容復制至該第一高速緩存界線,并響應這些微指令序列,對一內存總線發(fā)布復數的總線執(zhí)行作業(yè),以要求分配該第一總線于排他狀態(tài),且將該第二高速緩存界線中的內容復制至該第一高速緩存界線。
本發(fā)明的前述與其它目的、特征及優(yōu)點,在配合下列說明及附圖后,將可獲得更好的理解。
圖1為一方塊圖,說明現有的微處理器中幾個重要的管線階段(PipelineStage)。
圖2為一方塊圖,描述一高速緩存單元與內存的接口,以于圖1中的微處理器實現一預取的運算。
圖3A及圖3B為一時脈圖,說明于圖1、圖2中的微處理器為實現預取的運算,對內存總線發(fā)布執(zhí)行作業(yè)時,兩種可能的作業(yè)模式。
圖4為一方塊圖,顯示根據本發(fā)明的一延伸預取指令。
圖5為一表格,說明一圖4中的延伸預取指令中,一延伸地址指定域的編碼方式,該編碼是用以命令微處理器預取一高速緩存界線于排他性MESI狀態(tài)。
圖6為一方塊圖,詳述根據本發(fā)明,實現一意圖進行儲存運算的預取的一種微處理器。
圖7為一方塊圖,描述一高速緩存單元與內存的接口,以于圖6中的微處理器實現一意圖進行儲存運算的預取。
圖8為一時脈圖,說明于圖6、圖7中的微處理器為實現意圖進行儲存運算的預取,對內存總線發(fā)布執(zhí)行作業(yè)時的情形。
圖9為一方塊圖,顯示根據本發(fā)明的一延伸區(qū)段預取指令。
圖10為一方塊圖,描述一高速緩存單元與內存的接口,以于圖6中的微處理器實現一區(qū)段預取并儲存的運算。
圖11為一時脈圖,說明于圖6、圖10中的微處理器為實現區(qū)段預取并儲存的運算,對內存總線發(fā)布執(zhí)行作業(yè)時的情形。
圖12為一流程圖,說明根據本發(fā)明的一方法,用以實現一意圖進行儲存運算的預取。
圖13為一流程圖,說明根據本發(fā)明的一方法,用以實現一意圖進行儲存運算的區(qū)段預取。
圖14為一表格,說明一圖4中的延伸預取指令中,一可替代的延伸地址指定域的編碼方式,該編碼是用以命令微處理器將一高速緩存界線分配并更名。
圖15為一方塊圖,描述一高速緩存單元與內存的接口,以于圖6中的微處理器中分配并更名一高速緩存界線。
圖16為一流程圖,表現根據本發(fā)明的一方法,用以分配并更名一高速緩存界線。
圖17為一方塊圖,描述一高速緩存單元與內存的接口,以于圖6中的微處理器中分配并更名一高速緩存界線區(qū)段。
圖18為一流程圖,表現根據本發(fā)明的一方法,用以分配并更名一高速緩存界線區(qū)段。
其中,附圖標記說明如下100管線化微處理器 101提取階段102轉譯階段 103暫存階段104尋址階段 105執(zhí)行階段106執(zhí)行邏輯 107數據高速緩存108存儲器 109高速緩存總線110內存總線 120程序流程120~123宏指令200高速緩存單元界面 201微處理器202宏指令 210轉譯器211微指令 220高速緩存單元221記錄邏輯 222數據高速緩存223停滯信號 230總線單元240系統(tǒng)內存總線 241總線組件242數據存儲器301~302作業(yè)指令集303~304總線作業(yè)400延伸預取宏指令 401前置碼402預取運算碼 403延伸地址指定元600微處理器 601提取邏輯602指令高速緩存 603指令存儲器604指令隊列 606轉譯邏輯607延伸轉譯邏輯 608微指令隊列609執(zhí)行邏輯 610延伸高速緩存單元611數據高速緩存 612延伸記錄邏輯613總線單元 614數據存儲器615內存總線
700方塊圖 701微處理器702宏指令 710延伸轉譯器711微指令 720延伸高速緩存單元721延伸記錄邏輯 722數據高速緩存723停滯訊號 730總線單元740總線 741總線組件742數據存儲器800時脈圖 801~802總線作業(yè)900延伸區(qū)段預取指令 901前置碼902預取運算碼 903延伸地址指定元1000方塊圖 1001微處理器1002宏指令 1010延伸轉譯器1011微指令序列 1012架構緩存器ECX1013影子計數緩存器 1020延伸高速緩存單元1021延伸區(qū)段記錄邏輯1022數據高速緩存1023停滯信號1030總線單元1040內存總線1041總線組件1042數據存儲器1100時脈圖 1101~1102總線作業(yè)1200~1220意圖進行儲存運算的預取的方法的流程1300~1328意圖進行儲存運算的區(qū)段預取的方法的流程1500方塊圖 1501微處理器1502宏指令 1505架構緩存器EDI1510延伸轉譯器 1511微指令1520延伸高速緩存單元1521延伸記錄邏輯1522數據高速緩存1523停滯訊號1524來源高速緩存界線1525目的高速緩存界線1530總線單元1540總線1541總線組件1542數據存儲器1600~1624更名一高速緩存界線的方法的流程
1700方塊圖 1701微處理器1702宏指令 1705架構緩存器EDI1710延伸轉譯器 1711微指令1712架構緩存器ECX 1713影子計數緩存器1720延伸高速緩存單元1721延伸記錄邏輯1722數據高速緩存1523停滯訊號1724來源高速緩存界線1725目的高速緩存界線1730總線單元1740總線1741總線組件1742數據存儲器1800~1830更名一高速緩存界線區(qū)段的方法的流程具體實施方式
以下的說明,是在一特定實施例及其必要條件的情況下而提供,可使一般熟悉此項技術人員能夠利用本發(fā)明。然而,各種對該較佳實施例所作的修改,對熟悉此項技術人員而言乃是顯而易見,并且,在此所討論的一般原理,亦可應用至其它實施例。因此,本發(fā)明并不限于此處所展出與敘述的特定實施例,而是具有與此處所揭示的原理與新穎特征相符的最大范圍。
前文已針對現有的管線化微處理器如何執(zhí)行預取運算,作了背景技術的討論,有鑒于此,在圖1至圖3,將呈現一強調現有預取技術的限制的例子。緊接著,在圖4至圖18,將呈現本發(fā)明的討論。本發(fā)明使得程序員得以命令微處理器分配一第一高速緩存界線于排他性MESI狀態(tài),并將一第二高速緩存界線的數據復制至該第一高速緩存界線,從而避免因執(zhí)行儲存指令來進行數據復制,所可能造成的程序延遲。
請參閱圖1,其為一方塊圖,用以說明在今日管線化微處理器100內的重要管線階段101-105。此微處理器100有一個提取階段101,一個轉譯階段102,一個暫存階段103,一個尋址階段104,及一個執(zhí)行階段105。
在運算時,該提取階段101由系統(tǒng)內存的指令區(qū)中提取宏指令121-123,以供微處理器100執(zhí)行。該宏指令121-123接著被送至轉譯階段102,該轉譯階段102將宏指令121-123轉譯為相對應的微指令(或稱原生指令,圖中未顯示),以命令微處理器100執(zhí)行由指令121-123所指定的運算。該微指令同步于管線時脈(圖中未顯示),通過管線后續(xù)階段103-105,與產品通過一生產線上連續(xù)站點的方式類似。接著,將微指令送至緩存器階段103,若有一特定的微指令于此緩存器階段指定一存于緩存器中的操作數,則其邏輯電路便會存取緩存器,將該操作數擷取并與該微指令一同前饋至尋址階段104。該尋址階段104包含產生地址的邏輯電路,藉以用來存取儲存在數據存儲器108中的操作數。如同于緩存器階段103一般,該尋址階段104將產生的地址與其相關的微指令前饋至執(zhí)行階段105。
該執(zhí)行階段105實現由該微指令所指定的運算,在現今的微處理器100中,運算的型態(tài)會因指令集架構而不同,但是熟悉此領域技術人員將發(fā)現這些運算一般可以分為幾個類別,例如邏輯運算、算數運算、和內存存取運算(也就是數據讀取運算和數據寫入運算)。上述這些運算所產生的結果,若不是于緩存器階段103將數據存回緩存器,就是將數據寫入數據存儲器108中的位置。
熟悉此領域技術人員將發(fā)現現有的管線化微處理器100可能包含比圖1所示101-105外更多的階段,因為藉分割管線中的主要工作以增加一管線中的階段數目,已被證明可增加管線對指令121-123的吞吐量。然而,為簡明起見,圖1中所示一現今微處理器100的管線階段101-105,表示其主要的功能分組,已足以詳細說明公知技術的短處,而令讀者不受較無關的細節(jié)干擾。
值得注意的是,現今的微處理器100在執(zhí)行階段105中提供一數據高速緩存107及一執(zhí)行邏輯106,該數據高速緩存107以與執(zhí)行指令的管線階段101-105平行的方式運作,以確保當一數據存取的微指令(也就是讀取內存微指令或儲存內存微指令)前進到執(zhí)行階段105時,應用程序的指令121-123所需存取的數據,有很高的機率已存在高速緩存107,該執(zhí)行邏輯106能以一、兩個管線時脈速度執(zhí)行數據存取,而不必因等待經由內存總線110于數據存儲器108執(zhí)行數據存取,面臨可能是數百個時脈的程序延遲。在一有效率的高速緩存系統(tǒng)架構中,數據的加載和儲存運算主要經由一高速緩存總線,發(fā)生于執(zhí)行邏輯106與數據高速緩存107之間,且數據高速緩存是以一種對于走過管線階段101-105的微指令而言為透明的方式運作,以確保高速緩存中備份的數據項,能保持與系統(tǒng)內存108的同步和一致。
在一共享內存108區(qū)域的系統(tǒng)架構中,該普遍使用以確保高速緩存內容的一致性的協(xié)議,就是眾所周知的MESI(MESI是下列文字的縮寫Modified-修改、Exclusive-排他、Shared-共享、及Invalid-無效)。雖然圖1中并未提及,然于一計算系統(tǒng)架構中,因運算同一份數據的目的,其它的裝置(圖中未顯示)亦可能共享某一區(qū)域的內存108。舉例而言,一視頻卡可能與微處理器100共享內存108中的一區(qū)域,以存取由微處理器100產出的監(jiān)視器顯示數據。在另一個例子中,多個系統(tǒng)總線110上的裝置,可能借著對內存108上的共享區(qū)域寫入一數據或讀取一數據彼此聯絡。架構性研究的詳細敘述以提供使用MESI協(xié)議的動機并不在本發(fā)明的應用領域;此處只需了解MESI如同標準高速緩存管理協(xié)議般,在確定系統(tǒng)內存108與區(qū)域(local)高速緩存結構107之間數據的一致性的領域中普遍應用。
因內存總線110上的作業(yè)需要花上數百個時脈,所以數據是自數據高速緩存107來回傳遞,該數據高速緩存包含數個區(qū)段,每區(qū)段由數個字節(jié)所組成,這些區(qū)段又稱為高速緩存界線。雖然高速緩存界線的寬度(也就是高速緩存界線的大小,以字節(jié)為單位)因架構而有所不同,然而,系統(tǒng)架構中使用32字節(jié)線寬、或64字節(jié)線寬、或128字節(jié)線寬,于今日而言并不少見。
即便是最有效率的高速緩存結構107,也必會遇到因初始時將數據自內存108,經由內存總線110轉移至高速緩存107時所造成的延遲,不過,一旦一高速緩存界線已被提供給該高速緩存107,接著在對高速緩存界線中的數據項進行存取時,便不至于有明顯的延遲,因為高速緩存107與高速緩存總線109能以與其它微處理器109內的邏輯(例如執(zhí)行邏輯106)執(zhí)行速度相當的速度運作。
根據MESI,一區(qū)域數據高速緩存107中的高速緩存界線可能在下列四種狀態(tài)之一修改、排他、共享、和無效。一修改狀態(tài)的高速緩存界線是指已執(zhí)行過區(qū)域儲存運算,但尚未與主存儲器108同步(即寫回主存儲器)。一區(qū)域高速緩存107需負責監(jiān)視其它裝置(也被稱作總線組件,Bus Agent)于內存總線110上的存儲器操作,以便于當他們要求一位于更新的高速緩存界線上的數據,該區(qū)域高速緩存107可提供更新過的數據給發(fā)出要求的總線組件。這樣的監(jiān)測被稱做總線窺視模式(Bus Snooping)。
一排他狀態(tài)的高速緩存界線是指區(qū)域高速緩存107得以進行儲存運算,該排他狀態(tài)意味著區(qū)域高速緩存107擁有該高速緩存界線的排他所有權,而微處理器100也被允許更改其中的內容。
一共享狀態(tài)的高速緩存界線是指存在于總線110上,二或多個裝置的區(qū)域高速緩存107中的高速緩存界線,因此,每一個裝置可以自共享的高速緩存界線讀取數據,但都不被允許對其內容進行改動,若要改動共享高速緩存界線上數據(即進行一儲存運算),一裝置100需在改動其內容前,于內存總線與其它總線組件上進行適當的操作,以取得該高速緩存界線的排他所有權。一旦取得該高速緩存界線的排他所有權,接著便可以執(zhí)行儲存運算,然后該高速緩存界線的狀態(tài)就會改為修改狀態(tài)。于公告(Post)儲存運算前,需先索取一高速緩存界線的排他所有權,如此可借著同一時間中只有一裝置100有權更改高速緩存界線的內容,以保證數據的一致性。
當該區(qū)域高速緩存107監(jiān)測(或窺視)到于內存總線上有一寫入作業(yè),或是總線110上其它的裝置進行一總線作業(yè),以取得該高速緩存界線的排他所有權,則該高速緩存界線的狀態(tài)會被更新為無效狀態(tài)。使一高速緩存界線無效指出其中的數據不能被讀取或寫入,因為此時期數據很有可能已經失去了與內存108的一致性。
為妥善利用數據高速緩存107運算與微處理器管線的指令流程平行,設計人員已提供一預取指令122,使程序員得以命令微處理器100將所需數據于一程序流程120存取前,加載至一高速緩存107,以克服直接于程序流程120執(zhí)行一加載指令,才由內存108抓取數據至該高速緩存107,所會造成的延遲。一般于程序流程120中提供一預取宏指令122,于執(zhí)行指令同時,命令區(qū)域數據高速緩存平行地自內存108加載一高速緩存界線,使得在程序流程120中,該高速緩存界線能適時地存在于高速緩存107中,使一指令123能自該高速緩存界線存取數據。在圖1的例子中,一預取指令122-PREFETCHTO[EAX]-命令將一由緩存器EAX所尋址的高速緩存界線加載高速緩存107中,如此其內容將可供后續(xù)于程序流程120中所執(zhí)行的數據存取指令123-MOV EBX,[EAX]-所用,以命令微處理器100自緩存器EAX中所記載的地址讀取數據,并將之移動至緩存器EBX。為了簡明起見,因x86指令集已相當廣泛地為人所知,故我們以x86指令集架構來描述在程序流程中該預取指令122和移動指令123。然而,熟悉此領域技術人員將發(fā)現,還有其它許多不同的指令集架構提供預取指令122,以命令微處理器100自內存108中讀取一高速緩存界線并加載至一區(qū)域數據高速緩存107,如此一隨后的指令123,要求自該高速緩存界線進行數據讀取運算時,便不會遭受延遲。若是將預取指令122審慎小心地至于程序流程120之中,該指令便能有效地解決有關于數據高速緩存中初始存取數據所造成的延遲,并且能實在地增加程序執(zhí)行速度。當內存總線110上的預取操作完成時,該被要求的高速緩存界線便會以排他狀態(tài)(若區(qū)域高速緩存107擁有該高速緩存界線唯一的一份副本)或是共享狀態(tài)(若其它裝置亦擁有該要求的高速緩存界線的快取副本)存在于高速緩存107之中。在上述二狀態(tài)中的任一狀態(tài)時,該高速緩存界線中的數據項都可為立即讀取存取動作所用,然而如上所述,必須有排他所有權才能將數據寫入一高速緩存界線(也就是執(zhí)行一儲存運算),因而,若預取的結果使該高速緩存界線以排他狀態(tài)分配,則一待決的儲存動作便可立刻公告給該高速緩存界線。但是若總線110提供該高速緩存界線的是共享狀態(tài),則一待決的儲存動作便必須被停滯,使高速緩存單元107能于此時對總線110發(fā)布一執(zhí)行作業(yè),以獲取該高速緩存界線完整的排他所有權,而在該高速緩存界線被以排他狀態(tài)提供給高速緩存107后,該待決的儲存作業(yè)方能被公告出去。
現請參閱圖2,其為一方塊圖200,說明一高速緩存單元與內存的接口,用以于如圖1所示的微處理器中實現一預取運算。該方塊圖200顯示微處理器201中用以實現該預取運算的邏輯,該微處理器201包含一轉譯器210,用以接收一連串的指令202,并轉譯該宏指令202成為相對應的微指令211。該微指令211接著被提供給一高速緩存單元220,以指示自內存242讀取數據運算和儲存數據運算。該高速緩存單元220包含一記錄邏輯(Fill Logic)221和一數據高速緩存222,該記錄邏輯221耦接至總線單元230,該總線單元230則擔當該數據存儲器242與其它相連接的總線組件間的接口。
一范例流程宏指令202用來說明如何指定一預取運算,和如何利用預取的數據來進行后續(xù)的讀取及儲存運算處理。桌上型計算機中一關于此運算序列的常見范例,為讀取并累加一內存中的計數器。一連串的預取、讀取、和儲存的運算,需要在一高速緩存界線中處理一數據讀取和一連續(xù)的數據修改。因此,一第一宏指令202-PREFETCH[EAX]-在范例流程中命令微處理器20 1根據緩存器EAX內容中所記錄的地址,預取一高速緩存界線。第二宏指令202-MOV EBX,[EAX]-命令微處理器201自緩存器EAX中所記載的地址讀取數據,并將其內容寫入至緩存器EBX。第三宏指令202-INC EBX-命令微處理器201將緩存器EBX的內容累加。第四宏指令202-MOV[EAX],EBX-命令微處理器201將緩存器EBX中的內容,儲存至對應于緩存器EAX內容中所記載的內存位置。上述的預取、讀取、和儲存運算的細節(jié),只是根據EAX所提供的地址累加一數值至內存中。需注意為有效率地安排預取指令202,該指令需有效地在第二宏指令202-MOV EBX,[EAX]-之前被提供,如此因加載EAX內容中要求的高速緩存界線所造成的延遲,便可以于平行執(zhí)行介于此二指令中間的指令202時吸收,然而為了簡明起見,方塊圖200中并未對該介于中間的指令加以描述。
該轉譯器210將預取宏指令202轉譯為一相對應的微指令211-PREFETCH[EAX]-并提供給高速緩存單元220。該紀錄邏輯221詢問數據高速緩存222以判斷是否所要求的高速緩存界線已經存在于數據高速緩存222中且有效(即不為無效狀態(tài))。若否,則紀錄邏輯221命令總線單元230對系統(tǒng)內存總線240公告動作,以自內存242獲取所要求的高速緩存界線。此時若無其它的總線組件擁有該要求高速緩存界線的副本,則紀錄邏輯211提供該要求的高速緩存界線于排他狀態(tài)給數據高速緩存222。若同時有一或多個總線組件有該要求高速緩存界線的區(qū)域副本,則該紀錄邏輯221將該高速緩存界線以共享方式寫入高速緩存222。無論是上述何種狀態(tài),該要求的高速緩存界線已存在于高速緩存222并可供后續(xù)存取運算之用。
該轉譯器210將該第二宏指令202轉譯為一加載微指令211-LD EBX,[EAX]-,命令微處理器依緩存器EAX內容中所記錄的內存地址,將其內容加載緩存器EBX。如先前于圖1中所討論,微處理器201中的執(zhí)行邏輯(此處未顯示)從高速緩存單元220中要求該內存地址所包含的內容,因為預取運算的結果,包含這些內容的高速緩存界線已經存在于數據高速緩存222中,該內容可即刻被使用,而該加載微指令211也可以不受延遲地執(zhí)行。
第三宏指令202被轉譯為一相對應的累加微指令211-INC EBX-,命令執(zhí)行邏輯將緩存器EBX中的內容累加。此時既無新數據的要求,故不需提供加載微指令211給高速緩存單元220。
最后,在流程中的第四個宏指令202被轉譯成一儲存微指令211-ST[EAX],EBX-,此指令命令執(zhí)行邏輯去執(zhí)行一數據儲存運算,依緩存器EAX內容所指定的地址,將緩存器EBX的內容寫入該內存位置。該儲存微指令211從而以待決的儲存運算型式被送到其高速緩存單元220。因此,記錄邏輯221監(jiān)測到以待決的儲存運算為目標的高速緩存界線存在于該數據高速緩存222。若該高速緩存界線是處于排他狀態(tài),則此待決的儲存可立刻被公告并將該高速緩存界線的狀態(tài)變更為修改狀態(tài)。另一方面,若該高速緩存界線是處于共享狀態(tài),則該高速緩存單元220宣告一停滯訊號223以暫停該微指令211在微處理器201的管線階段中的進行,同時該執(zhí)行邏輯221則命令其總線單元230,經由其內存總線240,執(zhí)行作業(yè)以取得該高速緩存界線的排他所有權。一旦取得排他所有權,即允許待決的儲存對該高速緩存界線公告其數據,并且終止停滯訊號,從而繼續(xù)程序的執(zhí)行。
現在考慮一種運算形式,不需先讀取數據而只是單純的寫入數據到內存中,或是一種運算型式是會先讀取數據,但是此型式確定預期隨后會公告一儲存運算。在這些案例中,只有對那些須先讀取數據的案例執(zhí)行預先的預取指令是確定可以將程序延遲減到最小。并且在這種案例中,若預取的結果使所要求的高速緩存界線處于排他狀態(tài),則可排除因儲存運算所導致的程序延遲。但是若預取的結果使所要求的高速緩存界線處于共享狀態(tài),則因儲存運算所導致的程序延遲將不可避免。這問題是因為今日的指令集架構并未提供一方法以命令微處理器201去排他地預取一高速緩存界線到數據高速緩存222。雖然響應一預取運算的高速緩存界線可以是排他的,但是并不能保證每次響應都為此狀態(tài)。這是因為預取宏指令202于架構上推定其預取的數據是會被讀取,而造成不論其結果是否處于共享狀態(tài),都會提取由系統(tǒng)總線240的作業(yè)所要求的該高速緩存界線。舉例來說,在x86架構中,一x86預取指令的執(zhí)行結果便是經由總線240發(fā)出一數據讀取運算作業(yè)。該數據讀取運算要求一高速緩存界線的副本,并不管其是處于何種狀態(tài)。
現請參閱圖3,其顯示一時脈圖,用以描述由圖1及圖2所示的微處理器201所發(fā)出的301、302兩個可能的總線作業(yè)模式,此總線作業(yè)是經由內存總線240發(fā)出以執(zhí)行一預取與隨后的儲存運算。此二作業(yè)模式301,302包括在微處理器201內的從總線單元230到內存總線240的請求作業(yè)303,與同樣在微處理器201內從內存總線240回到總線單元230的響應作業(yè)304。作業(yè)模式301描述那些當響應一預取運算的高速緩存界線是排他狀態(tài)時所執(zhí)行的作業(yè)303-304。作業(yè)模式302描述那些當響應一預取運算的高速緩存界線是MESI共享狀態(tài)時所執(zhí)行的作業(yè)303-304。如同圖2所述,當執(zhí)行一預取指令時,記錄邏輯221命令其總線單元230對其內存總線240發(fā)出一數據讀取請求303-DATA READ[EAX]-,要求由緩存器EAX所指定的高速緩存界線被送到其區(qū)域高速緩存222。該數據讀取請求303在作業(yè)模式301是于時間點A發(fā)出,在作業(yè)模式302則是于時間點D發(fā)出。該內存總線240于是對包括該所要求的高速緩存界線的總線單元230,發(fā)出數據響應304。若該高速緩存界線是在排他狀態(tài),則在作業(yè)模式301的數據響應304-DATA RESP[EAX].E-,在時間點B被送回到總線單元230。若該高速緩存界線是在共享狀態(tài),則在作業(yè)模式302的數據響應304-DATA RESP[EAX].S-,在時間點E被送回到總線單元230。在這時,數據可從高速緩存222讀取而不會導致總線作業(yè)延遲。
當一隨后的儲存運算面對該上述作業(yè)提供的高速緩存界線時,作業(yè)模式302的劇本說明為了能公告該儲存運算所必然發(fā)生的作業(yè)303、304。在作業(yè)模式301中,因為高速緩存界線起始即是排他狀態(tài),欲公告該儲存運算只須在時間點C發(fā)出一數據寫入作業(yè)303-DATA WRITE[EAX]-,經由總線240將數據寫入到內存242。但是如作業(yè)模式302所示,在時間點H的數據寫入作業(yè)303可以被發(fā)出之前,必須先執(zhí)行時間點F及G的作業(yè)303及304,以便能將高速緩存界線的所有權狀態(tài)由共享提升到排他。在時間點F,總線單元230發(fā)出一數據讀取與無效請求303-DATA READ/INV[EAX]-,用以要求該共享狀態(tài)高速緩存界線的排他所有權。在數百時脈之后的時間點G,從總線240接收到一響應請求304-DATA RESP[EAX].E-,以將該高速緩存界線的狀態(tài)升級到排他狀態(tài)。在時間點G接收到響應請求304之后,接著在時間點H始可對總線240公告該數據寫入作業(yè)303。
值得注意的是圖3中的作業(yè)模式301、302是以一般性的方式表示,因為不同的微處理器架構應用不同的語義來說明總線作業(yè)303、304。除此之外,值得注意為了簡明起見,在圖3的時脈圖中已經省略了先取得對數據總線240存取(例如BUS REQUEST,BUS GRANT等等)的所有的作業(yè)。
本發(fā)明觀察到現有的數據預取指令受限于其并不支持確定預期的儲存運算,因此,不論對該高速緩存界線內容的讀取是否先于對該高速緩存界線公告一儲存運算,無法因為明確意圖進行對該高速緩存界線執(zhí)行一儲存運算而有利的預取一高速緩存界線到高速緩存222-一意圖進行儲存運算的預取-。若細查作業(yè)模式302中的作業(yè)303、304,很明顯的只有在該高速緩存界線的讀取會早于對其公告一儲存運算的情況下,預取一處于共享狀態(tài)的高速緩存界線才有幫助。若是一儲存運算將對該共享的高速緩存界線公告,則程序的執(zhí)行必須被延遲以便將該高速緩存界線的狀態(tài)從共享提升到排他。
程序員雖然了解現有預取指令的限制,然而仍應用它們?yōu)樽饕鈭D進行儲存情況下的預取,因為此預取指令可能(即使并非時常)于響應一數據讀取請求時,僅只于無其它總線組件擁有該要求的高速緩存界線的副本,可取得一高速緩存界線的排他所有權。然而,更理想的情況則是避免預取一處于共享狀態(tài)的高速緩存界線,而是命令一微處理器201去預取一處于排他狀態(tài)的高速緩存界線。本發(fā)明是指向一種裝置與方法,用以預取一第一高速緩存界線的排他所有權、將數據由一第二高速緩存界線復制至該第一高速緩存界線、以及選擇性地將第二高速緩存界線中的數據寫回內存,從而釋放高速緩存中的資源。本發(fā)明現將參照圖4至圖18進行討論。
請參閱圖4,其是一方塊圖,顯示依據本發(fā)明的一延伸預取指令400。該延伸預取指令包括一選用的多重前置碼實體401,其后為一預取運算碼402,再其后則為一延伸地址指定元403。在一具體實施例中,每一個前置碼及延伸地址實體401、403都是8位大小,而預取運算碼實體402則為一或二個字節(jié)大小,除非本文中另有修訂,所有的實體401-403均與x86的指令集架構一致。
在運作上,該預取運算碼402為一特定的運算碼數值,用以命令一相符的微處理器執(zhí)行一預取運算。在一x86的具體實施例中,其運算碼實體401的特定數值為0F18H。一個或數個選用的前置碼實體401可用來命令一相符的微處理器執(zhí)行某些類型的附加運算,例如由一計數器界定次數的重復運算(例如在x86架構中的REP前置碼),強迫執(zhí)行一不可分割運算(例如在x86架構中的LOCK前置碼)等等。延伸地址指定元403是用以指定該特定類型的預取運算的執(zhí)行。在一x86的具體實施例中,所熟知的延伸地址指定元403是ModR/M字節(jié)403。
依據本發(fā)明,當微處理器監(jiān)測到一預取宏指令400時,該微處理器被命令依照由延伸地址指定元403內容所指定的指示數值,去執(zhí)行從內存預取數據到高速緩存,其范例將在圖5中進行討論。
圖5是一表格500,其為圖4的延伸預取指令內的延伸地址指定元字段403的一具體實施例,解說依據本發(fā)明該延伸地址指定元字段403如何編碼以命令微處理器執(zhí)行預取一處于排他MESI狀態(tài)的高速緩存界線。為了說明本發(fā)明起見,此處使用符合x86架構的ModR/M位字段,然而,可以預期的是本發(fā)明包含任何提供將一預取-排他指示編碼到指令400的機制的架構。雖然圖5的例子指向將預取-排他(或是意圖進行儲存的預取)指示編碼到一延伸地址指定元403,熟悉此項技術人員將發(fā)現該預取指示也可以被編碼成一在運算碼字段401內的一指定運算碼數值。
在此編碼范例中,一x86 ModR/M字節(jié)使用該ModR/M字節(jié)的53位對一由預取運算碼401所指定型式的預取運算進行編碼。今日,該x86預取指令使用數值000,001,010,及011以規(guī)定意圖進行讀取運算的預取指示。所有這四個數值000-011為命令一x86微處理器,在不同程度的接近度下,預取數據到其高速緩存。舉例來說,一個T0指示(即數值001),命令微處理器預取一高速緩存界線到高速緩存階層體系的所有層級,而一NTA指示命令微處理器預取一高速緩存界線到一非暫時性高速緩存結構,并且進入一接近處理器的位置,同時將高速緩存污染(cache pollution)減至最低程度。但是x86預取指示000-011編碼的普遍特征是一經由總線出的數據讀取請求以要求一高速緩存界線的副本,而不在乎該高速緩存界線是處于何種MESI狀態(tài)。本發(fā)明的一具體實施例將一額外的指示加以編碼至延伸地址指定元中,用以命令微處理器依據本發(fā)明利用一排他(.S)指示去預取一指定的高速緩存界線。圖5顯示一用x86ModR/M字節(jié)的53位編碼成數值100的預取-排他指示。當該prefetch.s指示依據本發(fā)明編碼到一預取指令時,則一相符的微處理器會被命令對一內存總線發(fā)出作業(yè)以預取處于排他MESI狀態(tài)的數據。在一x86的具體實施例中,如前述圖3B所示,其響應于預取指令400的prefetch.s指示而發(fā)出的特定作業(yè)是一數據讀取與無效作業(yè)。在圖3B的例子中,該數據讀取與無效作業(yè)是用以將高速緩存界線從共享狀態(tài)提升至排他狀態(tài)。
在x86指令集架構中,數值100的53位編碼在此之前是被宣告為非法的,同表格500中所示數值101-111的53位編碼亦同。一非法的ModR/M字節(jié)編碼會造成一例外處理(exception)。但是依據本發(fā)明,在一x86的具體實施例中,該改善一預取-排他指示的額外編碼是合法的,并且將令前述的總線作業(yè)預取一處于排他狀態(tài)的高速緩存界線。
眾人皆知因為高速緩存結構與內存間的互動是不存在于微處理器管線的指令流程中,所以預取指令400只能依據所提供的指示要求執(zhí)行預取。若一高速緩存現在并不被內存存取所占用時,則可執(zhí)行預取運算。但若一高速緩存正被占用,則預取運算須被延遲。
現請參閱圖6,其是一方塊圖,詳述依據本發(fā)明的執(zhí)行一意圖進行儲存運算的預取的微處理器600。該微處理器600有三個值得注意的階段范疇提取,轉譯,及執(zhí)行。在提取階段的提取邏輯601是用以從一指令內存603中提取宏指令到一指令高速緩存602。該被提取的宏指令然后經由一指令隊列604被送到轉譯階段。該轉譯階段的轉譯邏輯606是耦接至一微指令隊列608。該轉譯邏輯606包括延伸轉譯邏輯607。執(zhí)行階段的執(zhí)行邏輯609包括一延伸高速緩存單元610。該延伸高速緩存單元610有一數據高速緩存611,此數據高速緩存611是耦接至延伸記錄邏輯612。該延伸記錄邏輯612是耦接至一總線單元613。該總線單元613是耦接至一數據存儲器614。
在運作上,提取邏輯601從指令內存603中提取依據本發(fā)明格式化的指令到指令高速緩存602,然后將此宏指令依執(zhí)行順序送到指令隊列604。該宏指令被從指令隊列604依序的提取后,被送到轉譯邏輯606。該轉譯邏輯606將每一送到此處的宏指令轉譯成對應的微指令序列,該微指令序列是用以命令微處理器600執(zhí)行由該宏指令所指定的運算。延伸轉譯邏輯607則監(jiān)測依據本發(fā)明的延伸預取宏指令,并且為將其轉譯成對應的延伸前置碼及地址指定元實體作準備。在一x86的具體實施例中,該延伸轉譯邏輯607被組態(tài)成監(jiān)測一x86預取指令,并且依據圖4及圖5所述的規(guī)則將該x86預取指令的ModR/M字節(jié)轉譯成一預取微指令序列,該序列是用以命令微處理器600去排他地預取一高速緩存界線到數據高速緩存611。
該微指令然后從微指令隊列608傳送到其執(zhí)行邏輯609,在該執(zhí)行邏輯中的延伸高速緩存單元610則依據本發(fā)明被組態(tài)為執(zhí)行一排他的預取運算。當該執(zhí)行邏輯609執(zhí)行一預取微指令序列時,其延伸記錄邏輯612命令總線單元613,經由內存總線605,發(fā)布執(zhí)行作業(yè)到內存614,以要求在排他的MESI狀態(tài)下預取一指定的高速緩存界線到數據高速緩存611內。
熟悉此項技術人員將發(fā)現圖6所描述的微處理器600只是一個依據本發(fā)明所簡化之后的一管線化微處理器600的代表。事實上,如前所述,今日的管線化微處理器包含許多管線階段,然而這些階段均可被概括的歸納成如圖6的方塊圖所示的三個階段群組,因此圖6的方塊圖可視為實現上述本發(fā)明的具體化所需的必要成分的說明。為了簡明起見,凡微處理器600中無關于本發(fā)明的成分均不在此描述。
請參閱圖7,其為一方塊圖700,用以描述在圖6的微處理器內執(zhí)行一預取與儲存運算的一界面至內存的高速緩存單元。該方塊圖700顯示在微處理器600內被應用為執(zhí)行預取運算的邏輯。微處理器701的延伸轉譯器710接收一連串的宏指令702,并將該宏指令702轉譯成對應的微指令711。微指令711在命令對內存742做數據加載與儲存運算之后,隨后即被送到一延伸高速緩存單元720。該延伸高速緩存單元720包括延伸記錄邏輯721及一數據高速緩存722。該延伸記錄邏輯721是耦接至一總線單元730。該總線單元730是界面至一系統(tǒng)內存總線740,此系統(tǒng)內存總線740又與數據存儲器742及其它總線組件741耦接。
宏指令的示范流程702說明如何指定一預取指令,及如何可在此預取的數據上執(zhí)行隨后的讀取與儲存運算。如同圖2的敘述,一有關于此運算序列的桌上型計算機的常見范例是內存內計數器的讀取及增加。但是與圖1及圖2的微處理器201不同的是,當依據本發(fā)明的一微處理器701被命令去排他的預取一高速緩存界線時,不論此預取的數據是否會被中介的指令讀取,均可有效率的消除會關連到隨后的儲存運算的總線作業(yè)延遲。在圖7的宏指令的示范流程702中預期一數據讀取運算發(fā)生早于在預取的數據上執(zhí)行一儲存運算,但是熟悉此項技術人員將發(fā)現,沒有此一中介的數據讀取運算,數據也可以被排他的預取且隨后的被寫入。
因此,示范流程的一延伸預取指令702-PREFETCH.S[EAX]-命令微處理器701去排他的預取其地址對應于緩存器EAX內容的高速緩存界線。第二個宏指令702-MOV EBX,[EAX]-命令微處理器701去讀取一地址為緩存器EAX所指定的內存位置的內容,并將該內容寫入緩存器EBX。第三個宏指令-INC EBX-命令微處理器701增加緩存器EBX的內容。第四個宏指令-MOVEAX,[EBX]-命令微處理器701在對應于緩存器EAX內容的內存位置上儲存緩存器EBX的內容。值得注意的是為了要有效率的利用排他預取指令702-PREFETCH.S[EAX]-,必須在第二個宏指令702-MOV EBX,[EAX]-之前充分執(zhí)行排他預取指令702,使得因為加載由EAX的內容所指定的高速緩存界線所造成的延遲,可以被中介的宏指令702的平行執(zhí)行所吸收。但是,為了簡明起見,該中介的宏指令202的執(zhí)行并未在方塊圖700中敘述。
轉譯器710將該延伸預取宏指令702轉譯成對應的排他預取微指令711-PREFETCH.S[EAX]-,然將此微指令送到延伸高速緩存單元720。該延伸記錄邏輯721詢問數據高速緩存722以決定所要求的高速緩存界線是否已存在并且有效(即非處于無效狀態(tài))于其數據高速緩存722內。若答案為否,則該延伸記錄邏輯721命令總線單元730,經由系統(tǒng)內存總線740,發(fā)出作業(yè)以從內存742取得該所要求的高速緩存界線于MESI排他狀態(tài)。若其它的總線組件741均無該所要求的高速緩存界線的副本,則延伸記錄邏輯721即將所要求的高速緩存界線以排他狀態(tài)送到其數據高速緩存722。若有一總線組件741擁有該要求的處于排他狀態(tài)的高速緩存界線的區(qū)域副本時,則依照所應用的特定總線作業(yè)協(xié)議,此協(xié)議窺視在總線740上的作業(yè)以請求該高速緩存界線并將其區(qū)域副本變更成無效。若該區(qū)域副本已被修改,則其總線組件將修改的數據寫入到其總線740,使得微處理器701可以取得該高速緩存界線的排他所有權。若有數個總線組件共享此高速緩存界線,則這些總線組件均將其區(qū)域副本變更成無效,使得該高速緩存界線可以在排他狀態(tài)下被送到微處理器701。在上述任一情況,該所要求的高速緩存界線均可在排他狀態(tài)下被送到高速緩存722,并且可被隨后的儲存運算所使用。
轉譯器710將第二個宏指令702轉譯成一加載微指令711-LDEBX,[EAX]-,此微指令是命令微處理器加載地址為緩存器EAX所指定的內存的內容到緩存器EBX。因為意圖進行儲存運算的預取的結果,該高速緩存界線所有的內容已經存在于該數據高速緩存722中,所以該高速緩存界線立即可用,并且使得該加載微指令711的執(zhí)行無任何延遲。
第三個宏指令702被轉譯成一對應的增加微指令271-INC EBX-,此指令是命令執(zhí)行邏輯將緩存器EBX的內容增加。因為不需要新的數據,所以該加載微指令711不會被送到其延伸高速緩存單元720。
最后,在流程中的第四個宏指令702被轉譯成一儲存微指令711-ST[EAX],EBX-,此指令命令執(zhí)行邏輯去執(zhí)行一數據儲存運算,以將緩存器EBX的內容寫入到地址由緩存器EAX內容所指定的內存位置。該儲存微指令711從而以待決的儲存運算型式被送到其高速緩存單元720。于是,記錄邏輯721監(jiān)測到以待決的儲存運算為目標的高速緩存界線存在于其數據高速緩存722,并且由于排他的預取的結果,該高速緩存界線是處于排他狀態(tài),于是該儲存可不被延遲的立刻被公告。與圖2的微處理器201不同的是,依據本發(fā)明的延伸高速緩存單元720不需宣告一停滯訊號723以公告該待決的儲存,因為該目標高速緩存界線已被排他地預取。
現請參閱圖8,其顯示一時脈圖800,用以描述依據本發(fā)明由圖6及圖7所示的微處理器所發(fā)出的總線作業(yè)模式801、802,此總線作業(yè)是經由內存總線740以執(zhí)行意圖進行預取的儲存運算。此二作業(yè)模式801、802包括在微處理器701內的從總線單元730到內存總線740的請求作業(yè)801,與同樣在微處理器701內的從內存總線740回到總線單元730的響應作業(yè)802。時脈圖800是描述當一被要求且處于排他狀態(tài)的高速緩存界線,為依據本發(fā)明的預取-排他宏指令所指定的意圖進行儲存運算的預取的響應時,所執(zhí)行的作業(yè)模式801、802。根據上面的敘述,當執(zhí)行一預取-排他指令時,延伸記錄邏輯721命令其總線單元730對其內存總線740發(fā)出一數據讀取與無效請求801-DATA READ/INV[EAX]-,要求將被緩存器EAX所指定的高速緩存界線以排他的MESI狀態(tài)送到其區(qū)域高速緩存722。該數據讀取與無效請求801是于時間點A發(fā)出。若所要求的高速緩存界線是處于排他的MESI狀態(tài),則在時間點B,該內存總線740響應發(fā)出數據響應請求802-DATA RESP[EAX].E-回到總線單元230。在這時,一儲存運算的數據可從該高速緩存222讀取或寫入到該高速緩存222,而不會導致總線作業(yè)延遲。
同圖3所示,圖8中的作業(yè)集801,802是以一般性的方式表示,因為不同的微處理器架構應用不同的語義來說明總線作業(yè)801,802。圖8中描述的作業(yè)集801,802大體上依照x86的慣例,但此描述只是意圖進行說明本發(fā)明。此慣例并不會限定本發(fā)明只適用于此特定指令集架構。除此之外,值得注意的是,為了簡明起見,在時脈圖800中已經省略了為先取得對數據總線740的存取(例如BUS REQUEST,BUS GRANT等等)的所有的作業(yè)。
本發(fā)明不只是考慮排他的預取一單一高速緩存界線,同時也包含需修改一個區(qū)段的數據的情況。因此,圖9至圖11將具體指向排他的預取一個區(qū)段的數據的討論。
請參閱圖9,其為依據本發(fā)明用以顯示一延伸區(qū)段預取指令900的方塊圖。該延伸區(qū)段預取指令900包括一選用的多重前置碼實體901,其一為一重復前置碼901。該前置碼實體901之后為一預取運算碼902,其后則為一延伸地址指定元903。在一具體實施例中,每一個前置碼及延伸地址實體901、903都是8位大小,而預取運算碼實體902則為一或二個字節(jié)大小,除非本文中另有修訂,所有的實體901-903均與x86的指令集架構一致。在此具體實施例中,該x86的重復前置碼(REP)901被用來標示一區(qū)段預取運算。
在運作上,該預取運算碼902為一特定運算碼數值,此特定運算碼數值是用以命令一相符的微處理器執(zhí)行一預取運算。在一x86的具體實施例中,運算碼實體901的特定數值為0F18H。延伸地址指定元903是用以指定執(zhí)行該特定類型的預取運算的執(zhí)行。在一x86的具體實施例中,該延伸地址指定元903是ModR/M字節(jié)903。
同圖4所示,依據本發(fā)明,當微處理器監(jiān)測到一預取宏指令900時,該微處理器被命令依據由延伸地址指定元403內容所指定的指示(hint)數值,去執(zhí)行從內存預取數據到高速緩存。圖5的編碼范例也適用于描述在區(qū)段延伸地址指定元903的前置碼指示的編碼。但是若微處理器在該延伸預取指令內監(jiān)測到一重復前置碼901,則微處理器會試圖預取一指定數量在排他狀態(tài)下的高速緩存界線到其區(qū)域高速緩存內,而此高速緩存界線的數量是由微處理器內的一架構緩存器指定。在一具體實施例中,高速緩存界線的數量是由x86兼容的微處理器內的緩存器ECX所指定。
請參閱圖10,其為一方塊圖1000,用以描述在圖6的微處理器600內執(zhí)行區(qū)段預取與儲存運算的一界面至內存的高速緩存單元。圖10的微處理器1001內的組件的認證與運算類似于圖7的微處理器701內的相似組件,只要將圖7的百位數圖號7用10來取代即可。為依據本發(fā)明以改進此區(qū)段預取運算,本發(fā)明使用一延伸轉譯器1010將有一重復前置碼1002的延伸預取運算轉譯成微指令序列1011,用以命令執(zhí)行一排他區(qū)段預取運算。除此之外,亦使用一影子計數緩存器1013以加載自架構緩存器內的1012被預取的高速緩存界線的數量計數。并且使用延伸區(qū)段記錄邏輯(extended block fill logic)1021以命令其總線單元1030要求排他地預取該指定區(qū)段的高速緩存界線,并將之送到其數據高速緩存1022。
為初始一排他的區(qū)段預取運算,第一個宏指令1002-MOVECX,COUNT-是用以將架構緩存器ECX內被排他的預取的區(qū)段內的高速緩存界線的數量計數初始化。延伸轉譯器1010將該第一個宏指令轉譯成加載微指令1011-LD ECX,COUNT-,此微指令命令微處理器將計數(count)加載ECX。當該計數被加載到ECX后,此計數亦被透明地復制到影子計數緩存器1013-SHECX-。同時,其它的指令1002則可在不干擾到預取運算的計數的情況下,修改其架構緩存器1012。
在計數被初始化之后,該延伸轉譯器1010轉譯一延伸區(qū)段預取指令1002-REP.PREF.S[EAX]-,此指令命令微處理器1001預取被ECX所指定數量的排他狀態(tài)的高速緩存界線到其區(qū)域高速緩存,而該被預取的第一個高速緩存界線的地址是由緩存器EAX所指定。響應一命令該排他預取運算的微指令序列1011,該延伸區(qū)段記錄邏輯1021命令其總線單元1030經由其內存總線1040發(fā)出總線要求以要求該地址是由緩存器EAX所指定的處于排他狀態(tài)的高速緩存界線。該記錄邏輯1021在接收到這些高速緩存界線后,即將之配置到其數據高速緩存1022。一旦以排他狀態(tài)進入到該高速緩存,任一或是全部的被預取的高速緩存界線均可被修改而不會造成額外的延遲。
現請參閱圖11,其顯示一時脈圖1100,用以描述依據本發(fā)明由圖6及圖10所示的微處理器1001所發(fā)出的總線作業(yè)模式1101、1102,此總線作業(yè)是經由內存總線1040以執(zhí)行區(qū)段預取與儲存運算。為解說方便起見,圖11范例的系統(tǒng)組態(tài)使用32字節(jié)高速緩存界線。但是,熟悉此領域技術人員將從下述的例證中發(fā)現本發(fā)明的應用包括所有可預期的系統(tǒng)組態(tài)的高速緩存界線行寬。此二作業(yè)模式1101、1102包括在微處理器1001內的從總線單元1030到內存總線1040的請求作業(yè)1101,與同樣在微處理器1001內的從內存總線1040回到總線單元1030的響應作業(yè)。時脈圖1000是描述當一被要求且處于排他狀態(tài)的一區(qū)段的高速緩存界線,是為依據本發(fā)明的包括一重復前置碼的預取-排他宏指令指定的意圖進行儲存運算的一區(qū)段預取的響應時,所執(zhí)行的作業(yè)模式11001、1002。根據上面的敘述,當執(zhí)行一區(qū)段預取-排他指令時,該延伸記錄邏輯1021命令其總線單元1030發(fā)出一多重的數據讀取與無效請求1101,此請求并且對應于架構緩存器內所指定數量的高速緩存界線。該多重的請求包括該高速緩存界線區(qū)段內的所有高速緩存界線的地址,其地址為架構緩存器EAX的內容所起始指定。雖然該總線請求1101使用遞增的地址次序,值得注意的是本發(fā)明亦包括遞減的排序、隨機的排序、及參差的排序,以符合不同的內存總線協(xié)議的規(guī)范。第一個數據讀取與無效請求1101是在時間點A發(fā)出,第二個請求1101是在時間點B發(fā)出,以此類推,直到最后的請求在時間點D發(fā)出。在許多種架構中,總線請求1102是被標記的,以致于該請求開始于時間點C早于其最后的請求的完成。在時間點C,至少有在該區(qū)段內的一高速緩存界線是可被一待決的儲存所使用。但是,為確保將延遲減到最小,最好是將該區(qū)段的高速緩存界線的儲存運算推延至時間點E,此時所有的響應1102均已到達且處于排他狀態(tài)。
該內存總線1040于是在時間點B對總線單元1030發(fā)出數據響應802-DATA RESP[EAX].E-,以提供該所要求處于排他狀態(tài)的高速緩存界線。此時,一儲存運算的數據可從其高速緩存1022中讀取或寫入,而不會導致總線作業(yè)延遲。如圖8中所討論,一后續(xù)的寫入指令1101-DATA WRITE[EAX]-,因已取得區(qū)段高速緩存界線的排他狀態(tài),而不得不被延遲地以后續(xù)的儲存運算方式被執(zhí)行。
現請參閱圖12,其為描述依據本發(fā)明執(zhí)行一意圖進行儲存運算的預取方法的流程圖1200。
流程開始于方塊1202,在此處,依據本發(fā)明,一連串的宏指令被送到一指令隊列。流程接著進行到方塊1204。
于方塊1204中,一個隨后的宏指令被從該指令隊列中提取,并將之送到一延伸轉譯器。流程接著進行到判斷方塊1206。
于判斷方塊1206中,將進行一項檢查用以判斷該隨后的宏指令是否為一延伸預取指令。若答案為是,則流程進行到方塊1208。若答案為否,則流程進行到方塊1210。
于方塊1208中,一被偵測到的延伸預取指令被轉譯成一意圖進行儲存運算的預取的微指令序列,此微指令序列是用以命令微處理器去預取處于排他狀態(tài)的一指定的高速緩存界線。流程接著進行到方塊1212。
于方塊1210中,該宏指令被轉譯成一對應的微指令序列,此微指令序列是用以命令微處理器去執(zhí)行一指定的運算。流程接著進行到方塊1212。
于方塊1212中,一個隨后的微指令序列被送到微處理器內的執(zhí)行邏輯。流程接著進行到判斷方塊1214。
于判斷方塊1214中,將進行一項檢查用以判斷隨后的微指令序列是否為一意圖進行儲存運算的預取的微指令序列。若答案為是,則流程進行到方塊1216。若答案為否,則流程進行到方塊1218。
于方塊1216中,響應意圖進行儲存運算的預取的微指令序列,總線作業(yè)請求被發(fā)出到一內存總線以要求一指定高速緩存界線的排他所有權。隨后該高速緩存界線以排他MESI狀態(tài)被送到微處理器,因此可為儲存運算所使用而不會發(fā)生因為提升該高速緩存界線至可被修改的狀態(tài)所導致的延遲。流程接著進行到方塊1220。
于方塊1218中,執(zhí)行該隨后的微指令序列。流程接著進行到方塊1220。
于方塊1220中,本方法完成。
現請參閱圖13,其為描述依據本發(fā)明執(zhí)行一意圖進行儲存運算的區(qū)段預取方法的流程圖1300。
流程開始于方塊1302,在此處,依據本發(fā)明,一連串的宏指令被送到一指令隊列。流程接著進行到方塊1304。
于方塊1304中,一個隨后的宏指令被從該指令隊列中提取,并將之送到一延伸轉譯器。流程接著進行到判斷方塊1306。
于判斷方塊1306中,將進行一項檢查用以判斷該隨后的宏指令是否為一延伸區(qū)段預取指令。若答案為是,則流程進行到方塊1310。若答案為否,則流程進行到方塊1308。
于方塊1310中,一被監(jiān)測到的延伸區(qū)段預取指令被轉譯成一意圖進行儲存運算的區(qū)段預取的微指令序列,此微指令序列是用以命令微處理器去預取處于排他狀態(tài)一指定數量的高速緩存界線。流程接著進行到方塊1312。
于方塊1308中,宏指令被轉譯成一對應的微指令序列,此微指令序列是用以命令微處理器去執(zhí)行一指定的運算。流程接著進行到方塊1312。
于方塊1312中,一個隨后的微指令序列被送到微處理器內的執(zhí)行邏輯。流程接著進行到判斷方塊1314。
于判斷方塊1314中,將進行一項檢查用以判斷隨后的微指令序列是否為一意圖進行儲存運算的預取的微指令序列。若答案為是,則流程進行到方塊1318。若答案為否,則流程進行到方塊1316。
于方塊1316中,執(zhí)行該隨后的微指令序列。流程接著進行到方塊1328。
于方塊1318中,響應意圖進行儲存運算的該區(qū)段預取的微指令序列,初始一暫時的計數器為數值0以監(jiān)控將被發(fā)出的總線作業(yè)的數量,此總線作業(yè)是要求一區(qū)段的高速緩存界線的排他所有權。流程接著進行到方塊1320。
于方塊1320中,第一高速緩存界線地址被指定給第一個數據讀取與無效總線作業(yè)。該第一高速緩存界線地址來自于由該延伸區(qū)段預取指令所指定的地址,然后再加上一乘以方塊1318的計數的高速緩存界線行寬。由于該計數初始為零,所以該第一高速緩存界線地址等同于該延伸區(qū)段預取指令所指定的地址。流程接著進行到方塊1322。
于方塊1322中,發(fā)出一經由內存總線的數據讀取與無效作業(yè)以預取該處于排他MESI狀態(tài)的該第一高速緩存界線。流程接著進行到方塊1324。
于方塊1324中,將該計數增加后,流程接著進行到方塊1326。
于判斷方塊1326中,將進行一項檢查用以判斷該增加的計數是否等同于被預取的高速緩存界線的數量,該高速緩存界線線的數量是儲存于一影子緩存器(shadow register)中。若答案為否,則流程進行到方塊1320,于其中執(zhí)行另一個疊代(iteration)以提取下一高速緩存界線。若計數等同于該影子緩存器的內容,則發(fā)出所有總線作業(yè),同時流程進行到方塊1328。
于方塊1328中,本方法完成。
本發(fā)明可廣泛地適用于程序指令流程中,許多包含預期進行數據修改運算而與高速緩存相關的問題。同時考慮在另一實施例中,程序員希望能命令微處理器,以獲得對一單一高速緩存界線或一區(qū)段高速緩存界線的排他所有權,并同時表達對改寫其中包含數據的意圖。在這樣的案例中,完全不需要將高速緩存界線預取至區(qū)域高速緩存中,僅需要將該高速緩存界線于在區(qū)域高速緩存中分配并指定為排他狀態(tài)。本發(fā)明注意到,許多內存總線架構支持一可用來分配處于排他狀態(tài)高速緩存界線的總線執(zhí)行作業(yè),而不需要額外地由內存將高速緩存界線的內容轉移至高速緩存中。此總線執(zhí)行作業(yè)一般被稱做零長度讀取與無效(zero-length read-and-invalid)執(zhí)行作業(yè)。該零長度讀取與無效作業(yè)命令所有擁有該指定高速緩存界線的區(qū)域副本的總線組件,將其狀態(tài)修改為無效狀態(tài)。而讀取作業(yè)為零長度則是因為并不需要真的響應一數據轉移動作。這種執(zhí)行作業(yè)303能于時間點F執(zhí)行,以要求對EAX于圖3的例子中所指定的高速緩存界線的排他所有權,因為在此時數據已經被讀取過了。而于圖8范例中的時間點A和圖11范例中的時間點A、B、及D,則預期必須對指定高速緩存界線進行預取,同時獲取高速緩存界線的排他所有權。于下面的實施例中,將針對因程序員只意圖修改指定高速緩存界線的內容,故只需要獲取排他所有權的案例。
如前所述,在今日的應用中普遍地運用著內存復制運算,特別是對于配置視頻緩沖器。略微重述要點,一大面積的視頻顯示可由數個較小面積的視頻顯示來共同配置,當一特定的小面積視頻緩沖器完成配置,其內容將被復制到較大面積視頻緩沖器中相對應的部分,并依應用的復雜度不同,而運用各種階層式遞增面積的視頻緩沖器。熟悉此領域技術人員發(fā)現于執(zhí)行內存復制時,因為許多高速緩存結構并不需要真的將第一部份高速緩存的內容復制至第二部分高速緩存中,而只需要改變第一部份高速緩存(也就是來源位置)的地址(也被稱做卷標,tag),使其與內存中的目的地址一致即可,故內存復制在區(qū)域微處理器中能有效率地執(zhí)行。設計人員稱此于區(qū)域高速實現內存復制的技術為更名運算(rename)。于是乎當一高速緩存界線被更名,其意指此高速緩存界線的地址或卷標被修改成另一不同的內存地址,而其內容卻未被更改。于本發(fā)明的另一實施例中,特別適合程序員根據本發(fā)明,利用平行運作于后續(xù)程序指令執(zhí)行的延伸預取指令,以命令微處理器對單一高速緩存界線或一區(qū)段高速緩存界線進行更名,并獲致功能上的優(yōu)勢。
請參閱圖14,圖14是一表格1400,解說依據本發(fā)明該延伸地址指定元字段如何編碼,以分配與更名一區(qū)域數據高速緩存界線中的高速緩存界線。如同于圖5中所討論的編碼實施例,為了說明本發(fā)明起見,此處使用符合x86架構的ModR/M位字段,然而,可以預期的是本發(fā)明包含任何提供將一分配與更名編碼到延伸預取指令400的機制的架構。雖然圖14的例子指出將分配與更名指示編碼到一延伸地址指定元403,熟悉此項技術者將發(fā)現該更名指示也可以被編碼成一在運算碼字段401內的一指定運算碼數值。
在圖14的另一編碼實施例中,根據本發(fā)明擴大微處理器600的功能,以允許規(guī)格中所隱含著對分配為排他狀態(tài)的高速緩存界線進行內存復制運算。在此所述的分配與更名運算,因除了儲存指令以外,其余用來更名單一或區(qū)段高速緩存界線所需的指令,均可自程序流程中移除,故能相當有效地增加應用程序的執(zhí)行速度。圖14顯示一用x86 ModR/M字節(jié)的53位編碼成數值100的分配與更名指示。當該分配與更名指示依據本發(fā)明編碼到一預取指令400時,則一相符的微處理器會被命令對一內存總線發(fā)出作業(yè)以分配處于排他MESI狀態(tài)的高速緩存界線,而不需預取其內容。如同于圖5中所討論的編碼實施例,在一x86的具體實施例中,該編碼將被視為合法,并且能產生一零長度讀取與無效總線作業(yè),在不必然要轉移其內容的情況下,取得一排他狀態(tài)的高速緩存界線。
請參閱圖15,其為一方塊圖1500,用以描述在圖6的微處理器內執(zhí)行分配與更名運算的一界面至內存的高速緩存單元。于此實施例中,于一預取的排他狀態(tài)高速緩存界線上執(zhí)行一更名運算,并響應一根據圖14編碼的分配與更名指令。方塊圖1500中顯示微處理器1501中用以實現分配與更名運算的執(zhí)行邏輯。該微處理器1501包含一延伸轉譯器1510,以接收一連串的宏指令1502并將之轉譯為相對應的微指令1511。宏指令1500接著被送至延伸高速緩存單元1520,該宏指令1500是用以命令自內存1542加載數據與儲存數據運算。該延伸高速緩存單元1520包含一延伸高速緩存邏輯1521,以及一數據高速緩存1522。該延伸高速緩存邏輯耦接至一總線單元1530。該總線單元1530為至系統(tǒng)內存總線1540、數據存儲器1542、及其它相耦接的總線組件1541的接口。
宏指令的示范流程1502說明如何指定一根據圖14的編碼100而得的分配與更名指令,及于區(qū)域高速緩存1522中如何執(zhí)行其隱含的指向目標高速緩存界線1525儲存運算,以使其內容與來源高速緩存界線1524相符,因此能于后續(xù)的程序指令執(zhí)行時,同時于區(qū)域高速緩存1522中平行地進行著內存復制或更名運算。
因此,一宏指令1502-MOV EDI,#DEST-被解譯器解譯為一微指令1511-LD EDI,#DEST-,用以命令微處理器1501將數值DEST加載至架構緩存器EDI-1505。DEST是一第一高速緩存界線1525的地址,一第二高速緩存界線1524(地址為SRC)的內容將被復制至該第一高速緩存界線中。LDEDI,#DEST被送至執(zhí)行邏輯(未顯示)以將DEST加載至EDI-1505。接著,轉譯器1510將范例流程中一延伸分配與更名指令1502-PREF.R[SRC]-轉譯為一延伸分配與更名微指令1511-PREF.R[SRC]-,以命令微處理器1501獲取由緩存器EDI內容所尋址的高速緩存界線1525的排他存取權,并于區(qū)域高速緩存1522中進行復制,將來源(SRC)高速緩存界線1524的內容復制至目的地(DEST)高速緩存界線1525。在一可選用的實施例中,該延伸分配與更名指令-PREF.R[SRC]1502-與其相對的微指令1511命令微處理器1501額外地將來源(SRC)高速緩存界線1524的內容寫回(又稱清回,flush),以釋放高速緩存1522中的資源。該可選用的實施例是用以克服棘手的「最少最近使用(1east-recently-used)算法」,以免于該算法中,當程序員意圖釋放該資源時,來源(SRC)高速緩存界線1524仍被標示為最近使用。
該分配與更名微指令被送至延伸高速緩存單元1520,于此,延伸高速緩存邏輯1521命令總線單元1530對系統(tǒng)內存總線1540發(fā)布一零長度讀取與無效執(zhí)行作業(yè),以自內存1542獲取該要求的高速緩存界線1525的排他所有權。當被同意授與所要求高速緩存界線1525的排他所有權,延伸高速緩存邏輯1521命令高速緩存1522將來源(SRC)1524區(qū)域更名為EDI-1505所指定的目的地址,并將其MESI狀態(tài)標示為修改狀態(tài)。于另一實施例中,考慮于高速緩存1522中進行一實際復制運算而非更名運算,以當獲得授予目的地(DEST)1525的排他所有權時,即刻實際復制來源(SRC)高速緩存界線1524中的內容至目的地(DEST)高速緩存界線1525。于該可選用的實施例中,一旦更名運算完成,該延伸高速緩存邏輯1521命令總線單元1530對總線1540發(fā)布一作業(yè),以將來源(SRC)1524區(qū)域中的內容清回內存1524,藉此釋放高速緩存1522中的儲存區(qū)域。
現請參閱圖16,其為描述依據本發(fā)明于一高速緩存界線上執(zhí)行一分配與更名運算方法的流程圖1600。
流程開始于方塊1602,在此處,依據本發(fā)明,一連串的宏指令被送到一指令隊列。流程接著進行到方塊1604。
于方塊1604中,一個隨后的宏指令被從該指令隊列中提取,并將之送到一延伸轉譯器。流程接著進行到判斷方塊1606。
于判斷方塊1606中,將進行一項檢查用以判斷該隨后的宏指令是否為一用以指定分配與更名運算的延伸預取指令。若答案為是,則流程進行到方塊1608。若答案為否,則流程進行到方塊1610。
于方塊1608中,一被偵測到的延伸預取指令被轉譯成一分配與更名運算的微指令序列,此微指令序列是用以命令微處理器去獲取第一指定高速緩存界線的排他所有權,以復制一第二高速緩存界線的內容至該第一高速緩存界線。該第一高速緩存界線的地址儲存于微處理器中的一架構緩存器,另外,也可能該分配與更名微指令序列命令微處理器將該第二高速緩存界線清回內存。流程接著進行到方塊1612。
于方塊1610中,宏指令被轉譯成一對應的微指令序列,此微指令序列是用以命令微處理器去執(zhí)行一指定的運算。流程接著進行到方塊1612。
于方塊1612中,一個隨后的微指令序列被送到微處理器內的執(zhí)行邏輯。流程接著進行到判斷方塊1614。
于判斷方塊1614中,將進行一項檢查用以判斷隨后的微指令序列是否為一分配與更名運算的微指令序列。若答案為是,則流程進行到方塊1616。若答案為否,則流程進行到方塊1618。
于方塊1616中,響應分配與更名運算的微指令序列,發(fā)布總線作業(yè)至內存總線以要求指定高速緩存界線的排他所有權,而總線將以授予指定高速緩存界線的排他存取權作為響應。流程接著進行到方塊1620。
于方塊1620中,延伸高速緩存邏輯根據本發(fā)明,將第二高速緩存界線(來源,SRC)的內容被復制至第一高速緩存界線(目的地,DEST)。此外,亦有可能該第二高速緩存界線根據指示第一高速緩存界線的卷標被更名。流程接著進行到方塊1624。亦可選擇性地進入方塊1622。
于方塊1618中,執(zhí)行該隨后的微指令序列。流程接著進行到方塊1624。
于可選擇性的方塊1622中,該第二高速緩存界線(目的地,DEST)被清回內存。流程接著進行到方塊1624。
于方塊1624中,本方法完成。
請參閱圖17,其為一方塊圖1700,用以描述在圖6的微處理器1701內執(zhí)行區(qū)段分配與更名運算的一界面至內存的高速緩存單元。圖17的微處理器1701內的組件的認證與運算類似于圖15的微處理器1501內的相似組件,只要將圖15的百位數圖號5用7來取代即可。為依據本發(fā)明以改進此區(qū)段分配與更名運算,本發(fā)明使用一延伸轉譯器1710將類似圖9中所說明的一有重復前置碼1702的延伸預取運算轉譯成微指令序列1711,用以命令執(zhí)行一區(qū)段分配與更名運算。除此之外,亦使用一影子計數緩存器1713以加載自架構緩存器內ECX-1712被分配與更名的高速緩存界線的數量計數。并且使用延伸區(qū)段記錄邏輯(extended block fill logic)1721以命令其總線單元1730要求數據高速緩存1722中指定區(qū)段目的地(DEST)高速緩存界線1725的排他所有權,并將之更名以使其內容與來源區(qū)段來源(SRC)高速緩存界線1724相符,并可選擇性的于內存復制完成之后,命令總線單元將來源區(qū)段高速緩存界線1724清回內存1724。
為初始一分配與更名運算,第一個宏指令1702-MOV ECX,#COUNT-是用以將架構緩存器ECX-1712內被分配與更名的區(qū)段內的高速緩存界線的數量計數初始化。延伸轉譯器1710將該第一個宏指令1702轉譯成加載微指令1711-LD ECX,#COUNT-,此微指令命令微處理器將計數(count)加載ECX-1712。當該計數被加載到ECX-1712后,此計數亦被透明地復制到影子計數緩存器1713-SHECX。同時,其它的指令1702則可在不干擾到分配與更名運算的計數的情況下,修改其架構緩存器ECX-1712。
在計數被初始化之后,一第二宏指令1702-MOV EDI,#DEST-被解譯器1710解譯以命令微處理器1701將一特定地址DEST加載至架構緩存器EDI-1705。解譯器1710解譯該第二宏指令為一微指令1711-LD EDI,#DEST-,用以命令微處理器1701將數值DEST加載至架構緩存器EDI-1705。
在DEST被加載至架構緩存器EDI-1705之后,一區(qū)段分配與更名指令1702-REP.PREF.R[EAX]-被延伸解譯器1710解譯,此區(qū)段分配與更名指令1702命令微處理器1701分配與更名被ECX所指定數量的排他狀態(tài)的高速緩存界線到其區(qū)域高速緩存,包含由EDI內容所指定的高速緩存界線。響應一命令該區(qū)段分配與更名運算的微指令序列1711,該延伸高速緩存區(qū)段邏輯1721命令其總線單元1730經由其內存總線1740發(fā)出總線要求以要求該由DEST指定地址的高速緩存界線的排他所有權。當獲授予排他所有權,該延伸高速緩存區(qū)段邏輯1721于數據快取1722中分配每一計數的高速緩存界線,并且將來源位置(SRC)1724的內容復制進去。于區(qū)段分配與更名運算完成后,亦可選擇性的將來源位置(SRC)1724的內容清回內存1742,藉以釋放內部高速緩存的資源。
現請參閱圖18,其為描述依據本發(fā)明執(zhí)行一高速緩存數據區(qū)段分配與更名方法的流程圖1800。
流程開始于方塊1802,在此處,依據本發(fā)明,一連串的宏指令被送到一指令隊列。流程接著進行到方塊1804。
于方塊1804中,一個隨后的宏指令被從該指令隊列中提取,并將之送到一延伸轉譯器。流程接著進行到判斷方塊1806。
于判斷方塊1806中,將進行一項檢查用以判斷該隨后的宏指令是否為一區(qū)段分配與更名指令。若答案為是,則流程進行到方塊1810。若答案為否,則流程進行到方塊1808。
于方塊1810中,一被監(jiān)測到的區(qū)段分配與更名指令被轉譯成一區(qū)段分配與更名的微指令序列,此微指令序列是用以命令微處理器去獲取一指定數量第一高速緩存界線的排他所有權,并修改其位于目的地址的第一高速緩存界線的內容,使其相同于一位于來源地址的第二高速緩存界線。流程接著進行到方塊1812。
于方塊1808中,宏指令被轉譯成一對應的微指令序列,此微指令序列是用以命令微處理器去執(zhí)行一指定的運算。流程接著進行到方塊1812。
于方塊1812中,一個隨后的微指令序列被送到微處理器內的執(zhí)行邏輯。流程接著進行到判斷方塊1814。
于判斷方塊1814中,將進行一項檢查用以判斷隨后的微指令序列是否為一區(qū)段分配與更名的微指令序列。若答案為是,則流程進行到方塊1818。若答案為否,則流程進行到方塊1816。
于方塊1816中,執(zhí)行該隨后的微指令序列。流程接著進行到方塊1830。
于方塊1818中,響應區(qū)段分配與更名的微指令序列,初始一暫時的計數器為數值0以監(jiān)控將被發(fā)出的總線作業(yè)的數量,此總線作業(yè)為對一區(qū)段做排他性的分配與更名。流程接著進行到方塊1820。
于方塊1820中,為一第一分配與更名運算指定第一來源高速緩存界線地址SRCADDR與第一目的高速緩存界線地址DESTADDR。該第一目的高速緩存界線地址DSTADDR是由先前加載架構緩存器的內容決定,其緩存器內容并經高速緩存界線寬度與方塊1818計數的乘積累加。因為計數器的初始值為零,故第一筆高速緩存界線地址即等于架構緩存器預先所填入的值。流程接著進行到方塊1822。
于方塊1822中,發(fā)出一經由內存總線的數據讀取與無效作業(yè),以分配一位于DSTADDR的第一高速緩存界線于排他MESI狀態(tài)。流程接著進行到方塊1824。
于方塊1824中,位于DSTADDR的排他性分配高速緩存界線被修改,使其內容成為該位于SRCADDR的第一來源高速緩存界線的內容。在另一實施例中,DSTADDR被更名而為SRCADDR。在一可選擇性的實施例中,SRCADDR的內容會額外地被清回內存。流程接著進行到方塊1826。
于方塊1826中,將該計數增加后,流程接著進行到方塊1828。
于判斷方塊1828中,將進行一項檢查用以判斷該增加的計數是否等同于被分配與更名的高速緩存界線的數量,該高速緩存界線線的數量是儲存于一影子緩存器中。若答案為否,則流程進行到方塊1820,于其中執(zhí)行另一個疊代以分配與更名下一目的高速緩存界線。若計數等同于該影子緩存器的內容,則所有欲處理區(qū)段高速緩存界線的分配與更名運算均已完成,流程進行到方塊1830。
于方塊1830中,本方法完成。
雖然本發(fā)明及其目的、特征與優(yōu)點已詳細敘述,其它具體實施例仍涵蓋在本發(fā)明的范圍內。例如,在此描述了依照MESI協(xié)議時,本發(fā)明對于待決的儲存運算所具有的優(yōu)點。選擇MESI作為本發(fā)明的例子是因為其在本技術領域中的廣泛應用。但是,值得注意的是本發(fā)明提供預取的數據到一區(qū)域高速緩存,該數據的型式或狀態(tài)使得該數據可立即被一待決的儲存運算所修改,而不需發(fā)出作業(yè)到一內存總線。該型式或狀態(tài)是否依照MESI并不重要。
如前所述,不同的架構使用不同的高速緩存界線行寬。在桌上型計算機系統(tǒng)中,今日普遍使用32-字節(jié)的高速緩存界線。但是在本發(fā)明中使用的敘述并不限制本發(fā)明不能應用于32-、64-、128-、或甚至于256-字節(jié)的高速緩存界線。相反的,本發(fā)明預期可應用在任何限制其區(qū)域高速緩存界線的修改,且需依靠總線作業(yè)以取得修改許可而不提供直接預取這些高速緩存界線以供立即性修改的系統(tǒng)架構。
此外,本發(fā)明使用相符于x86架構的具體實施例作為例證。無疑的,x86-兼容的微處理器可以從應用本發(fā)明得到好處,但值得注意的是本發(fā)明的應用范疇并不只限于x86-兼容的環(huán)境,因為仍有許多不同的架構所應用的預取指令亦不能保證其結果為排他的數據。
最后,值得注意的是,雖然在此處應用一地址指定元以指定被預取的高速緩存界線的地址,此種指定方式并不需是明示的(explicit)。一個依據本發(fā)明的預取指令的具體實施例可以隱含的(implicitly)指定一包含該地址的架構緩存器,此處是由一先前執(zhí)行的指令將該地址加載到該架構緩存器。
總之,以上所述,僅為本發(fā)明的較佳實施例而已,當不能以之限定本發(fā)明所實施的范圍。凡依本發(fā)明權利要求所作的均等變化與修飾,皆應仍屬于本發(fā)明專利涵蓋的范圍內。
權利要求
1.一種微處理器裝置,用以實現一內存復制運算,此裝置包含一轉譯邏輯,組態(tài)成將一分配與更名指令轉譯成一微指令序列,用以命令一微處理器分配一處于排他狀態(tài)的第一高速緩存界線,并將一第二高速緩存界線的內容復制至該第一高速緩存界線;以及一執(zhí)行邏輯,是耦接至該轉譯邏輯,組態(tài)成接收該微指令序列,并且組態(tài)成發(fā)出作業(yè)至一內存總線,以要求處于該排他狀態(tài)的該第一高速緩存界線且組態(tài)成復制該第二高速緩存界線的該內容至該第一高速緩存界線。
2.如權利要求1所述的微處理器裝置,其中該內存復制運算與一應用程序的程序流程中隨后的指令執(zhí)行平行。
3.如權利要求2所述的微處理器裝置,其中該內存復制運算排除了對應于執(zhí)行該隨后的儲存指令的一程序延遲,該隨后的儲存指令原本會于該程序流程中復制該第二高速緩存界線的內容至該第一高速緩存界線。
4.如權利要求1所述的微處理器裝置,其中該分配與更名指令包含對在一現存指令集內的一現存預取指令的修改,并且其中該現存預取指令原本不提供分配與更名該第一高速緩存界線。
5.如權利要求1所述的微處理器裝置,其中,響應于該微指令序列,該執(zhí)行邏輯命令一總線單元經由該內存總線發(fā)出這些作業(yè)。
6.如權利要求5所述的微處理器裝置,其中這些作業(yè)包含一多重的零長度數據讀取與無效作業(yè),這些作業(yè)是要求該第一高速緩存界線的排他所有權。
7.如權利要求1所述的微處理器裝置,其中該執(zhí)行邏輯將該第二高速緩存界線的內容清回內存。
8.一種微處理器中的裝置,是用以執(zhí)行一更名運算,此裝置包含一分配與更名指令,是組態(tài)成命令該微處理器分配一處于排他狀態(tài)的第一高速緩存界線,并將一第二高速緩存界線的內容復制至該第一高速緩存界線;以及一轉譯器,是組態(tài)成接收該分配與更名指令,并將該分配與更名指令轉譯成相關的微指令,在其中該相關的微指令命令在微處理器內的執(zhí)行邏輯經由一內存總線發(fā)出總線作業(yè),以要求該第一高速緩存界線的排他所有權,并將該第二高速緩存界線的內容復制至該第一高速緩存界線。
9.如權利要求8所述的微處理器裝置,其中,響應于該對應的微指令,該執(zhí)行邏輯命令一總線單元經由該內存總線發(fā)出這些作業(yè)。
10.一種內存復制運算的方法,此方法包含提取一分配與更名宏指令;將該分配與更名宏指令轉譯成微指令序列,該微指令序列是用以命令該微處理器分配一處于排他狀態(tài)的第一高速緩存界線,并將一第二高速緩存界線的內容復制至該第一高速緩存界線;以及響應該微指令序列,經由一內存總線發(fā)出總線作業(yè),以要求分配一處于排他狀態(tài)的第一高速緩存界線,并將該第二高速緩存界線的內容復制至該第一高速緩存界線。
11.如權利要求10所述的方法,其中該發(fā)出動作包含許可該微處理器平行的執(zhí)行該發(fā)出的作業(yè)與隨后的指令。
12.如權利要求10所述的方法,其中該提取動作包含提供該分配與更名指令作為對在一現存指令集內的一現存預取指令的修改,其中該現存預取指令原本不提供分配處于該排他狀態(tài)的該第一高速緩存界線,以將該第二高速緩存界線中的內容復制至該第一高速緩存界線。
13.如權利要求12所述方法,其中該提供動作包含修改一x86預取指令以致能指定一內存復制運算。
14.如權利要求10所述的方法,其中該發(fā)出動作包含提供經由內存總線的一多重的零長度數據讀取與無效作業(yè),這些作業(yè)是要求該第一高速緩存界線的排他所有權。
15.如權利要求10所述的方法,更包含將該第二高速緩存的內容清回內存。
全文摘要
本發(fā)明涉及一種能夠對高速緩存界線進行排他性分配與更名的微處理器裝置及方法。該裝置包含轉譯邏輯和執(zhí)行邏輯。該轉譯邏輯將一分配與更名的指令轉譯為一微指令序列,用以命令一微處理器分配一第一高速緩存界線于排他狀態(tài),并將一第二高速緩存界線中的內容復制至該第一高速緩存界線。該執(zhí)行邏輯耦接至該轉譯邏輯,該執(zhí)行邏輯接收該微指令序列,并對內存總線發(fā)布要求該第一高速緩存界線為排他狀態(tài)的作業(yè)。在得到排他權的授權后,該執(zhí)行邏輯將該第二高速緩存界線中的內容復制至該第一高速緩存界線。
文檔編號G06F12/08GK1514373SQ20031011975
公開日2004年7月21日 申請日期2003年12月3日 優(yōu)先權日2003年6月19日
發(fā)明者羅德尼·E·胡克, 羅德尼 E 胡克 申請人:智慧第一公司