專利名稱:推測版本控制高速緩存內的檢查點的制作方法
技術領域:
本申請一般地涉及改進的數據處理裝置和方法,并且更特別地,涉及執行推測版本控制高速緩存內的檢查點,并且在某些實施例中,基于用于這些推測版本控制高速緩存的版本壓力反饋機制執行這種檢查點。
背景技術:
推測版本控制高速緩存是能夠存儲高速緩存行的多個版本以便使得能夠在多線程數據處理環境中實現線程的推測執行的高速緩存存儲器結構。線程的推測執行是一種優化技術,根據該技術,進行線程的提早執行(該線程的結果可能是或不是以后需要的),以便如果在代碼的執行過程中需要該線程的結果(即,如果線程從推測狀態轉變為使用所述結果的非推測狀態)的情況下實現更好的性能。推測版本控制高速緩存是典型高速緩存的擴展,其中推測版本控制高速緩存能夠保持僅能被寫該推測版本控制高速緩存的硬件線程訪問的數據。所有帶有修改注釋的高速緩存行可被使用特殊命令(Abort,丟棄)丟棄,或使用另一種命令(commit,提交)使得其在結構上被其它線程可見。取決于模式,還可以由執行對應于邏輯后繼任務的任務的其它線程訪問在執行推測任務時由硬件線程寫的數據。因此,推測版本控制需要在存儲器位置的多個緩沖版本中追蹤程序順序,以便確保一定的順序程序語義。首先,加載必須最終讀取由對相同存儲器位置的最近存儲創建的值。這需要如果在該存儲之前執行加載并且不正確地讀取以前的版本,該加載必須被粉碎(squash)并且重新執行。另外,這需要在程序順序中在該加載之后對相同存儲器位置的所有存儲必須被緩沖,直到該加載被執行為止。其次,存儲器位置必須最終具有與版本的創建順序無關的正確版本。從而,一個位置的推測版本必須被以程序順序提交給體系結構存儲設備。通過提供與推測線程相關聯地存儲高速緩存行的推測版本的能力,推測版本控制高速緩存支持推測多線程。在Gopal 等的“Speculative Versioning Cache, "Proceedings of the 4th International Symposium on High-Performance Computer Architecture, January 31 to February 04,1998,page 195中描述了推測版本控制高速緩存的一個例子。在推測版本控制高速緩存的這個例子中,為每個處理器提供專有高速緩存,以類似于基于探聽總線的高速緩存一致性對稱多處理器(SMP)組織系統。在專有高速緩存中命中的存儲器引用不如同SMP中那樣使用總線。任務提交不全體回寫推測版本。當下次被訪問時, 每個高速緩存行被單獨處理。采用Gopal等描述的推測版本控制高速緩存,程序被劃分為被稱為任務的片段, 這些任務形成對應于它們在動態指令流內的順序的序列。更高層次的控制單元預測該序列中的下一個任務,并且將其分配到空閑處理器以便執行。每個處理器執行分配給它的任務
5中的指令,并且在其專有高速緩存中緩沖由該任務創建的推測狀態。當檢測到任務誤預測時,包括不正確預測的任務和其之后的任務的該序列內的所有任務的推測狀態被無效,并且釋放對應的處理器。這被稱為任務粉碎。然后分配該序列內的正確任務以便執行。當任務預測已被無效時,它通過將推測性緩沖狀態拷貝到體系結構存儲設備(例如,數據高速緩存)而提交。任務按照程序順序一個接一個地提交。一旦任務提交,其處理器被釋放以便執行下一個任務。由于任務按照程序順序提交,因此任務被按照程序順序分配給處理器。—旦加載的地址可獲得,任務就執行該加載,推測該序列內的前面任務中的存儲不向相同位置寫。該位置的最近的以前版本被提供給該加載。記錄被提供了以前任務的版本的加載,以便指示在潛在定義之前的使用。如果發生了定義,例如,以前任務中對相同位置的存儲,該加載被提供了不正確的版本,并且違反了存儲器相關性。當一個任務向一個存儲器位置執行存儲時,其被通知給序列內所有以后的活動任務。當一個任務從以前的任務接收到一個位置的新版本時,如果為該位置記錄了定義之前的使用,即檢測到存儲器相關性違反,該任務被粉碎。在被粉碎的任務之后的所有任務也被作為任務誤預測粉碎。最早的活動任務是非推測性的,并且可以將其推測存儲器狀態(即,由這個任務中的存儲創建的版本)提交給體系結構存儲設備。提交一個版本涉及邏輯地將版本從推測緩沖器拷貝到體系結構存儲設備,例如,數據高速緩存。當任務被粉碎時,與任務相關聯的推測狀態被無效,并且不被提交給體系結構存儲設備。各個處理器的專有高速緩存一起組成了推測版本控制高速緩存。專有高速緩存的每個高速緩存行存儲標識被緩存的數據的地址標簽(Tag)、標識高速緩存行是否有效的有效位(V)、標識是否發生了對高速緩存行的存儲的臟位(S)、數據本身、指示是否發生了在對高速緩存行存儲之前從該高速緩存行的任務加載的加載位(L)、標識具有用于該高速緩存行的版本順序列表(VOL)內的下一個拷貝/版本(如果有的話)的處理器(或Ll高速緩存)的指針(Pointer),以及數據本身(Data)。推測版本控制高速緩存使用被稱為版本控制邏輯(VCL)的組合邏輯,其提供對使用VOL的推測版本控制的支持。在處理器的專有高速緩存中命中的處理器請求不必參考 VOL。高速緩存未中發出被專有高速緩存探聽的總線請求。每個專有高速緩存內的被請求的高速緩存行的狀態和VOL被提供給VCL。VCL使用總線請求、任務之中的程序順序和VOL 計算對每個高速緩存的適當響應。每個高速緩存行被基于其初始狀態、總線請求和VCL響應更新。采用多線程數據處理環境中的線程的推測執行,線程被允許執行,直到遇到兩個或更多個線程之間的相關性違反,例如,第一個線程執行對一個存儲器位置的讀取,其后比第一個線程新的第二個線程對相同存儲器位置執行寫,或兩個或更多個線程試圖修改高速緩存或存儲器內的相同數據部分的狀態的沖突。此時,通常允許一個線程保持其狀態,而必須粉碎一個或更多個其它線程,即,由未被保持的線程執行的所有工作被回滾(roll back) 或放棄。這種線程粉碎比典型的高速緩存未中昂貴得多,這是由于其導致取消由給定的推測線程執行的所有工作以及還可能取消任意后續推測線程執行的所有工作
發明內容
在一個說明性實施例中,一種數據處理系統內的方法,用于產生數據處理系統的推測版本控制高速緩存內的檢查點。該方法包括由數據處理系統的至少一個處理器執行數據處理系統內的代碼,其中代碼訪問推測版本控制高速緩存內的高速緩存行。該方法還包括以數據處理系統確定指示需要產生推測版本控制高速緩存內的檢查點的第一條件是否發生。檢查點是推測高速緩存行,該推測高速緩存行被響應于第二條件發生置于是非推測性的,第二條件需要對應于推測版本控制高速緩存的高速緩存行的改變的回滾。該方法還包括響應于確定第一條件已經發生,產生推測版本控制高速緩存內的檢查點。在另一個說明性實施例中,提供了一種包括計算機可讀介質的計算機程序產品, 所述計算機可讀介質具有記錄在其上的計算機可讀程序。當被數據處理系統執行時,所述計算機可讀程序使得數據處理系統執行上面以方法實施例概述的各種操作以及這些操作的組合。在另一個說明性實施例中,提供了一種數據處理系統/裝置,其包括一個或更多個處理器、耦連到一個或更多個處理器的推測版本控制高速緩存存儲設備、以及耦連到推測版本控制高速緩存存儲設備的以硬件實現的全局版本控制高速緩存模塊。每個處理器具有實現在處理器的硬件內的至少一個線程級版本控制高速緩存模塊。一個或更多個處理器執行訪問推測版本控制高速緩存存儲設備內的高速緩存行的代碼。至少一個以硬件實現的全局版本控制高速緩存模塊或至少一個線程級版本控制高速緩存模塊確定指示產生推測版本控制高速緩存內的檢查點的需要的第一條件是否發生。檢查點是推測高速緩存行,該推測高速緩存行被響應于第二條件發生置于是非推測性的,第二條件需要對應于推測版本控制高速緩存的高速緩存行的改變的回滾。響應于確定第一條件已經發生,在一個或更多個處理器中的一個處理器上執行的代碼產生推測版本控制高速緩存存儲設備內的檢查點。在對本發明的示例實施例的下列詳細描述中將描述本發明的這些或其它特征和優點,或根據對本發明的示例實施例的下列詳細描述,本領域的技術人員將明了本發明的這些或其它特征和優點。
當結合附圖閱讀時,通過參考說明性實施例的下列詳細描述,將最好地理解本發明以及其優選使用方式和進一步的目的和優點,其中圖1示出了可以實施說明性實施例的數據處理系統的示例方框圖;圖2是示出了指示出了功能單元和寄存器的常規雙線程處理器設計的示例方框圖,可以在其中實施說明性實施例的方面;圖3是一個說明性實施例的主要操作元件的示例方框圖;圖4是一個示例圖,示出了根據一個說明性實施例的基于原始版本壓力數據的有意義版本壓力統計的產生;圖5是一個示例的代碼部分,示出了根據一個說明性實施例的用于解決版本壓力的線程壓制動作;圖6是一個示例的代碼部分,示出了根據一個說明性實施例的用于解決版本壓力的工作負荷壓制動作;圖7是一個示例的代碼部分,示出了根據一個說明性實施例的用于解決版本壓力的閑置線程動作;圖8是一個示例的代碼部分,示出了根據一個說明性實施例的用于解決版本壓力的事務聚集動作;圖9是一個流程圖,概述了根據一個說明性實施例的用于使用版本壓力反饋來調整數據處理系統的操作的示例操作;圖10是一個示例圖,示出了根據一個說明性實施例的推測版本控制高速緩存檢查點機制的操作;圖11是一個示例圖,示出了根據一個說明性實施例的關于軟錯誤的發生的推測版本控制高速緩存檢查點機制;圖12是根據一個說明性實施例的版本壓力模塊的示例圖,其中響應于達到或超過了一個或更多個版本壓力閾值產生中斷;圖13是一個流程圖,概述了根據一個說明性實施例的響應于達到或超過了一個或更多個版本壓力閾值產生中斷的示例操作;圖14是一個流程圖,概述了根據一個說明性實施例的用于產生檢查點的示例操作;和圖15是一個流程圖,概述了根據一個說明性實施例的用于執行回滾操作的示例操作。
具體實施例方式說明性實施例提供了用于確定推測版本控制高速緩存(SVC)內的版本壓力,并且利用該版本壓力信息,以執行代碼以便增加/減小版本壓力從而實現推測版本控制高速緩存的最優性能的方式影響改變的機制。另外,說明性實施例還提供了用于出于在需要時回滾修改的目的,利用推測版本控制高速緩存存儲檢查點信息的機制。另外,說明性實施例提供了用于為檢查點信息利用版本壓力信息和最大容量信息,以便確定何時將推測性狀態提升為非推測性狀態,并且產生新檢查點的機制。如上所述,采用推測版本控制高速緩存(SVC),在SVC中保存高速緩存行的多個版本。以給定數目的高速緩存行集合來組織SVC高速緩存,每個高速緩存行集合具有給定數目的高速緩存行(結合數目)。當處理存儲器請求時,使用地址確定這個地址屬于哪個高速緩存行集合。一旦確定了高速緩存行集合,高速緩存確定與給定地址相關聯的高速緩存行是否存在于確定的高速緩存行集合內。這樣一來,高速緩存訪問標記(即,指示對應于當前在高速緩存行集合內的高速緩存行的地址和版本的元數據信息),以便確定發生高速緩存命中(正確地址并且版本存在)還是高速緩存未中(這個高速緩存行集合中當前沒有對應于所請求的地址/版本的高速緩存行)。采用推測版本控制高速緩存(SVC),如果存在訪問違規,例如,相關性違規,線程或事務可能被粉碎,導致相當大的開銷成本。另外,線程可能由于沖突未中被粉碎。當SVC中沒有用于高速緩存行的所有當前版本的足夠存儲容量時發生沖突未中。不同于正常的高速緩存結構,采用SVC,由于推測狀態的高速緩存行通常未被返回到體系結構存儲設備,例如, 數據高速緩存或主存儲器內,不能從SVC收回推測狀態的高速緩存行,從而增加了沖突未中的可能性。因此,如果必須收回(evict)推測狀態的高速緩存行,諸如,為其它推測線程提供附加存儲空間,與被收回的推測狀態的高速緩存行相關聯的推測線程必須被粉碎。另夕卜,當粉碎線程時,通常還粉碎所有子線程。子線程對應于執行原始程序順序中的邏輯上在當前線程的任務之后的任務的線程。采用線程和子線程的粉碎,當存在沖突未中時,可能遇到由于利用資源而沒有產生有益結果,以及需要重新啟動被粉碎的線程而引起的大的開銷成本。沖突未中的可能性隨著在數據處理系統內執行的線程的數目而增加。另外,具有 “熱點”特性的應用程序,即,經常執行的應用程序部分,可以極大地增加沖突未中的可能性,這是由于熱點增加了這些熱點的需要保持在SVC內的高速緩存行的版本的數目。如果存在大量高速緩存行集合,沖突未中的可能性可被減小,在沒有熱點時,由于具有均勻分布的存儲器訪問被分布在大量高速緩存集合內,從而減少競爭高速緩存內的每個高速緩存行集合內的給定數目的高速緩存行的推測存儲器請求的數目。另外,如果以更高的結合度組織高速緩存,由于高結合度高速緩存在每個高速緩存行集合內提供更多的高速緩存行,沖突未中的可能性將減小。因此,每個高速緩存行集合將能夠容納更多的推測版本。雖然軟件可以控制推測級別,當前沒有軟件知道將發生沖突未中情況的可能程度的有效機制。換言之,編譯器、操作系統、運行時環境等的軟件機制不能估計推測版本控制高速緩存經歷的“版本壓力”。在本描述的上下文中,術語“版本壓力”指推測版本控制高速緩存將沒有足夠空間存儲高速緩存行的所有各種版本以便支持數據處理系統內的線程的推測執行的可能性。例如,對于具有集合結合度16的推測版本控制高速緩存內的給定高速緩存行集合X,如果高速緩存行集合X中的16個高速緩存行內不存在推測高速緩存行,則版本壓力被稱為零。然而,如果每個高速緩存行集合X中的16個高速緩存行內存在15個推測行,則版本壓力被稱為非常高。因此,術語“版本壓力,,對應于與給定高速緩存行集合內的,或通過延伸,整個推測版本控制高速緩存內的推測高速緩存行的部分(fraction)成比例的度量。說明性實施例提供了用于提供推測版本控制高速緩存的版本壓力反饋的機制。在一個說明性實施例中,提供了一種硬件機制,用于基于每個線程或每個高速緩存版本壓力模塊產生壓力反饋信息的硬件機制,并且將這種壓力反饋提供給諸如編譯器、操作系統、運行時環境等的軟件機制,從而軟件機制可以相應地反應。軟件機制可以按照若干不同方式反應。例如,基于壓力反饋信息,軟件機制控制活動線程的數目、控制跨區(spanned)線程內的工作數量、或控制事務的持續時間。事務是改變必須自動發生的任務,即,所有改變發生或沒有改變發生。在事務模型中,是否允許改變發生的判斷取決于其它任務和/或事務觸及由該任務訪問的某些相同數據。當沒有其它任務和/或事務觸及與給定事務相關聯的數據時,允許以非推測狀態反應事務的改變。當某些其它任務和/或事務觸及由還被給定事務觸及的某些數據時,則給定的事務可能失敗,和/或觸及某些相同數據的其它事務將失敗。必須不允許將由失敗的事務執行的改變提交非推測狀態。采用說明性實施例的基礎機制,數據處理系統的每個線程具有相關聯的線程版本壓力模塊。推測版本控制高速緩存還具有相關聯的全局版本壓力模塊。全局版本壓力模塊保持和更新高速緩存行集合的版本壓力信息,即,存在于推測版本控制高速緩存內的相同高速緩存行的不同版本的集合。響應于高速緩存行未中或高速緩存行替換操作更新這種版本壓力信息。高速緩存行集合的信息然后被與響應于來自線程的請求從高速緩存行的一個版本返回的數據從全局版本壓力模塊傳遞給單獨線程的單獨線程版本壓力模塊。因此,單獨線程的相關版本壓力模塊接收被特定線程訪問的高速緩存行的特定集合的版本壓力信息。基于保持在單獨線程版本壓力模塊內的版本壓力信息,軟件機制可以為每個線程執行上面所述的對線程的各種修改中的一個或更多個。如本領域技術人員理解的,本發明可被具體化為系統、方法或計算機程序產品。因此,本發明的各個方面和特征可以采取完整的硬件實施例、完整的軟件實施例(包括固件、 駐留軟件、微碼等)或此處可被總地稱為“電路”、“模塊”或“系統”的包含軟件和硬件方面的實施例。另外,本發明的各個方面和特征可以采取實現于任意有形的表達介質內的計算機程序產品的形式,所述介質內實現有計算機可用的程序代碼。可以使用一個或更多個計算機可用或計算機可讀介質的任意組合。計算機可用或計算機可讀介質可以是,例如,但不限于,電的、磁的、光學的、電磁的、紅外的或半導體系統、裝置、設備或傳播媒介。計算機可讀介質的更具體的例子(非窮盡性列表)包括下列 具有一個或更多個導線的電連接、便攜計算機盤、硬盤、隨機訪問存儲器(RAM)、只讀存儲器 (ROM)、可擦可編程只讀存儲器(EPR0M或閃存)、光纖、便攜壓縮盤只讀存儲器(CDROM)、光學存儲設備、傳輸介質,諸如支持互聯網或內聯網的傳輸介質,或磁存儲設備。注意,計算機可用或計算機可讀介質甚至可以是可以在其上打印程序的紙或另一種適合介質,因為可以通過例如對紙或另一種介質的光學掃描電子地捕獲所述程序,并且如果需要,可被編譯、 解釋或以適合的方式另行處理,并且然后存儲在計算機存儲器內。在本文檔的上下文中,計算機可用的或計算機可讀的介質可以是任何含有、存儲、傳達、傳播、或傳輸供指令執行系統、裝置或器件使用的或與指令執行系統、裝置或器件相聯系的程序的介質。計算機可用的介質可包括在基帶中或者作為載波一部分傳播的、由其體現計算機可用的程序碼的數據信號。計算機可用的程序碼可以用任何適當的介質傳輸,包括-但不限于-無線、電線、光纜纜線、射頻(RF)等等。用于執行本發明的操作的計算機程序碼,可以以一種或更多種編程語言的任何組合來編寫,所述編程語言包括面向對象的編程語言-諸如JaVaTM、SmalltalkTM、C++之類,還包括常規的過程式編程語言-諸如” C”編程語言或類似的編程語言。程序碼可以完全地在用戶的計算機上執行、部分地在用戶的計算機上執行、作為一個獨立的軟件包執行、部分在用戶的計算機上部分在遠程計算機上執行、或者完全在遠程計算機或服務器上執行。在后一種情形中,遠程計算機可以通過任何種類的網絡——包括局域網(LAN)或廣域網(WAN)-連接到用戶的計算機,或者,可以(例如利用因特網服務提供商來通過因特網)連接到外部計算機。另外,程序碼可被包含在服務器或遠程計算機上的計算機可讀存儲介質上,并且可被通過網絡下載到遠程計算機或用戶計算機的計算機可讀存儲介質上以便存儲和/或執行。 另外,任意計算系統或數據處理系統可以在從遠程計算系統或數據處理系統通過網絡下載程序碼之后在計算機可讀存儲介質內存儲程序碼。下面參考根據本發明的說明性實施例的方法、裝置(系統)和計算機程序產品的流程圖和/或方框圖描述說明性實施例。應當理解,流程圖和/或方框圖的每個方框,以及流程圖和/或方框圖的方框的組合可由計算機程序指令實現。這些計算機程序指令可被提供給通用計算機、專用計算機或其它可編程數據處理裝置的處理器,以便產生一種機器,從而通過計算機或其它可編程數據處理裝置的處理器執行的所述指令創建用于實現流程圖和/或方框圖的一個或更多個方框內指定的功能/動作。也可以把這些計算機程序指令存儲在能指引計算機或其它可編程數據處理裝置以特定方式工作的計算機可讀介質中,這樣,存儲在計算機可讀介質中的指令產生一個包括實現流程圖和/或框圖中的一個或更多個方框中規定的功能/操作的指令裝置的制造
P
ΡΠ O也可以把計算機程序指令加載到計算機或其它可編程數據處理裝置上,使得在計算機或其它可編程數據處理裝置上執行一系列操作步驟,以產生計算機實現的過程,從而在計算機或其它可編程裝置上執行的指令能夠提供實現流程圖和/或框圖中的一個或更多個方框中規定的功能/操作的過程。附圖中的流程圖和框圖,圖示了按照本發明各種實施例的系統、方法和計算機程序產品的可能實現的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段、或代碼的一部分,所述模塊、程序段、或代碼的一部分包含一個或更多個用于實現規定的邏輯功能的可執行指令。也應當注意,在有些作為替換的實現中,方框中所標注的功能也可以以不同于附圖中所標注的順序發生。例如,兩個接連地表示的方框實際上可以基本并行地執行,它們有時也可以按相反的順序執行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執行規定的功能或操作的專用的基于硬件的系統來實現,或者可以用專用硬件與計算機指令的組合來實現。可在許多不同類型的數據處理環境內利用說明性實施例,包括分布式數據處理環境、單個數據處理設備等。為了提供說明性實施例的特定元件和功能的描述的上下文,下面提供圖1和2作為可以實現說明性實施例的方面的示例環境。雖然接著圖1和2的描述將主要聚焦于提前調度并且與其它迭代并行地執行不相關迭代的了解運行時相關性的調度機制的單個數據處理設備實現,這僅是例子,并且不旨在表述或暗示關于本發明的特征的任意限制。相反,說明性實施例旨在包括分布式數據處理環境,以及在運行時調度不相關迭代,并且提前與其它迭代并行執行的實施例。現在參考附圖,并且具體地參考圖1-2,提供了可以實現本發明的說明性實施例的數據處理環境的示例圖。應當理解,圖1-2僅是例子,并且不旨在聲稱或暗示關于可以實現本發明的方面或實施例的環境的任意限制。可以對所示的環境做出許多修改,而不脫離本發明的精神和范圍。現在參考附圖,圖1示出了可以實現本發明的實施例的數據處理環境的示例圖。 應當理解,圖1僅是示例,并且不旨在聲稱或暗示關于可以實現本發明的方面或實施例的環境的任意限制。可以對所示的環境做出許多修改,而不脫離本發明的精神和范圍。現在參考圖1,示出了可以實現說明性實施例的數據處理系統的方框圖。數據處理系統100是一個計算機的例子,可以為說明性實施例將實現所述處理的計算機可用代碼或指令放置在該計算機內。在示出的例子中,數據處理系統100采用包括北橋和存儲器控制器集線器(NB/ MCH) 102和南橋和輸入/輸出(I/O)控制器集線器(SB/ICH)104的集線器體系結構。處理單元106、主存儲器108和圖形處理器110被耦連到北橋和存儲器控制器集線器102。處理單元106可以包括一個或更多個處理器,并且甚至可以被使用一個或更多個異類處理器系
11統實現。圖形處理器Iio可被例如通過加速圖形端口(AGP)耦連到MCH。在示出的例子中,局域網(LAN)適配器112被耦連到南橋和I/O控制器集線器 104,并且音頻適配器116、鍵盤和鼠標適配器120、調制解調器122、只讀存儲器(ROM) 124、 通用串行總線(USB)端口和其它通信端口 132以及PCI/PCIe設備134被通過總線138耦連到南橋和I/O控制器集線器104,并且硬盤驅動器(HDD) 126和⑶-ROM驅動器130被通過總線140耦連到南橋和I/O控制器集線器104。PCI/PCIe設備可以包括,例如,以太網適配器、插卡和筆記本計算機的PC卡。PCI使用卡總線控制器,而PCIe不使用。ROMlM可以是例如閃速二值輸入/輸出系統¢10 。硬盤驅動器1 和⑶-ROM驅動器130可以使用例如集成驅動電子設備(IDE)或串行高級技術附加(SATA)接口。超級I/O(SIO)設備136可被耦連到南橋和I/O控制器集線器104。操作系統運行在處理單元106上,并且調整和提供對圖1的數據處理系統100內的各種組件的控制。操作系統可以是商業可獲得的操作系統,諸如 Micr0S0ft Wind0WS XP (Microsoft和Windows是微軟公司在美國、其它國家或兩者內的注冊商標)。面向對象編程系統,諸如JAVA 編程系統可以結合操作系統運行,并且提供從在數據處理系統100上執行的JAVA程序或應用對操作系統的調用。JAVA和所有基于JAVA的商標是Sun Microsystems在美國、其它國家或兩者內的注冊商標。操作系統、面向對象的編程系統和應用程序或程序的指令位于諸如硬盤驅動器 126的存儲設備上,并且可被加載主存儲器108以便由處理單元106執行。說明性實施例的處理可由處理單元106使用以計算機實現的指令執行,所述指令可位于存儲器,諸如例如, 主存儲器108、只讀存儲器124、或一個或更多個外圍設備內。總線系統可由一個或更多個總線組成,諸如系統總線、1/0總線和PCI總線。當然, 可以使用任意類型的通信構造或體系結構實現總線系統,所述構造或體系結構為附加到所述構造或體系結構的不同組件或設備之間的數據傳輸提供保障。通信單元可以包括用于傳輸和接收數據的一個或更多個設備,諸如調制解調器或網絡適配器。存儲器可以是例如主存儲器108或高速緩存,諸如北橋和存儲器控制器集線器102中找到的高速緩存。處理單元可以包括一個或更多個處理器或CPU。圖1中所示的例子和上面所述的例子不意味著暗示體系結構的限制。例如,除了采取PDA的形式之外,數據處理系統100還可以是平板計算機、膝上計算機或電話設備。參考圖2,示出了指示出了功能單元和寄存器的常規雙線程處理器設計的示例方框圖,可以在其內實現說明性實施例的方面。在這些說明性實施例中,處理器200可被實現為圖1中的處理單元106。處理器200包括具有雙線程同時多線程(SMT)的單集成電路超標量微處理器。因此,如此處下面討論的,處理器200包括各種單元、寄存器、緩沖器、存儲器和其它部分,它們全以集成電路形成。另外,在說明性實施例,處理器200根據精簡指令集計算機(RISC)技術操作。如圖2所示,取指令單元(IFU) 202連接到指令高速緩存204。指令高速緩存204 保持將要執行的多個程序(線程)的指令。指令高速緩存204還具有與二級(U)高速緩存/存儲器206的接口。IFU202根據指令地址從指令高速緩存204請求指令,并且將指令傳遞給指令解碼單元208。在說明性實施例,IFU202可以同時為多至兩個線程從指令高速緩存204請求多個指令。指令解碼單元208同時為多至兩個線程解碼多個指令,并且將解碼后的指令傳遞給指令分派單元(IDU) 210。IDU210為每個線程選擇性地將來自指令解碼單元208的解碼后的指令分組,并且將每個線程的指令組輸出或發出到處理器的執行單元 212、214、216、218、220、222、224、226 和 228。在說明性實施例中,處理器的執行單元可以包括分支單元212、加載/存儲單元 (LSUA) 214 和(LSUB) 216、定點執行單元(FXUA) 218 和(FXUB) 220、浮點執行單元(FPUA) 222 和(FPUB) 224、矢量多媒體擴展單元(VMXA) 2 和(VMXB) 228。執行單元212、214、216、218、 220、222、224、226和228被兩個線程完全共享,意味著執行單元212、214、216、218、220、 222,224,226和2 可以從任意一個或兩個線程接收指令。處理器包括多個寄存器集合 230、232、2;34、236、238、240、242、244和M6,它們也被稱為構造寄存器文件(ARF)。ARF是一個文件,一旦指令被完全執行,完成數據被存儲在該文件內。ARF 230、 232、2;34、236、238、240、242、244和246可以為兩個線程中的每一個分別并且按照指令類型存儲數據,即,通用寄存器(GPR) 230和232、浮點寄存器(FPR) 234和236、專用寄存器 (SPR) 238和MO以及矢量寄存器(VR) 244和對6。按照類型并且按照線程分別存儲完成數據有助于在處理指令的同時減少處理器競爭。處理器附加地包括用于保持程序狀態的共享專用寄存器(SPR)集合M2,諸如指令指針、堆棧指針、處理器狀態字,它們可用于來自任意一個或兩個線程的指令。執行單元212、214、216、218、220、222、224、226和228被通過簡化的內部總線結構248連接到ARF 230、232、234、236、238、240、242、244 和 246。為了執行浮點指令,FPUA222和FPUB2M從FPR234和236檢索寄存器源操作數信息,其是執行指令所需的輸入數據,如果執行指令所需的指令數據是完成的,或如果數據已經通過了流水線的清除點。完成數據是一旦指令已被完全執行,由執行單元產生的并且存儲在ARF,諸如ARF 230、232、234、236、238、240、242、244和對6內的數據。非完成數據是在指令未被完全執行的指令執行過程中產生的數據。FPUA222和FPUB2M根據每個執行指令所屬的線程輸入它們的數據。例如,FPUA222將完成數據輸入FPR234,并且FPUA2M將完成數據輸入FPR236,由于FPUA222、FPUB224、FPR234和FPR236是線程專用的。在指令的執行過程中,當指令已經通過了流水線內的清除點時,FPUA222和 FPUB224將其目的地寄存器操作數數據,或在指令執行過程中產生的指令數據輸出到 FPR234和236。在指令執行過程中,當指令已經通過了流水線內的清除點時,FXUA 218、 FXUB 220、LSUA 214和LSUB 216將其目的地寄存器操作數數據或在指令執行過程中產生的指令數據輸出到GPR230和232。在指令子集執行過程中,當指令已經通過了流水線內的清除點時,FXUA 218、FXUB 220和分支單元212將其目的地寄存器操作數數據輸出到 SPR238、240和M2。在指令執行過程中,當指令已經通過了流水線內的清除點時,VMXA226 和VMXB2^將其目的地寄存器操作數數據輸出到VR244和M6。數據高速緩存256還與不可緩存單元(未示出)相關聯,不可緩存單元從處理器接收數據,并且將其直接寫到二級高速緩存/存儲器206,從而繞開高速緩存存儲所需的一致性協議。響應于從指令高速緩存204輸入并且以指令解碼單元208解碼的指令,IDU210按照指令類型和線程將指令選擇性地分派到執行單元212、214、216、218、220、222、224、226 和228。執行單元212、214、216、218、220、222、2對、2洸和2 又執行特定類或類型的指令的一個或更多個指令。例如,FXUA 218和FXUB 220對寄存器源操作數執行定點算術運算, 諸如加、減、與、或和異或。FPUA222和FPUB2M對寄存器源操作數執行浮點算術運算,諸如浮點乘和除。LSUA214和LSUB216執行在數據高速緩存256和ARF 230,232,234和236之間移動操作數數據的加載和存儲指令。VMXA2^和VMXB2^執行包括多個數據的單指令操作。分支單元212執行分支指令,其通過修改IFU202使用的指令地址,以便從指令高速緩存204請求指令,有條件地改變程序的執行流程。IDU210根據解碼后的指令以及為每個指令執行所請求操作的可用執行單元212、 214、216、218、220、222、2對、2洸和2 的混合,將以指令解碼單元208解碼的指令分組在一起以便同時執行。例如,由于僅有兩個加載/存儲單元214和216,最多兩個加載/存儲類型的指令可被分組在一起。在說明性實施例中,多至7條指令可被分組在一起(兩條定點算術指令、兩條加載/存儲指令、兩條浮點算術指令(FPU)或兩個矢量多媒體擴展(VMX)指令和一條分支指令),并且多至5條指令可以屬于相同線程。在包括較低優先級線程的指令之前,IDU210在所述組中包括更高優先級線程的多至5條的盡可能多的指令。按照線程的優先級值和其處理的優先級類別確定線程的優先級。處理系統使用所有可執行線程的基本優先級級別確定哪個線程獲得下一個處理器時間片段。在每個優先級級別以循環方式調度線程,并且僅當沒有更高級別的可執行線程時,才進行較低級別的線程的調度。然而,IDU210將FPU指令222和224或VMX指令226和228與FXU指令218和220 分配在相同組內。即,IDU210不將FPU指令222和224以及VMX指令226和228分配在相同組內。程序狀態(諸如,存儲在SPR238和MO內的指令指針、堆棧指針、處理器狀態字) 向IDU210指示線程優先級沈0。指令完成單元沈2監視內部總線結構M8,以便確定在執行單元212、214、216、 218,220,222,224,226和228中執行的指令何時完成將其操作數結果寫到重新命名緩沖器 250、252、254 或 258。由分支單元 212、FXUA218、FXUA220、LSUA 214 和 LSUA 216 執行的指令需要相同數目的周期來執行,而由FPUA 222、FPUB 224、VMXA226和VMXB2^執行的指令需要可變的并且更大數目的周期來執行。因此,被分組在一起并且在相同時刻開始執行的指令不必然在相同時刻完成。由于指令必須被按順序完成,指令的“完成”意味著指令在執行單元212、214、216、218、220、222、2對、2沈和2 之一內完成執行,并且所有舊指令已被在體系結構狀態中更新。因此,該指令現在準備完成并且更新體系結構狀態,這意味著當指令已被完成時,更新數據的最終狀態。體系結構狀態僅可被按照順序更新,即,必須按照順序完成指令,并且必須在每個指令完成時更新完成數據。指令完成單元262監視指令的完成,并且向IDU210發送控制信息,通知IDU210可以給執行單元212、214、216、218、220、222、2對、2洸和2 分派更多組的指令。IDU210給分派單元、IFU202和指令解碼單元208發送分派信號沈6,指示其準備好接收更多的解碼后的指令,信號266作為將更多指令帶入流水線的節門。本領域的技術人員將明了圖1-2中的硬件可以根據實現而改變。除了或取代圖 1-2所示的硬件之外,可以使用其它內部硬件或外圍設備,諸如閃存、等同的非易失存儲器或光盤驅動器等。另外,說明性實施例的處理可被應用于前面提到的SMP之外的多處理器數據處理系統,而不脫離本發明的精神和范圍。另外,數據處理系統100可以采取多個不同數據處理系統中的任一個的形式,包括客戶機計算設備、服務器計算設備、平板計算機、膝上計算機、電話或其它通信設備、個人數字助理(PDA)等。在某些說明性例子中,例如,數據處理系統100可以是便攜計算設備,其配置有閃存,以便提供用于存儲操作系統文件和/或用戶產生的數據的非易失存儲器。本質上,數據處理系統100可以是任意已知或以后開發的數據處理系統,而沒有體系結構限制。采用說明性實施例的機制,數據處理系統諸如圖1的數據處理系統100提供推測多線程(SMT)環境,其中一個或更多個處理單元106可以按推測方式并發執行多個線程。數據處理系統100利用支持多個并發線程的推測執行的推測版本控制高速緩存(SVC)。SVC 可被例如提供在共享Ll或L2高速緩存的一部分內,可被分布在與多個不同處理單元106 相關聯的多個Ll或L2高速緩存上,或可被提供為一個或更多個處理單元106以及其處理核心可訪問的單獨高速緩存結構。在多個線程并發訪問相同高速緩存行的情況下,SVC可以存儲高速緩存行的多個版本。在SVC中可以用與高速緩存行相關聯的版本標識符(VID) 區分高速緩存行的版本。因此,例如,多個高速緩存行可以具有相同地址標簽,但是具有不同VID,從而將高速緩存行標識為相同高速緩存行的不同版本,或相同高速緩存行集合的多個高速緩存行版本。說明性實施例的機制收集關于在SVC中使用的高速緩存行的各個版本的原始版本壓力數據,并且根據原始版本壓力數據產生統計版本壓力信息。統計版本壓力信息可被軟件控制機制用于控制數據處理系統內的線程的執行,以便控制關于各個線程的版本壓力。優選地,以與推測版本控制高速緩存和各個處理器的線程執行硬件相關聯提供的硬件機制收集原始版本壓力數據。基于原始版本壓力數據,可由硬件機制產生,或可由軟件處理 (諸如作為編譯器、操作系統等的一部分提供的軟件處理)產生統計版本壓力信息。圖3是一個說明性實施例的主要操作元件的示例方框圖。如上面所述,優選地以硬件實現圖3的版本壓力模塊和推測版本控制高速緩存機制,而其它元件,諸如軟件控制單元350,可被實現為在一個或更多個處理設備上執行的軟件。另外,出于簡化起見,以與單個推測版本控制高速緩存相關聯地提供的單個全局版本壓力模塊描述圖3。然而,應當理解,說明性實施例的機制可被分布在多個推測版本控制高速緩存以及與這些推測版本控制高速緩存相關聯的多個全局版本壓力模塊上。在另一個說明性實施例中,可以結合多個推測版本控制高速緩存使用圖3的單個全局版本壓力模塊,從而單個全局版本壓力模塊從這些多個推測版本控制高速緩存獲得原始版本壓力數據。如圖3所示,說明性實施例的機制包括具有相關聯的全局版本壓力模塊320的推測版本控制高速緩存310。全局版本壓力模塊320保持原始版本壓力數據,并且可以包括可以基于這種原始版本壓力數據產生版本壓力統計信息的硬件和/或軟件。另外,運行線程 340-346的每個處理器核心370-376具有相關聯的線程版本壓力模塊330-336,用于為其相應的相關聯的線程340-346獲得原始版本壓力數據和/或版本壓力統計信息。可以結合線程版本壓力模塊330-336和/或全局版本壓力模塊320使用軟件控制單元350,以便基于原始版本壓力數據和/或版本壓力統計信息確定解決推測版本控制高速緩存310內的版本壓力問題所采取的適當動作,軟件控制單元350可以是編譯器、操作系統等。在圖3所示的說明性實施例中,一個線程340-346分別與每個核心370-376以及線程版本壓力模塊330-336相關聯。在其它說明性實施例中,可以存在與每個核心370-376 相關聯的兩個或更多個線程,在該情況下,每個核心的兩個或更多個線程與一個公共共享線程版本壓力模塊邏輯交互。在其它說明性實施例中,每個核心的兩個或更多個線程與其專有的線程版本壓力模塊交互。另外,在其它說明性實施例中,兩個或更多個線程可以共享公共線程版本壓力模塊,而公共線程版本壓力模塊可以具有所有線程共享的某種邏輯和狀態,以及另一種邏輯和狀態,所述另一種邏輯和狀態是復制的,從而是與核心相關聯的每個線程專有的。在操作中,通常當沖突未中發生時,高速緩存處理器考慮由推測版本控制高速緩存310使用的任意置換策略,確定適合的候選高速緩存行以便從推測版本控制高速緩存 310中收回,例如,使用模式(最近使用模式)、骯位(骯高速緩存行需要寫回體系結構存儲設備,干凈的高速緩存行不需要)、推測狀態位(推測高速緩存行需要線程粉碎)等。另夕卜,采用說明性實施例的機制,當沖突未中和置換操作發生時,全局版本壓力模塊320為正被置換的收回的高速緩存行獲得保持在推測版本控制高速緩存310內的高速緩存行的版本數目的計數。可以用許多不同方式獲得這種收回的高速緩存行的版本數目的計數。例如,可以通過對與收回的高速緩存行相關聯的高速緩存行版本的數目計數的全局版本壓力模塊 320,諸如通過對高速緩存行的關聯范圍內的位數計數,獲得版本數目的計數。可替換地,在某些推測版本控制高速緩存310中,可以在高速緩存行中提供指向推測版本控制高速緩存 310內的相同高速緩存行的下一個版本的指針,并且可以按照高速緩存行的每個新版本遍歷這些指針,使得收回的高速緩存行的版本數目的計數增加。另外,當高速緩存行被加載推測版本控制高速緩存310時,可以在全局版本壓力模塊320中與高速緩存行集合相關聯地提供計數器。當線程試圖修改高速緩存行時,這種計數器可被以在推測版本控制高速緩存 310中產生的高速緩存行的每個新版本動態更新。全局版本壓力模塊320獲得的計數可被全局版本壓力模塊320的硬件或在數據處理系統的一個或更多個處理器上執行的軟件控制單元350使用,以便為與計數器相關聯的高速緩存行集合產生版本壓力統計信息。可以僅為高速緩存行的特定集合產生版本壓力統計信息,或版本壓力統計信息可被與推測版本控制高速緩存310保持的其它高速緩存行集合的其它版本壓力統計信息聚集在一起。在一個說明性實施例中,可以基于每個高速緩存行產生版本壓力統計信息,從而與特定高速緩存行相關聯的線程的版本壓力可被用于執行一種動作。在另一個說明性實施例中,可以基于每個線程產生版本壓力統計信息,從而與該線程訪問的所有高速緩存行集合相關聯的該線程的版本壓力可被用于執行一種動作。在另一個說明性實施例中,可以基于每個高速緩存產生版本壓力統計信息,從而高速緩存的版本壓力作為整體可被用作執行一種動作的基礎。另外,可以在多個推測版本控制高速緩存上聚集版本壓力統計信息,從而多個高速緩存的版本壓力作為整體可被用作執行一種動作的基礎。簡言之,任何單獨或聚集的原始版本壓力數據可被用于產生版本壓力統計信息,并且任何單獨或聚集的版本壓力統計信息可被用于確定解決關于一個或更多個推測版本控制高速緩存上的版本壓力的問題的適當動作。原始版本壓力數據、版本壓力統計信息中的任意一種或兩者被響應于來自線程 340-346的訪問推測版本控制高速緩存310內的相應高速緩存行集合內的高速緩存行的數據的請求提供給線程版本壓力模塊330-336。S卩,當線程諸如線程340向推測版本控制高速緩存310發送正常數據請求,例如,加載/存儲請求時,所請求的數據被從推測版本控制高速緩存310返回給線程340,并且與該數據附帶地,版本壓力數據/信息被從全局版本壓力模塊320提供給對應于進行請求的線程340的線程版本壓力模塊330。響應于該請求提供的版本壓力數據/信息可以是對應于該請求訪問的高速緩存行集合的版本壓力數據/信息。如上所述,這種數據/信息還可以包括高速緩存行集合、線程340、作為整體的推測版本控制高速緩存310、數據處理系統內的所有推測版本控制高速緩存等的版本壓力統計。艮口, 版本壓力統計信息可以是對應于特定線程和/或高速緩存行集合的聚集的統計信息。可替換地,取代發送版本壓力統計信息,可以僅將原始版本壓力數據傳輸給線程版本壓力模塊, 由線程版本壓力模塊或結合線程版本壓力模塊工作的軟件控制單元350基于它們當前擁有的原始版本壓力數據分別產生統計信息。原始版本壓力數據/版本壓力統計信息的傳播可能需要附加導線或附加數據傳輸周期。然而,應當注意,原始版本壓力數據/版本壓力統計信息的傳輸對于系統操作不是至關重要的。因此,在一個說明性實施例中,相對于數據總線390,原始版本壓力數據/版本壓力統計信息可被通過圖3中以版本壓力總線380指示的較慢的、較窄的總線從全局版本壓力模塊320傳播到線程版本壓力模塊330-336。為了幫助增加使用較慢的、較窄的版本壓力總線的數據處理系統的性能,在一個說明性實施例中,可由全局版本壓力模塊320在通過版本壓力總線380傳輸之前預先聚集原始版本壓力數據/版本壓力統計信息,從而減少通{曰市覓需求。在一個說明性實施例,為了進一步減少總線開銷,版本壓力總線380可被與已經存在于系統上的另一個總線合并,或可以擴展存在于系統上的另一個總線的功能。例如,數據處理系統100可以具有用于監視各種性能計數器的一個或更多個性能監視總線,諸如一個或更多個高速緩存命中率計數器、一個或更多個高速緩存未中延遲計數器、一個或更多個分支命中率計數器等等。其它總線可以存在于數據處理系統100內,并且可被適合地與版本壓力總線380合并。在另一個說明性實施例中,版本壓力總線380可被與數據總線390 或與其相關地址總線合并。在這種示例實施例中,當數據總線380或其相關地址總線空閑時,版本壓力模塊 320和330-336可以通信。注意,圖3示出了高速緩存310和核心370-376之間使用總線的通信。鑒于本描述,本領域的普通技術人員將理解,說明性實施例不限于使用總線通信,并且可被容易地用于利用其它體系結構的系統,諸如任意兩對通信代理(諸如核心和高速緩存)之間的專用鏈路的網絡,或總線和專用鏈路的任意組合。圖3所示的體系結構僅意味著一個說明性實施例的例子,并且不旨在是關于本發明的可以做出的各種實現或此處描述的說明性實施例的限制。如上所述,原始版本壓力數據可被用于產生版本壓力統計信息,版本壓力統計信息然后可被用于確定用于控制推測版本控制高速緩存310上的版本壓力的適當動作。各種類型的版本壓力統計信息可被例如在全局版本壓力模塊320、各個線程版本壓力模塊 330-336或軟件控制單元350內以說明性實施例的機制產生。這種版本壓力統計信息可被基于每個線程、每個高速緩存、每個數據系統等產生。例如,基于每個線程,版本壓力統計的產生可以包括獲得原始版本壓力數據,即,特定線程觸及的高速緩存行的各個集合的計數值,以及然后聚集所述原始版本壓力數據以便產生一個或更多個有意義的版本壓力統計。這種有意義的版本壓力統計包括線程對該線程觸及的所有高速緩存行集合上施加的最大版本壓力、線程在該線程觸及的高速緩存行的各個集合上施加的平均版本壓力、線程在整個高速緩存上施加的平均版本壓力、線程對整個高速緩存施加的最大版本壓力、線程對該線程觸及的高速緩存行的所有集合施加的總版本壓力等。即,線程施加的版本壓力代表高速緩存行的一個或更多個特定集合或作為整體的高速緩存內的高速緩存行的若干版本的特定線程的相對部分。因此,如果特定線程具有高速緩存行集合內的高速緩存行的15個版本的最大原始版本版本壓力計數,這個最大值, 相對于訪問高速緩存行的相同集合或作為整體的高速緩存的其它線程,可以非常大,并且代表特定線程對推測版本控制高速緩存310施加的高版本壓力。作為另一個例子,基于每個高速緩存,可以使用版本壓力數據的類似聚集,以便產生關于所有線程340-346和/或推測版本控制高速緩存310內的高速緩存行集合的有意義的版本壓力統計。因此,例如,可以產生所有線程和推測版本控制高速緩存310內的所有高速緩存行集合的、所有線程但是僅針對特定高速緩存行集合或多個高速緩存行集合等的最大和平均值。在線程的每次回滾或粉碎之后,通過版本壓力統計值的重新計算,版本壓力統計可以逐步減少,并且當遇到更高版本壓力統計值時可以逐步增加。原始版本壓力數據,S卩,高速緩存行的各個集合的計數值可被周期地或響應于檢測到的事件重置或重新初始化。例如,如果高速緩存行被收回、線程被粉碎等,對應的原始版本壓力數據可被在全局版本壓力模塊320中和/或線程版本壓力模塊330-336中重置。 另外,版本壓力統計信息可被類似地周期地或響應于諸如上面所述的某些事件重置或重新初始化。另外,各個線程340-346可以獨立于其它線程版本壓力模塊330-336或全局版本壓力模塊320內的這種數據/信息的重置/重新初始化,重置/重新初始化原始版本壓力數據的它們自己的版本和/或保持在線程版本壓力模塊330-336內的版本壓力統計信息。應當注意,可以用許多不同形式提供原始版本壓力數據和有意義的版本壓力統計。例如,可以按照推測版本控制高速緩存310內的高速緩存行集合的高速緩存行的版本的絕對數目提供數據/信息。可替換地,可以按照歸一化值,例如,推測版本控制高速緩存 310的總容量的分數,提供數據/信息。可以使用原始數據/統計信息的其它格式,而不脫離說明性實施例的精神和范圍。圖4是一個示例圖,示出了一個說明性實施例的基于原始版本壓力數據的有意義版本壓力統計的產生。如圖4所示,全局版本壓力模塊405可以為推測版本控制高速緩存的高速緩存行的各個集合產生計數410-432。從這種原始版本壓力數據410-432中,全局版本壓力模塊405可以產生作為整體的推測版本控制高速緩存的版本壓力統計信息440-442, 并且可選擇地,各個線程450-456的版本壓力統計信息。另外,響應于來自線程470-472的請求,全局版本壓力模塊405可以給各個線程版本壓力模塊460-462提供原始版本壓力數據410-432。另外或可替換地,全局版本壓力模塊405可以響應于來自線程的訪問推測版本控制高速緩存內的數據的請求,給各個線程版本壓力模塊460-462提供作為整體的推測版本控制高速緩存的版本壓力統計信息440-442和/或版本壓力統計信息450-452。例如,如圖4所示,線程0 (標記為470)被示出為已訪問或“觸及”對應于計數值 410、412、414、418、422和4 的高速緩存行集合。高速緩存行的這些集合內的高速緩存行
18的總數為30,對于對應于計數值414的高速緩存行集合,高速緩存行版本的最大數目為15。 線程0在所有集合上觸及的高速緩存行版本的平均數目為5。類似地,如圖4所示,線程 1 (標記為47 訪問或觸及對應于計數值412、420、422和432的高速緩存行集合。這些高速緩存行集合內的高速緩存行版本的總數目為10,對于對應于計數值422的高速緩存行集合,高速緩存行版本的最大數目為5。線程1在所有集合上觸及的高速緩存行版本的平均數目為2.5。根據這些值,可以確定線程0(標記為470)相對于線程1(標記為472)給推測版本控制高速緩存施加高的版本壓力。因此,可能需要相對于線程0執行適當動作,例如,壓制(throttle)推測執行,以便如下面更詳細描述的,平衡線程0在推測版本控制高速緩存上施加的版本壓力。類似地,線程1給推測版本控制高速緩存施加相對低的版本壓力,并且可以增加推測執行。另外,如圖4所示,可以為作為整體的推測版本控制高速緩存產生最大和平均版本壓力統計。推測版本控制高速緩存內的所有高速緩存行集合內的高速緩存行版本的總數為71,對于對應于計數值414的高速緩存行集合,高速緩存行版本的最大值為15。推測版本控制高速緩存內的所有集合上的高速緩存行版本的平均數目為5. 9(71/12 = 5. 9)。在一個說明性實施例中,作為整體的推測版本控制高速緩存的最大和平均值可以作為比較各個線程的最大和平均版本壓力統計的基礎,以便確定特定線程給推測版本控制高速緩存施加相對高的、平均的還是低的版本壓力。例如,對于線程0,由于線程的最大版本壓力與推測版本控制高速緩存的最大版本壓力相同,并且平均版本壓力接近作為整體的推測版本控制高速緩存的平均值,可以推斷線程1給推測版本控制高速緩存施加相對高的版本壓力。對于線程1,最大和平均值低于整體的推測版本控制高速緩存的最大和平均值,并且因此可以認為給推測版本控制高速緩存施加相對低的版本壓力。可以建立用于確定最大或平均值是否足夠接近或遠離作為整體的推測版本控制高速緩存的最大和平均值的各種容限值,以便確定線程具有高版本壓力、平均版本壓力還是低版本壓力。如上所述,基于由全局版本壓力模塊和線程版本壓力模塊收集和/或產生的版本壓力統計信息,圖3中的軟件控制單元350可以發揮功能,以便修改關于在數據處理系統內執行的線程的數目、在數據處理系統內執行的線程所執行的工作數量、在事務存儲器系統內執行的事務的持續時間等的數據處理系統的操作。可由軟件控制單元350執行何時和如何修改數據處理系統的操作,以便在線程之間平衡版本壓力的確定,例如,在相應線程的計算過程中、計算機程序的執行過程中的各種檢查點時間、在線程執行完成/失敗之后等。例如,關于響應于版本壓力修改數據處理系統的操作以便控制活動線程的數目, 軟件控制單元350可以通過使得數據處理系統在版本壓力相對低時創建附加線程以便增加并行性,并且在版本壓力被確定為相對高時銷毀線程以便減小版本壓力和并行性反應。 關于響應于版本壓力控制由線程執行的工作數量,軟件控制單元350可以通過在版本壓力相對低時給已有線程分配大的工作單元以便增加有效并行性,并且在版本壓力相對高時給已有線程分配較小的工作單元或使得線程空閑以便減小版本壓力和并行性進行反應。關于響應于版本壓力控制事務的持續時間,軟件控制單元350可以通過在版本壓力被確定為相對低時聚集多個推測單元以便降低事務存儲器啟動/提交開銷,并且在版本壓力被確定為相對高時分解多個推測單元以便降低版本壓力進行反應。
圖5是示出了根據說明性實施例的用于解決版本壓力的線程壓制動作的示例代碼部分。采用線程壓制動作,如果線程產生條件、其它收益度量和版本壓力小于預定閾值, 則產生附加的推測線程以便執行工作。本質上,當版本壓力低于閾值,并且其它條件和度量指示可以執行推測線程的產生時,這種動作產生更多推測線程。然而,如果達到或超過了閾值,則不產生附加的推測線程。據以度量版本壓力的特定閾值可以動態改變。例如,該閾值可以作為數據處理系統內當前活動的推測線程的數目的函數而改變。例如,在一個說明性實施例中,如果版本壓力小于靜態預定閾值,例如,50 %,非推測線程可以產生推測線程,即,非推測線程給推測版本控制高速緩存施加小于50%的版本壓力。在另一個說明性實施例中,當版本壓力小于 30%時可以產生第一推測線程,并且當版本壓力小于20%時可以產生第二推測線程,并且如此類推。因此,閾值隨著推測線程執行數目的增加而變得更嚴格。基于每個線程的版本壓力,非推測線程執行某種工作,以便在確定是否產生附加的推測線程之前收集有意義的版本壓力數據是有益的。基于全局版本壓力,即,使用作為整體的推測版本控制高速緩存的版本壓力信息,當預定數目的線程完成執行時,可以重置全局版本壓力統計信息。在確定版本壓力太高之后,軟件控制單元350可以粉碎推測線程,以便減小推測版本控制高速緩存上的版本壓力。可以基于特定推測線程距離產生它們的非推測線程有多遠確定可被粉碎的特定推測線程。例如,如果非推測線程產生兩個附加推測線程,第二推測線程可被首先粉碎,其后是第一推測線程。可替換地,可以基于給推測版本控制高速緩存施加最大版本壓力的推測線程,給被粉碎的推測線程分配優先級。即,可以首先粉碎給推測版本控制高速緩存施加最大版本壓力的推測線程,其后是給推測版本控制高速緩存施加次高版本壓力的下一個推測線程,并且依此類推。在另一個說明性實施例中,可以使用這些方法的組合,其中可以選擇距離非推測線程最遠和施加最高版本壓力的推測線程首先粉碎。圖6是示出了根據一個說明性實施例,用于解決版本壓力的工作負荷壓制動作的示例代碼部分。如圖6所示,根據版本壓力,增加或減少由推測線程執行的推測工作的數量。對于高版本壓力,以推測線程執行的較小的工作數量減小了推測的粒度,并且因此減少一般被以推測線程訪問或觸及的高速緩存行的數量。付與推測線程的工作量可以動態改變,諸如,作為數據處理系統內的活動推測線程的數目的函數而改變。應當注意,在某些說明性實施例內,圖6中概述的代碼的功能可被組合在圖5的代碼的功能內。再次,基于每個線程的版本壓力,非推測線程執行某種工作,以便在確定是否產生附加的推測線程之前收集有意義的版本壓力數據是有益的。基于全局版本壓力,即,使用作為整體的推測版本控制高速緩存的版本壓力信息,當預定數目的線程完成執行時,可以重置全局版本壓力統計信息。圖7是示出了根據一個說明性實施例,用于解決版本壓力的將線程置于空閑動作的示例代碼部分。最初,首先創建固定數目的線程,并且每個線程又接手工作。雖然可以按照預期版本壓力的函數調整線程的初始數目,此處的方案是通過將某些線程置于空閑狀態,動態調整推測線程的有效數目。特別地,如果壓力閾值高于給定數量,示出的代碼中的 “等待”暫停當前線程。在另一個說明性實施例中,示出的代碼中的“等待”暫停當前線程, 直到版本壓力降低到給定閾值之下。還可以響應于經過給定數目的時間或圖7中未特別示出的其它事件退出等待狀態。將線程置于空閑的時間數量可以是預定的時間數量,或根據包括版本壓力在內的各種因素改變的時間數量。應當注意,在某些說明性實施例內,圖7中概述的代碼的功能可被組合在圖5和/或圖6的代碼的功能內。圖8是示出了根據一個說明性實施例的用于解決版本壓力的事務聚集動作的示例圖。如圖8所示,傳統上在與事務相關聯的工作完成之后立刻提交事務。然而,采用說明性實施例的機制,事務的工作可被有條件地聚集,直到推測版本控制高速緩存上的版本壓力達到或超過閾值為止。換言之,最初以事務保護的最小可能臨界區產生代碼。然而,動態確定何時關閉該臨界區。即,事務的臨界區可被組合到單個事務內,直到確定版本壓力太高為止。一旦版本壓力太高,事務被關閉并且提交該事務。當然,當確定何時關閉事務時可以考慮其它度量。 例如,可以設置聚集的事務的最大數目,并且當版本壓力太高或聚集的事務達到這個最大數目時,可以關閉事務。另外,當確定何時關閉事務時,可以考慮并行程度,例如,在相同數據上執行的并發線程的數目。并發線程的數目通常被稱為“主人”線程,即,發起所有其它 “工人”線程的線程(即,工人線程是執行工作的線程,如圖8所示,包括無防護工作和有防護工作)。主人線程可以在全局變量中設置并發線程的數目,該全局變量可被工人線程讀取,并且被結合版本壓力信息使用,以便幫助它們確定何時動態關閉事務。可以用若干不同方式選擇被聚集在一起的特定事務。例如,導致高版本壓力的任務或事務和導致低版本壓力的任務或事務可被一起聚集在相同事務內,以便平均它們的版本壓力。可替換地,若干低版本壓力任務/事務可被聚集在一起。另外,可以在關閉事務之前動態進行關于下一個事務的聚集是否會使事務的預期版本壓力超過最大閾值的確定,并且如果不是,下一個事務可被與當前事務聚集。如果下一個事務會使得預期版本壓力超過最大閾值,可以關閉事務而不聚集下一個事務。可以按若干不同方式實現軟件控制單元對數據處理系統的操作的修改。主要地, 軟件控制單元變換計算機程序的代碼,以便以上面討論的各種方式響應版本壓力,例如,通過增加/減少推測線程的數目、增加/減少由線程執行的推測工作的數量、聚集/不聚集事務等。當然,說明性實施例的機制可以使用基于確定的版本壓力統計的對數據處理系統的操作的其它類型的修改,而不脫離說明性實施例的精神和范圍。圖9是概述了根據一個說明性實施例的使用版本壓力反饋來調整數據處理系統的操作的示例操作的流程圖。如圖9所示,操作以收集推測版本控制高速緩存內的高速緩存行集合的原始版本壓力數據開始(步驟910)。原始版本壓力數據被基于線程版本壓力模塊的相應線程請求分發給線程版本壓力模塊(步驟920)。如上面討論的,例如,可以使用與推測版本控制高速緩存的高速緩存行相關聯的計數器獲得這種原始版本壓力數據。在線程級和全局級兩者產生版本壓力統計(步驟930)。基于版本壓力統計,確定對數據處理系統的操作執行的修改,以便平衡/減少推測版本控制高速緩存上的版本壓力 (步驟940)。如上所述,這些版本壓力統計可以是基于原始版本壓力數據產生的版本壓力的任意統計測量。例如,這些版本壓力可以是特定線程、作為整體的推測版本控制高速緩存等的最大和平均版本壓力。在優選說明性實施例中,產生全局版本壓力統計和特定于線程的版本壓力統計兩者。然而,為了減小硬件成本,或出于其它原因,某些說明性實施例可以僅實施對于整個高速緩存系統、高速緩存分層結構內的特定高速緩存、同時存在于核心內的多個線程、每個個體線程或類似物的版本壓力統計。然后基于確定的將要執行的修改,修改數據處理系統的操作(步驟950)。然后操作結束。如上面討論的,這些修改可以涉及通過壓制推測線程的數目、粉碎推測線程、壓制推測線程執行的工作量、使得已有線程進入空閑狀態、聚集事務或類似處理來變換代碼。可以基于連續、周期或響應于預定事件的發生而重復這種操作。因此,說明性實施例提供了用于監視線程給推測版本控制高速緩存施加的版本壓力,并且使用這種版本壓力信息實現數據處理系統的操作的改變,以便減小推測版本控制高速緩存上的版本壓力和/或平衡線程施加的版本壓力的機制。說明性實施例收集原始版本壓力信息,產生版本壓力的統計測量,并且使用統計測量來確定給數據處理系統內的代碼執行應用何種類型的修改。以這種方式,可以控制在推測版本控制高速緩存上施加的版本壓力,以便最小化由于推測版本控制高速緩存上的過高版本壓力,粉碎數據處理系統內的推測線程的成本。除了上面所述之外,如前面所述,說明性實施例還提供了用于使用上面所述的版本壓力監視機制,控制使用推測版本控制高速緩存(SVC)的檢查點操作的機制。采用這些附加說明性實施例的機制,可以分配SVC,從而SVC的一個部分存儲用于讀/加載操作的非推測高速緩存行,而SVC的另一個部分存儲與寫/存儲操作相關聯的推測高速緩存行。 因此,在這些附加說明性實施例中,所有讀被視為非推測操作,而所有寫操作被視為推測操作。為存儲對應于寫/存儲操作的推測高速緩存行分配的SVC部分可以具有最大的大小, 例如,SVC容量的20%。可以基于SVC容量的這個最大大小產生一個或更多個閾值,或該最大大小自身可被用作閾值。當達到這些一個或更多個閾值時,關于SVC的非推測部分內的高速緩存行,可以產生執行代碼的當前非推測狀態的檢查點。可以響應于導致需要產生一個或更多個檢查點的狀態的發生,諸如達到或超過一個或更多個閾值,產生一個或更多個檢查點。檢查點自身可被存儲為推測高速緩存行,如果發生了需要回滾對高速緩存行進行的改變的狀態,其以后可被置于非推測。例如,這些狀態可以包括如果改變應當回滾到代碼的不可重放部分執行之前的時間點,使得進入不可重放代碼部分(即,不能被重放的代碼部分)的代碼的執行,或SVC的版本壓力滿足預定準則 (諸如,上面提及的一個或更多個閾值)的狀態。如果發生需要回滾的狀態,還可以回滾到已有的檢查點。例如,這種狀態可以包括對緩存數據內的軟錯誤的檢測,例如,由于伽馬輻射或可能引發一個或更多個高速緩存行內的一個或更多個位的翻轉的其它物理現象發生的錯誤。下面將更詳細地描述這些狀態中的每一個。給說明性實施例的版本壓力模塊提供用于監視這些狀態,并且如果出現這種狀態則產生中斷的邏輯。版本壓力模塊可以產生這種被在操作系統內接收的中斷。操作系統可以啟動適當的中斷處理器,以便將推測高速緩存行提升到非推測狀態,并且啟動新檢查點高速緩存行的創建。另外,可以提供編譯器支持,以便確定代碼的執行是否進入代碼的不可重放部分,并且如果是的,使得推測高速緩存行被提升到非推測狀態,并且在代碼的不可重放部分的執行完成之后,初始化新的推測檢查點高速緩存行。即,編譯器可以插入調用適當的中斷處理器、例程、方法等的指令,以便執行這種提升和以后的新推測檢查點高速緩存行的初始化。還可以給操作系統提供用于確定可能具有各種來源的中斷是否是由于說明性實施例的檢查點機制的邏輯,在該情況下,實施推測高速緩存行的提升和新推測檢查點高速緩存行的啟動。在某些說明性實施例中可以存儲檢查點高速緩存行的多個版本,并且中斷處理器、操作系統等可以確定當需要回滾時使用的檢查點高速緩存行的最適合的版本。圖10是示出了根據一個說明性實施例的推測版本控制高速緩存檢查點機制的示例圖。與推測版本控制高速緩存(SVC)相關聯的數據處理系統的操作系統設置指示可用于存儲由于執行代碼執行的寫/存儲操作產生的推測高速緩存行的SVC內的高速緩存行的最大數目的一個或更多個閾值。同樣,采用這些附加說明性實施例,所有讀/加載操作被認為是非推測操作,而所有寫/存儲操作被認為本質上是推測性的,直到它們的改變被根據此處描述的說明性實施例的機制保持為非推測狀態。讀/加載操作是非推測性的,這是由于它們不改變高速緩存的狀態,并且因此不需要產生新版本的高速緩存行。然而,如果讀/加載操作跟在導致新版本和相關版本的高速緩存行的推測寫操作之后,則讀/加載操作將讀取寫操作的結果;即,讀操作將讀取高速緩存行的新版本而不是舊值。這是舊值僅被保留, 以便在軟錯誤或迫使系統回滾到以前狀態的任意其它狀態的情況下,恢復高速緩存的狀態的情況。一個或更多個閾值可被與作為整體的SVC、單獨的高速緩存行集合、單獨的線程、它們的任意組合等相關聯。所述閾值可被用于確定,例如,何時將推測高速緩存行轉換為非推測狀態,以及執行新檢查點操作。作為例子,一個或更多個閾值可以是整個SVC容量的10% 被以由于推測寫/存儲的推測高速緩存行填充,或是SVC內的給定高速緩存行集合的多至 50%被以由于推測寫/存儲的推測高速緩存行填充的第一閾值。如果這些狀態中的任意一個存在,可以觸發提升推測高速緩存行并且產生新檢查點的中斷。可替換地,可以使用單個閾值,例如,SVC容量的20%被以推測高速緩存行填充。這些閾值基本上是可以使用前面描述的版本壓力模塊產生的SVC內的版本壓力的測量值。主要差異是現在給版本壓力模塊提供以下的邏輯和能力向操作系統產生中斷, 以便使得執行將推測高速緩存行提升到非推測狀態和初始化新檢查點的適當中斷處理器。 這些中斷被從全局版本壓力模塊320或從線程版本壓力模塊330-336傳遞給線程340-346, 以便中斷線程的正常執行,從而執行與特定中斷例程相關聯的代碼,所述特定中斷例程與被分配給SVC內的太高版本壓力的中斷信號或代碼相關聯。當將中斷從全局版本壓力模塊 320傳遞給至少一個線程340-346時,可以通過版本壓力總線380或通過單獨的中斷總線傳遞中斷。如圖10所示,當執行1010代碼時,可以啟動檢查點1012。這個檢查點1012的啟動可能是由于檢查點1012是代碼執行1010過程中的最初檢查點1012,或如下面討論的,存在一種檢測狀態的發生。作為產生檢查點1012的一部分,產生新的版本標識符(VID),并且將其與當前線程相關聯。然后,使用這個新的VID,例如,VID X,標記對該高速緩存的所有存儲操作。在后續存儲中,檢索與該線程相關聯的VID,并且當訪問高速緩存時使用該VID。 如果高速緩存中存在命中,即,數據在推測版本控制高速緩存的高速緩存行內,進行關于被寫/存儲操作“命中”的這個高速緩存行是否也與當前VID X相關聯的檢查。如果是的,則寫/存儲可以正常繼續。如果當前“命中”的高速緩存行與舊VID相關聯,或不與VID相關聯,而是非推測性的,則高速緩存需要拷貝這個高速緩存行。這個新拷貝被標記為是推測性的,并且與VID X相關聯。然后可以在這個拷貝的高速緩存行上如通常那樣繼續存儲。因此,對于SVC內的檢查點,對于自從最后的檢查點以來存在存儲的每個高速緩存行,存在與新VID相關聯的一個附加的推測高速緩存行。可以在數據處理系統的一個或更多個緩沖器內記錄1016不被存儲在非推測高速緩存內的其它狀態信息,諸如程序計數器、系統寄存器的狀態等。如果諸如由于代碼執行中的故障、軟錯誤等需要代碼執行的回滾,檢查點推測高速緩存行內的信息以及存儲在一個或更多個緩沖器內的狀態信息可被以后使用。可由代碼自身、操作系統、編譯器等執行檢查點1012的啟動。在產生檢查點1012之后,代碼繼續執行,根據正被執行的特定代碼,代碼執行讀/ 加載和寫/存儲。如上所述,讀/加載被視為非推測操作,并且因此,SVC中由于這些讀/加載產生的任意高速緩存行被存儲在SVC的非推測部分內。由代碼的執行所進行的所有寫/ 存儲被認為是推測性的,并且因此作為這些寫/存儲的結果發生的高速緩存行改變被存儲在SVC的推測部分內的推測高速緩存行版本內。因此,SVC的推測部分內的推測高速緩存行的數目可以隨著執行代碼而增加,從而增加SVC內的版本壓力。注意,可能不存在為推測部分或非推測部分保留的SVC的物理部分。就在檢查點之后,在任意存儲之前,通常100% 的SVC包含非推測數據。當遇到存儲時,創建高速緩存行的新版本(如果原始版本已經存在),或只是推測高速緩存行(如果在寫訪問時原始版本不存在)。由于如果發生需要使得改變無效的狀態,必須回滾對這些高速緩存行的改變,這種版本/推測高速緩存行本質上是推測性的。在代碼執行的稍后時刻,可能遇到并且執行不可重放的代碼部分1020。不可重放代碼1020可以是執行諸如輸入/輸出操作、文件操作(諸如讀或寫文件)、發送消息操作 (諸如在網絡上發送和接收消息的操作)的代碼,與另一個線程共享數據、訪問鎖(lock) 的代碼等,如果所述執行代碼的狀態被回滾到在不可重放代碼1020的執行之前發生的檢查點,它們不能被重放。即,當執行代碼的狀態被回滾到檢查點時,執行代碼的狀態被重置為存儲在檢查點的狀態,并且然后執行的代碼可被從這種檢查點狀態重放。不可重放代碼 1020是影響其它線程的操作,或給在當前執行的線程之外執行的其它代碼提供數據的代碼。編譯器可以在與不可重放代碼1020相關聯的可執行代碼內插入指令,以便使得所述代碼的執行向中斷處理器發起中斷,在進入不可重放代碼1020之前,所述中斷將推測高速緩存行提升到非推測狀態,或所述指令自身可以將推測高速緩存行提升到非推測狀態。因此,與執行代碼和特定線程相關聯的所有推測高速緩存行被提升到非推測狀態,即, 推測高速緩存行內描述的改變被持久化到SVC和/或存儲器的非推測部分,并且不可重放代碼1020執行,其對SVC的改變被非推測性地進行。一旦不可重放代碼1020完成執行,編譯器插入的指令向操作系統產生中斷,操作系統調用中斷處理器啟動新檢查點1030。可替換地,編譯器可以插入直接啟動新檢查點1030的指令。應當注意,雖然上面假設編譯器分析代碼,并且在可執行代碼中插入用于執行產生中斷或將推測高速緩存行提升到非推測狀態的操作的指令,說明性實施例不限于此。而是,操作系統可以分析執行代碼正在執行的操作,確定這些操作是否指示代碼的不可重放部分,并且如果是的,啟動中斷或代碼的執行,以便使得將推測高速緩存行轉換為非推測狀態,并且在代碼的不可重放部分的操作完成之后啟動新的檢查點。例如,編譯器或操作系統可以識別與寫I/O設備、在線程之間傳遞信息等相關聯的代碼/操作,并且可以在代碼中插入指令(編譯器)或啟動操作(操作系統),以便引發推測高速緩存行到非推測高速緩存行的轉變,執行與進入不可重放代碼部分和/或產生新的檢查點相關聯的代碼。
在產生新檢查點1030時,如上面提到的,產生新版本標識符(VID),并且將其與當前線程相關聯。這個新VID,例如,VID X被用于標記對高速緩存的所有存儲操作。在后續存儲中,檢索與該線程相關聯的VID,并且當訪問高速緩存時使得該VID。如果存在高速緩存中的命中,執行關于高速緩存行是否也與當前VID X相關聯的檢查。如果是的,則存儲可以正常繼續。如果當前高速緩存行與舊的VID相關聯,或不與VID相關聯而是非推測性的, 則高速緩存拷貝這個高速緩存行,并且將高速緩存行的拷貝標記為是推測性的并且與VID X相關聯。然后可以在這個拷貝的高速緩存行上如通常那樣繼續存儲。不存在于SVC內的狀態信息,例如,程序寄存器、系統寄存器、程序計數器等被作為檢查點信息記錄在一個或更多個緩沖器內。代碼的執行以引發SVC的非推測部分的更新的讀/加載操作和引發SVC的推測部分內的推測高速緩存行的數目的增加的寫/存儲而繼續。隨著SVC內的推測高速緩存行的數目的增加,版本壓力以類似于前面上述的方式增加。這種版本壓力可以是關于整個SVC、 相關聯的高速緩存行集合、特定線程或類似物的。可以在一個或更多個這些級別為這種版本壓力建立零個或更多個閾值,例如,整個SVC級別的零個或更多個閾值、相關聯的高速緩存行集合級別的零個或更多個閾值、線程級別的零個或更多個閾值等。優選地,在這些級別之一處建立至少一個閾值。在稍后時刻,SVC關于推測高速緩存行的版本壓力可能超過一個或更多個閾值,例如,最大容量閾值,整個SVC的版本壓力閾值,SVC級別、線程級別和/或高速緩存行集合級別的版本壓力閾值的組合等。如果達到或超過了一個或更多個閾值,對應的版本壓力模塊向操作系統產生中斷1040,操作系統又調用中斷處理器,以便處理將推測高速緩存行提升到非推測狀態和創建新檢查點。產生中斷的版本壓力模塊可以是全局版本壓力模塊或線程版本壓力模塊。在基于每個線程形成檢查點的系統中,在線程版本壓力模塊中關聯版本壓力閾值一般更有益,這是由于在這種系統中,線程是“檢查點的單元”。還可以考慮關聯每個高速緩存或每個系統版本壓力閾值,這將導致向系統內的每個線程產生中斷(依次或同時)。在這種系統中,仍然基于每個線程執行檢查點,但是可由全局狀態觸發檢查點,諸如一個版本高速緩存具有專用于檢查點的太多高速緩存行。在基于每個系統形成檢查點的系統內,所有線程在大體相同的時刻產生檢查點,這是由于它們使用用于系統內的所有線程的單個共享檢查點。在這種系統內,為整個SVC使用單個閾值一般更有益。響應于中斷,操作系統調用執行將存儲在SVC的推測部分內的推測高速緩存行提升為非推測狀態的操作的中斷處理器。簡單地通過將與該線程相關聯的VID標記為非推測性執行這種提升。這種提升還可能迫使某些以前的非推測行成為是無效的。例如,假設存在一個高速緩存行,它存在兩個版本VID X的推測版本和非推測版本。當VID X被提升為非推測性時,與VID X相關聯的高速緩存行成為新的非推測狀態。結果,由于具有VID X的高速緩存行的版本現在是新的非推測版本,為回滾到以前檢查點時刻的舊狀態的目的而保持的舊的非推測行現在是無效的。因此,在將VID X提升到非推測狀態的處理中,僅有還存在其VID X版本的非推測高速緩存行是無效的。一旦推測高速緩存行被提升到非推測狀態,中斷處理器發起新檢查點1050的創建。新檢查點1050的創建可以包括將非推測高速緩存行的非推測狀態存儲為SVC1060的推測部分內的一個或更多個檢查點高速緩存行。另外,未存儲在SVC內的狀態信息,例如,程序計數器、系統寄存器和其它狀態信息可被保持在一個或更多個緩沖器1070內。應當理解,在檢查點之間,可以存在可能檢測到執行代碼故障、軟錯誤等的情況。 例如,可以使用糾錯碼(ECC)、奇偶數據等標識存儲在SVC的高速緩存行內的數據中的錯誤。這些錯誤,例如,可以是由于可引發高速緩存行內的位翻轉狀態,并且從而在存儲的數據中引入錯誤的伽馬射線等引起的軟錯誤。可以通過ECC、奇偶數據等檢測這種軟錯誤。處理器、處理器存儲器、系統存儲器、操作系統、版本壓力模塊等可以具有用于執行這種檢測和用于在檢測到這種錯誤的情況下產生中斷的相關聯的邏輯。處理器、存儲器、操作系統、 版本壓力模塊等內可以存在使得處理器、存儲器控制器、操作系統、版本壓力模塊等能夠糾正錯誤的附加邏輯。在這種情況下,當錯誤可被糾正時,不需要產生中斷以便回滾到以前的檢查點。可以在操作系統中接收中斷,操作系統調用適當的中斷處理器,以便執行回滾在檢查點之間對非推測高速緩存行進行的任意改變的一個或更多個操作。即,選擇發生在檢測到的錯誤之前的適合的檢查點,并且使用一個或更多個檢測點高速緩存行內的對應的狀態信息,以便將非推測高速緩存行的狀態恢復到檢查點的狀態。此后,事件可被重放,代碼的執行可被重新開始等,從而糾正錯誤。圖11是一個示例圖,示出了根據一個說明性實施例的關于軟錯誤的發生的推測版本控制高速緩存檢查點機制。除了示出了在推測版本控制高速緩存(SVC)中檢測到軟錯誤1110、1120和1130之外,圖11本質上與圖10相同。如上所述,這些軟錯誤可能是由于引發位翻轉或與軟件相關的其它錯誤的伽馬射線產生的。響應于這些錯誤,處理器、存儲器控制器、版本壓力模塊(全局或線程的)等可以向操作系統產生中斷,操作系統確定該中斷是否發生在作為檢查點的代碼部分的執行過程中,即,正被執行的代碼不是非可重放代碼。 如果錯誤發生在非可重放代碼部分期間,則遇到了不可恢復錯誤。在這種情況下,可以一般地以不可恢復錯誤中斷的形式通知應用程序發生了不可恢復錯誤。這可以導致基于錯誤的應用程序終止。還可以導致應用程序恢復到用戶級別檢查點。例如,某些模擬應用程序將每100個(或任意其它靜態或動態數目)時間步長獲得的結果存儲到硬盤,以便使得用戶能夠以后可以觀察模擬結果。在這種系統中,應用程序通常具有“用戶級”檢查點,在該檢查點可以重新開始以前遇到的0 mod 100個時間步長處的整個模擬。這種用戶級檢查點可被結合這些說明性實施例使用,以便響應于來自代碼的不可重放部分的不可恢復錯誤,提供到用戶級檢查點的恢復。如果在執行檢查點代碼時發生中斷,則代碼的執行可被回滾到以前檢查點的狀態。例如,軟錯誤1110可以向操作系統引發中斷,由于錯誤未發生在不可重放代碼部分 1020內,操作系統確定錯誤發生在檢查點代碼中。因此,操作系統或與操作系統相關聯的中斷處理器執行將執行代碼的狀態和SVC的改變回滾到檢查點1010的操作。即,使用存儲在一個或更多個緩沖器內的狀態和存儲在SVC的檢查點高速緩存行內的高速緩存行的狀態恢復對應的程序計數器、系統寄存器等和SVC的非推測高速緩存行的狀態。因此,執行代碼的狀態被返回以前檢查點時刻的狀態。類似地,軟錯誤1120可以引發導致代碼執行的狀態被返回檢查點1030時刻的狀態的中斷,并且軟錯誤1130可以引發導致代碼執行的狀態被返回檢查點1040時刻的狀態的中斷。因此,說明性實施例提供了用于設置關于SVC內的版本壓力的閾值的機制,用于確定何時產生執行代碼和SVC的狀態的檢查點。說明性實施例的版本壓力模塊提供有用于在達到或超過這種版本壓力閾值的情況下產生中斷的邏輯。響應于這種中斷,執行將推測高速緩存行提升到非推測狀態,并且然后產生新檢查點的操作。檢查點可被用于在檢測到軟錯誤或執行代碼的其它故障的情況下,回滾對SVC和系統的狀態信息的改變。如圖12所示,圖12類似于圖3,版本壓力模塊1220和1230-1236具有用于在達到或超過與SVC1210相關聯的一個或更多個閾值的情況下產生中斷的邏輯1280-1觀8。這些閾值可被從操作系統1290傳遞給版本壓力模塊1220和1230-1236,并且可被與邏輯 U80-1288相關聯地存儲,以便用于確定何時產生中斷。這些閾值可以是用戶指定的,并且存儲在與操作系統相關聯的系統寄存器或操作系統可訪問的另一個存儲器位置內。這些閾值可以與特定線程、整個SVC相關聯,或可以是可用于每個單獨線程、高速緩存行集合等的一般閾值。可將單個閾值或閾值組合應用于線程、SVC或高速緩存行集合。如上面討論的,諸如關于圖3討論的,全局版本壓力模塊1220可以收集整個 SVC1210、每個單獨線程、高速緩存行集合等的版本壓力信息。這種信息可被傳遞給線程版本壓力模塊1230-1236,線程版本壓力模塊1230-1236然后可以產生單獨的線程的版本壓力統計。可替換地,全局版本壓力模塊1220可以產生版本壓力統計,并且將它們傳遞給線程版本壓力模塊1230-1236。在全局或線程版本壓力模塊1220和1230-1236中產生的統計可用于單獨的線程、整個SVC、單獨的高速緩存行集合等。中斷邏輯U80-1288確定原始版本壓力信息或在其它說明性實施例中版本壓力統計是否達到一個或更多個版本壓力閾值。例如,在高速緩存寬度級別,SVC中可以最多存在的高速緩存行用于推測高速緩存行。另外,在高速緩存行集合級別,示例閾值可以是給定高速緩存行集合內最多的高速緩存行用于推測高速緩存行。另外,在線程級別,示例閾值可以是最多的高速緩存行用于給定線程的推測高速緩存行。還可以使用這些類型的閾值的組合,例如,如果整體的10%或單個高速緩存行集合中多至50%的高速緩存行被以推測高速緩存行數據填充,則產生中斷。可以通過操作系統中的適當設置來允許/禁止使用這種中斷閾值。例如,如果編譯器、操作系統或版本壓力模塊花費太多時間執行閾值檢查,可以允許/禁止一個或更多個閾值,以便允許更好的系統性能。作為另一個例子,如果正在執行的代碼內已經嵌入了某種檢查點代碼,可以允許/禁止各種閾值,以便修改由版本壓力模塊設置的檢查點。操作系統1四0,以及可能的編譯器(未示出),包括用于分配系統存儲器緩沖器 1295以便記錄重新開始一個處理所需的狀態信息的邏輯,即,不在存儲器或用戶可訪問地址空間內的信息,例如,特殊系統寄存器、程序計數器等。另外,操作系統1290和/或編譯器具有用于在進入不可重放代碼之前將SVC推測高速緩存行提升到非推測狀態的邏輯。這種邏輯可被以與操作系統相關聯的中斷處理器,或編譯器中的用于在包括不可重放代碼的執行代碼中插入指令以便在執行代碼進入例程、模塊、方法等之前執行這種操作的邏輯的形式提供。另外,這種邏輯還可以將狀態記錄為新的檢查點,并且在不可重放代碼完成執行之后重新開始推測版本高速緩存狀態。另外,操作系統1290和/或編譯器包括用于驗證中斷與具有檢查點的代碼(即, 非不可重放代碼)相關聯的邏輯。操作系統1290和/或編譯器具有用于在接收到中斷并且中斷與具有檢查點的代碼相關聯的情況下,將執行分支到中斷處理器,從而在將推測高速緩存行提升到非推測狀態之后創建新檢查點的邏輯。當檢測到指示故障、軟錯誤等的狀態時,操作系統1290或版本壓力模塊1220或 1230-1236可以通過將改變回滾到以前的檢查點執行從這些錯誤中恢復的操作。如果檢測到這種錯誤,操作系統1290可以確定是否在代碼的執行處于不可重放代碼部分時檢測到錯誤。假設代碼的執行不是處于不可重放代碼部分,選擇確實是在錯誤發生之前創建的最近的檢查點。可替換地,可以選擇具有在該錯誤之前的高可能性的最近檢查點。在另一種替換方案中,可以基于操作系統的動態確定來選擇最舊的(最安全)/最近的(最小重新執行開銷)檢查點。如果中斷處于不可重放代碼部分,則不能使用回滾到已知的有效檢查點從軟錯誤恢復,并且因此錯誤將被傳播給應用程序。在該情況下,應用程序可以暫停或終止, 同時指示用戶已經遭受不可恢復的錯誤。在其它情況下,應用程序可以具有允許其從不可恢復的錯誤中恢復的附加邏輯。例如,某些模擬物理現象(諸如,天氣、分子動力學等)的應用程序不時地將中間結果保存到硬盤上的文件內,從而允許用戶觀察正被模擬的物理現象的狀態。在這種情況下,遭受這種不可恢復錯誤的應用程序有機會回到保存到文件的最后狀態,并且從那里重新開始整個計算。這種重新開始可能需要用戶的手工干預。如果系統保持單個以前的檢查點,這種檢查點之間的選擇不是必須的。然而,應當注意,雖然根據單個以前的檢查點描述上面的實施例,實際上,如果希望可以在SVC中保持多個以前的檢查點。例如,可以保持兩個以前的檢查點。在這種情況下,可以執行這種選擇, 以便在各種保持的檢查點之間進行回滾到已知狀態的最佳檢查點的選擇。一旦操作系統1290選擇了檢查點,通過首先使得比選擇的檢查點更近的所有檢查點無效,諸如通過將其版本標識符標記為無效,執行回滾操作。使用存儲在一個或更多個緩沖器和SVC內的一個或更多個檢查點高速緩存行內的狀態信息,將檢查點內的狀態重新安裝到適當寄存器、計數器、高速緩存行等內。然后,重新啟動SVC,并且恢復代碼的執行。因此,說明性實施例還提供了用于啟動檢查點和與SVC內的版本壓力相關聯的一個或更多個閾值的機制。另外,這些機制考慮了代碼的執行進入代碼的不可重放部分。并且,提供了檢測錯誤或故障,并且響應于對這些錯誤或故障的檢測,從版本壓力模塊產生中斷,從而可以執行適當操作,以便將改變回滾到說明性實施例的機制創建的以前的檢查點的機制。圖13是一個流程圖,概述了根據一個說明性實施例,用于響應于達到或超過一個或更多個版本壓力閾值產生中斷的示例操作。除非另外指出,圖13中的操作和各個步驟可被在例如說明性實施例的一個或更多個版本壓力模塊內執行。如圖13所示,操作通過接收用于執行檢查點的一個或更多個版本壓力閾值開始 (步驟1310)。如上面討論的,例如,這些閾值可被從操作系統接收,并且可以是用戶定義的,以便實現對抗錯誤和故障的所希望的安全級別。此后,收集或接收高速緩存行集合的原始版本壓力數據(步驟1320)。例如,原始版本壓力數據可由全局版本壓力模塊收集,并且被分發給線程版本壓力模塊,從而線程版本壓力模塊從全局版本壓力模塊接收這種數據。這種原始版本壓力數據是在一個或更多個級別,例如,SVC級別、線程級別、高速緩存行集合級別等計算版本壓力統計(步驟1330)的基礎。前面已經在上文中根據各種說明性實施例描述了這種計算。將這些版本壓力統計和一個或更多個版本壓力閾值進行比較(步驟1340),并且做出關于是否應當產生檢查點的判斷(步驟1350)。例如,這種判斷可以確定是否達到或超過了指示應當產生檢查點的一個或更多個版本壓力閾值。如上所述,在某些說明性實施例中,可以組合一個或更多個版本壓力閾值,以便產生在產生新檢查點之前必須達到或超過的更復雜的狀態。如果將要產生檢查點,則向操作系統產生指示需要產生新檢查點的中斷(步驟 1360)。然后操作系統調用適當的中斷處理器,以便在SVC和系統緩沖器內產生檢查點(步驟1370)。即,檢查點涉及在SVC的推測部分中存儲檢查點高速緩存行,并且在系統存儲器緩沖器內存儲不保持在SVC內的狀態信息,以便如果需要回滾操作則在稍后使用。然后操作終止。圖14是一個流程圖,概述了根據一個說明性實施例的用于產生檢查點的示例操作。除非另外指出,圖13中的操作和各個步驟可被在例如說明性實施例的中斷處理器、操作系統等內執行。如圖14所示,操作通過掛起代碼的執行開始(步驟1410)。SVC內的推測高速緩存行被提升到非推測狀態(步驟1420)。通過以SVC內的推測高速緩存行產生一個或更多個檢查點高速緩存行(步驟1430),并且在系統存儲器緩沖器內存儲檢查點信息(步驟1440) 產生檢查點。然后重新開始代碼的執行(1450),并且操作終止。如前面解釋的,步驟1430 包括產生與線程相關聯的新的推測版本id(VID),從而由線程產生的任意其它存儲/寫操作被以該新VID標記為是推測性的。圖15是一個流程圖,概述了根據一個說明性實施例的用于執行回滾操作的示例操作。圖15概述的操作可由操作系統執行,或與操作系統相關聯地執行。例如,操作1510 和1520可由版本壓力模塊執行,而其它操作可由操作系統執行。可替換地,所有操作可由操作系統執行。如圖15所示,操作以檢測存儲在SVC內的數據中的錯誤或執行代碼的故障開始 (步驟1510)。如上所述,例如,這種錯誤可以是由于伽馬射線或引發SVC內的位翻轉的其它錯誤源產生的軟錯誤。響應于檢測到錯誤或故障,做出關于發生的錯誤是否是由于代碼的不可重放部分內的代碼的執行的判斷(步驟1520)。如果是的,產生指示該錯誤是不可恢復錯誤的通知和/或中斷(步驟1530),并且然后執行不可恢復錯誤的正常中斷處理,例如,終止應用程序、調用恢復到用戶級檢查點的恢復邏輯等(未示出)。如果錯誤/故障不是由于代碼的不可重放部分內的代碼的執行產生的,則向操作系統產生中斷(步驟1540)。 選擇以前的檢查點用于執行回滾操作(步驟K50)。如前面所述,如果系統僅僅保持一個以前的檢查點,則可以避免這種選擇。然而,如果保持多于一個以前的檢查點,則選擇最無疑地在錯誤/故障發生之前并且最小化必須的重新執行數量的檢查點。一旦選擇了檢查點,使用為所選擇的檢查點存儲在SVC內的一個或更多個檢查點高速緩存行內的狀態信息和系統存儲器緩沖器內的狀態信息執行回滾操作(步驟1560)。 將狀態恢復到該檢查點的時刻的狀態之后,重新開始代碼的執行,并且操作終止。如上所述,應當理解說明性實施例可以采用完整硬件實施例、完整軟件實施例或包含硬件和軟件元素兩者的組合的形式。在一個示例實施例中,說明性實施例的機制被實現在軟件或程序代碼中,所述軟件或程序代碼包括但不限于固件、駐留軟件、微碼等。適用于存儲和/或執行程序代碼的數據處理系統將包括直接或通過系統總線間接耦連到存儲器元件的至少一個處理器。存儲器元件可以包括在程序代碼的實際執行過程中采用的局部存儲器、大容量存儲設備、以及提供至少某些程序代碼的臨時存儲以便減少必須在執行過程中從大容量存儲設備檢索代碼的次數的高速緩存存儲器。輸入/輸出或I/O設備(包括但不限于鍵盤、顯示器、指點設備等)可被直接或通過中間I/O控制器耦連到系統。網絡適配器也可被耦連到系統,以便使得數據處理系統能夠通過中間的專有或公共網絡耦連到其它數據處理系統或遠程打印機或存儲設備。調制解調器、纜線調制解調器和以太網卡僅是幾種當前可獲得類型的網絡適配器。已經出于說明和描述的目的給出了本發明的描述,并且該描述不旨在是窮盡性的或局限于公開形式的發明。本領域的技術人員將明了許多修改和變形。選擇和描述這些實施例以便最好地解釋本發明的原理、實際應用,并且使得本領域的其它技術人員能夠理解本發明的具有適用于構想的特定用途的各種修改的各種實施例。
權利要求
1.一種數據處理系統(100)中的方法,用于在所述數據處理系統(100)的推測版本控制高速緩存(310)中產生檢查點,該方法包括由所述數據處理系統(100)的至少一個處理器(106、370-376、1270-1276)執行所述數據處理系統(100)內的代碼,其中所述代碼訪問所述推測版本控制高速緩存(310、1210)中的高速緩存行;由所述數據處理系統(100)確定指示需要在所述推測版本控制高速緩存(310、1210) 中產生檢查點(1030)的第一條件是否發生(1350),其中所述檢查點(1030)是一個或更多個推測高速緩存行,所述推測高速緩存行出于響應于發生第二條件執行回滾操作以便使對與所述一個或更多個推測高速緩存行對應的高速緩存行的改變無效的目的,存儲狀態信息;和響應于確定發生了第一條件,在推測版本控制高速緩存(310、1210)中產生(1370)所述檢查點(1030)。
2.如權利要求1所述的方法,還包括在所述數據處理系統(100)中存儲與所述推測版本控制高速緩存(310、1210)相關聯的一個或更多個版本壓力閾值,其中確定指示需要在所述推測版本控制高速緩存(310、1210)中產生所述檢查點(1030)的第一條件是否發生包括在代碼執行時確定所述推測版本控制高速緩存(310、1210)的版本壓力是否達到或超過所述一個或更多個版本壓力閾值(1340)。
3.如權利要求2所述的方法,其中所述一個或更多個版本壓力閾值(1340)包括推測版本控制高速緩存級別、相關聯的高速緩存行級別集合和單獨的線程級別之一的一個或更多個閾值。
4.如權利要求1所述的方法,其中所述推測版本控制高速緩存(310、1210)包括用于存儲與讀/加載操作相關聯的非推測高速緩存行的第一部分和用于存儲與寫/存儲操作相關聯的推測高速緩存行的第二部分。
5.如權利要求4所述的方法,其中第二部分具有基于所述推測版本控制高速緩存 (310、1210)的總容量的最大大小限制,并且其中確定指示需要在所述推測版本控制高速緩存(310、1210)中產生檢查點的第一條件是否發生(1350)包括確定所述推測版本控制高速緩存(310、1210)中的第二部分中的高速緩存行數目是否達到或超過基于所述最大大小限制的版本壓力閾值。
6.如權利要求1所述的方法,其中第二條件是對所述推測版本控制高速緩存(310、 1210)中的緩存數據中的軟錯誤的檢測。
7.如權利要求2所述的方法,其中由與所述推測版本控制高速緩存(310、1210)相關聯的全局版本壓力模塊(320、405、1220)或線程版本壓力模塊(330_336、460_462、 1230-1236)確定所述推測版本控制高速緩存(310、1210)的版本壓力是否達到或超過所述一個或更多個版本壓力閾值。
8.如權利要求1所述的方法,其中在所述推測版本控制高速緩存(310、1210)中產生檢查點(1370)包括響應于確定已經發生第一條件,向所述操作系統產生中斷(1360);和由所述操作系統啟動用于將推測版本控制高速緩存(310、1210)中的推測高速緩存行提升到非推測狀態(1420),并且啟動所述推測版本控制高速緩存(1370、1430)中的所述檢查點創建的中斷處理器。
9.如權利要求8所述的方法,其中提升所述推測版本控制高速緩存(310、1210)中的所述推測高速緩存行包括將與所述推測版本控制高速緩存(310、1210)中的所述推測高速緩存行相關聯的版本標識符標記為非推測性的,并且使得對應的高速緩存行的以前的非推測版本無效。
10.如權利要求1所述的方法,其中確定指示需要在所述推測版本控制高速緩存(310、 1210)中產生檢查點(1340)的第一條件是否發生包括確定代碼的執行是否進入代碼的不可重放部分(1020),并且其中響應于確定代碼的執行進入代碼的不可重放部分(1020),產生檢查點(1030、1370)。
11.如權利要求10所述的方法,其中所述不可重放代碼(1020)是執行輸入或輸出操作、讀或寫文件、在網絡上發送或接收消息、與另一個線程共享數據、或訪問資源上的鎖中的一個的代碼。
12.如權利要求10所述的方法,其中響應于確定第一條件已經發生在推測版本控制高速緩存中產生檢查點(1370)包括在所述不可重放代碼之前執行一個或更多個第一編譯器插入的指令,所述指令使得產生用于將所述推測版本控制高速緩存(310、1210)中的推測高速緩存行提升到非推測狀態的第一中斷(1110);和在所述不可重放代碼之后執行一個或更多個第二編譯器插入的指令,所述指令使得產生第二中斷(1120),第二中斷(1120)用于在所述不可重放代碼(1030)的執行之后產生檢查點(1030)。
13.如權利要求1所述的方法,其中產生檢查點包括產生新的版本標識符;將所述新的版本標識符與作為執行所述代碼的一部分執行的當前線程相關聯;和由所述當前線程在對所述推測版本控制高速緩存的后續存儲中利用所述新的版本標識符。
14.如權利要求13所述的方法,其中在對所述推測版本控制高速緩存的后續存儲中利用所述新的版本標識符包括確定所述當前線程的存儲操作是否在所述推測版本控制高速緩存中導致高速緩存命中;響應于高速緩存命中,檢查由存儲操作命中的高速緩存行是否與所述新的版本標識符相關聯;和響應于由所述存儲操作命中的高速緩存行不與所述新的版本標識符相關聯,將由所述存儲操作命中的高速緩存行拷貝到新的推測高速緩存行,將所述新的版本標識符與所述新的推測高速緩存行相關聯,并且對所述新的推測高速緩存行執行存儲操作。
15.如權利要求1所述的方法,其中產生檢查點(1030)包括在所述推測版本控制高速緩存(310、1210)中的推測高速緩存行中存儲第一狀態信息,和在所述數據處理系統 (100)的一個或更多個緩沖器(1440)中存儲第二狀態信息。
16.如權利要求15所述的方法,其中第一狀態信息是對應于所述推測高速緩存行的非推測高速緩存行的非推測狀態信息,并且其中第二狀態信息包括程序計數器的狀態、程序寄存器的狀態或系統寄存器的狀態中的一個或更多個。
17.如權利要求1所述的方法,還包括確定在代碼的執行過程中是否發生了第二條件(1510); 確定第二條件是否發生在代碼的不可重放部分的執行過程中(1520);和響應于第二條件不發生在代碼的不可重放部分的執行過程中,將對與所述推測高速緩存行對應的高速緩存行的改變回滾到對應于所述檢查點(1560)的狀態。
18.如權利要求17所述的方法,還包括響應于確定第二條件發生在代碼的不可重放部分的執行過程中,產生指示不可恢復錯誤的通知或中斷(1530)。
19.一種包括計算機可讀介質的計算機程序產品,所述計算機可讀介質上記錄有計算機可讀程序,其中當被在數據處理系統上執行時,所述計算機可讀程序使得所述數據處理系統執行所述數據處理系統內的代碼,其中所述代碼訪問所述數據處理系統的推測版本控制高速緩存中的高速緩存行;確定指示需要在所述推測版本控制高速緩存中產生檢查點的第一條件是否發生,其中所述檢查點是一個或更多個推測高速緩存行,所述推測高速緩存行出于響應于發生第二條件執行回滾操作以便使對與所述一個或更多個推測高速緩存行對應的高速緩存行的改變無效的目的,存儲狀態信息;和響應于確定發生了第一條件,在所述推測版本控制高速緩存中產生所述檢查點。
20.一種數據處理系統,包括一個或更多個處理器,每個處理器具有版本控制高速緩存模塊以實現在所述處理器的硬件中的至少一個線程級別;耦連到所述一個或更多個處理器的推測版本控制高速緩存存儲設備; 耦連到所述推測版本控制高速緩存存儲設備的以硬件實現的全局版本控制高速緩存模塊,其中所述一個或更多個處理器配置為執行訪問所述推測版本控制高速緩存存儲設備中的高速緩存行的代碼;所述以硬件實現的全局版本控制高速緩存模塊或所述至少一個線程級別版本控制高速緩存模塊中的至少一個配置為確定指示需要在所述推測版本控制高速緩存中產生檢查點的第一條件是否發生,其中所述檢查點是一個或更多個推測高速緩存行,所述推測高速緩存行出于響應于發生第二條件執行回滾操作以便使對與所述一個或更多個推測高速緩存行對應的高速緩存行的改變無效的目的,存儲狀態信息;和所述推測版本控制高速緩存存儲設備配置為響應于確定發生了第一條件存儲所述檢
全文摘要
提供了用于在數據處理系統(100)的推測版本控制高速緩存(310、1210)內產生檢查點(1030)的機制。所述機制執行數據處理系統(100)內的代碼,其中所述代碼訪問推測版本控制高速緩存(310、1210)內的高速緩存行。該機制還確定(1350)指示需要在推測版本控制高速緩存(310、1210)內產生檢查點(1030)的第一條件是否發生。檢查點(1030)是推測高速緩存行,其被響應于需要對應于所述推測高速緩存行的高速緩存行的改變的回滾的第二條件的發生置于是非推測性的。該機制還響應于確定第一條件已經發生,在推測版本控制高速緩存(310、1210)內產生檢查點(1310)。
文檔編號G06F15/00GK102473156SQ201080036698
公開日2012年5月23日 申請日期2010年7月19日 優先權日2009年8月20日
發明者A·加拉, A·埃欽伯格, M·奧赫馬特, M·格什溫 申請人:國際商業機器公司