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