專利名稱:用于使用記錄板機制處理加載鎖定指令的方法和裝置的制作方法
技術領域:
本發(fā)明總體上涉及一種用于處理計算機處理器內的加載鎖定指令的方法和裝置。更特別地,本發(fā)明涉及一種用于使用記錄板機制處理亂序計算機處理器內的加載鎖定指令的系統(tǒng)和方法。
背景技術:
許多處理器,例如從市場上可獲得的Intel公司的Pentium處理器,為“亂序”處理器。當所需的數(shù)據(jù)和執(zhí)行單元變得可用時,亂序處理器推測性地按照任意次序執(zhí)行指令。計算機系統(tǒng)內的一些指令通過機器寄存器依賴于其它指令。亂序處理器嘗試通過以下方式拓展并行性主動地尋找其輸入源可用于計算的指令,并且即使在程序流(程序次序)中較早出現(xiàn)的其它指令還未得到執(zhí)行的情況下也調度它們以便執(zhí)行。這樣就為機器資源的更有效利用和更快的整體執(zhí)行創(chuàng)造了機會。
加載鎖定指令用于多任務/多重處理系統(tǒng)中以便對信號量進行操作。信號量是如下的標志變量,所述標志變量被用來防止資源或數(shù)據(jù)被多處理器系統(tǒng)中的一個以上的代理同時訪問,因為同時訪問會導致程序不確定的行為。為了保障對信號量的唯一訪問,加載鎖定指令結合存儲解鎖指令必須要以原子方式加以執(zhí)行。也就是說,一旦加載鎖定指令訪問了信號量值,在相應的存儲解鎖指令釋放它之前,任何其它的指令都不能對該信號量進行操作,直到對應的存儲解鎖指令將它釋放為止。加載鎖定/存儲解鎖指令對還在x86處理器中引入需求,因為按照程序次序在加載鎖定/存儲解鎖指令對之前的所有加載指令和所有存儲指令必須在所述原子操作之前得到執(zhí)行。另外,按照程序次序在所述加載鎖定/存儲解鎖指令對之后的所有后續(xù)的加載指令和存儲指令必須在所述加載鎖定/存儲解鎖指令都完全得到執(zhí)行之后才能被執(zhí)行。在任何x86程序執(zhí)行中都一定不能違反這一“防護”語義。
推測性的執(zhí)行意味著指令在解決相關的控制依賴性之前可被提取和執(zhí)行。以推測性的亂序方式執(zhí)行“加載鎖定”指令隱含著如果沒有得到正確的處理,可以不遵守加載鎖定/存儲解鎖指令對的防護語義。但是,如果加載鎖定指令可以被推測性地執(zhí)行,就能夠顯著地提高性能,因為在資源能夠使用時以及在加載鎖定指令之前的所有指令已經被完成以外的任何時間,所述執(zhí)行都可以被進行。
通過只在指令已經達到“到達退出(at-retirement)”時才執(zhí)行加載鎖定指令,在處理亂序機器中的加載鎖定指令過程中的傳統(tǒng)方法就保障了防護語義。當一條指令按照程序次序接下來將要退出時,該“到達退出”(或者“在退出(at-retire)”)條件被加上標志。也就是說,按照程序次序所有靠前的指令都已經退出了。另外,這些傳統(tǒng)的方法堆積所有的鎖定指令,而不管它們是否在兩個高速緩存線之間被分開(即“分開”或“未分開”鎖定操作),并且不管它們是否將被寫回到可高速緩存的區(qū)域。因此,大量的無關時間和資源被廣泛地用來準備和處理任一加載鎖定指令。在加載鎖定指令變?yōu)榉贤顺鰲l件時,這些方法產生了對應要執(zhí)行的加載鎖定指令的長的等待時間并且占用了大量的處理資源。
圖1是根據(jù)本發(fā)明的第一實施方案舉例說明一個具有如下重放(replay)系統(tǒng)的計算機處理器核心的框圖,該重放系統(tǒng)具有包含鎖定記錄板機制的檢查器;圖2是根據(jù)本發(fā)明的第一實施方案描述用于使用鎖定記錄板機制推測性地處理亂序處理器核心內的加載鎖定指令的方法的流程圖。
圖3是根據(jù)本發(fā)明的一些實施方案描述用于保持鎖定記錄板的方法的流程圖;圖4是根據(jù)本發(fā)明的第一實施方案描述用于當加載鎖定指令到達檢查器階段的時候推測性地執(zhí)行檢查的方法的流程圖;圖5是根據(jù)本發(fā)明的第二實施方案舉例說明一個具有如下重放系統(tǒng)的計算機處理器核心的框圖,該重放系統(tǒng)具有包含鎖定記錄板機制的檢查器;圖6是根據(jù)本發(fā)明的第二實施方案描述用于使用鎖定記錄板機制推測性地處理亂序處理器核心內的加載鎖定指令的方法的流程圖。
圖7是根據(jù)本發(fā)明的第二實施方案描述用于當加載鎖定指令到達檢查器階段的時候推測性地執(zhí)行檢查的方法的流程圖;以及圖8是按照本發(fā)明的一些實施方案的一種已知的多代理系統(tǒng)的框圖,該系統(tǒng)包含在圖1和圖5中所示的用于執(zhí)行加載鎖定指令的處理器核心。
具體實施例方式
本發(fā)明的一些實施方案在一個處理核心中提供專用于對加載鎖定指令進行管理的記錄板。該加載鎖定記錄板包含多個代表不同條件的記錄板條目,在加載鎖定指令可退出之前這些條件必須得到滿足。在加載鎖定指令執(zhí)行期間,記錄板受到檢查。如果記錄板指示有一個或多個退出條件沒有得到滿足,那么就重放該加載鎖定指令。否則,就允許該加載鎖定指令退出。當退出條件被清除(clear)時,記錄板管理功能定期對記錄板內容進行更新。
圖1是根據(jù)本發(fā)明的第一實施方案的在一個示例性處理器內的處理器核心100的框圖。處理器核心100可以包含調度器110、執(zhí)行管道120、退出單元130、重放路徑140,以及存儲轉發(fā)緩沖器150。處理器核心100可以被連接到寫組合緩沖器160和高速緩沖存儲器170。處理器核心100還可以包含傳統(tǒng)的電路(圖8),以便將處理器核心100連接到通信總線(圖8)并且允許它與在計算機系統(tǒng)內的其它實體即代理(圖8)進行通信。
調度器110可以從指令隊列(未示出)接收指令流。顧名思義,調度器110可以在相關聯(lián)的輸入資源變得容易得到的時候調度每條指令以便執(zhí)行,而不管程序次序。可以被連接到調度器110的執(zhí)行管道120可以包含專用于指令的各種執(zhí)行單元,例如各種加法器和算術單元、加載單元、存儲單元和其它電路系統(tǒng)(未示出)。依賴于指令類型,該調度器可以把一條指令提交到一個執(zhí)行單元,該執(zhí)行單元執(zhí)行該指令。執(zhí)行管道120還可以確定是要退出還是重放所分派的指令。
可以被連接到執(zhí)行管道120的退出單元130可以使得被正確和完全執(zhí)行的指令退出。退出單元130按照程序次序使指令退出。例如,第一指令Inst A按照程序次序可能出現(xiàn)在第二指令Inst B之前。如果Inst A沒有先退出,則即使Inst B在Inst A之前被完全和正確地執(zhí)行,它也不可以退出。重放路徑140可以被連接到執(zhí)行管道120。重放路徑140重新執(zhí)行沒有被正確和完全執(zhí)行的指令。存儲轉發(fā)緩沖器150可以被連接到執(zhí)行管道120。在多個已得到執(zhí)行的存儲指令準備退出的時候,存儲轉發(fā)緩沖器150可以臨時存儲來自它們的結果。
處理器核心100可以被連接到外部單元,包含寫組合緩沖器(WCB)160和高速緩沖存儲器170。WCB 160可以被連接到存儲轉發(fā)緩沖器150和執(zhí)行管道120。WCB 160臨時地存儲與存儲解鎖和加載鎖定指令相關聯(lián)的數(shù)據(jù)和地址。然后,WCB 160等待最佳時間,以便使用與被臨時存儲的數(shù)據(jù)相關聯(lián)地址來將臨時存儲的數(shù)據(jù)寫到高速緩沖存儲器170。數(shù)據(jù)被以預先確定的大小(此處稱為“高速緩存線”)為單位寫到高速緩沖存儲器170。高速緩沖存儲器180可以被連接到WCB 160和系統(tǒng)存儲器(圖8)。然后高速緩沖存儲器170等待最佳時間,以便通過外部總線將這種數(shù)據(jù)寫到系統(tǒng)存儲器。存儲轉發(fā)緩沖器150和WCB160都生成到執(zhí)行管道120的命中/未命中信號。該命中/未命中信號指示一個特定的存儲區(qū)是否包含加載鎖定指令所指向的數(shù)據(jù)和地址。在這方面,處理器的操作和體系結構是眾所周知的。
本發(fā)明的一些實施方案引入了鎖定記錄板180,執(zhí)行單元120在確定使加載鎖定指令退出或重放時可以參考該鎖定記錄板180。鎖定記錄板180可以保持關于與所有加載鎖定指令相關聯(lián)的預先確定的退出條件的狀態(tài)的信息。實際上,它保持那些已經得到滿足和沒有得到滿足的退出條件的運行表。鎖定記錄板180的狀態(tài)可以周期性地得到更新,例如在當每次執(zhí)行加載鎖定指令時檢測到一些改變的情況下。鎖定記錄板180的結構可以相當簡單;例如它可以包含代表退出條件中的每個的單個字段位置。
通過使用鎖定記錄板180,對應最近得到執(zhí)行的加載鎖定指令的退出判定就變?yōu)榱艘环N非常快的操作。未分開寫回加載鎖定指令的執(zhí)行僅需要從鎖定記錄板讀取,并且如果任一字段指示有一退出條件尚未得到滿足,它就重放加載鎖定指令。例如,在一種實施方案中,可以通過被設置為邏輯“1”的二進制標志來指示未滿足的退出條件;通過對各種退出標志的內容進行邏輯或,執(zhí)行單元180可以在單個時鐘周期中確定是要使加載鎖定指令退出還是重放加載鎖定指令。在其它實施方案中,未滿足的退出條件可以通過被設置成邏輯“0”的標志來加以指示,在這種情況下,各種退出標志可以被“與”在一起。這樣,為了確定是否要使加載鎖定指令退出,執(zhí)行管道120可以參考鎖定記錄板180。
本發(fā)明的一些實施方案提供了用于使用記錄板機制在多處理器系統(tǒng)中推測性地處理加載鎖定指令的方案。這種方案的各種實施方案可以在以下情況下得到使用當新的加載鎖定指令被接收并被存儲在調度器中的時候,當執(zhí)行加載鎖定指令的時候,以及當使加載鎖定指令退出的時候。
圖2舉例說明了根據(jù)本發(fā)明的第一實施方案,可以在加載鎖定指令生存期間實施這種方案的方法。更具體的,圖2提供了用于使用記錄板機制推測性地處理在亂序處理器核心中的加載鎖定指令的第一方法1000。該第一方法1000可以在執(zhí)行管道接收到加載鎖定指令(塊1010)的時候變得可操作。在那時,可以確定鎖定記錄板是已經被“清除”還是被完成(塊1020)?!扒宄?,在這個上下文中,意味著所有用于加載鎖定指令的退出條件都得到了滿足。更具體的,可以確定由鎖定記錄板監(jiān)視的每個退出條件是否已經得到了滿足。如果已經得到了滿足,則執(zhí)行管道就可以執(zhí)行加載鎖定指令(塊1030)。在加載鎖定指令的執(zhí)行之后,處理器核心可以將其發(fā)送到退出單元。該退出單元可以在它已就緒時使所述加載鎖定指令退出(塊1040)。
如果鎖定記錄板并未被清除,則處理器核心可以使用最近的信息更新鎖定記錄板。更具體的,處理器核心可以確定鎖定記錄板的至少一個其它字段是否可以被清除(塊1050)。如果可以,則處理器核心可以通過清除該字段來更新鎖定記錄板(塊1060)。然后處理器核心可以通過將加載鎖定指令轉發(fā)到重放路徑來重放該加載鎖定指令(塊1070)。如果鎖定記錄板的任何字段都不可以被清除(塊1050),則這可能隱含著沒有對鎖定記錄板進行更新。相應地,處理器核心可以直接將加載鎖定指令轉發(fā)到重放路徑,在那里加載鎖定指令被重放(塊1070)。
根據(jù)一種實施方案,鎖定記錄板條目可以保持與一條加載執(zhí)行指令相關聯(lián)的退出條件信息(即該加載鎖定指令是否符合退出條件)。可以通過擴展鎖定記錄板來包含多個條目以便允許處理器核心同時監(jiān)視不止一個加載鎖定指令。例如,如果處理器核心支持多個并發(fā)線程,那么一個條目可以專用于對應每個線程的每條加載鎖定指令。典型地,記錄板條目的數(shù)量,至少部分地根據(jù)加載鎖定指令將被在處理器中使用的頻率的期望,在處理器設計期間加以確定。
與如下的現(xiàn)有技術相比,使用記錄板可以帶來優(yōu)勢,所述現(xiàn)有技術在加載鎖定指令達到“到達退出”的時候執(zhí)行迭代測試,以便確定一條已經執(zhí)行的指令是否可以退出。也就是說,在加載鎖定指令達到“到達退出”之前,處理器核心可以運行連續(xù)測試來確定所要求的退出條件是否得到滿足。
所要求的退出條件之一可以包含與加載指令相關聯(lián)的錯誤地址或故障條件的存在。這樣,鎖定記錄板的一個字段可被設置成代表故障條件或錯誤地址。如所知道的,故障條件和/或錯誤地址可以包含但并不限于,數(shù)據(jù)的不正確轉發(fā)、未知數(shù)據(jù)和/或地址、存儲器排序故障、自修改代碼頁故障等。
鎖定記錄板的另一個字段可以代表在寫組合緩沖器(WCB)中是否有命中,它與加載鎖定指令相關聯(lián)。當存在與由前面的存儲指令產生的、相同的高速緩存線相同的副本時,在WCB中就存在命中。這樣的WCB命中要求那個副本應在可執(zhí)行加載鎖定指令之前被逐出。在WCB命中時,為WCB命中指定的鎖定記錄板字段將會保持不被清除并且處理器核心可以重放加載鎖定指令。
另外,鎖定記錄板的另一個字段可以指示加載鎖定指令是否“在退出”。指令的到達退出條件通常在“在退出”指針指向該指令的時候被指示。相應地,如果指令不處于達到“在退出”或者沒有被到達退出指針所指向,則該指令就不可以退出。
鎖定記錄板的另一個字段可以指示加載鎖定指令是否擁有(或保持)鎖定記錄板。例如,在程序流程中的任意給定點,處理器核心可能正在執(zhí)行一條或多條加載鎖定指令。加載鎖定指令是否擁有記錄板依賴于它是否比保持鎖定記錄板的加載鎖定指令更老。如果當前受到處理的加載鎖定指令在程序流程中比某些其它的加載鎖定指令“年輕”,它就可以得到重放。因為處理器核心按照程序次序使指令退出,如果存在一些還未得到執(zhí)行的更老的加載鎖定指令,那么更年輕的加載鎖定指令不能擁有鎖定記錄板并應該得到重放。
鎖定記錄板的另一個字段可以代表要被釋放完的是較老的還是優(yōu)先的存儲指令。一個“較老”的存儲指令是指這樣一種存儲指令它在程序次序上出現(xiàn)在加載鎖定指令之前并且仍位于執(zhí)行管道中。優(yōu)先的存儲指令是指這樣一種存儲指令它已經從執(zhí)行管道中退出,但已經將它的數(shù)據(jù)存儲在存儲轉發(fā)緩沖器,并且等待被寫到高速緩沖存儲器。較老和優(yōu)先的存儲指令典型地在加載鎖定指令執(zhí)行之前被釋放完以便遵守加載鎖定指令操作的防護語義。
這些測試均可能會花費了許多時鐘周期來完成,并且一旦一條已得到執(zhí)行的加載鎖定指令已被視為要退出,那么這些測試已經在前面得到了運行。根據(jù)本發(fā)明的一種實施方案,可以檢查這些相同的退出條件來確定是否使一條已得到執(zhí)行的加載鎖定指令退出。但是,如果一個測試指示一個特定的退出條件得到了滿足,則該測試的結果可以存儲在記錄板中供以后使用。這樣,在后續(xù)迭代時,不需要再次運行該測試。當加載鎖定指令最終就緒要退出的時候,執(zhí)行管道不需要在一系列測試上消耗幾個時鐘周期。相反,它可以在單個周期中確定加載鎖定指令就緒要退出。通過這種方式,在一切(時間和資源)都以就緒要執(zhí)行加載鎖定指令的時候,處理器核心就可以鎖定系統(tǒng)存儲器一次。
在單個事件中可以測試一個或多個退出條件。應該注意到每個字段可以不依賴于其它字段得到確定。還應該理解上面的退出條件在性質上純粹是示例性的。依賴于系統(tǒng)體系結構和實施方案,上述的退出條件可以被修改,一些可以完全被省略。
仍然參考圖2,處理器核心可以對加載鎖定指令迭代第一方法1000,直到所有需要的退出條件都得到了滿足。根據(jù)本發(fā)明的第一實施方案,處理器核心可以在加載鎖定指令能夠被退出之前對其執(zhí)行幾次第一方法1000。通過執(zhí)行第一方法1000,處理器核心確保所有需要的資源都是可用的,并且對于加載鎖定指令來說,退出是安全的。這樣,當加載鎖定指令達到“到達退出”時,它能夠被執(zhí)行而沒有延遲。這一延遲的降低允許退出單元快速地進展到后續(xù)指令。因此,它還降低了程序的整體執(zhí)行時間。
圖3根據(jù)本發(fā)明的一種實施方案舉例說明了用于加載鎖定指令保持鎖定記錄板的第二方法2000。第二方法2000可以在執(zhí)行管道接收加載鎖定指令時變得可以操作。當執(zhí)行管道接收加載鎖定指令時,處理器核心可以確定鎖定記錄板是否為空(塊2010)。如果鎖定記錄板為空,則處理器核心重新設置和保持鎖定記錄板(塊2050)。
可替換的,如果鎖定記錄板非空或者具有擁有者(塊2010),則處理器核心可以確定鎖定記錄板的擁有者是否比加載鎖定指令“更年輕”(塊2020)?!案贻p”的指令是指按照程序次序的任一后續(xù)指令。如果鎖定記錄板的擁有者是更年輕的,則執(zhí)行管道可以逐出該擁有者(塊2040)。一旦該擁有者被逐出,則鎖定記錄板可以被重新設置,并且正被處理的加載鎖定指令可以保持記錄板(塊2050)。
另一方面,如果鎖定記錄板具有擁有者(塊2010)但是鎖定記錄板的擁有者比處理中的加載鎖定指令更老(塊2020),則處理核心可以通過將處理中的加載鎖定指令轉發(fā)到重放路徑來重放該加載鎖定指令(塊2030)。例如,有三個加載鎖定指令,Inst A、Inst B和InstC,它們是按照此次序連續(xù)寫的。在這種情況下,Inst B和Inst C比Inst A年輕。Inst C比Inst B年輕,而Inst A比Inst B老。假設當前正被處理的指令是Inst B,如果鎖定記錄板當前被Inst A所占用,那么處理器核心就重放Inst B,因為占用鎖定記錄板的加載鎖定指令(Inst A)比正被處理的加載鎖定指令(Inst B)要老??商鎿Q的,如果鎖定記錄板當前被Inst C占用,則處理器核心從鎖定記錄板逐出Inst C并且將它保留用于Inst B。
較老的加載鎖定指令在退出方面具有優(yōu)于較年輕的加載鎖定指令的優(yōu)先權,因為處理器核心根據(jù)程序次序使指令退出。如提到過的,可以通過擴展鎖定記錄板來保持用于多于一條加載鎖定指令的信息。如果這樣的話,因為每個鎖定記錄板用于一個線程的加載鎖定指令,所以加載鎖定指令的程序次序以每個線程為基礎而加以保持。
圖4根據(jù)本發(fā)明的第一實施方案舉例說明了方法3000,該方法3000可以在加載鎖定指令的生存期間擴充圖1中所示的方案。第三方法3000在加載鎖定指令符合退出條件或者滿足所有要求的退出條件時變得可以操作。此時,處理器核心檢查對應所有權請求的預取讀取(預取-RFO)的狀態(tài)(塊3010)。在傳統(tǒng)的系統(tǒng)中,當嘗試進行存儲指令(例如存儲解鎖指令)的執(zhí)行時,它可以引起WCB預取數(shù)據(jù)的高速緩存線,從而使得所述數(shù)據(jù)在存儲指令退出的時候變得可用。預取-RFO是由處理器在通信總線上所發(fā)出的事務,通過它,處理器不僅獲得高速緩存線的當前副本,而且還獲得根據(jù)管理高速緩沖存儲器一致性協(xié)議修改高速緩存線內數(shù)據(jù)的權力。在事務進展中的某點,該事務將被“全局觀察”。全局觀察發(fā)生在計算機系統(tǒng)內的所有其它代理-不管它們是其他處理器、系統(tǒng)存儲器還是其他集成電路-已經觀察到該事務,并且已經更新了它們自己的存儲器以便反映所要求的高速緩存線的處理器的所有權之時。例如,在Intel的Pentium Pro處理器的總線協(xié)議中,全局觀察發(fā)生在事務進展到探聽階段之時;此時,處理器響應它對數(shù)據(jù)的請求而接收“探聽”結果。
如果預取-RFO已經得到全局觀察(塊3020),可以在WCB中為加載鎖定指令分配一個條目(塊3030)。隨后,如果需要的話,WCB發(fā)出對應所有權加載鎖定請求的讀取(RFO加載鎖定請求)(塊3040)。一旦發(fā)出了RFO加載鎖定請求,處理器核心等待著直到該RFO加載鎖定請求得到全局觀察(塊3050)為止。然后處理器核心可以允許加載鎖定指令退出(塊3060)。此后,處理器核心可以執(zhí)行存儲解鎖指令并且使該指令退出,所述存儲解鎖指令反過解鎖被尋址的存儲器位置并且將數(shù)據(jù)存儲到寫組合緩沖器(塊3070)。該WCB條目將僅在存儲解鎖指令退出時被釋放。同時,一旦該WCB條目被鎖定,系統(tǒng)中不會有其它代理可以探聽出該WCB條目。在存儲解鎖指令退出后,鎖定記錄板被重新設置。然后方法3000可以結束。
如果在塊3020預取-RFO還沒有被全局觀察,則處理器核心可以確定預取-RFO請求是否被發(fā)出在通信總線上(塊3090)。一旦將預取-RFO請求作為事務發(fā)送在總線上,將允許進展到一個自然的結束。因此,加載鎖定指令得到重放(塊3080)并且方法3000返回到塊3010。但是,如果預取-RFO還沒有被發(fā)送到總線上,該方法可以在預取-RFO被發(fā)送到總線上之前終止該請求(塊3100)。相反的,方法3000可以進展到塊3030和3040,為加載鎖定指令分配WCB并且發(fā)送具有可使用的鎖定的RFO。
如果存儲指令被執(zhí)行時引起預取-RFO請求被發(fā)送的系統(tǒng),預取-RFO引起在WCB中的一個條目被分配。這種實施在加載鎖定/存儲解鎖對的情況下可能會造成死鎖條件。因為在用于所有存儲指令的數(shù)據(jù)被從WCB中釋放完之前,加載鎖定通常不會被允許退出,所以對已被分配給較年輕的存儲解鎖指令的WCB條目來說,有可能防止較老的加載鎖定指令退出。加載鎖定指令會得到重放,直到WCB條目被釋放完為止。但是,WCB條目可能永遠都不被釋放完,因為它與只能在較老的加載鎖定指令退出之后才可以退出的存儲解鎖指令相關聯(lián)。為了克服這個問題,WCB條目可以包含一個標志,可能是1比特標志,以便指示該條目已經被分配給存儲解鎖指令。在這種方案中,所述標志能夠使在退出測試期間WCB會生成的命中信號失效,以便確定例如加載鎖定指令是否在WCB中命中。每次重新設置鎖定記錄板的時候,WCB標志列也可以得到重新設置。
圖5是根據(jù)本發(fā)明的第二實施方案的處理器核心500的框圖。處理器核心500可以包含調度器510、執(zhí)行管道520、退出單元530、重放路徑540、存儲轉發(fā)緩沖器550,以及鎖定記錄板580。處理器核心500可以被連接到寫組合緩沖器560和高速緩沖存儲器570。處理器核心500還可以包含傳統(tǒng)的電路(未示出),以便將處理器核心連接到通信總線并且允許它與計算機系統(tǒng)內的其它實體或代理進行通信。
處理器核心500還可以包含加載鎖定排序緩沖器590。該加載鎖定排序緩沖器590用來與執(zhí)行管道進行通信。加載鎖定排序緩沖器590保持當前正在被執(zhí)行的所有加載鎖定指令的排序(按照程序次序)。當指令首先被處理器核心500接收時,在分配時間跟蹤加載鎖定指令的排序。加載鎖定排序緩沖器590僅允許最老的加載鎖定指令保持鎖定記錄板580。通過這種方式,加載鎖定排序緩沖器590防止過分的“摧毀(nuking)”,即一種用于清除執(zhí)行管道中的內容的操作。該“摧毀”操作將在下面得到詳細描述。加載鎖定排序緩沖器的保持對本領域的技術人員來說是周知的。
第二實施方案加速了加載鎖定指令的執(zhí)行,這是通過在已經確認所有較老的和優(yōu)先的存儲指令已經從WCB中被釋放完之前分派該加載鎖定指令用于執(zhí)行來進行的。在這種實施方案中,加載鎖定指令的“生命周期”可以經歷三個階段。首先,當加載鎖定指令等待要清除的執(zhí)行條件的時候加載鎖定指令的執(zhí)行可以停止。其次,在執(zhí)行條件清除之后,加載鎖定指令可以執(zhí)行并且然后進入等待退出的“慢安全”模式。最后,加載鎖定指令可以退出并且被從處理器核心除去。
在慢安全模式中,指令已經得到執(zhí)行并且等待退出。慢安全模式本身是周知。當加載鎖定指令達到慢安全狀態(tài)時,核心已經向處理器內的其它部件發(fā)出了請求;預期的是那些其它的部件已經讀取了至核心的所請求的數(shù)據(jù)的副本,除非在核心的請求可得到完成之前,其它的處理器請求了所述數(shù)據(jù)。
圖6舉例說明了根據(jù)本發(fā)明的一種實施方案的記錄板管理方法6000。方法6000在執(zhí)行管道接收到加載鎖定指令并為其分配了核心資源時變得可以操作(塊6010)。加載鎖定指令被標記為不可退出并且進入執(zhí)行管道(塊6020、6030)。在管道中的某點,可以確定要執(zhí)行還是要重放加載鎖定指令。讀取鎖定記錄板(塊6040),并且根據(jù)記錄板確定所有執(zhí)行條件是否已經得到滿足(塊6050)。如果沒有得到滿足,記錄板可以得到更新(塊6060)并且加載鎖定指令可以得到重放(塊6070)。
如果執(zhí)行條件已經得到了滿足,則加載鎖定指令就被執(zhí)行(塊6080)。在執(zhí)行加載鎖定指令后,處理器核心可以進入到慢安全模式(塊6090)。
可以注意到,加載鎖定指令可以處于慢安全模式,直到退出單元就緒要使加載鎖定指令退出為止。當在慢安全模式中的時候,如果出現(xiàn)“命中” (指向與加載鎖定指令相同的存儲器)加載鎖定指令的探聽探頭(snoop probe),則加載鎖定指令和記錄板就被摧毀(塊6100、6110)。摧毀操作涉及清除(按照程序次序地)跟在加載鎖定指令后面的所有未完成的指令。然后加載鎖定指令被返回到執(zhí)行管道并且記錄板被清除。但是,相反,當退出條件仍然滿足時,允許加載鎖定指令退出(塊6120、6130)。
與根據(jù)本發(fā)明的第一實施方案的鎖定記錄板相比,在第二實施方案中的鎖定記錄板可以保持較少的執(zhí)行條件。這種方案允許加載鎖定指令比在第一種實施方案中更早執(zhí)行(起作用)。例如,與第一實施方案相比,在這種第二實施方案中的鎖定記錄板不需要保持關于在管道和/或WCB中是否存在要被釋放完的任何優(yōu)先的或較老的存儲指令的信息?;诩虞d鎖定指令不太可能與這種釋放完發(fā)生沖突這一假設,這個條件可以被消除。這樣,處理器核心可以在不用保證所有前面的存儲指令被釋放完的情況下執(zhí)行加載鎖定指令的所有要求的操作。
根據(jù)第二實施方案,加載鎖定指令按照圖3中所示的方式保持鎖定記錄板。特別地,如果鎖定記錄板為空的話,加載鎖定指令可以對其重新設置和保持。可替換的,如果鎖定記錄板由“較年輕”的指令所保持,則加載鎖定指令可以逐出所述較年輕的加載鎖定指令并且保持該記錄板。否則,加載鎖定指令可以得到重放。
圖7舉例說明了根據(jù)本發(fā)明的一種實施方案在WCB可操作的方法7000。方法7000在加載鎖定指令執(zhí)行的時候變得可以操作。此時,WCB檢查對應所有權請求的預取讀取(預取-RFO)的狀態(tài),該預取-RF0可能已經由伴隨加載鎖定指令的存儲解鎖指令生成了(塊7010)。如前面提到過的,預取-RFO是由處理器核心發(fā)送到通信總線上的事務,通過它,所述過程獲得高速緩存線的當前副本和修改高速緩存線內數(shù)據(jù)的權力。在進行過程中的某點,事務受到系統(tǒng)內其它代理的全局觀察。在受到全局觀察的時候,系統(tǒng)內的其它代理更新它們自己的系統(tǒng)存儲器來反映處理器核心對于所請求的高速緩存線的所有權。當執(zhí)行加載鎖定指令的時候,無法知道先前的預取-RFO是已經在總線上得到完成,當前正在總線上的進行處理,還是在它被傳遞到總線上之前就被消除了。
方法7000可以確定是否存在來自相關聯(lián)的存儲解鎖指令的執(zhí)行的任一預取-RFO(塊7020)。如果不存在的話,可以按照加載鎖定指令發(fā)出所有權的讀取(RFO)(塊7030)并且可以為RFO數(shù)據(jù)分配一個WCB中的條目(塊7040)。加載鎖定指令可以進入到慢安全模式。
如果的確存在預取-RFO,那么該方法可以確定對于預取-RFO而言已經進行到了什么階段。該方法可以確定例如是否已將預取-RFO發(fā)送到總線上(塊7050),或者,如果它已經被發(fā)送到總線上,該預取-RFO是否已經被全局觀察(塊7060)。如果預取-RFO存在但是還沒有被發(fā)送到總線上,該方法可以等待直到預取-RFO被發(fā)送為止。在這種情況下,還有可能由于某個外部事件而丟棄該預取-RFO,這些外部事件例如事務隊列中的低的資源可用性,在這種情況下該方法還應該進行檢查來確保預取-RFO保持存在。如果預取-RFO已經被發(fā)出但并未得到全局觀察,該方法也可以停止。在某點,預取-RFO將得到全局觀察并且加載鎖定指令可進入到慢安全模式。在這樣做的過程中,可以將先前分配給預取-RFO請求的WCB條目分配給加載鎖定指令(塊7070)。
應該注意到,在慢安全模式中(塊7080),可以預期加載鎖定指令前進到退出,除非發(fā)生異常事件,例如接收到指向與加載鎖定指令的地址相同的地址的探聽探頭。在慢安全模式中,該方法等待著直到所有較老的存儲已經被從WCB釋放完(塊7090)并且隨后將加載鎖定指令標記為可退出(塊7100)。一旦加載鎖定指令變?yōu)榭赏顺?,它就等待著直到指令退出為止。該方法繼續(xù)確定是否接收到指向與加載鎖定指令的地址相同的地址的探聽探頭(塊7110)。如果是這樣的話,WCB條目被摧毀(塊7120)并且該方法終止。如果在加載鎖定指令被終止的時候沒有接收到任何探聽探頭,則所述慢安全模式終止。該方法在跟在加載鎖定指令后面的存儲解鎖指令退出的時候重新設置記錄板(塊7130)。
圖8舉例說明了具有多個代理50-50的典型的多處理器核心系統(tǒng),其中它們中的一個(如代理50)為圖5和/或圖5中顯示的處理器核心。多個代理50-50通過公用的外部總線60相互進行通信。一個“代理”可以是通過外部總線進行通信的集成電路,包含微處理器、輸入/輸出設備、存儲器系統(tǒng)和專用芯片組或數(shù)字信號處理器。典型地,這些代理中的一個,例如50,為存儲數(shù)據(jù)的系統(tǒng)存儲器。代理50-50使用預先確定的協(xié)議通過外部總線60進行通信。數(shù)據(jù)轉移操作,例如讀和寫操作,可以發(fā)生在由一個代理發(fā)送到總線上的總線事務中,并且所述總線事務被其它的代理觀察到。已經為計算機系統(tǒng)開發(fā)了多種總線協(xié)議,包含允許幾個事務同時掛在總線上的管道總線協(xié)議和仿照一對代理之間的點對點通信的串行總線協(xié)議。在操作期間,其它的代理50-40可以共享相同的數(shù)據(jù)。典型地,為系統(tǒng)規(guī)定高速緩沖存儲器一致性協(xié)議,以便保證在一個代理操作數(shù)據(jù)的時候,它使用系統(tǒng)中可用的數(shù)據(jù)的最當前的副本。在這方面,計算機系統(tǒng)的操作是為人們所熟知的。
為了執(zhí)行加載鎖定指令,代理50典型地將一個事務發(fā)送到總線60上,指示被尋址的高速緩存線的一個讀操作。通常,在事務請求數(shù)據(jù)中提供一個標志以標識該讀操作應該鎖定系統(tǒng)存儲器中的被尋址的高速緩存線;當被啟用時,該鎖定將使其它代理不具備訪問所述高速緩存線的能力。事務可以根據(jù)傳統(tǒng)的技術在總線60上進行。在某點,事務會達到全局觀察。在該點,系統(tǒng)存儲器內的電路將所述被尋址的線標記為加鎖,并且所有其它的代理使它們可能存儲的數(shù)據(jù)的任意副本無效。在事務進行期間,被尋址的高速緩存線的副本可以被從系統(tǒng)存儲器50轉移到發(fā)出請求的代理50,或者如果另一個代理(如代理20)存儲有所述數(shù)據(jù)的臟副本(dirty copy),則被尋址的高速緩存線的副本就可被從該代理轉移到發(fā)出請求的代理50。在一些情況中,發(fā)出請求的代理50已經存儲了數(shù)據(jù)的當前的副本,代理50可以在事務數(shù)據(jù)中這樣指示;數(shù)據(jù)不需作為事務的一部分被轉移到發(fā)出請求的代理50。
存儲解鎖指令的執(zhí)行可以引起另一事務被發(fā)送到通信總線60上。再一次,發(fā)出請求的代理50可以將處理數(shù)據(jù)發(fā)送到總線60上,指示對被尋址的高速緩存線的寫操作??梢栽谑聞諗?shù)據(jù)中提供一個標志,用于指示所述被尋址的高速緩存線將在系統(tǒng)存儲器中被解鎖。當所述事務達到全局觀察時,系統(tǒng)存儲器內的電路將會清除先前施加到被尋址的高速緩存線的標記。發(fā)出請求的代理50還將發(fā)送存儲在系統(tǒng)存儲器內的高速緩存線內容的副本。
本發(fā)明的一些實施方案發(fā)現(xiàn)了應用,因為加載鎖定指令被限制在系統(tǒng)存儲器內的單個高速緩存線。這是計算機系統(tǒng)所使用的最普通類型的加載鎖定指令。跨越多個高速緩存線的其它類型鎖定指令的處理對于容易知道的傳統(tǒng)的鎖定協(xié)議來說可以是缺省的。
另外,在這里特別地對本發(fā)明的幾個實施方案進行了舉例說明和描述。但是,可以理解在不偏離本發(fā)明的精神和預期范圍的情況下,本發(fā)明的修改和變化由以上教導所覆蓋并且在所附的權利要求的范圍之內。
權利要求
1.一種用于處理亂序處理器核心中的加載鎖定指令的方法,包含讀取具有一個或多個字段的鎖定記錄板,其中每個字段在各自的退出條件得到滿足的時候被清除;在加載鎖定指令是下一個要退出的指令之前,執(zhí)行所述加載鎖定指令;以及僅當鎖定記錄板的所有字段都清除時,才使加載鎖定指令退出。
2.如權利要求1所述的方法,進一步包含在鎖定記錄板未被清除時確定是否可以清除鎖定記錄板的任一字段。
3.如權利要求2所述的方法,進一步包含當鎖定記錄板的任一字段可以被清除時更新鎖定記錄板。
4.如權利要求2所述的方法,進一步包含當鎖定記錄板未被清除時重放加載鎖定指令。
5.如權利要求1所述的方法,進一步包含按照一種預先規(guī)定的方式為加載鎖定指令保持鎖定記錄板。
6.如權利要求5所述的方法,進一步包含確定是否存在鎖定記錄板的擁有者,其中擁有者是保持鎖定記錄板的另一個加載鎖定指令;確定加載鎖定指令是否比鎖定記錄板的擁有者老,當加載鎖定指令在程序次序上出現(xiàn)在所述擁有者之前的時候,所述加載鎖定指令比所述擁有者老;當加載鎖定指令比所述擁有者要老的時候,逐出所述擁有者;為所述加載鎖定指令保持鎖定記錄板。
7.如權利要求5所述的方法,進一步包含確定是否存在鎖定記錄板的擁有者,其中所述擁有者是保持鎖定記錄板的另一個加載鎖定指令;確定加載鎖定指令是否比鎖定記錄板的擁有者年輕,當加載鎖定指令在程序次序上出現(xiàn)在所述擁有者之后的時候,所述加載鎖定指令比鎖定記錄板的擁有者要年輕;以及在所述擁有者比加載鎖定指令老的時候,重放所述加載鎖定指令。
8.如權利要求1所述的方法,進一步包含確保處理器核心擁有一個高速緩存線,其中所述處理器核心通過所述高速緩存線從系統(tǒng)存儲器中讀取數(shù)據(jù)、向系統(tǒng)存儲器寫數(shù)據(jù)以及修改系統(tǒng)存儲器中的數(shù)據(jù)。
9.如權利要求8所述的方法,進一步包含將加載鎖定指令分配給寫組合緩沖器,其中所述寫組合緩沖器臨時存儲將要通過高速緩存線寫到系統(tǒng)存儲器的數(shù)據(jù)。
10.如權利要求8所述的方法,進一步包含發(fā)起對于所有權加載鎖定指令請求的讀取(RFO加載鎖定),以便確保處理器核心鎖定系統(tǒng)存儲器。
11.如權利要求8所述的方法,進一步包含在系統(tǒng)存儲器被鎖定時執(zhí)行加載鎖定指令。
12.如權利要求1所述的方法,進一步包含當加載鎖定指令被執(zhí)行的時候,使所述加載鎖定指令退出。
13.一種處理器,包含一個調度器,用來調度程序指令的執(zhí)行,一個執(zhí)行管道,用來執(zhí)行被調度的指令并且確定已經得到執(zhí)行的指令是否要被重新執(zhí)行,一個重放單元,用來使指令被重新執(zhí)行,一個記錄板,具有用于存儲與加載鎖定指令相關聯(lián)的退出條件標志的多個字段,所述記錄板提供與執(zhí)行管道的通信。
14.如權利要求13所述的處理器,進一步包含具有連接到記錄板字段的輸入和連接到執(zhí)行單元的輸出的或門。
15.如權利要求13所述的處理器,進一步包含具有連接到記錄板字段的輸入和連接到執(zhí)行單元的輸出的與門。
16.一種在計算機系統(tǒng)中的處理器核心,包含一個執(zhí)行管道,按照亂序來執(zhí)行指令;一個鎖定記錄板,用于監(jiān)視對應加載鎖定指令的退出條件,所述記錄板具有用于多個退出條件中的每個條件的標志位置,其中加載鎖定指令通過在鎖定記錄板的擁有者比加載鎖定指令年輕時逐出所述擁有者來保持鎖定記錄板。
17.如權利要求16所述的處理器,其中所述擁有者是另一條加載鎖定指令。
18.如權利要求16所述的處理器,其中當所述擁有者出現(xiàn)在處理中的加載鎖定指令之前時,所述擁有者是更年輕的。
19.如權利要求16所述的處理器,其中當所述擁有者不如所述加載鎖定指令年輕的時候,所述加載鎖定指令被重放。
20.如權利要求16所述的處理器,其中所述退出條件之一是是否存在故障條件和錯誤地址中的一個。
21.如權利要求16所述的處理器,其中所述退出條件之一是加載鎖定指令是否擁有鎖定記錄板。
22.如權利要求16所述的處理器,其中所述退出條件之一是是否存在要釋放完的較老的存儲指令或優(yōu)先的存儲指令之一。
23.如權利要求16所述的處理器,其中所述退出條件之一是在寫組合緩沖器中是否存在命中。
24.如權利要求16所述的處理器,其中所述退出條件之一是加載鎖定指令是否在退出。
25.一種用于保持鎖定記錄板以便處理亂序處理器中的當前的加載鎖定指令的方法,包含確定是否存在記錄板的擁有者,所述擁有者是保持鎖定記錄板的另一條加載鎖定指令;如果是這樣的話,則確定在程序流中所述擁有者是否比當前的加載鎖定指令年輕;如果是這樣的話,則逐出鎖定記錄板的擁有者,保持用于當前加載鎖定指令的鎖定記錄板,并且重新設置鎖定記錄板,以及此后,在與當前的加載鎖定指令相關聯(lián)的退出條件得到滿足的時候,清除鎖定記錄板的標志。
26.如權利要求25所述的方法,其中當前的加載鎖定指令在擁有者不如當前的加載鎖定指令年輕的時候被重放。
27.如權利要求25所述的方法,進一步包含在記錄板的所有標志被清除時使當前的加載鎖定指令退出。
28.一種用于執(zhí)行亂序處理器核心內的加載鎖定指令的方法,所述處理器核心位于具有系統(tǒng)存儲器的計算機系統(tǒng)內,所述方法包含讀取鎖定記錄板的內容,所述鎖定記錄板具有多個字段,這些字段的每個指示用于加載鎖定指令的退出條件中的一個是否已得到滿足,當所有退出條件都已經得到滿足的時候執(zhí)行加載鎖定指令,將一個讀取請求發(fā)送到通信總線上,所述讀取請求尋址系統(tǒng)存儲器中的第一高速緩存線并且指示所述第一高速緩存線要被鎖定,并且當所述讀取請求已經被計算機系統(tǒng)全局觀察的時候,使加載鎖定指令退出。
29.如權利要求28所述的方法,在執(zhí)行之前進一步包含確定是否存在作為讀取請求的尋址到第一高速緩存線的預取請求,如果這樣的話,確定所述預取請求是否已經發(fā)送到通信總線上,并且如果這樣的話,延遲加載鎖定指令的執(zhí)行直到預取請求已經被全局觀察。
30.如權利要求29所述的方法,其中如果預取請求還沒有被發(fā)送到通信總線上,則終止預取請求。
31.如權利要求29所述的方法,進一步包含,依照預取請求,在寫組合緩沖器中為所述預取請求分配一條目,并且在所述條目中設置一個標志,以便將所述條目與存儲解鎖指令關聯(lián)起來。
32.如權利要求31所述的方法,進一步包含在標志被設置時鎖定寫組合緩沖器中的條目。
33.如權利要求31所述的方法,進一步包含在加載鎖定指令退出的時候清除條目。
34.如權利要求31所述的方法,進一步包含在加載鎖定指令退出的時候清除鎖定記錄板。
35.如權利要求29所述的方法,進一步包含,在一個多代理計算機系統(tǒng)中并且依照預取請求如果在除了系統(tǒng)存儲器之外的某個代理中存儲了比在系統(tǒng)存儲器中存儲的更當前的第一高速緩存線的數(shù)據(jù)的副本,則由所述代理提供更當前的數(shù)據(jù);并且否則,由系統(tǒng)存儲器提供在第一高速緩存線的數(shù)據(jù)的副本。
36.如權利要求28所述的方法,進一步包含,在一個多代理計算機系統(tǒng)中并且依照讀取請求如果在除了系統(tǒng)存儲器之外的某個代理中存儲了比在系統(tǒng)存儲器中存儲的更當前的第一高速緩存線的數(shù)據(jù)的副本,則由所述代理提供更當前的數(shù)據(jù);并且否則,由系統(tǒng)存儲器提供在第一高速緩存線的數(shù)據(jù)的副本。
37.一種多代理的計算機系統(tǒng),包含通過公用總線互連的多個代理;包含處理器核心的至少一個代理,所述處理器核心包含執(zhí)行單元、具有用來存儲涉及與加載鎖定指令相關聯(lián)的退出條件的數(shù)據(jù)的字段的鎖定記錄板、以及連接到公用總線的通信電路,并且在加載鎖定指令的執(zhí)行期間,發(fā)出帶有標識要被施加的鎖定的指示符的讀取請求,包含系統(tǒng)存儲器的至少一個其他代理,通過鎖定系統(tǒng)存儲器的被尋址的存儲器位置以防止任何其它代理使用,來響應具有所述指示符的讀取請求。
38.如權利要求36的系統(tǒng),其中所述系統(tǒng)存儲器通過解鎖被尋址的存儲器位置來響應標識被尋址的存儲器位置的寫請求,所述寫請求具有解鎖標識符。
全文摘要
本發(fā)明提供了一種使用鎖定記錄板機制的處理核心。所述鎖定記錄板用來管理加載鎖定指令。加載鎖定記錄板包含代表不同條件的多個記錄板條目,這些條件在加載鎖定指令可以退出之前必須得到滿足。在加載鎖定指令的執(zhí)行期間,推測性地執(zhí)行退出條件,并且記錄板相應地得到更新和檢查。如果記錄板指示一個或多個退出條件沒有得到滿足,就重放加載鎖定指令。否則,允許加載鎖定指令退出。當退出條件被清除時,記錄板管理功能定期更新記錄板內容。這樣就可以實現(xiàn)加載鎖定操作的快速退出。
文檔編號G06F12/00GK1510567SQ20031011389
公開日2004年7月7日 申請日期2003年11月10日 優(yōu)先權日2002年12月24日
發(fā)明者H·H·胡姆, H H 胡姆 申請人:英特爾公司