專利名稱:用于軟件事務(wù)處理存儲器系統(tǒng)的硬件加速的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及處理器執(zhí)行領(lǐng)域,具體而言,涉及事務(wù)處理的執(zhí)行
(transactional execution)的力卩速。
背景技術(shù):
在半導(dǎo)體加工工藝和邏輯設(shè)計(jì)中的進(jìn)展已經(jīng)實(shí)現(xiàn)了在集成電路器件上 可以存在的邏輯的數(shù)量的增加。作為結(jié)果,計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)已經(jīng)從系統(tǒng)中 的單個或多個集成電路發(fā)展為存在于單個集成電路上的多個內(nèi)核及多個邏 輯處理器。集成電路通常包括單個處理器管芯,其中,該處理器管芯可以 包括任何數(shù)量的內(nèi)核或邏輯處理器。
作為實(shí)例,單個集成電路可以具有一個或多個內(nèi)核。術(shù)語"內(nèi)核"通 常指的是在集成電路上用以保持獨(dú)立架構(gòu)狀態(tài)的邏輯的能力,在此,每一 個獨(dú)立架構(gòu)狀態(tài)都與至少一些專用執(zhí)行資源相關(guān)聯(lián)。作為另一個實(shí)例,單 個集成電路或單個內(nèi)核可以具有多個邏輯處理器,用于執(zhí)行多個軟件線程, 其也稱為多線程集成電路或多線程內(nèi)核。多個邏輯處理器常常共享公共的 數(shù)據(jù)高速緩存、指令高速緩存、執(zhí)行單元、分支預(yù)測器、控制邏輯、總線 接口及其它處理器資源,同時(shí)為每一個邏輯處理器保留唯一性的架構(gòu)狀態(tài)。
在集成電路上的不斷增加的內(nèi)核和邏輯處理器數(shù)量使得能夠執(zhí)行更多 軟件線程。然而,在可同時(shí)執(zhí)行的軟件線程數(shù)量的增加也產(chǎn)生了使在多個 軟件線程之間共享的數(shù)據(jù)同步的問題。在多內(nèi)核或多邏輯處理器系統(tǒng)中用 于訪問共享數(shù)據(jù)的常見解決方法包括使用鎖定(lock)來確保在對共享數(shù)據(jù)的 多次訪問之間的互斥。然而,不斷提高的執(zhí)行多個軟件線程的能力有可能 會導(dǎo)致對執(zhí)行的錯誤爭用和錯誤串行化。
另一種解決方法是使用事務(wù)處理執(zhí)行來訪問共享存儲器,以執(zhí)行指令 以及對數(shù)據(jù)進(jìn)行操作。通常,事務(wù)處理的執(zhí)行包括推測性地執(zhí)行由多個微 操作、操作或指令構(gòu)成的分組。在由處理器、內(nèi)核或線程進(jìn)行事務(wù)處理的推測性執(zhí)行期間,追蹤被讀出和寫入的存儲單元,以査明是否有另一個處 理器、內(nèi)核或線程訪問這些單元。如果另一個線程無效性地改變了這些單 元,就重新開始該事務(wù)處理,并從開頭再次執(zhí)行它。事務(wù)處理的執(zhí)行潛在 地避免了與常規(guī)鎖定機(jī)制有關(guān)的死鎖,提供了錯誤恢復(fù),并有可能得到精 細(xì)粒度的同步。
以前,事務(wù)處理的執(zhí)行或者是完全以硬件實(shí)現(xiàn),或者是在軟件中實(shí)現(xiàn), 其中,在硬件實(shí)現(xiàn)的情況下需要復(fù)雜且昂貴的邏輯電路,但相對快速,在 軟件實(shí)現(xiàn)的情況下較便宜且更具魯棒性,但在特定情況下招致了相當(dāng)大的 性能開銷。例如,軟件事務(wù)處理存儲器能夠有效地執(zhí)行嵌套事務(wù)處理,但 由于在事務(wù)處理中存儲器訪問的手段,致使浪費(fèi)了相當(dāng)大量的執(zhí)行時(shí)間和 執(zhí)行資源。這個手段用來確保不同的事務(wù)處理訪問不相連的存儲單元。例 如,當(dāng)單線程運(yùn)行時(shí),在特定情況下,與常規(guī)基于鎖定的實(shí)現(xiàn)相比,軟件
事務(wù)處理存儲器產(chǎn)生了 2-3倍的性能開銷。在軟件實(shí)現(xiàn)的系統(tǒng)中,發(fā)現(xiàn)通常 最大的開銷是追蹤對于單元的負(fù)載訪問以及在提交事務(wù)處理之前對所訪問 單元的有效確認(rèn)。
與此相對照,在純硬件的事務(wù)處理存儲器系統(tǒng)中,可以更快地執(zhí)行事 務(wù)處理,因?yàn)闊o需軟件追蹤每一個訪問;然而,犧牲了事務(wù)處理的規(guī)模以 及功能,因?yàn)樾枰嘿F且復(fù)雜的電路/邏輯電路。 一些近來的研究建議關(guān)注 于混合式事務(wù)處理執(zhí)行形式,其中,首先以硬件執(zhí)行事務(wù)處理,并且如果 失敗,就以軟件來執(zhí)行。然而,在實(shí)現(xiàn)這些優(yōu)點(diǎn)之前,通過軟件實(shí)現(xiàn)的一 些性能特征仍會招致與首先以硬件執(zhí)行事務(wù)處理有關(guān)的開銷。
借助于實(shí)例來說明本發(fā)明,但并非意圖受到附圖中示意圖的限制。 圖1示出了用于提供加速的事務(wù)處理執(zhí)行的處理器的實(shí)施例。 圖2示出了用于提供加速的事務(wù)處理執(zhí)行的處理器的另一個實(shí)施例。 圖3示出了包括多資源微處理器的底層系統(tǒng)以及用于加速事務(wù)處理執(zhí) 行的偽代碼高層提取的實(shí)施例。
圖4示出了用于加速事務(wù)處理執(zhí)行的方法的實(shí)施例。
圖5示出了用于加速事務(wù)處理執(zhí)行的方法的另一個實(shí)施例。
具體實(shí)施例方式
在以下的說明中,闡明了許多具體細(xì)節(jié),例如對事務(wù)處理執(zhí)行的具體 硬件支持的實(shí)例、處理器中周部存儲器的具體類型,以及存儲器訪問和單 元的具體類型等,以便提供對本發(fā)明的全面的理解。然而,對于本領(lǐng)域技 術(shù)人員顯而易見的是,無需使用這些具體細(xì)節(jié)來實(shí)施本發(fā)明。在其它實(shí)例 中,沒有詳細(xì)說明公知的部件或方法,例如軟件中的事務(wù)處理的代碼、事
務(wù)處理的劃分(demarcation)、多內(nèi)核和多線程處理器的架構(gòu)、以及微處理器 的具體操作細(xì)節(jié),以避免不必要的模糊對本發(fā)明的理解。
在此所述的方法和裝置是用于加速處理器中事務(wù)處理的執(zhí)行。然而, 用于加速處理器中事務(wù)處理執(zhí)行的方法和裝置并不限制于此,因?yàn)樗鼈兛?以在任何集成電路器件或系統(tǒng)上實(shí)現(xiàn)或者與其相關(guān)聯(lián)地來實(shí)現(xiàn),例如移動 電話、個人數(shù)字助理、嵌入式控制器、移動平臺、桌面型平臺以及服務(wù)器 平臺。 處理器
參考圖l,示出了處理元件100的一個實(shí)施例,其能夠進(jìn)行事務(wù)處理的 執(zhí)行。處理元件100可以是用于執(zhí)行指令或?qū)?shù)據(jù)進(jìn)行操作的任何元件。 處理元件100的實(shí)例包括處理器、微處理器、多資源主機(jī)處理器、微處 理器、處理內(nèi)核、邏輯處理器,嵌入式處理器、多線程處理器、以及多內(nèi) 核處理器。
在以下的多個實(shí)例之一中,涉及了一種多資源處理器。"資源"常常被 稱為處理器內(nèi)核、邏輯處理器、或線程處理器。因此,多資源處理器包括 具有多個內(nèi)核、邏輯處理器、線程或其任何組合的處理器。在此所使用的 "內(nèi)核"指的是在集成電路上能夠保持獨(dú)立架構(gòu)狀態(tài)的任何邏輯,其中, 每一個獨(dú)立保持的架構(gòu)狀態(tài)都與至少一些專用執(zhí)行資源相關(guān)聯(lián)。與此相對 照,邏輯處理器通常指的是在集成電路上能夠保持獨(dú)立架構(gòu)狀態(tài)的任何邏 輯電路,其中,獨(dú)立保持的架構(gòu)狀態(tài)共享對執(zhí)行資源的訪問。內(nèi)核和邏輯 處理器常常能夠執(zhí)行線程。因此,多資源處理器還可以指代能夠執(zhí)行多個 線程的任何處理器。
處理器100可以包括內(nèi)核或線程的任何組合,例如多內(nèi)核處理器,在多內(nèi)核處理器中,每一個內(nèi)核都支持多個軟件線程的執(zhí)行。注意,處理器
100能夠在系統(tǒng)內(nèi)單獨(dú)執(zhí)行,或者可以在多物理處理器的系統(tǒng)中與其它處理
元件相結(jié)合。在一個實(shí)施例中,為了支持事務(wù)處理的推測性執(zhí)行,處理器
IOO能夠進(jìn)行推測性執(zhí)行。處理器100的其它可能的執(zhí)行能力包括順序執(zhí)
行、亂序執(zhí)行、串行執(zhí)行、并行執(zhí)行、定點(diǎn)執(zhí)行、浮點(diǎn)執(zhí)行、或其它公知 的執(zhí)行類型。以下參考執(zhí)行資源部分來論述執(zhí)行邏輯和資源的特定實(shí)例。 共享存儲器/高速緩存
在圖1中還示出了耦合到執(zhí)行資源105上的存儲器110。存儲器110包 括要由執(zhí)行資源105訪問的任何存儲元件或器件,其中,所述資源105例 如為內(nèi)核、邏輯處理器或線程。在一個實(shí)施例中,存儲器110是由至少兩 個處理資源共享的共享存儲器,其中,所述處理資源例如為內(nèi)核、線程、 邏輯處理器或遠(yuǎn)程代理。存儲器125的實(shí)例包括高速緩存、多個寄存器、 寄存器堆(register file)、靜態(tài)隨機(jī)存取存儲器(SRAM)、多個鎖存器、或其它 存儲元件。注意,當(dāng)對存儲器110內(nèi)的存儲單元進(jìn)行讀出或?qū)懭霑r(shí),處理 器100或處理器100上的任何處理資源可以對系統(tǒng)存儲單元、虛擬存儲器 地址、物理地址或者或其它地址進(jìn)行尋址。將參考以下的各個示范性實(shí)施 例來更詳細(xì)地論述存儲器110。
作為一個具體的說明性實(shí)例,假設(shè)存儲器110是高速緩沖存儲器,例
如追蹤高速緩存、 一級高速緩存、二級高速緩存、或更高級的高速緩存。 高速緩存110包括多個高速緩存行111、 112和113,其也可以稱為存儲器 110內(nèi)的存儲單元??梢砸匀魏畏绞浇M織高速緩存110和行111 — 112,例如 全關(guān)聯(lián)高速緩存、組關(guān)聯(lián)高速緩存(set-associative cache)、直接映射高速緩 存、或其它已知的高速緩存結(jié)構(gòu)。
作為另一實(shí)例,假設(shè)存儲器110是多個寄存器,其被處理元件或處理 資源用作執(zhí)行空間,或者用以存儲變量、指令或數(shù)據(jù)的便箋式存儲器。在 該實(shí)例中,寄存器組110中的存儲單元111 — 112是寄存器111、 112和113。
在一個實(shí)施例中,存儲器110中的行、單元或字111 — 112能夠存儲一 個元素。"元素"指的是通常存儲在存儲器中的任何指令、操作數(shù)、數(shù)據(jù)操 作數(shù)、變量或其他邏輯值分組。在可選實(shí)施例中,存儲器行111一112中每 個行都能夠存儲多個元素。作為實(shí)例,高速緩存行111存儲了 4個元素,包括一條指令和兩個操作數(shù)。存儲在高速緩存行111中的元素可以處于打
包狀態(tài)或壓縮狀態(tài),以及未壓縮狀態(tài)。以下參考圖2來更詳細(xì)地論述每個
共享存儲器行的多個元素。
邏輯值
如上述的,存儲器110以及處理器100中的其它特征和器件存儲邏輯 值并對其進(jìn)行操作。通常,邏輯電平和邏輯值的使用也可以稱為1或0,其 簡單地代表二進(jìn)制邏輯狀態(tài)。例如,l指的是高邏輯電平,O指的是低邏輯 電平。已經(jīng)使用了在計(jì)算機(jī)系統(tǒng)中的其它數(shù)值表示,例如邏輯值或二進(jìn)制 值的十進(jìn)制和十六進(jìn)制表示。例如,對于十進(jìn)制數(shù)10,其在二進(jìn)制值中表 示為IOIO,在十六進(jìn)制中表示為字母A。
在許多較舊的系統(tǒng)中,以例如5V的電壓表示高電壓電平,以例如OV 表示低電壓電平。作為另一個具體實(shí)例,高邏輯電平是1.2V,低邏輯電平 是.3V。然而,高邏輯/電壓電平可以指代高于某個閾值的任何電壓電平,相 反的,低邏輯電平可以指代低于該閾值的任何電壓電平。另外,在單元、 晶體管或波形中會存在兩個以上的邏輯電平。作為實(shí)例,單個波形可以表 示在不同電壓電平上的4個不同邏輯值。 執(zhí)行模塊/資源
圖1還示出了要執(zhí)行事務(wù)處理的執(zhí)行資源105。執(zhí)行資源105也可以指 代支持事務(wù)處理執(zhí)行的硬件、邏輯或模塊。作為實(shí)例,執(zhí)行資源105用于 執(zhí)行第一事務(wù)處理和嵌套在該第一事務(wù)處理中的第二事務(wù)處理。當(dāng)在軟件 或硬件中內(nèi)部事務(wù)處理的"開始"事務(wù)處理劃分在外部事務(wù)處理的事務(wù)處 理劃分之內(nèi)時(shí), 一個事務(wù)處理就被嵌套在另一個事務(wù)處理內(nèi)。
在處理器100中還可以包括但并非必須包括在圖1中未示出的其它常 用模塊、邏輯和功能單元,例如以下的任何一種或者其任何組合數(shù)據(jù)通 路、指令通路、虛擬存儲器地址轉(zhuǎn)換單元(轉(zhuǎn)換緩沖器)、算數(shù)邏輯單元(ALU)、 能夠執(zhí)行單個指令或多個指令的浮點(diǎn)計(jì)算單元以及能夠以串行或并行方式 對單個或多個數(shù)據(jù)操作數(shù)進(jìn)行操作的浮點(diǎn)計(jì)算單元、寄存器、中斷控制器、 高級可編程中斷控制器(APIC)、預(yù)讀取單元、讀取單元、解碼單元、高速 緩存、指令引退(instructionretirement)單元、指令重排序單元、以及用于對 指令和/或數(shù)據(jù)進(jìn)行讀取、執(zhí)行或操作的任何其它邏輯。事務(wù)處理
事務(wù)處理的執(zhí)行常常包括將多個指令或操作分組到事務(wù)處理、代碼的 基本部分、或代碼的關(guān)鍵部分中。在一些情況下,字指令的使用指的是由 多個微操作組成的宏指令。通常有兩種方式來識別事務(wù)處理。第一實(shí)例包 括在軟件中對事務(wù)處理進(jìn)行劃分。在此,將某種軟件劃分包括代碼中以便 在執(zhí)行期間進(jìn)行識別。在可以與前述軟件劃分一起實(shí)施的另一個實(shí)施例中, 以硬件來對事務(wù)處理進(jìn)行分組,或者以表示事務(wù)處理開始和事務(wù)處理結(jié)束 的指令來辨認(rèn)事務(wù)處理。
在處理器中,可以推測性地或非推測性地執(zhí)行事務(wù)處理。在第二種情 況下,采用對于要訪問的共享存儲單元的某種鎖定形式或有保證的有效訪 問形式來執(zhí)行指令組。在可選方案中,事務(wù)處理的推測性執(zhí)行更常用,在 此,推測性地執(zhí)行事務(wù)處理,并在事務(wù)處理結(jié)束時(shí)提交事務(wù)處理。在此所 用的事務(wù)處理的未決狀態(tài)指的是己經(jīng)開始執(zhí)行但還沒有提交的事務(wù)處理, 即未決的。例如,如果對外部事務(wù)處理執(zhí)行"開始"事務(wù)處理指令,隨后 對所嵌套的內(nèi)部事務(wù)處理執(zhí)行另一個"開始"事務(wù)處理指令,則直到執(zhí)行 了相關(guān)的"結(jié)束"事務(wù)處理指令且提交了該事務(wù)處理為止,該內(nèi)部嵌套的 事務(wù)處理都是未決的。因此,在外部事務(wù)處理的未決狀態(tài)期間執(zhí)行在外部 事務(wù)處理級別上的任何訪問,直到外部事務(wù)處理被提交或中止為止,外部 事務(wù)處理都是未決的。
以前,事務(wù)處理的執(zhí)行包括兩個基本步驟(l)檢查與存儲器訪問相關(guān) 聯(lián)的鎖定狀態(tài);以及(2)在提交事務(wù)處理之前對所訪問的存儲單元進(jìn)行有效 確認(rèn)。實(shí)際上,在純軟件事務(wù)處理執(zhí)行環(huán)境中,軟件事務(wù)處理存儲器(STM) 保存了鎖定陣列,通過一些關(guān)聯(lián)性,例如散列函數(shù),來將每一個存儲單元 映射到該鎖定陣列上。通常,在事務(wù)處理中進(jìn)行訪問時(shí),STM檢查鎖定, 記憶與要訪問的單元以及該鎖定相關(guān)聯(lián)的值,并且在提交該事務(wù)處理之前, 確認(rèn)該鎖定是否在執(zhí)行期間已經(jīng)由另一事務(wù)處理獲得。可以在Proceedings of Principles and Practice of Parallel Programming (PPoPP) 2006上的Bratin Saha, Ali-Reza Adl-Tabatabai, Richard L. Hudson, Chi Cao Mihh禾口 Ben Hertzberg的"McRT-STM: AHigh Performance Software Transactional Memory System for a Multi-core Runtime"中找到與純軟件實(shí)現(xiàn)的STM有關(guān)的更多信息。
加速模塊
仍參考圖l,顯示了耦合到存儲器110的加速模塊120。然而,可以以 硬件、軟件、固件或其任何組合來實(shí)現(xiàn)模塊。而且,模塊的邊界通常是變 化的,可以共同實(shí)現(xiàn)功能,也可以在不同實(shí)施例中分別實(shí)現(xiàn)功能。作為下 面將更詳細(xì)論述的一個實(shí)例,加速模塊120基于與在事務(wù)處理中要訪問的 存儲器110中的行相關(guān)聯(lián)的事務(wù)處理位,將事務(wù)處理中的執(zhí)行重新引向鎖 定模塊115中基于軟件的屏障(barrier),例如與存儲器110中的行相關(guān)聯(lián)的 鎖定。另外,加速模塊120可以包括邏輯,其用于如果在提交之前在事 務(wù)處理期間所訪問的存儲器110中的行被驅(qū)逐(evict),就產(chǎn)生中斷;并且在 執(zhí)行資源105上執(zhí)行的處理機(jī)(handler),以處理該中斷以及中止事務(wù)處理。
在另一個實(shí)例中,加速模塊120包括邏輯,用于基于與存儲器行IIO 相關(guān)聯(lián)的事務(wù)處理位來設(shè)置狀態(tài),例如進(jìn)位標(biāo)志;軟件應(yīng)用程序,用于檢 查進(jìn)位標(biāo)志,并決定是否調(diào)用屏障;以及計(jì)數(shù)器,用于保存在事務(wù)處理中 被訪問和被驅(qū)逐的行的數(shù)量的計(jì)數(shù)值。
依據(jù)這些實(shí)例,很明顯的是,加速模塊120可以包括硬件,例如事 務(wù)處理位、軟件,例如保存在存儲器中的鎖定陣列、或固件,并且在邊界 之間發(fā)生變化,例如包括鎖定模塊U5、存在于存儲器110中的事務(wù)處理 位、在處理器100中用來產(chǎn)生驅(qū)逐中斷或者設(shè)置進(jìn)位標(biāo)志的邏輯、計(jì)數(shù)器, 用以追蹤在事務(wù)處理中訪問的存儲器行的數(shù)量、以及在執(zhí)行資源105上執(zhí) 行的處理機(jī)。
在一個實(shí)施例中,加速模塊120用于確定對共享行的訪問是否是在事 務(wù)處理期間對該共享行的第一次訪問??梢越柚谟靡宰粉檶Υ鎯ζ餍械?訪問的任何方法,來判斷對一個行(例如存儲器110中的行112)的訪問是否 是在事務(wù)處理執(zhí)行期間對該行112的第一次訪問。 事務(wù)處理字段/位
在一個實(shí)施例中,存儲器110的每個行都與事務(wù)處理字段相關(guān)聯(lián)。轉(zhuǎn) 向圖2,將事務(wù)處理字段220示為加速模塊225的一部分。事務(wù)處理字段 220與存儲器210中的共享存儲器行211相關(guān)聯(lián),并用來表示在事務(wù)處理執(zhí) 行期間存儲器行211是否先前被訪問過,或者是第一次被訪問??梢砸杂布④浖蚬碳韺?shí)現(xiàn)事務(wù)處理字段220。在一個實(shí)施例中, 事務(wù)處理字段220包括在共享存儲器行211中的一個位或多個位。在圖2 所示的實(shí)例中,事務(wù)處理字段220是高速緩存210的高速緩存行中的4個 最高有效位。然而,事務(wù)處理字段不限于此,因?yàn)槠淇梢栽诩拇嫫?、局?存儲器、或者處理器200上的其它存儲器件中實(shí)現(xiàn),并通過位221到行211 的映射來與高速緩存行211相關(guān)聯(lián)。
假定共享存儲器210是高速緩存,每一個高速緩存行,例如行211,都 能夠存儲多個元素。在所示實(shí)例中,高速緩存211能夠存儲元素211a、211b、 211c和211d。如上所述的元素可以包括任何指令、操作數(shù)、邏輯值分組、 或者其任何組合。作為一個具體實(shí)例,高速緩存行211包括存儲在211a中 的指令,該指令用于計(jì)算存儲在211b和211c中的兩個數(shù)據(jù)操作數(shù)的和,并 且將結(jié)果存儲在211d中。
在此,事務(wù)處理字段220包括4個事務(wù)處理位,其顯示為多個事務(wù)處 理位221。其中每一個事務(wù)處理位221都對應(yīng)于行211中的一個元素,如所 示的從事務(wù)處理位221到元素211a-211b的虛線。作為結(jié)果,能夠確定在事 務(wù)處理期間對行211中單個元素的訪問是第一次訪問,還是以前己經(jīng)訪問 過。然而,在訪問字段220中的位或值的任何結(jié)構(gòu)或數(shù)量都可以表示對行 211中任意一個元素、元素的組合、或全體元素的第一次訪問或者后續(xù)訪問。 作為實(shí)例,當(dāng)使用兩個位時(shí),使用4個組合00、 01、 11和10來關(guān)聯(lián)每一 個元素。
為了在不使參考圖1的論述復(fù)雜化和模糊不清的情況下說明訪問字段 (例如訪問字段220)是如何進(jìn)行操作的,在此將論述未特別示出的單個事務(wù) 處理位的操作。很明顯,具有多個位的訪問字段和具有多個元素的共享存 儲器行可以采用與以下實(shí)例非常相似的方式來操作。因此,假定存在與存 儲器110中每一個行相關(guān)聯(lián)的事務(wù)處理位。事務(wù)處理位與行111的關(guān)聯(lián)包括 將事務(wù)處理位作為行111的一部分,或者在其他情況下事務(wù)處理位在處理 器100中并映射到行111。
缺省狀態(tài)是將事務(wù)處理位設(shè)置為第一值,例如第一邏輯值。在這個缺 省狀態(tài)中,事務(wù)處理位就表示在事務(wù)處理執(zhí)行期間,即在事務(wù)處理未決狀 態(tài)期間,高速緩存行111還沒有被訪問。一旦對高速緩存行111進(jìn)行了訪問,就將事務(wù)處理位設(shè)置為第二值,例如第二邏輯值,其中所述訪問包括對高 速緩存行111或與高速緩存行111相關(guān)聯(lián)的系統(tǒng)存儲單元的寫入、存儲、讀 取或裝入。在一個實(shí)施例中,所述第一值是高邏輯值,所述第二值是低邏 輯值??商鎿Q地,所述第一值是低邏輯值,所述第二值是高邏輯值。類似 地,在具有多個事務(wù)處理位的訪問字段中,可以設(shè)置或清除每一個位,以 表示共享存儲器行中的元素是否己經(jīng)被訪問。
因此,如果檢查了與行111相關(guān)聯(lián)的事務(wù)處理位,且該事務(wù)處理位表 示第一值,則在事務(wù)處理的未決狀態(tài)期間就還沒有訪問行l(wèi)ll。相反地,如 果該事務(wù)處理位表示第二值,則在事務(wù)處理期間先前已經(jīng)訪問過高速緩存 行l(wèi)ll。在事務(wù)處理的提交時(shí),清除被設(shè)置為第二值的位,以確保將該值設(shè)
置為第一值,即缺省狀態(tài)。在一個實(shí)施例中,還可以存儲資源ID(例如內(nèi)核 ID或線程ID)以及事務(wù)處理ID,或?qū)⑵渑c事務(wù)處理位相關(guān)聯(lián),以獲知哪一 個事務(wù)處理正在訪問高速緩存行111或先前訪問了高速緩存行111。以下通 過以下優(yōu)化操作來說明基于第一次或后續(xù)訪問的事務(wù)處理執(zhí)行的加速在 訪問共享存儲器中的單元之前,以及在提交事務(wù)處理之前對這些單元進(jìn)行 有效確認(rèn)時(shí),重新引向屏障。 屏障/鎖定模塊
在一個實(shí)施例中,基于在事務(wù)處理執(zhí)行期間對存儲器110中的行的訪 問是對這些行的第一次訪問,還是對這些行的后續(xù)訪問,即不是第一次訪 問,來檢查與這些行相關(guān)聯(lián)的屏障、鎖定、元數(shù)據(jù)、或指令代碼。在系統(tǒng) 部分的實(shí)施例中,詳細(xì)論述了關(guān)于重新引向與存儲器行相關(guān)聯(lián)的屏障的實(shí) 例。屏障包括用于對以下操作進(jìn)行阻礙的任何方法對于共享存儲器行/單
元的訪問、對于不在與該共享存儲器行/單元相關(guān)聯(lián)的事務(wù)處理內(nèi)的另一部 分代碼的任何執(zhí)行、或?qū)τ谂c該共享存儲器行/單元相關(guān)聯(lián)的諸如元數(shù)據(jù)的 其它數(shù)據(jù)的訪問。
作為第一實(shí)例,屏障包括物理三態(tài)或其它硬件阻塞機(jī)制。作為另一個 實(shí)例,屏障包括對與共享單元相關(guān)聯(lián)的進(jìn)位標(biāo)志的狀態(tài)進(jìn)行更新。屏障也 可以包括元數(shù)據(jù)。元數(shù)據(jù)是存儲在與該共享存儲單元相關(guān)聯(lián)的單元中的任 何邏輯值或數(shù)據(jù)。元數(shù)據(jù)的一個實(shí)例是鎖定,在此,鎖定所在的單元存儲 了表示該鎖定的狀態(tài)的數(shù)據(jù)。獨(dú)立而言,所存儲的數(shù)據(jù)可以不具有具體含義;而是借助于通過硬件或軟件的構(gòu)建,所存儲的數(shù)據(jù)值展現(xiàn)出一個鎖定 的功能。因此,元數(shù)據(jù)的使用不限于以下論述的有關(guān)鎖定的實(shí)例,而是可 以包括在第一次訪問共享存儲器行時(shí)所訪問的任何數(shù)據(jù)。在一個實(shí)施例中, 鎖定模塊,例如鎖定模塊U5,是屏障。另外,如在以下在提交模塊部分所 論述的,屏障還可以包括與在提交事務(wù)處理之前對存儲單元的確認(rèn)相關(guān)聯(lián) 的薄記(bookkeeping)。
在處理器100中示出了鎖定模塊115,其耦合到存儲器IIO,但其并不 限于此。在一個實(shí)例中,鎖定模塊115包括鎖定陣列。在一個實(shí)施例中, 該鎖定陣列是存儲在存儲器中的軟件鎖定陣列,所述存儲器例如為處理器 IOO上的局部存儲器,或耦合到處理器100的系統(tǒng)存儲器。在此,所用的術(shù) 語"鎖定(lock)"指的是一種編程結(jié)構(gòu),用于基于鎖定或鎖定所表示的值, 不允許對資源、處理器、邏輯處理器、內(nèi)核或線程進(jìn)行訪問。
再次參考圖2,示出了鎖定模塊115的一個實(shí)施例,在此在事務(wù)處理存 儲器中存儲了鎖定陣列,即,哈希表215。鎖定218與存儲器210中的行 212相關(guān)聯(lián),而鎖定216和217分別與元素211c和211d相關(guān)聯(lián)??梢酝ㄟ^ 用于關(guān)聯(lián)兩個單元的任何映射技術(shù)或其它技術(shù)來實(shí)現(xiàn)鎖定與共享存儲器 行、單元或元素之間的關(guān)聯(lián)。在一個實(shí)施例中,鎖定通過哈希表與共享存 儲器行相關(guān)聯(lián),例如哈希表215。在此情況下,在存儲器中存儲了鎖定陣列, 并由用以存取共享存儲器行的地址中的某個部分進(jìn)行定位。例如,屏蔽虛 擬地址或線性地址中第一數(shù)量的低位比特,以獲得用以存取行212的高速 緩存行地址,并且該高速緩存行地址用于定位鎖定陣列中的鎖定218。
鎖定(例如鎖定218)可以具有多個狀態(tài)。作為一個具體的說明性實(shí)例, 軟件鎖定(例如鎖定218)處于被擁有狀態(tài)或非被擁有狀態(tài)。例如,當(dāng)一個事 物處理要對行212中進(jìn)行寫入時(shí),其獲得鎖定218并對行212進(jìn)行寫入。 當(dāng)鎖定218被另一個事務(wù)處理獲得時(shí),其處于被擁有狀態(tài),并且行212不 能被其它事務(wù)處理或資源所訪問。如果由于一個鎖定處于被擁有狀態(tài)而使 事務(wù)處理或資源不能獲得該鎖定,則可以使用包括等待、后退、并行執(zhí)行 以及其它技術(shù)的常用方法。任何用以表示狀態(tài)的方法都可以用于表示鎖定 218是被擁有的還是非被擁有的,這些方法例如為表示性的值、字、或者 位組合形式。在一個實(shí)施例中,當(dāng)鎖定218表示第一值時(shí),鎖定218和行212為被擁有的,當(dāng)鎖定218表示第二值時(shí),鎖定218和行212為非被擁有 的。
以下實(shí)例用于說明編程結(jié)構(gòu)如何將鎖定218用作對行212的屏障。當(dāng) 為非被擁有的時(shí),鎖定218表示奇數(shù)版本值,例如數(shù)字3。在事務(wù)處理獲得 鎖定218時(shí),事務(wù)處理或資源寫入偶數(shù),例如數(shù)字4,以表示鎖定218被擁 有。如果事務(wù)處理更新了行212,則在釋放該鎖定時(shí),它將下一個奇數(shù)版本 值即數(shù)字5,寫入鎖定218中,以表示(l)由于當(dāng)前存儲了奇數(shù),鎖定218 再一次是非被擁有的;以及(2)行212是從在鎖定218中所存儲的最新奇數(shù) 版本值3時(shí)刻起被更新的。
以前,純軟件的事務(wù)處理存儲器系統(tǒng)可能會在每次訪問存儲器中的單 元之前檢查鎖定的狀態(tài),記憶存儲在鎖定中的版本值,并在每次提交事務(wù) 處理之前對每一個單元執(zhí)行有效確認(rèn)。然而,在一個實(shí)施例中,如果訪問 是在事務(wù)處理執(zhí)行期間對行212的第一次訪問,則加速模塊225在訪問行 212之前檢査鎖定218的狀態(tài)。如上所述,可以通過由與行212相關(guān)聯(lián)的事 務(wù)處理字段/位表示第一值,來表示在事務(wù)處理執(zhí)行期間對行212的第一次 訪問。實(shí)質(zhì)上,如果與行212相關(guān)聯(lián)的事務(wù)處理字段/位表示第一值,則調(diào) 用鎖定模塊(例如鎖定模塊115)來檢査鎖定218。
作為實(shí)例,如果由同步或異步事件初始化了與行212相關(guān)聯(lián)的事務(wù)處 理字段/位,就重新引向屏障或檢查鎖定。在事務(wù)處理中訪問行212時(shí),發(fā) 生同步指示,例如設(shè)置稍后要檢查的進(jìn)位標(biāo)志,或者發(fā)生信號的異步產(chǎn)生, 例如事務(wù)處理未命中中斷,以表明由事務(wù)處理字段/位表示第一值。
在第一種情形下,使用了同步機(jī)制,如果與行212相關(guān)聯(lián)的事務(wù)處理 字段表明這個訪問是在事務(wù)處理執(zhí)行期間的第一次訪問,則設(shè)置另一個狀 態(tài),例如進(jìn)位標(biāo)志。然后正常進(jìn)行對行212的訪問,隨后,在用應(yīng)用程序 或處理機(jī)檢查進(jìn)位標(biāo)志時(shí),判斷是否要進(jìn)展到獲得鎖定、存儲版本值并執(zhí) 行有效確認(rèn)的操作。
在產(chǎn)生中斷的情形下,處理機(jī)通過將執(zhí)行重新引向屏障(例如檢查鎖定 218)來處理中斷,該處理機(jī)可以在處理器200或與處理器200相關(guān)聯(lián)的一些 固件上執(zhí)行。注意,對行212的第一次訪問并非是可以引起重新引向屏障(即 檢查鎖定218)或產(chǎn)生中斷的唯一事件。例如,如果發(fā)生高速緩存未命中,即,所請求的行未存在于存儲器210中并且要從系統(tǒng)存儲器中取得,則可 以調(diào)用/重復(fù)相同的鎖定/屏障的"第一次訪問"方法。第一次訪問或高速緩 存未命中在此還稱為事務(wù)處理未命中通知。
與"第一次訪問"相對照,在一個實(shí)施例中,如果對行212的訪問不 是在事務(wù)處理執(zhí)行期間對行212的第一次訪問,而是對行212的后續(xù)訪問, 則不調(diào)用鎖定模塊115,并且在訪問行212之前不檢查鎖定218。或者在備 選方案中,不發(fā)生采用諸如設(shè)置進(jìn)位標(biāo)志之類機(jī)制的同步通知。作為結(jié)果, 如果與行212相關(guān)聯(lián)的事務(wù)處理字段/位表示第二值,允許對行212進(jìn)行訪 問,而不調(diào)用鎖定模塊115,即檢查鎖定218。在一個實(shí)施例中,允許對行 212的訪問的操作是透明的,因?yàn)樾?12簡單地被執(zhí)行資源205更新,或被 提供給執(zhí)行資源205,而不檢査鎖定218。如可在該實(shí)施例中所見的,在單 個事務(wù)處理中發(fā)生了對共享存儲器中同一行的多次訪問的情況下,由于在 事務(wù)處理中對同一行的后續(xù)訪問無需遇到與該行相關(guān)聯(lián)的屏障,因此可以 加速事務(wù)處理的執(zhí)行。
加速模塊225和其它模塊,例如圖1所示的鎖定模塊115和驅(qū)逐追蹤 (eviction tracking)模塊125,以及提交模塊,可以在多種模式中操作,例如 第一積極模式和第二謹(jǐn)慎模式。
在一個實(shí)施例中,在積極模式中,當(dāng)鎖定處于非被擁有狀態(tài)中時(shí),鎖 定模塊或加速模塊225獲得該鎖定,并且不保存在該鎖定中所存儲的版本 值。如以上實(shí)例中所述的。奇數(shù)版本值表示鎖定是非被擁有的。以前,會 在事務(wù)處理存儲器組中存儲奇數(shù)版本值,以便能夠在提交時(shí)進(jìn)行有效確認(rèn)。 然而,在該積極模式中,在檢査了鎖定的狀態(tài)并確定鎖定是非被擁有的之 后,不在局部事務(wù)處理存儲器組中存儲第二版本值。因此,在一個積極模 式實(shí)施例中,不是在提交事務(wù)處理之前用復(fù)雜的版本值比較進(jìn)行復(fù)雜的有 效確認(rèn),而是如果在事務(wù)處理的未決狀態(tài)期間沒有收到驅(qū)逐通知(同步或異 步的),就提交事務(wù)處理。將在驅(qū)逐模塊部分中更詳細(xì)地論述驅(qū)逐和驅(qū)逐通 知。
作為第一說明性實(shí)例,執(zhí)行在事務(wù)處理中的裝入指令,以訪問在行212 中的元素211d。如果訪問字段221表示該裝入指令不是在事務(wù)處理執(zhí)行期 間對元素211d的第一次訪問,則訪問元素211d,而不檢査鎖定216。然而,如果訪問字段221表示該裝入指令是在事務(wù)處理執(zhí)行期間對行211的第一 次訪問,則產(chǎn)生事務(wù)處理未命中中斷或設(shè)置進(jìn)位標(biāo)志。處理機(jī)借助于檢查 鎖定216來處理事務(wù)處理未命中中斷,或者應(yīng)用程序檢查進(jìn)位標(biāo)志并調(diào)用 處理機(jī)。如果在鎖定216中存儲了奇數(shù)版本值,則事務(wù)處理可以通過將偶 數(shù)值寫入到鎖定216中來獲得鎖定216。當(dāng)在積極模式中時(shí),并不保存在將 偶數(shù)值寫入到鎖定216之前存儲在鎖定216中的奇數(shù)版本值。如稍后所論 述的,在提交事務(wù)處理時(shí),不對版本值進(jìn)行比較,節(jié)省了與執(zhí)行事務(wù)處理 相關(guān)的有效確認(rèn)的成本。
可替換地,加速模塊225及其它模塊可以運(yùn)行在謹(jǐn)慎模式中。例如, 積極模式是缺省操作模式,在預(yù)定次數(shù)的事務(wù)處理中止或事務(wù)處理失敗之 后,將操作切換為謹(jǐn)慎模式。注意,作為替代,謹(jǐn)慎模式可以是缺省操作 模式,并且在沒有爭用或驅(qū)逐通知情況下經(jīng)過預(yù)定數(shù)量的成功事務(wù)處理之 后,操作切換為積極模式。在謹(jǐn)慎模式中,在事務(wù)處理未命中通知時(shí),發(fā) 生與積極模式的功能相同的功能,除了將存儲在鎖定216中的版本號保存 在局部事務(wù)處理存儲器組中,以便能夠在提交事務(wù)處理時(shí)進(jìn)行有效確認(rèn)。 在此,如果在事務(wù)處理執(zhí)行期間沒有驅(qū)逐通知,則提交事務(wù)處理。然而, 與積極模式不同的是,如果在事務(wù)處理的未決狀態(tài)期間出現(xiàn)驅(qū)逐通知,則 將版本號存儲在局部事務(wù)處理存儲器組中,以便對事務(wù)處理進(jìn)行有效確認(rèn), 而不是僅僅是中止事務(wù)處理。
從以上繼續(xù)該實(shí)例,如果在謹(jǐn)慎模式中的操作期間出現(xiàn)了裝入指令, 則獲得鎖定216,并將存儲在鎖定216中的版本值保存在局部事務(wù)處理存儲 器讀取組中。如果在事務(wù)處理的未決狀態(tài)期間出現(xiàn)驅(qū)逐通知,則針對存儲 在鎖定218中的當(dāng)前版本值,對存儲在局部事務(wù)處理存儲器讀取組中的版 本值進(jìn)行有效確認(rèn)。如果版本值有效確認(rèn)是成功的,則提交事務(wù)處理,如 果不成功,就中止事務(wù)處理。
在一個實(shí)施例中,對在積極模式和謹(jǐn)慎模式中以相同方式進(jìn)行的操作 進(jìn)行存儲。在此,在未命中通知時(shí),在事務(wù)處理存儲器中存儲/記錄元素211d 的舊值,并且通過對鎖定216寫入偶數(shù)來獲得鎖定216。注意,還可能減少 執(zhí)行時(shí)間,因?yàn)榧词乖诘谝淮卧L問一個行時(shí)檢査存儲,也不必在對相同行 的后續(xù)存儲期間進(jìn)行檢査。驅(qū)逐追蹤/提交模塊
如上所述,在積極模式中,在事務(wù)處理執(zhí)行期間的驅(qū)逐通知會導(dǎo)致中 止事務(wù)處理,而在謹(jǐn)慎模式操作期間驅(qū)逐通知會啟動有效確認(rèn)。在一個實(shí) 施例中,如果驅(qū)逐了被事務(wù)處理訪問的行,即事務(wù)處理訪問字段表示第二 值,就發(fā)生驅(qū)逐通知。行的驅(qū)逐包括遠(yuǎn)程資源對共享存儲器行的驅(qū)逐、 遠(yuǎn)程資源對共享存儲器行的探查、對共享存儲器行的訪問使在與事務(wù)處理 相關(guān)的事務(wù)處理存儲器組中所存儲的共享存儲器行的副本無效、和/或由于 容量約束造成的驅(qū)逐。因此,以下情況都導(dǎo)致驅(qū)逐通知另一個事務(wù)處理 的訪問驅(qū)逐共享存儲器行、遠(yuǎn)程資源的訪問,所述遠(yuǎn)程資源例如為存在于 處理器200上的另一個內(nèi)核/邏輯處理器、任何其它導(dǎo)致無效的訪問、或者 容量約束。
圖1中所示的追蹤模塊125用于追蹤驅(qū)逐通知。在一個實(shí)施例中,在 驅(qū)逐通知事件時(shí),產(chǎn)生驅(qū)逐通知中斷,其將執(zhí)行重新引向處理機(jī)。在檢測 到驅(qū)逐通知事件時(shí),可以使用邏輯或其它中斷產(chǎn)生組件來產(chǎn)生驅(qū)逐通知中 斷。在另一個實(shí)施例中,保存了對所驅(qū)逐的共享存儲器行數(shù)量的計(jì)數(shù),其 中這些共享存儲器行的事務(wù)處理位已經(jīng)被設(shè)置。應(yīng)用程序或處理機(jī)稍后會 檢查這個計(jì)數(shù),并判斷是否重新引向屏障,例如基于該計(jì)數(shù)執(zhí)行有效確認(rèn)。 在此,基于對在執(zhí)行期間所驅(qū)逐的行的數(shù)量的檢査/査詢,來產(chǎn)生驅(qū)逐通知, 這個數(shù)量可以存儲在邏輯中,例如計(jì)數(shù)器中。如上所述,處理機(jī)可以立即 中止事務(wù)處理,在事務(wù)處理結(jié)束時(shí)且在提交之前中止事務(wù)處理,執(zhí)行有效 確認(rèn),和/或提交事務(wù)處理。
在一個實(shí)施例中,如果在事務(wù)處理執(zhí)行期間,驅(qū)逐追蹤模塊運(yùn)行在積 極模式中,并且發(fā)生對共享存儲器行的無效性的訪問,即驅(qū)逐通知事件, 則驅(qū)逐追蹤模塊中止事務(wù)處理。與此相反,如果驅(qū)逐追蹤模塊運(yùn)行在謹(jǐn)慎 模式中,則驅(qū)逐模塊或提交模塊對事務(wù)處理進(jìn)行有效確認(rèn)。
提交模塊用于提交事務(wù)處理。提交模塊、驅(qū)逐追蹤模塊以及其它模塊 的邊界交疊并包括一些相同的組件。例如,在提交時(shí),將在事務(wù)處理執(zhí)行 期間所設(shè)置的事務(wù)處理字段/位重置為第一值,以確保下一個事務(wù)處理從事 務(wù)處理位的缺省狀態(tài)開始。可以在重新執(zhí)行之前,在事務(wù)處理中止期間進(jìn) 行類似的操作。由于行的驅(qū)逐、提交和有效確認(rèn)操作是事務(wù)處理執(zhí)行中的公知技術(shù), 因此沒有對其進(jìn)行詳細(xì)論述,以避免模糊對本發(fā)明的理解。如上所述,在 一個實(shí)施例中,有效確認(rèn)包括用存儲在鎖定中的當(dāng)前版本號對版本號的本 地副本進(jìn)行有效確認(rèn)。另外,沒有詳細(xì)論述處理機(jī)的總體操作和用執(zhí)行資 源在處理器上執(zhí)行處理機(jī)例程的情況,以避免模糊對本發(fā)明的理解。然而, 在一個實(shí)施例中,用于中止事務(wù)處理的處理機(jī)能夠按照一次一個事務(wù)的粒
度,回滾(rollback)到所嵌套的事務(wù)處理。在題為"Software Assisted Nested Hardware Transactions"的序列號11/323,092的共同未決申請中論述了嵌套 事務(wù)處理的執(zhí)行和回滾。 系統(tǒng)的實(shí)施例
轉(zhuǎn)到圖3,示出了系統(tǒng)的一個實(shí)施例,具有用于說明系統(tǒng)操作的偽代碼 提取。多資源處理器300耦合到系統(tǒng)存儲器330。盡管未示出,但系統(tǒng)存儲 器330也可以通過其它組件或器件耦合到處理器300,例如內(nèi)存控制中心。 系統(tǒng)存儲器包括用于在系統(tǒng)中進(jìn)行存儲的任何存儲器,例如SRAM、 DRAM、雙倍數(shù)據(jù)速率(DDR)RAM、非易失性(NV)RAM、 EDO RAM、或 其它存儲器件。系統(tǒng)存儲器330用于存儲元素,例如要由處理器300執(zhí)行 的指令和數(shù)據(jù)操作數(shù)。在一個實(shí)施例中,系統(tǒng)存儲器存儲多個指令,這些 指令要被分組到多個事務(wù)處理中。
偽代碼350示出了用于加速事務(wù)處理執(zhí)行的處理器300的簡化的示范 性操作。要由資源305或306執(zhí)行包括多個指令或操作的事務(wù)處理351。資 源305是以下各項(xiàng)的任何組合內(nèi)核、線程、邏輯處理器、或其它執(zhí)行資 源。事務(wù)處理,例如事務(wù)處理351,常常由一個資源執(zhí)行,或者用多個資源 中的一個資源來確認(rèn)。在事務(wù)處理351內(nèi)的一個訪問是存儲器訪問352,其 包括對在共享存儲器310中的行311的訪問。存儲器訪問包括對共享存儲 器310進(jìn)行的寫入、讀取、存儲、或裝入。
在執(zhí)行訪問352時(shí),檢查事務(wù)處理位326,以缺點(diǎn)訪問352是否是在事 務(wù)處理311的執(zhí)行期間對行311的第一次訪問。如果事務(wù)處理位326表示 第二值,則訪問行311,而不將執(zhí)行重新引向屏障317,該屏障317通過到 屏障陣列315中的散列函數(shù)與行311相關(guān)聯(lián),其中,根據(jù)設(shè)計(jì)中的選擇, 該第二值或者是高邏輯值或者是低邏輯值。將第二值存儲在事務(wù)處理位316中表示在事務(wù)處理351執(zhí)行期間出現(xiàn)過對行311的先前訪問。因此,不再 檢查屏障317。
與此相反,如果事務(wù)處理位316是用以表示訪問352是在事務(wù)處理執(zhí) 行期間對行3U的第一次訪問或者發(fā)生了對行311的高速緩存未命中的情 況的第二值,則將執(zhí)行重新引向屏障317。在一個實(shí)施例中,通過基于表示 第二值的事務(wù)處理位326產(chǎn)生用戶級中斷,來對執(zhí)行進(jìn)行重新引向。在另 一個實(shí)例中,設(shè)置與事務(wù)處理位326或行311相關(guān)聯(lián)的進(jìn)位標(biāo)志,隨后由 應(yīng)用程序檢査該標(biāo)志,以決定是否將執(zhí)行重新引向處理機(jī)。假定屏障317 包括保存在存儲器中的鎖定陣列中的鎖定,則檢査鎖定317以確定它處于 被擁有狀態(tài)還是非被擁有狀態(tài)。在此,以偶數(shù)值表示被擁有狀態(tài),并且事 務(wù)處理351不能通過鎖定317獲得對行311的鎖定。相反地,以奇數(shù)版本 值表示非被擁有狀態(tài),例如十進(jìn)制數(shù)9的二進(jìn)制表示。
如果以積極模式操作加速模塊,則通過將偶數(shù)寫入到鎖定317中來獲 得鎖定317,其中,加速模塊包括事務(wù)處理位和正在執(zhí)行的軟件事務(wù)處理存 儲器處理機(jī)。但不記憶/存儲在鎖定317中的版本號。然而,如果是在謹(jǐn)慎 模式中,就將版本號存儲在局部事務(wù)處理存儲器組中,例如用于裝入操作 的讀取組。接下來,在兩種操作模式中都返回執(zhí)行流程,以執(zhí)行對行311 的存儲器訪問352。
如果在執(zhí)行期間接收到驅(qū)逐通知,則在此時(shí)或者在提交時(shí)中止事務(wù)處 理351。在此,在提交事務(wù)處理部分中示出了偽代碼350部分;然而,可以 提交之前、在事務(wù)處理執(zhí)行中間產(chǎn)生并接收驅(qū)逐通知,并可以在此時(shí)中止 該事務(wù)處理。例如,如果資源306探查、驅(qū)逐或?qū)е聼o效性地訪問行311, 并且這不是執(zhí)行事務(wù)處理351時(shí)分配的任務(wù),則產(chǎn)生驅(qū)逐通知中斷。接收 該中斷的處理機(jī)會在此時(shí)中止該事務(wù)處理,或者進(jìn)行等待直到在處理該中 斷前試圖提交該事務(wù)處理351為止。可替換地,使用計(jì)數(shù)器來追蹤所驅(qū)逐 的行的數(shù)量,其中,所驅(qū)逐的行已經(jīng)設(shè)置了其相關(guān)的事務(wù)處理位。在事務(wù) 處理的未決狀態(tài)期間的任何時(shí)間,都可以查詢計(jì)數(shù)器并且基于計(jì)數(shù)器的值 來中止計(jì)數(shù)器。
在異步中斷情況下,如果是在積極模式中并且接收到驅(qū)逐中斷,則中 止事務(wù)處理351,并可以重新開始。復(fù)位/清除由事務(wù)處理351預(yù)先設(shè)置的事務(wù)處理位,并釋放所獲得的鎖定。相反的,如果在積極模式期間沒有接
收到驅(qū)逐中斷,就提交事務(wù)處理351,這就可以節(jié)省對在事務(wù)處理351期間 所訪問的每一個地址進(jìn)行有效確認(rèn)的執(zhí)行時(shí)間。在提交時(shí),仍釋放鎖定, 并復(fù)位事務(wù)處理位。如果運(yùn)行在謹(jǐn)慎模式中且接收到驅(qū)逐中斷,則對讀取 組進(jìn)行有效確認(rèn),這是通過以上所述的先前在讀出組中存儲版本號來實(shí)現(xiàn) 的。如果有效確認(rèn)成功,則提交事務(wù)處理351,包括釋放鎖定并清除事務(wù)處 理位。如果有效確認(rèn)不成功,就中止事務(wù)處理351并重新開始。但如果未 接收到驅(qū)逐中斷,則即使是在謹(jǐn)慎模式中,也可以免除有效確認(rèn),并且在 不引起額外的有效確認(rèn)執(zhí)行時(shí)間的情況下提交事務(wù)處理351。 用于加速事務(wù)處理執(zhí)行的方法的實(shí)施例
轉(zhuǎn)到圖4,示出了用于加速事務(wù)處理執(zhí)行的方法的流程圖的實(shí)施例。在 流程405中,執(zhí)行在事務(wù)處理內(nèi)的存儲器訪問指令。該存儲器訪問指令存
取在共享存儲器中的單元。對共享存儲器中單元的存取可以包括用于存取 共享存儲單元自身或者與共享存儲單元相關(guān)的一些外部存儲單元的虛擬地
址或線性地址。如上所述,共享存儲器包括處理器上的任何共享存儲器裝 置,例如高速緩存、寄存器、或其它存儲元件。
接下來,在流程415中,確定與共享存儲單元相關(guān)聯(lián)的事務(wù)處理位的 值。事務(wù)處理位可以通過到共享存儲單元的映射來進(jìn)行關(guān)聯(lián),或者它可以 是共享存儲單元的一部分。確定事務(wù)處理位的值的操作包括用于讀取/檢測 存儲單元的值(例如邏輯電平)的任何己知方法。例如,在執(zhí)行訪問指令時(shí), 從事務(wù)處理位中讀取該值。如果與該單元相關(guān)聯(lián)的事務(wù)處理位是第一值, 則訪問該單元,且不在流程420確定映射到共享存儲器中該單元的鎖定的 狀態(tài)。因此,與正常裝入、存儲、讀取或?qū)懭腩愃频貋磉M(jìn)行訪問。
然而,如果與該單元相關(guān)聯(lián)的事務(wù)處理位表示第二值,則在流程425 確定鎖定的狀態(tài)。如上所述,由表示被擁有狀態(tài)或非被擁有狀態(tài)的值來表 明鎖定的狀態(tài)。作為一個說明性實(shí)例,如果在鎖定中存儲了偶數(shù)值,則該 鎖定是被擁有的,如果該鎖定是可用的,即非被擁有的,就存儲奇數(shù)版本 值??商鎿Q地,可以將另一個值,例如事務(wù)處理ID或資源ID,寫入到該鎖 定中,以表示其是被擁有的。在流程430中,如果該鎖定的狀態(tài)表示非被 擁有狀態(tài),就獲得該鎖定并訪問該單元。繼續(xù)進(jìn)行這個說明性實(shí)例,通過將偶數(shù)寫入到該鎖定中來獲得該鎖定。最后,將與該單元相關(guān)聯(lián)的事務(wù)處 理位設(shè)置為第一值,來表示在事務(wù)處理執(zhí)行期間已經(jīng)對該單元進(jìn)行過第一 次訪問。
注意,流程是以線性方式示出的;然而,任何流程都可以采用與所示 的不同的順序來進(jìn)行。例如,在確定事務(wù)處理位的值表示第二值之后,可 以立即將事務(wù)處理位設(shè)置為第一值,以表示已經(jīng)對其進(jìn)行過第一次訪問。
在一個實(shí)施例中,如果運(yùn)行在積極模式中,則在訪問該單元之前不保 存在鎖定中所存儲的用以表示非被擁有狀態(tài)的版本值??商鎿Q地,在謹(jǐn)慎 模式中,在訪問該單元之前,將在鎖定中所存儲的用以表示非被擁有狀態(tài) 的版本值保存在局部事務(wù)處理存儲器組中。
流程440可以出現(xiàn)在圖4所示的流程期間的任何時(shí)刻上,在該流程440 中,如果單元被驅(qū)逐,且與該單元相關(guān)聯(lián)的事務(wù)處理位表示第一值,就產(chǎn) 生驅(qū)逐中斷。在此,如果按照存儲第二值的事務(wù)處理位所表示的那樣在事 務(wù)處理執(zhí)行期間已經(jīng)訪問過該單元,并且該單元被驅(qū)逐,則產(chǎn)生驅(qū)逐中斷。 可以在驅(qū)逐時(shí)產(chǎn)生這個中斷,并在此時(shí)刻或者稍后進(jìn)行處理。可替換地, 在流程440中,遞增計(jì)數(shù)器,以便對在事務(wù)處理執(zhí)行期間驅(qū)逐的行的數(shù)量 進(jìn)行追蹤??梢陨院髾z査或査詢該計(jì)數(shù)器,以決定版本的存儲、有效確認(rèn) 和提交,如下所述。
在積極模式和謹(jǐn)慎模式中,如果在事務(wù)處理執(zhí)行期間沒有出現(xiàn)驅(qū)逐, 就提交事務(wù)處理。另外,在積極模式中,如果在事務(wù)處理執(zhí)行期間出現(xiàn)了 驅(qū)逐,就中止事務(wù)處理。然而,在謹(jǐn)慎模式中,如果產(chǎn)生了驅(qū)逐中斷,就 在提交事務(wù)處理之前對事務(wù)處理進(jìn)行有效確認(rèn)。如果有效確認(rèn)成功,就提 交事務(wù)處理,否則,就將其中止并重新開始。注意,如上所述,積極模式 或者謹(jǐn)慎模式都可以作為缺省模式。 用于加速事務(wù)處理執(zhí)行的方法的另一個實(shí)施例
最后參考圖5,示出了用于加速事務(wù)處理執(zhí)行的方法的流程圖的另一個 實(shí)施例。在流程505中,確定用以存取共享存儲器中單元的訪問是否是在 事務(wù)處理的未決狀態(tài)期間的對該單元的第一次訪問。在一個實(shí)施例中,該 單元是共享存儲器行。在另一個實(shí)施例中,共享存儲器行能夠存儲多個元 素,例如指令、操作數(shù)、數(shù)據(jù)操作數(shù)、邏輯值,及其任何組合,在共享存儲器行中的元素就是所述單元。
單元與事務(wù)處理字段相關(guān)聯(lián),事務(wù)處理字段至少具有事務(wù)處理位。與
以上操作相類似,事務(wù)處理位/事務(wù)處理字段用于確定該訪問是否是在事務(wù) 處理的未決狀態(tài)期間對共享存儲器行或共享存儲器行內(nèi)的元素的第一次訪 問。
在流程510中,如果它是對共享存儲器行或共享存儲器行內(nèi)的元素的 第一次訪問,就將執(zhí)行重新引向與共享存儲器中單元相關(guān)聯(lián)的屏障。所述 屏障包括與共享存儲器(例如高速緩存)相關(guān)聯(lián)的任何鎖定機(jī)制或訪問機(jī)制。 在一個實(shí)施例中,所述屏障包括保存在軟件中的鎖定陣列內(nèi)的鎖定。鎖定 和屏障的操作與以上參考圖l一3所述的鎖定和屏障的操作類似。例如,對 執(zhí)行進(jìn)行重新引向的操作包括執(zhí)行處理機(jī)以處理事務(wù)處理未命中中斷,其 中,處理機(jī)的執(zhí)行是將執(zhí)行重新引向屏障,甚至不需訪問或檢查鎖定。在 可選方案中,對執(zhí)行進(jìn)行重新引向的操作包括檢查進(jìn)位標(biāo)志的狀態(tài),并調(diào) 用處理機(jī)來處理事務(wù)處理未命中。
反之,在流程515中,如果該訪問是對共享存儲器行或共享存儲器行
中的元素的后續(xù)訪問,就訪問在共享存儲器行中的單元,且不將執(zhí)行重新 引向與共享存儲器內(nèi)的單元相關(guān)聯(lián)的屏障。在此,諸如裝入或存儲操作之
類的操作在沒有屏障的情況下正常操作。
如上所示,采用多種方式來實(shí)現(xiàn)對事務(wù)處理執(zhí)行的加速。例如,在事 務(wù)處理中僅在第一次訪問共享存儲單元時(shí)訪問屏障,所述屏障例如為在軟 件鎖定陣列內(nèi)的鎖定。后續(xù)訪問可以直接對該單元進(jìn)行訪問,而不會引起 訪問屏障的執(zhí)行命中。而且,不同操作模式提供了不同程度的加速。在積 極模式中,不存儲鎖定的版本號,所以在提交事務(wù)處理時(shí)不會引起有效確 認(rèn)執(zhí)行的延遲。實(shí)際上,如果在事務(wù)處理執(zhí)行期間沒有出現(xiàn)驅(qū)逐中斷,就 僅僅是提交該事務(wù)處理。相反地,在謹(jǐn)慎模式中,如有必要,就存儲版本 號以便執(zhí)行有效確認(rèn)。然而,正如在積極模式中那樣,如果在事務(wù)處理執(zhí) 行期間沒有產(chǎn)生驅(qū)逐中斷,就不會引起與有效確認(rèn)相關(guān)聯(lián)的執(zhí)行命中。因 此,加速了對單元的訪問以及對與這些訪問有關(guān)的屏障的訪問,還加速了 在提交之前對事務(wù)處理的可能的有效確認(rèn)。
可以通過存儲在機(jī)器可訪問介質(zhì)或機(jī)器可讀介質(zhì)上的、可由處理元件執(zhí)行的指令或代碼來實(shí)現(xiàn)以上闡明的方法、軟件、固件或代碼的各個實(shí)施 例。機(jī)器可訪問/可讀介質(zhì)包括用于以機(jī)器(例如計(jì)算機(jī)或電子系統(tǒng))可讀的 形式提供(即存儲和/或傳輸)信息的任何機(jī)制。例如,機(jī)器可訪問介質(zhì)包括
隨機(jī)存取存儲器(RAM),例如靜態(tài)RAM(SRAM)或動態(tài)RAM(DRAM); ROM;磁或光存儲介質(zhì);閃存器件;電、光、聲學(xué)或傳播信號的其它形式(例 如載波、紅外信號、數(shù)字信號);等等。
在前述說明書中,已經(jīng)參考各個特定示范性實(shí)施例給出了詳細(xì)說明。 然而,很明顯的,在不脫離如所附權(quán)利要求中闡明的本發(fā)明廣泛精神和范 圍的情況下,可以對其做出各種修改和變化。因此,說明書和附圖被認(rèn)為 是說明性意義的,而不是限制性意義。而且前述實(shí)施例和其它示范性語言 的使用并非一定指代相同實(shí)施例或相同實(shí)例,而可以指代不同的相異的實(shí) 施例,也有可能是相同的實(shí)施例。
權(quán)利要求
1、一種裝置,包括共享存儲器,其包含多個共享行;執(zhí)行模塊,用于執(zhí)行被分組到事務(wù)處理中的多個操作,其中,所述多個操作之一包括對所述多個共享行中的一個共享行的訪問;鎖定模塊,當(dāng)被調(diào)用時(shí),檢查與所述共享行相關(guān)聯(lián)的元數(shù)據(jù)單元的狀態(tài);以及加速模塊,用于如果對所述共享行的所述訪問是在所述事務(wù)處理執(zhí)行期間對所述共享行的第一次訪問,就調(diào)用所述鎖定模塊,以及如果對所述共享行的所述訪問不是在所述事務(wù)處理執(zhí)行期間對所述共享行的第一次訪問,就允許訪問所述高速緩存行,而不調(diào)用所述鎖定模塊。
2、 如權(quán)利要求1所述的裝置,還包括驅(qū)逐追蹤模塊,用于如果所述 驅(qū)逐追蹤模塊運(yùn)行在積極模式中,并且在所述事務(wù)處理執(zhí)行期間追蹤到驅(qū) 逐通知,就中止所述事務(wù)處理;以及如果所述驅(qū)逐追蹤模塊運(yùn)行在謹(jǐn)慎模式中,并且在所述事務(wù)處理執(zhí)行期間追蹤到驅(qū)逐通知,就對所述事務(wù)處理 進(jìn)行有效確認(rèn)。
3、 如權(quán)利要求2所述的裝置,其中,所述驅(qū)逐追蹤模塊包括 用于產(chǎn)生所述驅(qū)逐通知的邏輯,其中,所述驅(qū)逐通知表示從由以下所構(gòu)成的組中選擇的訪問遠(yuǎn)程資源對所述共享存儲器行的驅(qū)逐,由于容量 約束造成的所述共享存儲器行的驅(qū)逐,由于遠(yuǎn)程資源對所述共享存儲器行 的探查造成的所述共享存儲器行的驅(qū)逐,以及由于對所述共享存儲器行的 訪問使在與所述事務(wù)處理相關(guān)聯(lián)的事務(wù)處理存儲器組中存儲的所述共享存 儲器行的副本無效造成的所述共享存儲器行的驅(qū)逐,以及處理機(jī),用于如果所述驅(qū)逐追蹤模塊運(yùn)行在所述積極模式中,就基 于所述驅(qū)逐通知中止所述事務(wù)處理,并且如果所述驅(qū)逐追蹤模塊運(yùn)行在所述謹(jǐn)慎模式中,就基于所述驅(qū)逐通知對所述事務(wù)處理進(jìn)行有效確認(rèn)。
4、 如權(quán)利要求l所述的裝置,其中,所述元數(shù)據(jù)單元為一鎖定。
5、 如權(quán)利要求4所述的裝置,其中,所述鎖定在鎖定陣列中,并且其 中,借助于用以存取所述共享存儲器行的地址的散列值,在所述鎖定陣列 中定位所述鎖定。
6、 如權(quán)利要求5所述的裝置,其中,如果所述鎖定是被擁有的,則所 述鎖定的狀態(tài)是第~被擁有狀態(tài),該第一被擁有狀態(tài)由存儲在所述鎖定中 的第一值來表示,以及如果所述鎖定是非被擁有的,則所述鎖定的狀態(tài)是 第二非被擁有狀態(tài),該第二非被擁有狀態(tài)由存儲在所述鎖定中的第二版本 值來表示。
7、 如權(quán)利要求6所述的裝置,其中,所述第一值是偶數(shù),以及其中, 所述第二版本值是奇數(shù)。
8、 如權(quán)利要求6所述的裝置,其中,缺省地,所述鎖定模塊運(yùn)行在積 極模式中,以及其中,如果所述事務(wù)處理被中止的次數(shù)為第一數(shù)量,則所 述鎖定模塊就運(yùn)行在謹(jǐn)慎模式中。
9、 如權(quán)利要求8所述的裝置,其中,當(dāng)運(yùn)行在所述積極模式中時(shí),如 果所述鎖定處于所述第二非被擁有狀態(tài),則在檢查了所述鎖定的狀態(tài)之后, 所述鎖定模塊獲得所述鎖定,并且不在局部事務(wù)處理存儲器組中存儲所述 第二版本值。
10、 如權(quán)利要求8所述的裝置,其中,當(dāng)運(yùn)行在所述謹(jǐn)慎模式中時(shí), 所述鎖定模塊用于如果所述鎖定是所述第二非被擁有狀態(tài),則在檢查了所述鎖定的狀態(tài) 之后,獲得所述鎖定,并將所述第二版本值存儲在局部事務(wù)處理存儲器組 中,以及在提交所述事務(wù)處理時(shí),對所存儲的第二版本值進(jìn)行有效確認(rèn)。
11、 如權(quán)利要求1所述的裝置,其中,所述加速模塊還用于確定對所 述共享行的所述訪問是否是在所述事務(wù)處理執(zhí)行期間對所述共享行的第一 次訪問,并且其中,確定對所述共享行的所述訪問是否是在所述事務(wù)處理 執(zhí)行期間對所述共享行的第一次訪問包括檢査與所述共享存儲器行相關(guān)聯(lián)的事務(wù)處理位,其中,如果在所述事 務(wù)處理執(zhí)行期間還沒有訪問過所述共享存儲器行,則所述事務(wù)處理位表示 第一值,以及如果在所述事務(wù)處理執(zhí)行期間先前己經(jīng)訪問過所述共享存儲 器行,則所述事務(wù)處理位表示第二值。
12、 如權(quán)利要求ll所述的裝置,其中,如果對所述共享行的所述訪問 不是在所述事務(wù)處理執(zhí)行期間對所述共享行的第一次訪問,則允許訪問所 述高速緩存行,而不調(diào)用所述鎖定模塊,該操作包括如果所述事務(wù)處理 位表示所述第二值,則將所述高速緩存行提供給所述執(zhí)行模塊,而不調(diào)用 所述鎖定模塊來檢査所述鎖定的狀態(tài)。
13、 如權(quán)利要求ll所述的裝置,其中,通過使所述事務(wù)處理位成為所 述共享存儲器行內(nèi)的位,將所述事務(wù)處理位與所述共享存儲器行相關(guān)聯(lián)。
14、 如權(quán)利要求1所述的裝置,其中,所述共享存儲器是高速緩沖存儲器,其在存在于微處理器上的至少兩個資源之間進(jìn)行共享,并且其中, 所述執(zhí)行模塊包括定點(diǎn)單元和浮點(diǎn)單元,所述定點(diǎn)單元執(zhí)行定點(diǎn)數(shù)據(jù)操作, 所述浮點(diǎn)單元執(zhí)行浮點(diǎn)數(shù)據(jù)操作。
15、 一種裝置,包括 處理器,其包括高速緩沖存儲器,其包含多個高速緩存行;執(zhí)行資源,其執(zhí)行事務(wù)處理,所述事務(wù)處理包括第一指令,用于 訪問所述多個高速緩存行中的第一高速緩存行,所述第一高速緩存行與第一事務(wù)處理字段和第一鎖定相關(guān)聯(lián);加速模塊,其用于如果所述第一事務(wù)處理字段表示第一值,則在訪問所述第一 高速緩存行之前檢查所述第一鎖定的狀態(tài),如果所述第一事務(wù)處理字段表示第二值,則在訪問所述第一 行之前不檢查所述第一鎖定的狀態(tài),以及如果所述訪問是在所述事務(wù)處理執(zhí)行期間對所述第一高速緩 存行的第一次訪問,則在對于所述第一高速緩存行進(jìn)行所述訪問 時(shí),設(shè)置所述第一事務(wù)處理字段以表示所述第二值。
16、 如權(quán)利要求15所述的裝置,其中,所述多個高速緩存行中的每一 個高速緩存行都能夠存儲多個元素,并且其中,所述第一事務(wù)處理字段包 括多個事務(wù)處理位,所述多個事務(wù)處理位中的每一個都對應(yīng)于在所述第一 高速緩存行中的所述多個元素之一。
17、 如權(quán)利要求16所述的裝置,其中,所述多個元素中的每一個都分 別是從由以下構(gòu)成的組中選擇的指令,操作數(shù),以及邏輯值組;并且其 中,所述第一高速緩存行通過將所述第一高速緩存行中的所述多個元素中 的至少一個元素映射到第一鎖定,來使所述第一高速緩存行與所述第一鎖 定相關(guān)聯(lián)。
18、 如權(quán)利要求15所述的裝置,其中,所述第一高速緩存行通過哈希 表與所述第一鎖定相關(guān)聯(lián),借助于用以存取所述第一高速緩存行的地址的 一部分,在所述哈希表中定位所述第一鎖定。
19、 如權(quán)利要求15所述的裝置,其中,所述第一事務(wù)處理字段包含事 務(wù)處理位,并且其中,所述第一值是高邏輯值,所述第二值是低邏輯值。
20、 如權(quán)利要求15所述的裝置,其中,所述第一指令是裝入指令,并 且其中,所述加速模塊當(dāng)運(yùn)行在第一模式中時(shí),在獲得所述第一鎖定時(shí), 不保存在所述第一鎖定中所存儲的版本號的本地副本,當(dāng)運(yùn)行在第二模式 中時(shí),在獲得所述第一鎖定時(shí),保存在所述第一鎖定中所存儲的版本號的本地副本。
21、 如權(quán)利要求20所述的裝置,其中,所述處理器還包括提交模塊, 所述提交模塊用于如果所述加速模塊運(yùn)行在所述第二模式中,則在提交所述事務(wù)處理之前對所述版本號的本地副本進(jìn)行有效確認(rèn),以確定所述第一行是否被驅(qū)逐; 以及在提交所述事務(wù)處理時(shí),將所述第一事務(wù)處理字段復(fù)位為所述第一值。
22、 如權(quán)利要求15所述的裝置,其中,如果在提交所述事務(wù)處理之前 所述第一行被驅(qū)逐,則所述執(zhí)行資源還執(zhí)行處理機(jī)例程,以中止所述事務(wù) 處理,以及其中,所述處理機(jī)例程能夠以一個事務(wù)處理的粒度回滾被嵌套 的事務(wù)處理。
23、 如權(quán)利要求15所述的裝置,其中,從由以下構(gòu)成的組中選擇所述 處理器主機(jī)處理器、微處理器、處理內(nèi)核、邏輯處理器、以及嵌入式處 理器、多線程處理器和多內(nèi)核處理器。
24、 一種系統(tǒng),包括 多資源微處理器,其包括高速緩沖存儲器,其包含多個高速緩存行;執(zhí)行單元,執(zhí)行事務(wù)處理,所述事務(wù)處理包括對所述多個高速緩 存行中的一高速緩存行的多次訪問; 加速模塊,其用于-在所述事務(wù)處理的未決狀態(tài)期間對所述高速緩存行的所述多 次訪問中的第一次訪問時(shí),將所述執(zhí)行單元的執(zhí)行重新引向與所 述高速緩存行相關(guān)聯(lián)的屏障,并且允許在所述事務(wù)處理的未決狀態(tài)期間對所述高速緩存行的所 述多次訪問中的后續(xù)訪問,而不將執(zhí)行重新弓I向與所述高速緩存 行相關(guān)聯(lián)的屏障;系統(tǒng)存儲器,其耦合到所述多資源微處理器,用于存儲要裝入到所述 高速緩沖存儲器的所述多個高速緩存行中的元素。
25、 如權(quán)利要求24所述的系統(tǒng),其中,從由以下構(gòu)成的組中選擇所述 多資源微處理器中的多個資源中的每一個資源處理器內(nèi)核、邏輯處理器、 處理器線程、以及物理處理器,以及其中,所述系統(tǒng)存儲器是從由以下構(gòu) 成的組中選擇的存儲器件靜態(tài)隨機(jī)存取存儲器(SRAM)、動態(tài)隨機(jī)存取存 儲器(DRAM)、雙倍數(shù)據(jù)速率隨機(jī)存取存儲器(DDR RAM)、和緩沖隨機(jī)存 取存儲器(RAM)。
26、 如權(quán)利要求24所述的系統(tǒng),其中,將所述執(zhí)行單元的執(zhí)行重新引 向與所述高速緩存行相關(guān)聯(lián)的屏障的操作包括如果在所述事務(wù)處理的未決狀態(tài)期間還沒有對所述高速緩存行進(jìn)行第 一次訪問,則將進(jìn)位標(biāo)志設(shè)置為第一值; 檢查所述進(jìn)位標(biāo)志;以及在檢査所述進(jìn)位標(biāo)志之后,如果所述進(jìn)位標(biāo)志表示所述第一值,則調(diào) 用處理機(jī),將所述執(zhí)行單元的執(zhí)行重新引向所述屏障。
27、 如權(quán)利要求24所述的系統(tǒng),其中,將所述執(zhí)行單元的執(zhí)行重新引 向與所述高速緩存行相關(guān)聯(lián)的屏障的操作包括如果在所述事務(wù)處理的未決狀態(tài)期間還沒有對所述高速緩存行進(jìn)行第 一次訪問,就產(chǎn)生中斷;以及用處理機(jī)處理所述中斷,所述處理機(jī)將所述執(zhí)行單元的執(zhí)行重新引向 所述屏障。
28、 如權(quán)利要求27所述的系統(tǒng),其中,確定在所述事務(wù)處理的未決狀 態(tài)期間是否已經(jīng)對所述高速緩存行進(jìn)行了第一次訪問的操作包括檢査與所述高速緩存行相關(guān)聯(lián)的事務(wù)處理位;如果所述事務(wù)處理位表示第一邏輯值,則確定在所述事務(wù)處理的未決 狀態(tài)期間已經(jīng)對所述高速緩存行進(jìn)行了第一次訪問;以及如果所述事務(wù)處理位表示第二邏輯值,則確定在所述事務(wù)處理的未決狀態(tài)期間還沒有對所述高速緩存行進(jìn)行第一次訪問。
29、 如權(quán)利要求28所述的系統(tǒng),其中,在所述事務(wù)處理的未決狀態(tài)期 間對所述高速緩存行進(jìn)行所述第一次訪問時(shí),將所述事務(wù)處理位從所述第 一邏輯值變?yōu)樗龅诙壿嬛担约捌渲?,在提交所述事?wù)處理時(shí),將所 述事務(wù)處理位復(fù)位為所述第一邏輯值。
30、 如權(quán)利要求27所述的系統(tǒng),其中,如果出現(xiàn)高速緩存未命中,則 也會將所述執(zhí)行單元的執(zhí)行重新引向與所述高速緩存行相關(guān)聯(lián)的屏障。
31、 如權(quán)利要求27所述的系統(tǒng),其中,所述屏障包括在鎖定陣列內(nèi)的 一鎖定,借助于用以存取所述高速緩存行的地址的至少一部分在所述鎖定 陣列中定位所述鎖定。
32、 如權(quán)利要求31所述的系統(tǒng),其中,如果所述鎖定被所述多資源處 理器中的資源所擁有,則所述鎖定就表示偶數(shù);以及如果所述鎖定未被所 述多資源處理器中的資源所擁有,則所述鎖定就表示奇數(shù)版本號,以表示 所述高速緩存行的版本。
33、 一種方法,包括執(zhí)行事務(wù)處理內(nèi)的存儲器訪問指令,其中,所述存儲器訪問指令存取 共享存儲器中的單元;如果與所述單元相關(guān)聯(lián)的事務(wù)處理位表示第一值,則訪問所述單元, 而不用確定映射到所述共享存儲器中的所述單元的鎖定的狀態(tài);如果與所述單元相關(guān)聯(lián)的所述事務(wù)處理位表示第二值,貝U: 確定所述鎖定的狀態(tài),如果所述鎖定的狀態(tài)表示非被擁有狀態(tài),則獲得所述鎖定并訪問 所述單元,將所述事務(wù)處理位設(shè)置為所述第一值;以及 如果所述單元被驅(qū)逐,并且與所述單元相關(guān)聯(lián)的所述事務(wù)處理位表示 所述第一值,則產(chǎn)生驅(qū)逐通知。 '
34、 如權(quán)利要求33所述的方法,其中,基于從由以下構(gòu)成的組中選擇 的驅(qū)逐事件來產(chǎn)生所述驅(qū)逐通知驅(qū)逐中斷、對驅(qū)逐計(jì)數(shù)器的檢查、以及 由于容量約束造成的驅(qū)逐。
35、 如權(quán)利要求33所述的方法,其中,如果所述鎖定表示奇數(shù)版本值, 則所述鎖定的狀態(tài)就表示所述非被擁有狀態(tài),并且如果所述鎖定表示偶數(shù) 值,則所述鎖定的狀態(tài)就表示被擁有狀態(tài)。
36、 如權(quán)利要求35所述的方法,其中,獲得所述鎖定的操作包括將 所述偶數(shù)值寫入所述鎖定中。
37、 如權(quán)利要求36所述的方法,還包括 如果運(yùn)行在積極模式中,貝lh在將所述偶數(shù)值寫入所述鎖定中之前,不存儲所述奇數(shù)版本值, 如果在所述事務(wù)處理的未決狀態(tài)期間沒有產(chǎn)生驅(qū)逐通知,則提交所述事務(wù)處理,以及.如果在所述事務(wù)處理的未決狀態(tài)期間產(chǎn)生了驅(qū)逐通知,則中止所述事務(wù)處理。
38、 如權(quán)利要求37所述的方法,還包括 如果運(yùn)行在謹(jǐn)慎模式中-在將所述偶數(shù)值寫入所述鎖定中之前,存儲所述奇數(shù)版本值, 如果在所述事務(wù)處理的未決狀態(tài)期間沒有產(chǎn)生驅(qū)逐通知,則提交所述事務(wù)處理,以及如果在所述事務(wù)處理的未決狀態(tài)期間產(chǎn)生了驅(qū)逐通知,則在提交所述事務(wù)處理之前對所述奇數(shù)版本值進(jìn)行有效確認(rèn)。
39、 如權(quán)利要求38所述的方法,其中,所述積極模式是缺省模式,以 及其中,如果所述事務(wù)處理中止了預(yù)定次數(shù),則發(fā)生謹(jǐn)慎模式操作。
40、 如權(quán)利要求33所述的方法,其中,從由以下構(gòu)成的組選擇對所述 單元的訪問從所述單元讀取、向所述單元寫入、從所述單元裝入、以及 存儲到所述單元。
41、 一種方法,包括確定用以存取共享存儲器中的單元的訪問是否是在事務(wù)處理的未決狀 態(tài)期間對所述單元的第一次訪問;如果所述訪問是在所述事務(wù)處理的未決狀態(tài)期間對所述單元的所述第 一次訪問,則將執(zhí)行重新引向與所述共享存儲器中的單元相關(guān)聯(lián)的屏障;如果所述訪問是在所述事務(wù)處理的未決狀態(tài)期間的所述第一次訪問之 后的訪問,則訪問所述共享存儲器中的所述單元,而不將執(zhí)行重新引向與 所述共享存儲器中的所述單元相關(guān)聯(lián)的屏障。
42、 如權(quán)利要求41所述的方法,其中,所述單元用于存儲多個元素, 以及其中,從由以下構(gòu)成的組中分別選擇所述多個元素中的每一個指令、 操作數(shù)、數(shù)據(jù)操作數(shù)、以及邏輯值組。
43、 如權(quán)利要求42所述的方法,其中,要存儲在所述單元中的所述多 個元素中的每一個元素都與事務(wù)處理位相關(guān)聯(lián),以及其中,確定用以存取 所述共享存儲器中的所述單元的所述訪問是否是對所述單元的第一次訪問 的步驟包括確定在所述多個元素中由用以存取所述單元的所述訪問所存取的至少 一個元素;檢查與所述多個元素中的所述至少一個元素相關(guān)聯(lián)的所述事務(wù)處理位;如果與所述至少一個元素相關(guān)聯(lián)的所述事務(wù)處理位表示第一值,則確 定用以存取所述共享存儲器中的所述單元的所述訪問是對所述單元的第一 次訪問。
44、 如權(quán)利要求41所述的方法,其中,確定用以存取所述共享存儲器中的所述單元的所述訪問是否是對所述單元的第一次訪問的步驟包括檢查與所述單元相關(guān)聯(lián)的事務(wù)處理位;如果所述事務(wù)處理位表示第一值,則確定用以存取所述共享存儲器中 的所述單元的所述訪問是第一次訪問。
45、 如權(quán)利要求44所述的方法,其中,如果所述訪問是在所述事務(wù)處 理的未決狀態(tài)期間對所述單元的所述第一次訪問,則將執(zhí)行重新引向與所 述共享存儲器中所述單元相關(guān)聯(lián)的屏障,該步驟包括如果所述事務(wù)處理位表示所述第一值,則產(chǎn)生事務(wù)處理未命中中斷; 執(zhí)行處理機(jī),以處理所述事務(wù)處理未命中中斷,其中,處理所述事務(wù)處理未命中中斷的操作包括在訪問所述單元之前,檢査與所述單元相關(guān)聯(lián)的所述屏障。
46、 如權(quán)利要求45所述的方法,其中,與所述單元相關(guān)聯(lián)的所述屏障 包括在哈希表中與所述單元相關(guān)聯(lián)的鎖定,其中,借助于用以存取所述共 享存儲器中的所述單元的地址的一部分,在所述哈希表中定位所述鎖定。
47、 如權(quán)利要求46所述的方法,還包括在將執(zhí)行重新引向所述屏障并獲得與所述單元相關(guān)聯(lián)的所述鎖定之 后,訪問所述單元;以及在訪問所述單元之后,設(shè)置與所述單元相關(guān)聯(lián)的所述事務(wù)處理位以表 示第二值。
48、 如權(quán)利要求47所述的方法,還包括確定所述訪問是否是在所述事務(wù)處理的未決狀態(tài)期間的所述第一次訪 問之后的訪問,其中,確定所述訪問是否是所述第一次訪問之后的訪問的 操作包括檢查與所述單元相關(guān)聯(lián)的所述事務(wù)處理位,以及 如果所述事務(wù)處理位表示所述第二值,則確定所述訪問是所述第一次 訪問之后的訪問。
全文摘要
一種用于加速事務(wù)處理的執(zhí)行的方法和裝置。僅在第一次在事務(wù)處理中訪問共享存儲器行時(shí),調(diào)用/執(zhí)行與事務(wù)處理中的存儲器訪問所存取的共享存儲器行相關(guān)聯(lián)的屏障。提供了硬件支持,例如事務(wù)處理字段/事務(wù)處理位,以確定訪問是否是在事務(wù)處理的未決狀態(tài)期間對共享存儲器行的第一次訪問。另外,在積極操作模式中,在提交時(shí)不對表示存儲在共享存儲器行中的元素的版本的版本號進(jìn)行存儲和有效確認(rèn),以節(jié)省有效確認(rèn)的成本。而且,即使在謹(jǐn)慎模式中,如果在事務(wù)處理的執(zhí)行期間沒有出現(xiàn)對所訪問的共享存儲器行的驅(qū)逐,則其存儲版本號以執(zhí)行有效確認(rèn),不會造成有效確認(rèn)的開支。
文檔編號G06F9/46GK101495968SQ200780002017
公開日2009年7月29日 申請日期2007年2月6日 優(yōu)先權(quán)日2006年2月7日
發(fā)明者A-R·阿德-塔巴塔巴伊, B·薩哈, Q·雅各布森 申請人:英特爾公司