用于事務存儲器系統(tǒng)中的自適應線程調度的方法、設備和系統(tǒng)的制作方法
【專利摘要】本文描述用于事務存儲器環(huán)境中的自適應線程調度的設備和方法。追蹤隨著時間的線程中的若干沖突。并且如果沖突超過閾值,可以延遲(自適應調度)線程以便避免競爭線程之間的沖突。此外,更復雜的版本可追蹤在時期上由第二線程引起的第一線程內的事務異常中止的數(shù)量,以及在所述時期上由第一線程執(zhí)行的事務的總數(shù)。根據(jù)所述追蹤,確定第一線程關于第二線程的沖突比率。并且當?shù)谝痪€程將被調度時,如果第二線程正在運行并且沖突比率超過沖突比率閾值,則第一線程可以被延遲。
【專利說明】用于事務存儲器系統(tǒng)中的自適應線程調度的方法、設備和 系統(tǒng)
【技術領域】
[0001] 本公開關于集成電路的領域,并且更具體地,關于處理器中的并行執(zhí)行。
【背景技術】
[0002] 半導體處理和邏輯設計中的進展已經允許可出現(xiàn)在集成電路裝置上的邏輯的量 中的增長。作為結果,計算機系統(tǒng)配置已經從系統(tǒng)中的單個或多個集成電路演進到出現(xiàn)在 單個集成電路上的多個核以及多個邏輯處理器。處理器或集成電路通常包括單個處理器管 芯,其中處理器管芯可包括任何數(shù)量的核或邏輯處理器。
[0003] 集成電路上不斷增加的數(shù)量的核以及邏輯處理器使得更多軟件線程能夠并發(fā)執(zhí) 行。然而,可同時執(zhí)行的軟件線程的數(shù)量的增長已經造成同步軟件線程中共享的數(shù)據(jù)的問 題。存取多個核或多個邏輯處理器系統(tǒng)中的共享數(shù)據(jù)的一個普遍的解決方案包括使用鎖來 保證對共享數(shù)據(jù)的多個存取之間的互斥。然而,執(zhí)行多個軟件線程的不斷增長的能力潛在 地導致錯誤爭用和串行化的執(zhí)行。
[0004] 例如,考慮保存共享數(shù)據(jù)的哈希表。通過鎖系統(tǒng),程序員可以鎖住整個哈希表,從 而允許一個線程存取整個哈希表。然而,其它線程的吞吐量和性能潛在地受到不利影響,因 為在釋放鎖之前,它們不能存取哈希表中的任何條目。任一種方式,在將這個簡單的示例外 推到大規(guī)模程序中之后,顯然鎖爭用的復雜性、串行化、精細粒度的同步以及死鎖避免變成 程序員非常麻煩的負擔。
[0005] 另一種最近的數(shù)據(jù)同步技術包括使用事務存儲器(TM)。通常事務執(zhí)行包括原子地 執(zhí)行一組多個微操作、操作或指令。在以上示例中,線程在哈希表內執(zhí)行,并且它們的存儲 器存取被監(jiān)視/追蹤。如果線程存取/更改相同條目,則可執(zhí)行沖突解決來確保數(shù)據(jù)有效 性。一種類型的事務執(zhí)行包括軟件事務存儲器(STM),其中存儲器存取的追蹤、沖突解決、異 常中止任務以及其它事務任務在軟件中執(zhí)行,通常沒有硬件的支持。另一種類型的事務執(zhí) 行包括硬件事務存儲器(HTM)系統(tǒng),其中包括軟件以支持存取追蹤、沖突解決和其它事務任 務。
[0006] 如可以看到的,TM具有提供多個線程之間的更好性能的潛力。然而,如果由于線 程之間的數(shù)據(jù)沖突而產生太多事務異常中止,則性能可變成降級。換句話說,事務異常中止 的成本(即,將架構和存儲器狀態(tài)退回到事務之前的點)可能是耗時的。并且雖然一些異常 中止通常是實現(xiàn)可能的最高并行性能的一部分,太多異常中止可導致比不利用鎖執(zhí)行的受 益花費更多時間來異常中止事務。傳統(tǒng)地,如果事務異常中止太多次,執(zhí)行回復到基于鎖的 執(zhí)行。但是,仍沒有嘗試有效地調度線程以便最小化(或在一些情況下避免)并行線程之間 的沖突。
【專利附圖】
【附圖說明】
[0007] 本發(fā)明通過示例的方式示出并且不意圖受附圖限制。
[0008] 圖1圖示了包括具有多個處理元件(2個核以及4個線程槽)的處理器的系統(tǒng)的邏 輯表示的實施例。
[0009]圖2圖示了軟件事務存儲器系統(tǒng)和支持其執(zhí)行的硬件結構的邏輯表示的實施例。
[0010]圖3圖示了基于線程沖突自適應調度線程的模塊的邏輯表示的實施例。
[0011]圖4圖示了基于線程沖突自適應調度線程的模塊的邏輯表示的實施例。
[0012] 圖5圖示了用于基于與當前運行的線程的沖突來延遲線程的調度的方法的流程 圖的實施例。
[0013] 圖6圖示了用于基于線程沖突自適應調度線程的方法的流程圖的實施例。
[0014] 圖7圖示了用于基于線程沖突自適應調度線程的方法的流程圖的另一實施例。
【具體實施方式】
[0015]在以下描述中,闡述了許多特定細節(jié),例如以下示例:特定類型的特定處理器配 置、特定硬件結構、特定架構和微架構細節(jié)、特定寄存器配置、特定沖突公式、特定類型的控 制軟件等,以便提供對本發(fā)明的透徹理解。然而,對于本領域技術人員將顯而易見的是不需 要采用這些特定細節(jié)來實踐本發(fā)明。在其它實例中,公知的部件或方法,例如特定和備選的 處理器架構、用于所述算法的特定邏輯電路/代碼、特定功率單元實現(xiàn)細節(jié)、解碼器的特定 操作、指令的特定格式和處理器的其它特定操作細節(jié)未詳細描述以便避免不必要地使本發(fā) 明變得模糊。
[0016] 雖然參考處理器描述以下實施例,但是其它實施例也可適用于其它類型的集成電 路和邏輯裝置。本文描述的實施例的類似技術和教導可應用于其它類型的電路或半導體裝 置(其可受益于更高的管道吞吐量和改進的性能)。例如,公開的實施例不限于計算機系統(tǒng)。 并且還可用于其它裝置,例如手持式裝置和嵌入式應用。手持式裝置的一些示例包括蜂窩 電話、互聯(lián)網(wǎng)協(xié)議裝置、數(shù)字照相機、個人數(shù)字助理(PDA)以及手持式PC。嵌入式應用包括 微控制器、數(shù)字信號處理器(DSP0、片上系統(tǒng)、網(wǎng)絡計算機(NetPC)、機頂盒、網(wǎng)絡集線器、廣 域網(wǎng)(WAN)交換機或能夠執(zhí)行下面教導的功能和操作的任何其它系統(tǒng)。
[0017] 本文描述的方法和裝置用于自適應調度線程以最小化沖突,具體地,關于微處理 器(例如處理器100)的事務執(zhí)行來討論自適應線程調度。但是,并不如此限制本文描述的設 備和方法,因為它們可以結合備選處理器架構以及包括多個處理元件的任何裝置來實現(xiàn)。 例如,自適應線程調度可以在其它類型的集成電路和邏輯裝置中實現(xiàn)。或者它可以用于小 形狀因素的裝置、手持式裝置或嵌入式應用中。另外,自適應線程調度還可實現(xiàn)用于調度與 事務執(zhí)行無關的線程。作為示例,調度線程以便采用與如下描述的類型方式來最小化高速 緩存或其它共享資源中的系統(tǒng)失效。
[0018] 參考圖1,圖示了包括多個核的處理器的實施例。處理器100包括任何處理器或處 理裝置,例如微處理器、嵌入式處理器、數(shù)字信號處理器(DSP)、網(wǎng)絡處理器、手持式處理器 或執(zhí)行代碼的其它裝置。在一個實施例中,處理器100包括至少兩個核--核101和102, 其可包括不對稱核或對稱核(圖示的實施例)。然而,處理器100可包括可以是對稱或不對 稱的任何數(shù)量的處理元件。
[0019] 在一個實施例中,處理元件指支持軟件線程的硬件或邏輯。硬件處理元件的示例 包括:線程單元、線程槽、線程、處理單元、上下文、上下文單元、邏輯處理器、硬件線程、核和 /或任何其它元件,其能夠保存處理器的狀態(tài),例如執(zhí)行狀態(tài)或架構狀態(tài)。換句話說,在一 個實施例中,處理元件指能夠與代碼獨立關聯(lián)的任何硬件,所述代碼例如軟件線程、操作系 統(tǒng)、應用或其它代碼。物理處理器通常指集成電路,其潛在地包括任何數(shù)量的其它樹立元 件,例如核或硬件線程。
[0020] 核通常指位于能夠保持獨立架構狀態(tài)的集成電路上的邏輯,其中每個獨立保持的 架構狀態(tài)與至少一些專用執(zhí)行資源關聯(lián)。與核相比,硬件線程通常指位于能夠保持獨立架 構狀態(tài)的集成電路上的邏輯,其中獨立保持的架構狀態(tài)共享對執(zhí)行資源的存取。如可以看 到的,當某些資源被共享而其它資源專用于架構狀態(tài)時,硬件線程與核的命名之間的線重 疊。但是,核與硬件線程經常由操作系統(tǒng)視為獨立的邏輯處理器,其中操作系統(tǒng)能夠獨立地 調度每個邏輯處理器上的操作。
[0021] 如圖1中圖示的,物理處理器100包括兩個核,核101與核102。此處,核101與核 102被考慮為對稱核,即具有相同配置、功能單元和/或邏輯的核。在另一實施例中,核101 包括無序處理器核,而核102包括有序處理器核。然而,核101與核102可獨立地選自任何 類型的核,例如本地核、軟件管理的核、適于執(zhí)行本地指令集架構(ISA)的核、適于執(zhí)行轉換 的指令集架構(ISA)的核、共同設計的核或其它已知核。但是為了進一步討論,核101中圖 示的功能單元在下面進一步詳細描述,同樣地核102中的單元以類似方式進行操作。
[0022] 如示出的,核101包括兩個硬件線程101a和101b,其還可被稱為硬件線程槽101a 和101b。因此,在一個實施例中,軟件實體,例如操作系統(tǒng),潛在地將處理器100視為4個 分離的處理器,即能夠并發(fā)執(zhí)行4個軟件線程的4個邏輯處理器或處理元件。為了躲避上 面,第一線程與架構狀態(tài)寄存器l〇la關聯(lián),第二線程與架構狀態(tài)寄存器101b關聯(lián),第三線 程可與架構狀態(tài)寄存器102a關聯(lián),并且第四線程可與架構狀態(tài)寄存器102b關聯(lián)。此處,架 構狀態(tài)寄存器(l〇la、101b、102a、102b)中的每個可被稱為處理元件、線程槽或線程單元,如 上所述。如圖示的,架構狀態(tài)寄存器l〇la在架構狀態(tài)寄存器101b中復制,因此獨立的架構 狀態(tài)/上下文能夠被存儲用于邏輯處理器l〇la和邏輯處理器101b。在核101中,其它更小 的資源,例如重命名分配器邏輯130中的重命名邏輯和指令指針還可被復制用于線程101a 和101b。一些資源,例如重排序/引退單元135、ILTB 120、加載/存儲緩沖器和隊列中的 重排序緩沖器可通過分區(qū)來共享。其它資源,例如通用內部寄存器、頁-表基礎寄存器、低 級數(shù)據(jù)高速緩存和數(shù)據(jù)-TLB 115、執(zhí)行單元140和無序單元135的部分潛在地完全共享。
[0023] 處理器100通常包括其它資源,其可完全共享、通過分區(qū)共享或由處理元件專用 或專用于處理元件。在圖1中,圖示了具有處理器的圖示性邏輯單元/資源的純粹示范性 的處理器的實施例。注意到處理器可包括或省略這些功能單元中的任何一個,以及包括未 示出的任何其它已知功能單元、邏輯或固件。如圖示的,核101包括簡化的、代表性的無 序(000)處理器核。但是有序處理器可用于不同實施例中。000核包括用于預測要被執(zhí)行 /采用的分支的分支目標緩沖器120以及存儲指令的地址轉換條目的指令-轉換緩沖器 (I-TLB)120〇
[0024] 核101還包括耦合到取出模塊120以便解碼取出的元素的解碼模塊125。在一個實 施例中,取出邏輯包括與線程槽關聯(lián)的單獨定序器。通常,核101與第一指令集架構(ISA) 關聯(lián),第一指令集架構定義/規(guī)定處理器100上可執(zhí)行的指令。通常作為第一 ISA的一部分 的機器代碼指令包括指令(稱為操作碼)的一部分,其參考/規(guī)定要執(zhí)行的指令或操作。解 碼邏輯125包括電路,所述電路從它們的操作碼中識別這些指令并且將解碼的指令在管道 中傳遞用于由第一 ISA定義的處理。例如,如下面更詳細討論的,在一個實施例中,解碼器 125包括設計成或適于識別特定指令(例如事務指令)的邏輯。作為解碼器125的識別的結 果,架構或核101采取特定、預定義的動作來執(zhí)行與適當指令關聯(lián)的任務。重要的是注意到 本文描述的任務、塊、操作和方法中的任一項可響應于單個或多個指令而執(zhí)行;其中一些可 以是新的或舊的指令。
[0025]在一個示例中,分配器和重命名器塊130包括分配器來保留資源(例如寄存器文 件)以便存儲指令處理結果。然而,線程l〇la和101b潛在地能夠無序處理,其中分配器和 重命名器塊130還保留其它資源,例如重排序緩沖器以追蹤指令結果。單元130還可包括 寄存器重命名器以重命名程序/指令參考寄存器為處理器100內部的其它寄存器。重排序 /引退單元135包括部件,例如上述的重排序緩沖器、加載緩沖器和存儲緩沖器來支持無序 執(zhí)行以及無序執(zhí)行的指令的后面的有序引退。在一個實施例中,當線程最近已經太過頻繁 地與當前運行的線程沖突時,自適應線程調度包括延遲來自緩沖器(例如加載或存儲緩沖 器)的線程的指令的分派,這導致調度隨后被延遲。
[0026]在一個實施例中,調度器和執(zhí)行單元塊140包括用來調度執(zhí)行單元上的指令/操 作的調度器單元。例如,浮點指令被調度在具有可用的浮點執(zhí)行單元的執(zhí)行單元的端口上。 在下面更詳細描述的一個實施例中,調度器140配置成對于與已經正運行/調度的線程太 多沖突的執(zhí)行自適應調度和/或延遲線程。還包括與執(zhí)行單元關聯(lián)的寄存器文件以便存儲 信息指令處理結果。示范性執(zhí)行單元包括浮點執(zhí)行單元、整數(shù)執(zhí)行單元、跳轉執(zhí)行單元、加 載執(zhí)行單元、存儲執(zhí)行單元以及其它已知執(zhí)行單元。
[0027] 更低級的數(shù)據(jù)高速緩存和數(shù)據(jù)轉換緩沖器(D-TLB) 150耦合到執(zhí)行單元140。數(shù) 據(jù)高速緩存將存儲最近使用的/操作的元件,例如數(shù)據(jù)操作數(shù)、其潛在地保存在存儲器一 致性狀態(tài)中。D-TLB將存儲最近的虛擬/線性到物理地址轉換。作為特定示例,處理器可包 括頁表結構來將物理存儲器分拆成多個虛擬頁。
[0028] 這里,核101和102共享對更高級或更外高速緩存110的存取,所述高速緩存110 將緩存最近取出的元素。注意到更高級或更外指的是高速緩存級增加或變得更遠離執(zhí)行單 元。在一個實施例中,更高級高速緩存110是最后級數(shù)據(jù)高速緩存一一處理器100上的存儲 器分層結構中的最后高速緩存一一例如第二或第三級數(shù)據(jù)高速緩存。然而,更高級高速緩 存110并不如此限制,因為它可以關聯(lián)于或包括指令高速緩存。替代地,追蹤高速緩存(一 種類型的指令高速緩存)可在解碼器125之后耦合以存儲最近解碼的追蹤。
[0029]在圖示的配置中,處理器100還包括總線接口模塊105來與處理器100外部的裝 置通信,例如系統(tǒng)存儲器175、芯片集(通常包括用來連接到存儲器175的存儲器控制器集 線器和用來連接外圍裝置的I/O控制器集線器)、存儲器控制器集線器、北橋或其它集成電 路??偩€105可包括任何已知的互連,例如多點總線、點對點互連、串行互連、并行總線、一 致(例如,高速緩存一致)總線、分層的協(xié)議架構、差動總線以及GTL總線。存儲器175可專 用于處理器100或與系統(tǒng)中的其它裝置共享。存儲器175的類型的公共示例包括動態(tài)隨機 存取存儲器(DRAM)、靜態(tài)RAM (SRAM)、非易失性存儲器(NV存儲器)以及其它已知的存儲器 裝置。注意到裝置180可包括耦合到存儲器控制器集線器的圖形加速器、處理器或卡、耦合 到I/O控制器集線器的數(shù)據(jù)存儲裝置、無線收發(fā)器、閃存裝置、音頻控制器、網(wǎng)絡控制器或 其它已知裝置。
[0030] 注意到在示出的實施例中,控制器集線器和存儲器示出在處理器100的外部。然 而,本文描述的方法和設備的實現(xiàn)并不這樣限制。實際上,因為更多邏輯和裝置正被集成在 單個管芯(die)上,例如片上系統(tǒng)(SOC),這些裝置中的每個可以合并在處理器100上。例 如,在一個實施例中,存儲器控制器集線器在和處理器100相同的封裝和/或管芯上。這 里,核的一部分(核上部分)包括控制器集線器用于與例如控制器集線器的其它裝置接口連 接。在SOC環(huán)境中,甚至更多的裝置,例如網(wǎng)絡接口、協(xié)處理器以及任何其它已知計算機裝 置/接口可集成在單個管芯或集成電路上以便提供高功能性和低功耗給小形狀因素。
[0031] 在一個實施例中,處理器100能夠進行硬件事務執(zhí)行、軟件事務執(zhí)行或其組合/混 合。事務(還可被稱為代碼的關鍵或原子部分/區(qū)域的執(zhí)行)包括作為原子組執(zhí)行的一組指 令或操作。例如,指令或操作可用于區(qū)分事務或關鍵部分。在下面更詳細描述的一個實施 例中,這些指令是指令的集合的部分,例如指令集架構(ISA),這些指令由處理器100的硬 件(例如上述的解碼器)可識別。通常,這些指令一旦從高級語言編譯到硬件可識別的匯編 語言時包括解碼器在解碼階段識別的操作代碼(操作碼)或指令的其它部分。
[0032] 通常,在事務的執(zhí)行期間,直到事務被提交才使對存儲器的更新全局可見。作為示 例,到某個存儲單元的事務寫潛在地對本地線程可見;但是,響應于來自另一個線程的讀, 直到包括事務寫的事務被提交才轉發(fā)寫數(shù)據(jù)。雖然事務仍然未決,但是加載自存儲器以及 寫到存儲器內的數(shù)據(jù)項/元素被追蹤,如下面更詳細討論的。一旦事務到達提交點,如果對 于所述事務還未檢測到沖突,則事務被提交并且使事務期間進行的更新全局可見。然而,如 果事務在其未決期間是無效的,則事務被異常中止并且潛在地重新開始而不使更新全局可 見。作為結果,如本文使用的,事務的未決指已經開始執(zhí)行并且未提交或異常中止(即,未 決)的事務。
[0033] 軟件事務存儲器(STM)系統(tǒng)通常指在軟件或代碼的執(zhí)行內或至少主要通過軟件或 代碼的執(zhí)行來執(zhí)行存取追蹤、沖突解決或其它事務的存儲器任務。在一個實施例中,處理器 100能夠利用硬件/邏輯,即在硬件事務存儲器(HTM)系統(tǒng)內執(zhí)行事務。當實現(xiàn)HTM時,從 架構和微架構的角度,許多特定實現(xiàn)細節(jié)存在;其大部分未在本文討論以避免不必要地使 本討論變得模糊。然而,處于說明的目的公開了一些結構、資源和實現(xiàn)。但是,應注意到這 些結構和實現(xiàn)不是要求的并且可被增大和/或用具有不同實現(xiàn)細節(jié)的其它結構來代替。與 事務存儲器緊密相關的另一種執(zhí)行技術包括鎖省略{:通常被稱為硬件鎖省略(HLE)}。在 此情景中,鎖指令對(鎖和解鎖)(由用戶、軟件或硬件)用原子開始和結束圖型來代替。并 且鎖指令對之間的代碼的部分類似于事務而執(zhí)行。
[0034] 作為組合,處理器100可以能夠例如在無限的事務存儲器(UTM)系統(tǒng)內使用混合 方法(硬件和軟件)來執(zhí)行事務,所述UTM系統(tǒng)嘗試利用STM和HTM系統(tǒng)的益處。例如,HTM 通常是快速并且高效的用于執(zhí)行小事務,因為它不依賴于軟件來執(zhí)行所有的存取追蹤、沖 突檢測、驗證和事務提交。然而,HTM通常只能夠處理小事務,而STM能夠處理更大大小的事 務(其通常稱為無限大小的事務)。因此,在一個實施例中,UTM系統(tǒng)利用硬件來執(zhí)行較小的 事務并且利用軟件來執(zhí)行對于硬件太大的事務。如可以從下面討論中看到的,甚至當軟件 正在處理事務時,可以利用硬件來協(xié)助并且加速軟件;這種混合的方法通常被稱為硬件加 速STM,因為主事務存儲器系統(tǒng)(簿記,等等)駐留在軟件中并且使用硬件鉤(hook)來加速。
[0035] 簡要參考圖2,示出了 STM系統(tǒng)的簡化的說明性實施例。注意到圖2的討論主要 關于樂觀讀STM系統(tǒng)。在那點上,提供某些事務存儲器實現(xiàn)細節(jié)的討論,例如直接對間接引 用、樂觀對悲觀并發(fā)控制以及在適當存儲單元的更新對寫緩沖以便說明在實現(xiàn)事務存儲器 系統(tǒng)時做出的幾個設計選擇。然而,本文描述的方法和設備可實現(xiàn)用于任何事務存儲器系 統(tǒng),例如HTM、硬件加速STM、混合STM、悲觀STM或其它已知事務存儲器系統(tǒng),以及結合任何 已知的實現(xiàn)細節(jié)。
[0036] 在STM的一個實施例中,存儲器存儲單元(地址)數(shù)據(jù)項和/或數(shù)據(jù)元素(例如要 被保持在高速緩存行215中的數(shù)據(jù)元素201)與元數(shù)據(jù)存儲單元(例如數(shù)組240中的元數(shù)據(jù) 存儲單元250)關聯(lián)。作為說明書示例,與數(shù)據(jù)元素201和/或高速緩存205的行215關聯(lián) 的地址或其部分被哈希到數(shù)組240中的索引地址250。通常,關于事務存儲器,元數(shù)據(jù)存儲 單元250被稱為事務記錄,而數(shù)組240被稱為事務記錄的數(shù)組。但是,整個事務的元數(shù)據(jù)可 包括關于事務本身的信息,例如下面更詳細描述的事務描述280、讀集合265和寫集合270。 雖然如圖示的,事務記錄250與單個高速緩存行關聯(lián),可以在任何數(shù)據(jù)粒度級(例如數(shù)據(jù)元 素201的大小)提供事務記錄,數(shù)據(jù)元素201的大小可以小于或大于高速緩存行215,以及 包括操作數(shù)、對象、類、類型、數(shù)據(jù)結構或數(shù)據(jù)的任何其它元素。
[0037]數(shù)據(jù)項、數(shù)據(jù)對象或數(shù)據(jù)元素(例如數(shù)據(jù)項201)可包括在任何粒度級的數(shù)據(jù),如由 硬件、軟件或其組合所定義的。數(shù)據(jù)、數(shù)據(jù)元素、數(shù)據(jù)項或對其的引用的非窮舉的列表包括 存儲器地址、數(shù)據(jù)對象、變量、操作數(shù)、數(shù)據(jù)結構和對存儲器地址的間接引用。然而,任何已 知分組的數(shù)據(jù)可稱為數(shù)據(jù)元素或數(shù)據(jù)項。以上的幾個示例,例如一種類型的動態(tài)語言代碼 的域和一種類型的動態(tài)語言代碼指動態(tài)語言代碼的數(shù)據(jù)結構。為了說明,動態(tài)語言代碼,例 如來自Sun Microsystems有限公司的Java?是強類型語言。每個變量具有在編譯時間已 知的類型。所述類型被分成兩個類別一一原語類型(布爾邏輯和數(shù)值,例如整形、浮點型)和 引用類型(類、接口和數(shù)組)。引用類型的值是對于對象的引用。在Java?中,包括域的對象 可以是類實例或數(shù)組。給出類A的對象,慣例是使用記號A: :x來指類型A的域以及a. x來 指類A的對象的域。例如,表達式可以表達為a. x=a. y+a. z。這里,域y和域z被加載以便 添加并且結果將被寫到域X。
[0038] 因此,對數(shù)據(jù)項的監(jiān)視/緩沖存儲器存取可在任何數(shù)據(jù)級粒度執(zhí)行。例如,在一個 實施例中,對數(shù)據(jù)的存儲器存取在類型級監(jiān)視。這里,對域A: :x的事務寫和域A: :y的非事 務加載可被監(jiān)視為對相同數(shù)據(jù)項(即,類型A)的存取。在另一實施例中,存儲器存取監(jiān)視/ 緩沖在域級粒度執(zhí)行。這里,對A: :x的事務寫和域A: :y的非事務加載未被監(jiān)視為對相同數(shù) 據(jù)項的存取,因為它們是對分別的域的引用。注意,可以在追蹤對數(shù)據(jù)項的存儲器存取中考 慮其它數(shù)據(jù)結構或編程技術。作為示例,假設類A的對象的域x和y (S卩,A::X和A::y)指 向類B的對象、被初始化成新分配的對象并且在初始化之后從不被寫。在一個實施例中,由 A: :x指向的對于對象的域B: :z的事務寫未被監(jiān)視為對關于由A: :y指向的對象的域B: :z 的非事務加載相同數(shù)據(jù)項的存儲器存取。從這些示例外推,有可能確定監(jiān)視可以在任何數(shù) 據(jù)粒度級監(jiān)視/緩沖。
[0039] 通常在STM中,事務記錄(TR) 250 (還稱為事務鎖)被用來提供關聯(lián)的存儲器地址 (例如數(shù)據(jù)元素201)的擁有權的不同級別和對關聯(lián)的存儲器地址的存取。在一個實施例中, TR 250持有第一值來表示解鎖的或未被擁有的狀態(tài),并且持有第二值來表示鎖定或被用戶 的狀態(tài)。在一些實現(xiàn)中,TR 250可以能夠具有多個不同級別的鎖定或被擁有狀態(tài),例如寫 鎖/排他鎖狀態(tài)以提供排他的擁有權給單個擁有者;讀鎖,其中讀者讀取數(shù)據(jù)元素201同時 允許其他人仍讀取但是不允許寫數(shù)據(jù)元素201 ;以及讀鎖,其具有升級到寫/排他鎖狀態(tài)的 意圖,其中潛在的寫者想要獲取排他的寫鎖,但是等待當前讀者釋放數(shù)據(jù)元素201。
[0040] 用于表示TR 250中解鎖狀態(tài)和鎖定狀態(tài)的值基于實現(xiàn)變化。例如,在樂觀并發(fā)控 制STM的一個實施例中,TR 250持有版本值或時間戳值(例如,表示更新數(shù)據(jù)元素201的最 近提交的事務的值)以便指示解鎖狀態(tài)。并且TR 250持有對事務描述符的引用,例如指針, 以便表示鎖定狀態(tài)。通常,事務描述符280持有描述事務的信息,例如事務ID 281和事務 狀態(tài)282。利用對事務描述符280的指針的上述示例通常被稱為直接引用STM,其中事務記 錄250持有對擁有的事務281的直接引用。
[0041]在另一實施例中,被擁有或鎖定的值包括對寫集合條目的引用,例如寫集合270 的寫條目271。在一個實施例中,寫條目271在鎖被獲取之前將持有來自事務記錄250的記 錄的版本號;對事務描述符280的指針,以便指示事務281與寫條目271關聯(lián);以及對事務 記錄250的反向指針。這個示例通常被稱為間接引用STM,其中TR 250間接地引用擁有的 事務,即通過寫條目271。
[0042] 相比于TR 250中的指針值的版本,在悲觀并發(fā)控制STM的一個實施例中,TR 250 持有位向量/位圖,其中更高階的位表示執(zhí)行事務(或線程執(zhí)行事務),其中LSB 251和第二 LSB 252表示寫鎖狀態(tài)、解鎖狀態(tài)以及對寫鎖狀態(tài)的讀升級。在解鎖狀態(tài)中,被設置表示對 應的事務的更高位具有讀數(shù)據(jù)元素201。在鎖定狀態(tài)中,更高位之一被設置成指示事務中的 那個具有寫鎖定數(shù)據(jù)元素201。
[0043] 在一個實施例中,在對數(shù)據(jù)元素201的存儲器存取時,執(zhí)行存取障礙以便確保適 當存取和數(shù)據(jù)有效性。這里,經常執(zhí)行擁有權測試以便確定TR 250的擁有權狀態(tài)。在一個 實施例中,TR 250的一部分,例如LSB 251和/或第二LSB 252被用于指示數(shù)據(jù)元素201的 可用性。為了說明,當LSB 251持有第一值,例如邏輯0,則TR 250被解鎖,并且當LSB 251 持有第二值,例如邏輯1,則TR 250被鎖定。在這個示例中,第二LSB 252可用于指示合適 讀擁有者意圖升級到排他的寫鎖。備選地,位251-252的組合,以及其它位,可用于編碼不 同的擁有權狀態(tài),例如上述的多個鎖狀態(tài)。
[0044] 在一個實施例中,在存儲器存取的障礙執(zhí)行簿記連同上述的擁有權測試。例如,在 數(shù)據(jù)元素201的讀取時,在TR 250上執(zhí)行擁有權測試。如果解鎖,即持有樂觀并發(fā)控制STM 中的版本值,則版本值被記錄在讀集合266的讀條目265中。后面,一旦驗證,其可以是在 事務的未決期間或在事務的提交時按需的,TR 250的當前值與條目266中的記錄值進行比 較。如果值是不同的,則任一另一個擁有者已經鎖定TR 250和/或修改數(shù)據(jù)元素201,則導 致潛在的數(shù)據(jù)沖突。此外,寫障礙可執(zhí)行類似的簿記操作用于對數(shù)據(jù)元素201的寫,例如執(zhí) 行擁有權測試、獲取鎖、指示升級鎖的意圖、管理寫集合270,等等。
[0045] 之前,在事務的末端,嘗試了事務的提交。作為示例,驗證寫集合以便確保從事務 的未決期間讀取的存儲單元是有效的。換句話說,保持在讀條目266中的記錄的版本值與 保持在事務記錄250中的當前值進行比較。如果當前值與記錄版本相同,則沒有其它存取 已經更新數(shù)據(jù)元素201。因此,與條目266關聯(lián)的讀被確定為有效。如果所有存儲器存取被 確定為有效,則事務被提交和/或引退。
[0046] 然而,如果版本不同并且當前事務未讀取并且然后寫到數(shù)據(jù)元素,則另一個事務 獲取TR 250的鎖和/或修改數(shù)據(jù)元素201。結果,事務則可被異常中止。再一次,取決于 STM的實現(xiàn),由提交和異常中止功能執(zhí)行的操作可以是可互換的。例如,在寫緩沖STM中,事 務的未決期間的寫被緩沖,并且一旦提交,它們被復制到對應的存儲器存儲單元中。這里, 當事務異常中止時,寫緩沖器中的新值被丟棄。相反地,在更新合適的STM中,新的值被保 存在對應的存儲器存儲單元中,而舊的值被記錄在寫記錄中。這里,一旦異常中止,舊的值 被復制回到存儲器存儲單元中,并且在提交時,寫記錄中舊的值被丟棄。
[0047] 無論是在寫緩沖STM中或在更新合適STM中,當需要更新的存儲器存儲單元的退 回時,通常利用撤銷記錄,例如撤銷記錄290。作為示例,撤銷記錄290包括條目,例如條目 291以便追蹤在事務期間對存儲器的更新。為了說明,在更新合適的STM中,存儲器存儲單 元被直接更新。然而,一旦異常中止,則基于撤銷記錄290來丟棄更新。在一個實施例中, 撤銷記錄290能夠退回嵌套的事務。這里,撤銷記錄290潛在地退回嵌套的事務而不使更 高/外面級別的事務無效,例如退回到緊靠在嵌套事務的開始之前的檢查點。
[0048] 如上所述,事務包括通過本地處理元件以及潛在地通過其它處理元件的對數(shù)據(jù)項 的事務存儲器存取。在沒有事務存儲器系統(tǒng)中的安全機制的情況下,這些存取中的一些可 導致無效數(shù)據(jù)和執(zhí)行,即對使讀無效的數(shù)據(jù)的寫,或無效數(shù)據(jù)的讀。在純粹的STM系統(tǒng)中, 這些安全機制通過上述的軟件障礙的構造而存在。在HTM或混合HTM/STM中,硬件監(jiān)視器 連同協(xié)議(例如現(xiàn)有的高速緩存一致性協(xié)議)和/或軟件長在提供這樣的安全機制。
[0049] 雖然圖2主要示出STM環(huán)境,但是它還有助于論述STM的硬件加速。例如,在一個 實施例中,高速緩存行210-230與事務屬性關聯(lián)。這些屬性可以通過存儲器(S卩,貫穿存儲 器分層結構存在的高速緩存行215的一部分)是持久的或不持久的(S卩,本地在高速緩存行 205內并且一旦高速緩存行215驅逐的丟失)。此外,這些屬性可以是行215的一部分或者 與行215關聯(lián),例如數(shù)據(jù)數(shù)組205的狀態(tài)數(shù)組中的附加位?;蛘?,在一個實施例中,屬性包 括配置成由用于追蹤加速的軟件指令操作的位。例如,事務讀位和事務寫位被提供以便分 別在事務讀和寫時設置。這里,軟件可檢查事務讀位的狀態(tài)以確定當前事務是否已經讀了 高速緩存行215。并且如果位被設置(指示高速緩存行215已經被存取),則軟件取消讀障 礙操作,例如檢查事務記錄250、記錄讀集合265中的事務記錄值250,等等。這里,對事務 內相同存儲器地址的后續(xù)軟件事務存取使用硬件屬性來加速,軟件能夠對所述硬件屬性存 取、翻譯并且相應地起作用。
[0050] 回到圖1的討論,在一個實施例中,處理器100包括監(jiān)視器以便檢測或追蹤存取, 以及與數(shù)據(jù)項關聯(lián)的潛在的后續(xù)沖突。注意這些監(jiān)視器在一個實施例中是相同屬性的(或 者包括)STM的加速的上述屬性。在此情景中,監(jiān)視器可兼任硬件追蹤和軟件加速支持。例 如,處理器100的硬件包括讀監(jiān)視器以及寫監(jiān)視器來相應地追蹤加載和存儲,其被確定為 被監(jiān)視。硬件讀監(jiān)視器和寫監(jiān)視器可在數(shù)據(jù)向的粒度監(jiān)視數(shù)據(jù)項,盡管有基礎的存儲結構 的粒度?;蛘邆溥x地,它們在存儲結構粒度監(jiān)視。在一個實施例中,數(shù)據(jù)項由關聯(lián)的追蹤機 制在存儲結構的粒度限制以便確保至少整個數(shù)據(jù)項被適當監(jiān)視。
[0051] 作為特定的說明性示例,讀和寫監(jiān)視器包括與高速緩存存儲單元關聯(lián)的屬性,例 如更低級數(shù)據(jù)高速緩存150 (其可包括投機性的高速緩存)內的存儲單元,以便監(jiān)視從與那 些存儲單元關聯(lián)的地址的加載和到那些地址的存儲。這里,數(shù)據(jù)高速緩存的高速緩存存儲 單元的讀屬性在對與高速緩存存儲單元關聯(lián)的地址的寫事件時被設置成監(jiān)視對相同地址 的潛在的沖突寫。在這個情況下,寫屬性以類似方式操作用于寫事件來監(jiān)視對相同地址的 潛在的沖突讀和寫。為了進一步說明此示例,硬件能夠基于對高速緩存存儲單元的讀和寫 的監(jiān)聽來檢測沖突,其中讀和/或寫屬性設置成指示高速緩存存儲單元被監(jiān)視。相反,在一 個實施例中,設置讀和寫監(jiān)視器,或更新高速緩存存儲單元到緩沖的狀態(tài)導致監(jiān)聽,例如讀 請求或對擁有權請求的讀取,這允許其它高速緩存中監(jiān)視的地址的沖突被檢測。
[0052] 因此,基于所述設計,高速緩存分層結構請求的不同組合以及高速緩存行的監(jiān)視 的分層結構狀態(tài)導致潛在的沖突,例如保存處于共享讀監(jiān)視狀態(tài)的數(shù)據(jù)項的高速緩存行和 指示對數(shù)據(jù)項的寫請求的監(jiān)聽。相反,保存處于緩沖讀狀態(tài)的數(shù)據(jù)項的高速緩存行和指示 對數(shù)據(jù)項的讀請求的外部監(jiān)聽可考慮為潛在沖突。在一個實施例中,為了檢測接入請求和 屬性狀態(tài)的此類組合,監(jiān)聽邏輯被耦合到沖突檢測/報告邏輯,例如用于沖突檢測/報告的 監(jiān)視器和/或邏輯,以及報告沖突的狀態(tài)寄存器。
[0053] 然而,條件和情景的任何組合可以考慮為對于事務是無效的??煽紤]為事務的非 提交的因素的示例包括檢測對事務存取的存儲器存儲單元的沖突、丟失監(jiān)視信息、丟失緩 沖的數(shù)據(jù)、丟失與事務存取的數(shù)據(jù)項的元數(shù)據(jù),以及檢測其它的無效事件,例如中斷、環(huán)形 轉換或外顯的用戶指令。
[0054] 在一個實施例中,處理器100的硬件將持有以緩沖的形式的事務更新。如上所述, 將不使事務寫全局可見,直到事務提交為止。然而,與事務寫關聯(lián)的本地軟件線程能夠存取 后續(xù)事務存取的事務更新。作為第一示例,分離的緩沖器結構提供在處理器1〇〇中以便保 存緩沖的更新,其能夠提供狀態(tài)給本地線程并且不提供給其它外部線程。
[0055] 相比之下,作為另一示例,高速緩存存儲器,例如數(shù)據(jù)高速緩存150被用于緩沖更 新,且提供相同的事務功能性。這里,高速緩存150能夠保持數(shù)據(jù)項在緩沖的一致性狀態(tài) 中;在一種情況下,新緩沖的一致性狀態(tài)被添加到高速緩存一致性協(xié)議,例如修改的排他共 享無效(MESI)協(xié)議以便形成MESIB協(xié)議。響應于對緩沖的數(shù)據(jù)項的本地請求--數(shù)據(jù)項 被保持在緩沖的一致性狀態(tài)中,高速緩存150提供數(shù)據(jù)項給本地處理元件以確保內部事務 的順序排序。然而,響應于外部存取請求,提供丟失響應以便確保事務更新的數(shù)據(jù)項直到提 交才變得全局可見。此外,當高速緩存150的線被保持在緩沖的一致性狀態(tài)中并且被選擇 用于驅逐時,緩沖的更新未被寫回更高級的高速緩存存儲器一一緩沖的更新將不通過存儲 器系統(tǒng)擴散,即直到提交之后才變得全局可見。替代地,事務可異常中止或者驅逐的行可存 儲在數(shù)據(jù)高速緩存和更高級的高速緩存存儲器之間的投機性的結構中,例如受害(victim) 高速緩存。一旦提交,緩沖的行被轉換到修改狀態(tài)以便使數(shù)據(jù)項全局可見。
[0056] 注意到術語內部和外部通常關于與事務的執(zhí)行或共享高速緩存的處理元件關聯(lián) 的線程的觀點。例如,用于執(zhí)行與事務的執(zhí)行關聯(lián)的軟件線程的第一處理元件被稱為本地 線程。因此,在以上討論中,如果接收到對地址的存儲或來自地址的加載之前由第一線程寫 (其導致地址的高速緩存行被保持在緩沖的一致性狀態(tài)中),則高速緩存行的緩沖的版本被 提供給第一線程,因為它是本地線程。相比之下,第二線程可以執(zhí)行在相同處理器的另一個 處理元件上,但是不與負責保持在緩沖狀態(tài)中的高速緩存行的事務一一外部線程的執(zhí)行關 聯(lián);因此來自到所述地址的第二線程的加載或存儲丟失高速緩存行的緩沖版本,并且正常 的高速緩存替換被用于從更高級存儲器取回高速緩存行的未緩沖的版本。
[0057] 在一個實施例中,處理器100能夠執(zhí)行編譯器/優(yōu)化代碼177來編譯應用代碼176 以支持事務執(zhí)行,以及以便潛在地優(yōu)化應用代碼176。這里,編譯器可插入操作、調用、函數(shù) 和其它代碼來實現(xiàn)事務的執(zhí)行。
[0058] 編譯器通常包括程序或程序集合用于將源文本/代碼轉換成目標文本/代碼。通 常,利用編譯器的程序/應用代碼的編譯在多個階段中進行并且傳遞以便將高級編程語言 代碼變換成低級機器或匯編語言代碼。但是,單遍編譯器仍可用于簡單的編譯。編譯器可 利用任何已知的編譯技術并且執(zhí)行任何已知的編譯器操作,例如詞匯分析、預處理、解析、 語義分析、代碼生成、代碼變換以及代碼優(yōu)化。事務實質和動態(tài)代碼編譯的交叉潛在地導致 實現(xiàn)更有侵略性的優(yōu)化,同時保留必須的存儲器排序保護。
[0059] 更大的編譯器通常包括多個階段,但是更通常這些階段包括在兩個一般階段中: (1)前端,即一般地語法處理、語義處理和一些變換/優(yōu)化可發(fā)生的地方,以及(2)后端,即 一般地分析、變換、優(yōu)化和代碼生成發(fā)生的地方。一些編譯器涉及中間件,其圖示編譯器的 前端和后端之間的輪廓的模糊。結果,對插入、關聯(lián)、生成或編譯器的其它操作的引用可在 前述階段或遍的任何一個以及編譯器的任何其它已知階段或經過中發(fā)生。作為說明性示 例,編譯器潛在地將事務操作、調用、函數(shù)等插入編譯的一個或多個階段中,例如在編譯的 前端階段中插入調用/操作并且然后在事務存儲器變換階段期間將調用/操作變換成低級 代碼。注意到在動態(tài)編譯期間,編譯器代碼或動態(tài)優(yōu)化代碼可插入這樣的操作/調用,以及 優(yōu)化代碼用于在運行時間執(zhí)行。作為特定的說明性示例,二進制代碼(已經編譯的代碼)可 在運行時間動態(tài)優(yōu)化。這里,程序代碼可包括動態(tài)優(yōu)化代碼、二進制代碼或其組合。
[0060] 然而,盡管執(zhí)行環(huán)境以及編譯器的動態(tài)或靜態(tài)性質;在一個實施例中,編譯器編譯 程序代碼以便實現(xiàn)事務執(zhí)行和/或優(yōu)化程序代碼的部分。因此,在一個實施例中,對程序代 碼的執(zhí)行或STM環(huán)境的引用指的是:(1)編譯程序的執(zhí)行或優(yōu)化代碼優(yōu)化器動態(tài)或靜態(tài)地 編譯程序代碼以便維持事務結構來執(zhí)行其它事務相關操作,或者以便優(yōu)化代碼;(2)主程 序代碼的執(zhí)行包括事務操作/調用,例如已經優(yōu)化/編譯的應用代碼;(3)與主程序代碼關 聯(lián)的其它程序代碼(例如庫)的執(zhí)行,以便維持事務結構來執(zhí)行其它事務相關操作,或者以 便優(yōu)化代碼;或者(4)其組合。
[0061] 通常在軟件事務存儲器(STM)系統(tǒng)內,編譯器將用于插入一些操作、調用和與應用 代碼內聯(lián)的其它代碼用于編譯,而其它操作、調用、函數(shù)和代碼在庫內分別提供。這潛在地 提供了庫分配器優(yōu)化和更新庫的能力,而無需重新編譯應用代碼。作為特定示例,對提交 函數(shù)的調用可在事務的提交點內聯(lián)插入應用代碼內,同時提交功能單獨在可更新的庫中提 供。此外,選擇在哪里放置特定操作和調用潛在地影響應用代碼的效率。
[0062] 在一個實施例中,處理器100配置成支持線程的自適應調度以便最小化沖突。結 果,經驗主義的反饋可用于協(xié)助線程調度以便最小化線程之間的沖突。因此,如果線程具有 沖突的歷史,例如引起一個線程的事務太過頻繁地異常中止,則這些線程被自適應調度以 便最小化它們并行執(zhí)行的時間。但是,在一些實施例中,自適應調度的目標是減少或最小化 競爭線程之間的沖突。但是完全的互相隔離可能不是有利的。因此,減少沖突同時維持執(zhí) 行并行性之間的平衡潛在地在此設計中尋求。備選地,設計師可選擇使用自適應調度技術 來避免沖突。注意到自適應線程主要參考自適應調度包括事務的線程來討論。并且因此, 所討論的沖突是關于由于線程之間的沖突而異常中止的事務。然而,任何已知的線程之間 沖突可以被利用,例如高速緩存中的系統(tǒng)失效、共享資源的壟斷等等。結果,自適應線程調 度,例如使線程延遲調度,可以基于任何已知的線程之間沖突來執(zhí)行。
[0063] 作為說明性實施例,STM實現(xiàn)/環(huán)境做出線程之間的線程決定。例如,當?shù)谝痪€程 進行開始事務調用,TM系統(tǒng)確定沖突的第二線程是否已經在運行。并且如果第二線程是沖 突的而且當前正在運行,則第一線程被自適應調度以最小化第一線程和第二線程并行執(zhí)行 的時間。在一個實施例中,這樣的自適應調度通過延遲第一線程的調度來執(zhí)行,其有效地彌 補了沖突線程(第一和第二線程)的同時執(zhí)行。
[0064] 雖然線程的自適應調度可基于線程本身內異常中止的事務的有限的、自我視角而 不關于其它線程來執(zhí)行;這種方法有可能過于謹慎。作為本文將利用的說明性示例,假設線 程A、B、C、D分別在線程槽101a、101b、101c和101d上執(zhí)行。并且還假設線程A與線程D 頻繁沖突(線程A中大量的事務由于與線程D的數(shù)據(jù)沖突而異常中止)。在下一個嘗試調度 線程A時,例如開始線程A內的事務的調用,可執(zhí)行自適應線程調度。在恐外(xenophobic) 的角度(只關于來自線程A的視角的沖突,而不考慮A與哪些線程沖突),可以延遲線程A,因 為它遇到頻繁沖突。然而,如果線程D不再在處理器100上運行,則線程A遇到沖突的原因 已經被移除。結果,延遲調度線程A來避免沖突是浪費的,因為沖突的可能性已經通過線程 D不在處理器100上運行而得到減小。
[0065] 因此,在一個實施例中,線程的線程調度決定可以基于與其它線程的實際沖突歷 史來做出。繼續(xù)上面的示例,當線程A將被調度時,檢查或確定它與線程D的沖突率。在此 示例中,頻繁沖突(由于與線程D的數(shù)據(jù)沖突而產生的線程A中事務的異常中止)指示線程 A和D正發(fā)生沖突。結果,如果線程D當前正在運行,則線程A調度被延遲。然而,如果線 程D當前沒有在運行并且線程A不具有與正在運行的線程B和C的頻繁沖突,則線程A可 以正常調度。因此,在甚至當沖突線程不再運行時線程A被延遲的情景被潛在避免,這導致 更有效地調度。同時,當線程D已經在運行時線程A的延遲最小化線程A和D的重疊,這潛 在地最小化競爭線程之間數(shù)據(jù)沖突的可能性。
[0066] 線程之間的沖突,例如事務的異常中止,可以按任何方式來測量/確定。在一個實 施例中,沖突隨時間確定。這里,確定沖突比率。對于一段時間,其可以是預先確定量的時 間或兩個定義的事件之間的一段時間,執(zhí)行(或開始)的事務的總數(shù)連同異常中止的事務的 數(shù)量一起確定。執(zhí)行的事務的數(shù)量從感興趣的線程(即,在所述時間段內線程A中執(zhí)行的事 務的數(shù)量)的視角來確定。并且異常中止的事務的數(shù)量可以基于設計實現(xiàn)對于線程A來確 定,而不關于其它線程,或者對于線程關于一個或多個潛在競爭線程,例如線程B、C和D來 確定。然后,計算沖突比率(異常中止的事務的數(shù)量除以執(zhí)行的事務的總數(shù))。注意到在一 些實施例中,沖突比率( CR)可對于每個潛在競爭線程存在{即,對于線程A和線程B的CR 或CR(A,B);CR(A,C);和CR(A,D)}。
[0067] 上述的確定沖突比率的實施例不是可以確定線程之間的沖突率的唯一方法。在一 個實施例中,利用衰減沖突比率公式來確定沖突率。作為示例,沖突比率對每個時間段遞歸 地確定。并且那個沖突比率利用一個或多個時期的測量來在時間上求平均。例如,等式1 利用當前沖突比率和先前沖突比率來確定平均的或加權的沖突比率。
【權利要求】
1. 一種設備,包括: 沖突模塊,適于確定第一線程與第二線程的沖突率太高;以及 線程調度模塊,適于: 確定在調度所述第一線程之前所述第二線程是否正在運行,并且響應于所述沖突模塊 確定所述第一線程與所述第二線程的所述沖突率太高以及所述線程調度模塊確定所述第 二線程正在運行而延遲所述第一線程的調度。
2. 如權利要求1所述的設備,其中所述第一線程與所述第二線程的所述沖突率包括在 時間量上由于與所述第二線程的沖突的所述第一線程中異常中止的事務的數(shù)量除以在所 述時間量上所述第一線程中執(zhí)行的事務的總數(shù)的沖突比率。
3. 如權利要求2所述的設備,其中所述時間量包括選自包括預先確定的時間量、同步 事件之間的時間量、異步事件之間的時間量以及預先確定的事件之間的時間量的組的時間 段。
4. 如權利要求2所述的設備,其中所述沖突模塊包括軟件計數(shù)器和保存沖突處理機代 碼的存儲介質,所述沖突處理機代碼在執(zhí)行時引起所述軟件計數(shù)器追蹤在所述時間量上由 于與所述第二線程的沖突的所述第一線程中異常中止的事務的數(shù)量。
5. 如權利要求2所述的設備,其中先前沖突比率包括在先前的時間量期間由于與所述 第二線程的沖突的所述第一線程中異常中止的事務的先前數(shù)量除以在所述先前的時間量 期間所述第一線程中的事務的先前數(shù)量,并且其中所述沖突率還包括:P*沖突比率+(1_P) *先前沖突比率,其中P是大于或等于〇并且小于或等于1的常數(shù)。
6. 如權利要求5所述的設備,其中P基于所述第一線程的調度被延遲的次數(shù)在運行時 間期間動態(tài)可調。
7. 如權利要求2所述的設備,其中沖突模塊適于確定第一線程與第二線程的沖突率太 高包括所述沖突模塊適于確定所述沖突比率大于沖突比率閾值。
8. 如權利要求7所述的設備,其中所述沖突比率閾值在運行時間期間動態(tài)可調。
9. 如權利要求1所述的設備,其中所述線程調度模塊適于響應于所述沖突模塊確定所 述第一線程與所述第二線程的所述沖突率太高以及所述線程調度模塊確定所述第二線程 正在運行而延遲所述第一線程的調度包括:所述線程調度模塊包括保存事務存儲器庫的存 儲介質,所述事務存儲器庫在執(zhí)行時響應于確定所述第一線程與所述第二線程的所述沖突 率太高以及所述線程調度模塊確定所述第二線程正在運行而將對應用接口的調用延遲到 特權的控制軟件。
10. 如權利要求1所述的設備,其中所述線程調度模塊適于響應于所述沖突模塊確定 所述第一線程與所述第二線程的所述沖突率太高以及所述線程調度模塊確定所述第二線 程正在運行而延遲所述第一線程的調度包括:硬件調度器配置成響應于所述沖突模塊確定 所述第一線程與所述第二線程的所述沖突率太高以及所述線程調度模塊確定所述第二線 程正在運行而延遲來自所述第一線程的指令的調度。
11. 如權利要求1所述的設備,其中所述線程調度模塊適于響應于所述沖突模塊確定 所述第一線程與所述第二線程的所述沖突率太高以及所述線程調度模塊確定所述第二線 程正在運行而延遲所述第一線程的調度包括:上下文切換邏輯配置成響應于所述沖突模塊 確定所述第一線程與所述第二線程的所述沖突率太高以及所述線程調度模塊確定所述第 二線程正在運行而延遲將所述第一線程切換到物理線程單元。
12. 如權利要求1所述的設備,其中所述沖突模塊適于確定第一線程與第二線程的沖 突率太高包括:硬件計數(shù)器配置成追蹤在所述時間量上由于與所述第二線程的沖突的所述 第一線程中異常中止的事務的所述數(shù)量以及在所述時間量上所述第一線程中執(zhí)行的事務 的所述總數(shù),并且存儲介質包括事務運行時間代碼,所述事務運行時間代碼在執(zhí)行時引起 執(zhí)行邏輯根據(jù)異常中止的事務的數(shù)量和事務的總數(shù)來確定所述沖突比率,并且其中所述線 程調度模塊包括所述存儲介質,所述存儲介質包括所述事務運行時間代碼,所述事務運行 時間代碼在執(zhí)行時響應于確定所述第一線程與所述第二線程的所述沖突率太高以及所述 線程調度模塊確定所述第二線程正在運行而將對應用接口的調用延遲到特權的控制軟件。
13. -種設備,包括: 沖突邏輯,配置成確定在時間量上第一線程與第二線程的沖突度量;以及 調度器模塊,配置成當所述第二線程當前正在執(zhí)行并且所述沖突度量大于沖突閾值時 響應于調度所述第一線程的請求而延遲調度所述第一線程用于執(zhí)行。
14. 如權利要求13所述的設備,其中所述沖突邏輯配置成確定在時間量上第一線程與 第二線程的沖突度量包括:所述沖突邏輯配置成確定在所述時間量上第一線程與所述第二 線程的事務沖突比率,其中所述沖突比率包括基于與所述第二線程的沖突的異常中止的所 述第一線程中的事務的數(shù)量除以在所述時間量上所述第一線程中執(zhí)行的事務的總數(shù)。
15. 如權利要求14所述的設備,其中所述沖突邏輯包括第一硬件計數(shù)器,所述第一硬 件計數(shù)器配置成響應于所述第一線程中異常中止的若干事務的所述第一線程中事務的異 常中止而遞增,以及第二硬件計數(shù)器,所述第二硬件計數(shù)器配置成響應于遇到所述第一線 程中執(zhí)行的總數(shù)的事務的所述第一線程中的事務而遞增。
16. 如權利要求13所述的設備,其中所述調度器邏輯配置成當所述第二線程當前正在 執(zhí)行并且所述沖突度量大于沖突閾值時響應于調度所述第一線程的請求而延遲調度所述 第一線程用于執(zhí)行包括:硬件調度器響應于開始事務指令可用于調度并且所述第二線程當 前活動用于執(zhí)行而延遲調度來自所述第一線程的所述開始事務指令。
17. 如權利要求13所述的設備,其中所述沖突閾值響應于所述調度器邏輯將用于執(zhí)行 的所述第一線程的調度在延遲時間幀上延遲超過延遲閾值而動態(tài)增加。
18. -種非暫時性機器可讀介質,其包括代碼,所述代碼在由機器執(zhí)行時引起所述機器 執(zhí)行以下操作: 確定由于與第二線程的沖突在時間段上異常中止的第一線程中的事務的第一數(shù)量;以 及 在所述第二線程當前正在運行時,基于在時間段上異常中止的所述第一線程中的事務 的所述第一數(shù)量,響應于所述第一線程內的事務的開始,用控制軟件調度器來延遲所述第 一線程的調度。
19. 如權利要求18所述的機器可讀介質,其中確定由于與第二線程的沖突在時間段上 異常中止的第一線程中的事務的第一數(shù)量包括:響應于所述第一事務的異常中止,遞增第 一線程相對于所述第二線程的異常中止計數(shù),所述第一事務的所述異常中止響應于所述第 一線程的事務與由所述第二線程的存取之間的沖突。
20. 如權利要求18所述的機器可讀介質,其中在所述第二線程當前正在運行,基于在 所述時間段上異常中止的所述第一線程中的事務的所述第一數(shù)量,響應于所述第一線程內 的事務的開始,用控制軟件調度器來延遲所述第一線程的調度包括:在所述第二線程當前 正在運行時,基于在所述時間段上異常中止的所述第一線程中的事務的所述第一數(shù)量,響 應于所述第一線程內的所述事務的所述開始,延遲對所述控制軟件的應用接口的調用。
21. 如權利要求20所述的機器可讀介質,其中在所述第二線程當前正在運行,基于在 所述時間段上異常中止的所述第一線程中的事務的所述第一數(shù)量,響應于所述第一線程內 的事務的開始,用控制軟件調度器來延遲所述第一線程的調度還包括:在所述第二線程當 前正在運行并且在所述時間段上異常中止的所述第一線程中的事務的所述第一數(shù)量大于 所述時間段上的異常中止閾值時,響應于所述第一線程內的所述事務的所述開始,延遲對 所述控制軟件的所述應用接口的所述調用。
22. 如權利要求20所述的機器可讀介質,其中在所述第二線程當前正在運行,基于在 所述時間段上異常中止的所述第一線程中的事務的所述第一數(shù)量,響應于所述第一線程內 的事務的開始,用控制軟件調度器來延遲所述第一線程的調度還包括:在所述第二線程當 前正在運行并且在所述時間段上異常中止的所述第一線程中的事務的所述第一數(shù)量除以 來自所述時間段上執(zhí)行的所述第一線程的事務的總數(shù)大于沖突比率閾值時,響應于所述第 一線程內的所述事務的所述開始,延遲對所述控制軟件的所述應用接口的所述調用。
23. -種方法,包括: 確定在時間段上執(zhí)行的第一線程中的事務的第一數(shù)量; 確定響應于與第二線程的沖突而異常中止的在所述時間段上執(zhí)行的事務的第一數(shù)量 的事務的第二數(shù)量; 基于事務的第一數(shù)量和事務的第二數(shù)量來確定沖突比率;以及 響應于所述第二線程當前正在運行并且所述沖突比率超過沖突閾值而延遲所述第一 線程的調度。
24. 如權利要求23所述的方法,其中確定在時間段上執(zhí)行的第一線程中的事務的第一 數(shù)量以及確定響應于與第二線程的沖突而異常中止的在所述時間段上執(zhí)行的事務的所述 第一數(shù)量的事務的第二數(shù)量響應于軟件事務存儲器(STM)運行時間代碼而執(zhí)行。
25. 如權利要求23所述的方法,其中確定在時間段上執(zhí)行的第一線程中的事務的第一 數(shù)量以及確定響應于與第二線程的沖突而異常中止的在所述時間段上執(zhí)行的事務的所述 第一數(shù)量的事務的第二數(shù)量在硬件中執(zhí)行。
26. 如權利要求23所述的方法,其中基于事務的所述第一數(shù)量和事務的所述第二數(shù)量 來確定沖突比率包括從包括M/N的公式確定所述沖突比率,其中N包括事務的所述第一數(shù) 量并且M包括事務的所述第二數(shù)量。
27. 如權利要求23所述的方法,其中基于事務的所述第一數(shù)量和事務的所述第二數(shù)量 來確定沖突比率包括從包括P * M/N + (1-p) * X/Y的公式確定所述沖突比率,其中N包 括事務的所述第一數(shù)量,M包括事務的所述第二數(shù)量,Y包括在先前的時間段上執(zhí)行的所述 第一線程中事務的第三數(shù)量,X包括在所述先前的時間段期間異常中止的所述第一線程中 事務的第四數(shù)量,并且P包括大于或等于〇并且小于或等于1的常數(shù)。
28. 如權利要求23所述的方法,其中響應于所述第二線程當前正在運行并且所述沖突 比率超過沖突閾值而延遲調度所述第一線程包括響應于所述第二線程當前正在運行并且 所述沖突比率超過沖突閾值而延遲返回所述第一線程。
29.如權利要求23所述的方法,其中響應于所述第二線程當前正在運行并且所述沖突 比率超過沖突閾值而延遲調度所述第一線程包括:響應于所述第二線程當前正在運行并且 所述沖突比率超過沖突閾值而延遲對于所述第一線程的應用接口調用。
【文檔編號】G06F9/46GK104487946SQ201280061721
【公開日】2015年4月1日 申請日期:2012年10月8日 優(yōu)先權日:2011年10月14日
【發(fā)明者】T. 路易斯 B., 薩哈 B. 申請人:英特爾公司