用于硬件鎖省略(hle)的后期鎖獲取機(jī)制的裝置和方法
【專利摘要】本發(fā)明描述了用于硬件鎖省略(HLE)的后期鎖獲取機(jī)制的裝置和方法。響應(yīng)于檢測到后期鎖獲取事件,如計(jì)時(shí)器期滿、填滿的高速緩存集合以及不可撤回事件,可啟動后期鎖獲取。停止連貫的臨界段直到利用與連貫的臨界段操作相關(guān)聯(lián)的訪問緩沖器項(xiàng)的字段來完成后期鎖獲取。
【專利說明】用于硬件鎖省略(HLE)的后期鎖獲取機(jī)制的裝置和方法
[0001]本申請是申請?zhí)枮?00810190835.2、申請日為2008年11月7日、發(fā)明名稱為“用于硬件鎖省略(HLE)的后期鎖獲取機(jī)制的裝置和方法”的發(fā)明專利申請的分案申請。
【技術(shù)領(lǐng)域】
[0002]本發(fā)明涉及處理器執(zhí)行領(lǐng)域,并且尤其涉及獲取用于代碼段執(zhí)行的鎖定。
【背景技術(shù)】
[0003]在半導(dǎo)體處理和邏輯設(shè)計(jì)方面的進(jìn)步已經(jīng)允許在集成電路器件中可存在的邏輯數(shù)量上的增加。結(jié)果,計(jì)算機(jī)系統(tǒng)配置已經(jīng)從系統(tǒng)中的單個或者多個集成電路演進(jìn)成存在于單個集成電路上的多核以及多邏輯處理器。處理器或者集成電路通常包括單個處理器管芯,其中處理器管芯可包括任意數(shù)量的核或者邏輯處理器。
[0004]在集成電路上的核以及邏輯處理器數(shù)量的不斷增加使得能夠執(zhí)行更多的軟件線程。然而,可同時(shí)執(zhí)行的軟件線程數(shù)量上的增加已經(jīng)造成了關(guān)于使諸軟件線程間共享的數(shù)據(jù)同步的問題。一種在多核或者多邏輯處理器系統(tǒng)中訪問共享數(shù)據(jù)的常用解決方案包括利用鎖來確保對共享數(shù)據(jù)多個訪問上的互斥。然而,執(zhí)行多個軟件線程的日益增加的能力潛在可能導(dǎo)致錯誤競爭和執(zhí)行的串行化。
[0005]例如,考慮一種持有共享數(shù)據(jù)的散列表。利用鎖系統(tǒng),程序員就可對整個散列表加鎖,從而允許一個線程訪問整個散列表。然而,其它線程的吞吐量和性能潛在可能受到不利影響,因?yàn)樵阪i被釋放之前他們不能訪問散列表中的任何項(xiàng)?;蛘?,散列表中的每個項(xiàng)可被加鎖。然而,這增加了編程復(fù)雜度,因?yàn)槌绦騿T不得不考慮在散列表之內(nèi)更多的鎖。
[0006]另一種數(shù)據(jù)同步技術(shù)包括使用事務(wù)性存儲器(TM)。通常事務(wù)性執(zhí)行包括投機(jī)地執(zhí)行多個微操作,操作,或者指令的編組。在上面的例子中,兩個線程皆在散列表內(nèi)執(zhí)行,且其訪問被監(jiān)控/跟蹤。如果兩個線程訪問/改變相同的項(xiàng),則可能中斷這兩個事務(wù)中的一個來解決沖突。然而,一些應(yīng)用程序可能不能利用事務(wù)性存儲器編程,結(jié)果,通常稱為硬件鎖省略(HLE)的硬件數(shù)據(jù)同步技術(shù)被用于取消鎖以獲得類似于事務(wù)性存儲器的同步效果。
[0007]結(jié)果,HLE能夠檢測并且預(yù)側(cè)代碼的臨界段。但是,對于事務(wù)性存儲器或者通過HLE在臨界段的執(zhí)行期間,當(dāng)HLE預(yù)側(cè)不正確的時(shí)候,試探性訪問跟蹤使存儲器溢出,或者遇到不可取消事件,通常,中斷并且重新開始臨界段。然而,中斷臨界段可能浪費(fèi)了在中斷之前所執(zhí)行的操作執(zhí)行周期。
【專利附圖】
【附圖說明】
[0008]本發(fā)明通過舉例進(jìn)行說明并且不希望受到附圖圖形的限制。
[0009]圖1示出包括后期鎖獲取機(jī)制的多處理部件處理器的實(shí)施例。
[0010]圖2示出對于臨界段執(zhí)行后期鎖獲取的邏輯的實(shí)施例。
[0011]圖3a示出對于當(dāng)前臨界段執(zhí)行后期鎖獲取方法的流程圖的實(shí)施例。
[0012]圖3b示出在對于當(dāng)前臨界段的后期鎖獲取期間停止后續(xù)臨界段操作方法的流程圖的實(shí)施例。
[0013]圖3c示出在對于當(dāng)前臨界段的后期鎖獲取期間停止后續(xù)臨界段操作方法的流程圖的另一個實(shí)施例。
[0014]詳細(xì)說明
[0015]在下面的說明中,闡述了很多特定的細(xì)節(jié),比如硬件鎖省略(HLE)的特定硬件支持的例子、特定的跟蹤/元數(shù)據(jù)方法、處理器中局部/存儲器的特定類型、以及存儲器存取和位置的特定類型等等,以便提供對本發(fā)明的徹底理解。但是,本領(lǐng)域技術(shù)人員將會明白可不必采用這些細(xì)節(jié)來實(shí)施本發(fā)明。在其它的例子中,沒有詳細(xì)地描述公知的組件或者方法,比如軟件中臨界段的編碼,臨界段的劃界,特定的多核和多線程處理器體系結(jié)構(gòu),中斷生成/處理,高速緩存組織,和微處理器特定的操作細(xì)節(jié),以免帶來對本發(fā)明不必要的混淆。
[0016]此處所描述的方法和裝置是用于在臨界段執(zhí)行期間的后期鎖(Iate-1ock)獲取的方案。具體地說,主要關(guān)于多核處理器計(jì)算機(jī)系統(tǒng)來討論后期鎖獲取方案。但是,用于后期鎖獲取方案的方法和裝置并不因此受限,因?yàn)樗鼈兛赡茉谌魏渭呻娐费b置或者系統(tǒng)上或與其相關(guān)聯(lián)以及與諸如執(zhí)行臨界段的硬件/軟件線程的其它資源結(jié)合地實(shí)現(xiàn),所述集成電路裝置或者系統(tǒng)比如為蜂窩電話,個人數(shù)字助理,嵌入式控制器,移動式平臺,桌面平臺,和服務(wù)器平臺。此外,還關(guān)于在硬件鎖省略(HLE)期間的臨界段執(zhí)行來主要地討論后期鎖獲取方案。然而,在任何臨界段執(zhí)行方案期間,比如在事務(wù)性執(zhí)行期間,都可使用后期鎖的獲取。
[0017]參考圖1,示出多核處理器100的實(shí)施例,其能夠執(zhí)行用于臨界段的后期鎖獲取。如圖所示,物理處理器100包括任何數(shù)量的處理部件。處理部件指代線程、進(jìn)程、上下文、邏輯處理器、硬件線程、核和/或任何可能共享對處理器資源訪問的處理部件,比如保留單元、執(zhí)行單元、流水線和上級高速緩存/存儲器。物理處理器通常指代集成電路,其可包括許任何數(shù)量的處理部件,比如核或者硬件線程。
[0018]核通常指代位于集成電路上能夠維持獨(dú)立體系結(jié)構(gòu)狀態(tài)的邏輯,其中每一個獨(dú)立維持的體系結(jié)構(gòu)狀態(tài)都與至少一些專用執(zhí)行資源有關(guān)。與核相反,硬件線程通常指代位于集成電路上能夠維持獨(dú)立體系結(jié)構(gòu)狀態(tài)的任何邏輯,其中獨(dú)立維持的體系結(jié)構(gòu)狀態(tài)共享對執(zhí)行資源的訪問。如圖1中所示出的,物理處理器100包括雙核,核101和102,它們共享對上級高速緩存110的訪問。此外,核101包括兩個硬件線程IOla和IOlb,而核102包括兩個硬件線程102a和102b。因此,諸如操作系統(tǒng)或者應(yīng)用程序的軟件實(shí)體可能將處理器100視為四個獨(dú)立的處理器,同時(shí)處理器100能夠執(zhí)行四個軟件線程。
[0019]如同所看見的,當(dāng)某些資源是共享的而其它資源專用于一個體系結(jié)構(gòu)狀態(tài)的時(shí)候,硬件線程和核的術(shù)語之間的界線是重疊的。然而通常,操作系統(tǒng)將核和硬件線程視為獨(dú)立的邏輯處理器,其中操作系統(tǒng)能夠獨(dú)立地在每個邏輯處理器上調(diào)度操作。因此,處理部件包括任何能夠維持上下文的上述實(shí)體,比如核,線程,硬件線程,邏輯處理機(jī),虛擬機(jī),或者其它的處理資源。
[0020]在一個實(shí)施例中,處理器100是能夠并行地執(zhí)行多個線程的多核處理器。這里,第一線程與體系結(jié)構(gòu)狀態(tài)寄存器IOla相關(guān)聯(lián),第二線程與體系結(jié)構(gòu)狀態(tài)寄存器IOlb相關(guān)聯(lián),第三線程與體系結(jié)構(gòu)狀態(tài)寄存器102a相關(guān)聯(lián),并且第四線程與體系結(jié)構(gòu)狀態(tài)寄存器102b相關(guān)聯(lián)。在一個實(shí)施例中,對處理器100中的處理部件的參考,包括對核101和102、以及線程101a、101b、102a和102b的參考。在另一個實(shí)施例中,處理部件指的是在處理域的層級中在相同級別上的元件。例如,核101和102位于相同的域級別中,線程IOla和IOlb位于核101中的相同域級別中,而線程101a、101b、102a和102b位于核101和102中的相同域
級別中。
[0021]盡管處理器100可包括不對稱的核,即具有不同配置、功能單元和/或邏輯的核,但是在圖1中示出對稱的核。結(jié)果,將不會詳細(xì)地討論示出為與核101相同的核102,以避免使說明模糊不清。
[0022]如同所說明的,在體系結(jié)構(gòu)狀態(tài)寄存器IOlb中復(fù)制了體系結(jié)構(gòu)狀態(tài)寄存器101a,因此能夠?yàn)樘幚聿考蘒Ola和處理部件IOlb存儲獨(dú)立的體系結(jié)構(gòu)狀態(tài)/上下文。還可能為線程IOla和IOlb復(fù)制其它較小的資源,比如指令指針和在重命名分配器邏輯130中的重命名邏輯。可通過分割來共享一些資源,比如在重排序/退役單元135中的重排序緩沖器、ILTB120、加載/存儲緩沖器180以及隊(duì)列??蓮氐椎毓蚕砥渌馁Y源,比如通用內(nèi)部寄存器、頁表基址寄存器、低級數(shù)據(jù)-高速緩存以及數(shù)據(jù)-TLB110、執(zhí)行單元140以及無序單元135。注意可以任何共享核101資源的方式來實(shí)現(xiàn)線程。
[0023]總線接口模塊105和諸如系統(tǒng)存儲器175、芯片組、北橋或其它的集成電路等處理器100外部的設(shè)備通信。存儲器175可專用于處理器100或被系統(tǒng)中的其它設(shè)備共享。存儲器175的例子包括動態(tài)隨機(jī)存取存儲器(DRAM),靜態(tài)RAM(SRAM),非易失性存儲器(NV存儲器),以及長期存儲器。
[0024]通常地,總線接口單元105包括輸入/輸出(I/O)緩沖器以發(fā)送和接收在互連170上的總線信號?;ミB170的例子包括射電收發(fā)器邏輯(GTL)總線,GTL+總線,雙倍數(shù)據(jù)率(DDR)總線,并發(fā)總線,差分總線,高速緩存相干總線,點(diǎn)對點(diǎn)總線,多站總線或者其它實(shí)現(xiàn)任何已知總線協(xié)議的已知互連。如所示,總線接口單元105還與上級高速緩存110通信。
[0025]上級或遠(yuǎn)端高速緩存110用于高速緩沖近期在元件上所取回和/或操作的元素。注意上級或遠(yuǎn)端指的是高速緩存級別的增加或者更遠(yuǎn)離執(zhí)行單元。在一個實(shí)施例中,上級高速緩存110是第二級數(shù)據(jù)高速緩存。但是,上級高速緩存110并不如此受到限制,因?yàn)樗赡苁潜环Q為蹤跡高速緩存的指令高速緩存或包括該指令高速緩存。蹤跡高速緩存可代替地耦合在譯碼器125之后以存儲近期解碼的蹤跡。模塊120還可能包括用于預(yù)測執(zhí)行/采用分支的分支目標(biāo)緩沖器和用于存儲指令的地址翻譯項(xiàng)的指令-翻譯緩沖器(Ι-TLB)。這里,能夠進(jìn)行投機(jī)執(zhí)行的處理器可能預(yù)取回以及投機(jī)地執(zhí)行所預(yù)測的分支。
[0026]解碼模塊125與取回單元120相耦合以解碼取回的元素。在一個實(shí)施例中,處理器100與指令集體系結(jié)構(gòu)(ISA)相關(guān)聯(lián),其定義/規(guī)定在處理器100上的可執(zhí)行指令。這里,由ISA所識別的通常機(jī)器代碼指令包括一部分稱為操作碼(opcode)的指令,其參考/規(guī)定要執(zhí)行的指令或操作。
[0027]在一個例子中,分配器和重命名器區(qū)塊130包括分配器以以保留諸如為存儲指令處理結(jié)果的寄存器堆之類的資源。但是,線程IOla和IOlb可能能夠無序地執(zhí)行,其中分配器和重命名器區(qū)塊130還保留其它的資源,諸如重排序緩沖器以跟蹤指令結(jié)果。單元130還可包括寄存器重命名器來將程序/指令參考寄存器重命名為其它的在處理器100內(nèi)部的寄存器。
[0028]重排序器/退役單元135包括諸如上述的重排序器緩沖器以及加載/存儲緩沖器180之類的組件以支持無序執(zhí)行以及無序執(zhí)行的指令的稍后退役。在一個實(shí)施例中,緩沖器180能夠保存字段/值以指示將要阻塞/停止的相關(guān)的存儲器存取,直到完成在進(jìn)程中對臨界段獲得后期鎖。盡管將緩沖器180顯示為位于一個區(qū)域中,緩沖器180以及后期鎖獲取邏輯不因此受到限制。事實(shí)上,跟蹤邏輯180可能分布在整個處理器100上,此外還與處理器流水線的前端或者后端的任何部分相關(guān)聯(lián)。
[0029]在一個實(shí)施例中,調(diào)度器以及執(zhí)行單元區(qū)塊140包括在執(zhí)行單元上調(diào)度指令/操作的調(diào)度器單元。事實(shí)上,可根據(jù)它們的類型可用性來在執(zhí)行單元上調(diào)度指令/操作。例如,在具有可用的浮點(diǎn)執(zhí)行單元的執(zhí)行單元的端口上來調(diào)度浮點(diǎn)指令。還包括與執(zhí)行單元相關(guān)聯(lián)的寄存器堆以存儲信息指令處理結(jié)果。示例性的執(zhí)行單元包括浮點(diǎn)執(zhí)行單元、整型執(zhí)行單元、跳轉(zhuǎn)執(zhí)行單元、加載執(zhí)行單元、存儲執(zhí)行單元及其它已知的執(zhí)行單元。
[0030]從上面可以發(fā)現(xiàn),如所說明的,處理器100能夠執(zhí)行至少四個軟件線程。此外,在一個實(shí)施例中,處理器100能夠進(jìn)行事務(wù)性執(zhí)行。事務(wù)性執(zhí)行通常包括將多個指令或操作編組為事務(wù)、代碼的原子段或者代碼的臨界段。在一些情況中,字指令的使用引用宏-指令,其由多個操作組成。在處理器中,通常投機(jī)地執(zhí)行事務(wù)并且在事務(wù)的結(jié)尾提交事務(wù)。如同此處所使用的,事務(wù)的未決指的是事務(wù)已經(jīng)開始執(zhí)行并且沒有提交或中斷,即未決。通常,當(dāng)事務(wù)仍未決時(shí),跟蹤存儲器中的被加載和寫入的位置。
[0031]當(dāng)那些存儲器位置成功確認(rèn)時(shí),提交事務(wù),并且使事務(wù)期間所作的更新全局可見。然而,如果在事務(wù)未決期間事務(wù)是無效的,那么重新開始事務(wù)而不使更新全局可見。通常,將軟件劃界歸入編碼來識別事務(wù)。例如,可通過指示事務(wù)開始以及事務(wù)終止的指令來對事務(wù)進(jìn)行分組。然而,事務(wù)執(zhí)行通常利用程序員或者編譯器來插入事務(wù)的開始以及終止指令。
[0032]因此,在一個實(shí)施例中,處理器100能夠進(jìn)行硬件鎖省略(HLE),其中硬件能夠取消臨界段的鎖定并且同時(shí)執(zhí)行它們。這里,沒有事務(wù)性支持的預(yù)編譯的二進(jìn)制碼(binaries)或者利用鎖定編程的新編譯的二進(jìn)制編碼能夠通過HLE的支持從同時(shí)執(zhí)行中受益。由于提供了透明的兼容性,HLE通常包括用于檢測臨界段并跟蹤存儲器存取的硬件。事實(shí)上,由于取消了確保對數(shù)據(jù)排除的鎖,可以以如同在事務(wù)執(zhí)行期間類似的方式來跟蹤存儲器存取。因而,可以在事務(wù)執(zhí)行期間利用在此討論的后期鎖獲取方案,HLE,另一個存儲器存取跟蹤方案,或者它們的組合。因此,在下面臨界段執(zhí)行的討論可能包括對事務(wù)臨界段或者由HLE檢出的臨界段的參考。
[0033]在一個實(shí)施例中,利用所訪問的存儲設(shè)備來跟蹤來自臨界段的訪問。例如,利用下級數(shù)據(jù)高速緩存150來跟蹤來自臨界段的訪問;與事務(wù)性執(zhí)行或者HLE相關(guān)聯(lián)。高速緩存150存儲近期訪問的元素,例如數(shù)據(jù)操作數(shù),其可能被保持為存儲器相干狀態(tài),例如修改、獨(dú)占、共享以及無效(MESI)狀態(tài)。高速緩存150可以組織為完全相關(guān)聯(lián)、集合相關(guān)聯(lián)、直接映射或者其它已知的高速緩存組織。雖然沒有說明,但D-TLB可與高速緩存150相關(guān)聯(lián)以存儲近期對物理地址翻譯的虛擬/線性化。
[0034]如所示,線151、152和153包括區(qū)段以及字段,例如區(qū)段151a和字段151b。在一個實(shí)施例中,字段151b、152b和153b以及區(qū)段151a、152a和153a屬于組成線151,152和153的相同存儲器陣列的一部分。在另一個實(shí)施例中,字段151b、152b和153b是從線151a、152a和153a通過單獨(dú)的專用端口訪問的單獨(dú)陣列的一部分。然而,即使當(dāng)字段151b、152b和153b是單獨(dú)陣列的一部分時(shí),字段151b、152b和153b分別與區(qū)段151a、152a和153a相關(guān)聯(lián)。結(jié)果,當(dāng)參考高速緩存150的線151時(shí),線151可能包括區(qū)段151a、151b或它們的組合。例如,當(dāng)從線151加載時(shí),可以從區(qū)段151a加載。此外,當(dāng)設(shè)置跟蹤字段來跟蹤來自線151的加載時(shí),訪問字段151b。
[0035]在一個實(shí)施例中,線、位置、區(qū)塊或字——如線151a、152a和153a——能夠存儲多個元素。元素指的是任何指令、操作數(shù)、數(shù)據(jù)操作數(shù)、變量或其它邏輯值的分組,其通常存儲在存儲器中。作為例子,高速緩存線151在區(qū)段151a中存儲四個元素,如四個操作數(shù)。存儲在高速緩存線151a中的元素可處于打包或壓縮狀態(tài)以及解壓縮狀態(tài)中。此外,可以將元素與線的邊界,集合,或者高速緩存150的路線對準(zhǔn)或者不對準(zhǔn)地存儲在高速緩存150中。在下面將關(guān)于示例性的實(shí)施例來更詳細(xì)地討論存儲器150。
[0036]高速緩存150和其它在處理器100中的特征和設(shè)備都對邏輯值進(jìn)行存儲和/或操作。通常,還將邏輯電平、邏輯值或邏輯的值的使用稱為I和0,其簡單地表示二進(jìn)制邏輯狀態(tài)。例如,I指的是高邏輯電平,而O指的是低邏輯電平。已經(jīng)使用了在計(jì)算機(jī)系統(tǒng)其它的值表示,如邏輯值或二進(jìn)制值的十進(jìn)制和十六進(jìn)制表示。例如,以十進(jìn)制數(shù)10為例,其按二進(jìn)制表示為1010,按十六進(jìn)制表示為字母A。
[0037]在圖1說明的實(shí)施例中,跟蹤對線151、152和153的訪問以支持臨界段的執(zhí)行。訪問包括諸如讀取、寫入、存儲、加載、收回、監(jiān)聽或其它已知的對存儲器單元的訪問等操作。使用諸如字段151b、152b和153b之類的訪問跟蹤字段來跟蹤對它們相應(yīng)存儲器線的訪問。例如,存儲器線/區(qū)段151a與相應(yīng)的跟蹤字段151b相關(guān)聯(lián)。這里,訪問跟蹤字段151b與高速緩存線151a相關(guān)并相對應(yīng),因?yàn)楦欁侄?51b包括作為高速緩存線151 —部分的位。如所示,相關(guān)聯(lián)可通過物理布局,或者其它的相關(guān)聯(lián),如將訪問跟蹤字段151關(guān)聯(lián)或者映射到硬件或軟件查找表中的存儲器線151a或151b。
[0038]如簡化說明的例子,假定訪問跟蹤字段151b、152b和153b包括兩個事務(wù)位:第一讀跟蹤位和第二寫跟蹤位。在缺省狀態(tài)中一即第一邏輯值,在訪問跟蹤字段151b、152b和153b中的第一和第二位分別表示高速緩存線151、152和153在臨界段執(zhí)行期間沒有被訪問。
[0039]假定在臨界段中遇到從線151a加載的加載操作。將第一讀跟蹤位從缺省狀態(tài)更新為第二訪問狀態(tài),例如第二邏輯值。這里,持有第二邏輯值的第一讀取跟蹤位表示從高速緩存線151的讀取/加載發(fā)生在臨界段執(zhí)行期間??梢园搭愃品绞絹硖幚泶鎯Σ僮饕愿碌谝粚懭敫櫸粊肀砻髟谂R界段執(zhí)行期間發(fā)生了對存儲器單元的存儲。
[0040]因而,如果檢查了在與線151相關(guān)聯(lián)的字段151b中的跟蹤位,并且事務(wù)位表示缺省狀態(tài),那么高速緩存線151在臨界段的未決期間沒有被訪問。相反地,如果第一讀取跟蹤位表示為第二值,那么高速緩存線151在臨界段執(zhí)行期間先前已被讀取。此外,如果第一寫入跟蹤位表示第二值,那么在臨界段的未決期間就發(fā)生了對線151的寫入。
[0041]訪問字段151b、152b和153b可用于支持任何類型的事務(wù)性執(zhí)行或HLE。在其中處理器100能夠進(jìn)行硬件事務(wù)性執(zhí)行的一個實(shí)施例中,訪問字段151b、152b和153b將檢測沖突并且執(zhí)行確認(rèn)。在其中硬件事務(wù)性存儲器(HTM)、軟件事務(wù)性存儲器(STM)或它們的組合用于事務(wù)性執(zhí)行的另一個實(shí)施例中,訪問跟蹤字段151b、152b和153b提供相似的跟蹤以及確認(rèn)功能。
[0042]如同第一個例子中如何將訪問字段一特別是跟蹤位一潛在地用于幫助事務(wù)性執(zhí)行那樣,序列號為 11/349,787 的題為 “Hardware Acceleration for A SoftwareTransactional Memory System(用于軟件事務(wù)性存儲器系統(tǒng)的硬件加速)”的共同待審批申請公開了訪問字段/事務(wù)位對于加快STM的使用。作為另一個例子,在序列號為11/479,902以及代理記錄編號為 042390.P23547、題為 “Global Overflow Method for VirtualizedTransactional Memory (用于虛擬化事務(wù)性存儲器的全局溢出方法)”的共同待審批申請中論述了包括將訪問字段/事務(wù)跟蹤位的狀態(tài)存儲到第二存儲器中的擴(kuò)展/虛擬化事務(wù)性存儲器。
[0043]轉(zhuǎn)向圖2,示出對于臨界段啟動后期鎖獲取邏輯的實(shí)施例。如上所述,事務(wù)通常由開始事務(wù)以及終止事務(wù)指令來劃分,其提供了對臨界段容易的標(biāo)識。但是,HLE包括檢測/標(biāo)識以及可能地預(yù)測臨界段、取消劃分臨界段的鎖、用于對臨界段異常中斷的重新運(yùn)行的檢查點(diǎn)寄存器狀態(tài)、跟蹤嘗試的存儲器更新以及檢測潛在性數(shù)據(jù)沖突。在檢測/標(biāo)識臨界段中的一個困難是在常規(guī)鎖指令以及區(qū)別臨界段的鎖/鎖解除指令之間劃出輪廓,其中常規(guī)鎖指令沒有定義臨界段。
[0044]在一個實(shí)施例中,對于HLE,由鎖指令(即開始臨界段指令)以及匹配的鎖解除指令(即終止臨界段指令)定義臨界段。鎖指令可包括從尋址單元的加載一即檢查鎖是否可用,以及對尋址單元的修改/寫入一即對該尋址單元進(jìn)行更新以獲取鎖??梢杂米麈i指令的幾個指令的例子包括比較和交換指令、位測試和設(shè)置指令以及交換和加法指令。在英特爾的IA-32和IA-64指令集中,上述指令包括CMPXCHG、BTS和XADD,如同在以上討論的
英特爾3 64和IA-32指令集文件中所描述的。
[0045]作為其中檢出/認(rèn)識諸如CMPXCHG、BTS和XADD的預(yù)定指令的例子,檢測邏輯和/或解碼邏輯檢測到利用操作碼字段或指令其它字段的指令。作為例子,CMPXCHG與以下操作碼相關(guān):OF B0/r, REX+0F B0/r和REX.W+0F Bl/r。在另一個實(shí)施例中,利用與指令有關(guān)的操作來檢測鎖指令。例如,在x86中以下三個存儲器微-操作通常用于執(zhí)行原子存儲器更新來指示可能的鎖指令:(I)具有操作碼0x63的Load_Store_Intent (L_S_I) ; (2)具有操作碼0x76的STA ;以及(3)具有操作碼0x7F的STD。這里,L_S_I以獨(dú)占擁有狀態(tài)獲取存儲器單元并且執(zhí)行對存儲器單元的讀取,盡管STA和STD操作修改并且寫入存儲器單元。換句話說,檢測邏輯搜索有存儲意向的加載(L_S_I)來定義臨界段的開始。注意鎖指令可能具有任意數(shù)量的其它與讀取、寫入、修改存儲器操作相關(guān)聯(lián)的非-存儲器以及其它存儲器操作。
[0046]通常利用堆棧,例如鎖堆棧205來保持項(xiàng),例如與鎖指令相關(guān)的項(xiàng)206。鎖指令項(xiàng)(LIE) 206可能包括任意數(shù)量的字段來存儲臨界段相關(guān)的信息,如鎖指令存儲物理地址(LIStr PA)、鎖指令加載值以及加載大小、解鎖值、鎖指令存儲值以及大小、鎖定值、微操作計(jì)數(shù)、釋放標(biāo)志、后期鎖獲取標(biāo)志以及最后指令指針字段。
[0047]這里與鎖指令相對應(yīng)的鎖釋放指令劃分臨界段的末端。檢測邏輯搜索對應(yīng)于由鎖指令修改的地址的鎖釋放指令。注意由鎖指令修改的地址可保持在鎖堆棧205上的LIE206中。結(jié)果,在一個實(shí)施例中,鎖釋放指令包括任何將由相應(yīng)的鎖指令所修改的地址設(shè)置回解鎖值的存儲操作。將由存儲在鎖堆棧206中的L_S_I指令所引用的地址與后續(xù)的存儲指令相比較來檢測相應(yīng)的鎖釋放指令。可以在題為“A CRITICAL SECTION DETECTION ANDPREDICTION MECHANISM FOR HARDWARE LOCK ELISION (對硬件鎖省略的臨界段檢測和預(yù)測機(jī)制)”的申請序列號為11/599,009的共同待審批申請中找到更多的有關(guān)檢測和預(yù)測臨界段的息。
[0048]換句話說,在一個實(shí)施例中,對于HLE,臨界段由L_S_I指令和相應(yīng)的鎖釋放存儲指令來劃分。類似的,由開始事務(wù)指令和終止事務(wù)指令來定義事務(wù)的臨界段。因此,對開始臨界段操作/指令的參考包括任何開始HLE、事務(wù)性存儲器或其它臨界段的指令,而對終止臨界段操作/指令的參考包括開始HLE、事務(wù)性存儲器或其它臨界段終止指令。
[0049]在一個實(shí)施例中,訪問緩沖器一如加載緩沖器220和/或存儲緩沖器280將保持與存儲器存取操作相關(guān)聯(lián)的訪問項(xiàng)。每個訪問緩沖器項(xiàng)都包括阻塞代碼字段/區(qū)段。作為默認(rèn),阻塞代碼字段將保持第一值,如未阻塞值,以指示可以自由地分配相應(yīng)的存儲器存取操作。但是,當(dāng)對于當(dāng)前臨界段啟動后期鎖獲取時(shí),與后續(xù)臨界段相關(guān)聯(lián)的用于緩沖器項(xiàng)的阻塞代碼字段被更新為第二值或者阻塞值以指示將阻塞/停止相關(guān)聯(lián)的存儲器存取操作。
[0050]如同所說明的,加載緩沖器220包括多個加載緩沖器項(xiàng),例如項(xiàng)228-233。當(dāng)遇到加載操作的時(shí)候,在加載緩沖器220中創(chuàng)建/存儲加載緩沖器項(xiàng)。在一個實(shí)施例中,加載緩沖器220以程序順序存儲加載緩沖器項(xiàng),即在程序代碼中對指令或操作進(jìn)行排序的順序。這里,由加載尾指針235來參考最近的加載緩沖器項(xiàng)228,即最近存儲的加載緩沖器項(xiàng)。相反的,由加載頭指針236來參考最早的加載緩沖器項(xiàng)230,其不是高級加載。
[0051]在按順序執(zhí)行的處理元素中,以存儲在加載緩沖器中的程序順序來執(zhí)行加載操作。結(jié)果,首先執(zhí)行最早的緩沖器項(xiàng),并且將加載頭指針236重新指向下一個最早的項(xiàng),例如項(xiàng)229。相反的,在無序機(jī)器中,以任意的順序來執(zhí)行操作。但是,一般會在程序順序中移除記錄,即從加載緩沖器中去分配。結(jié)果,加載頭指針236和加載尾指針235在兩種類型的執(zhí)行之間以相似的方式進(jìn)行操作。
[0052]加載緩沖器項(xiàng)230可能包括任何類型的信息,諸如存儲器更新值、指針值、對相關(guān)加載操作的參考、對與加載操作相關(guān)地址的參考、從地址加載的值及其它相關(guān)加載緩沖值、標(biāo)志或者參考。注意存儲緩沖器280可能以相似的方式來操作以加載緩沖器220,如同存儲緩沖器280所描述的包括項(xiàng)281-286以及用于項(xiàng)283的阻塞代碼字段283a。此外,加載緩沖器220以及存儲緩沖器280兩者分別包括高級加載區(qū)段250以及280。結(jié)果,在事務(wù)性執(zhí)行或者HLE期間,預(yù)先退出訪問、后退出訪問或者它們的混合可用來更新訪問跟蹤位271-273a-b。題為 “A POST-RETIRE SCHEME FOR TRACKING TENTATIVE ACCESSES DURINGTRANSACTIONAL EXE⑶TION(用于跟蹤在事務(wù)性執(zhí)行期間嘗試性訪問的后退出方案)”的申請序列號為11/517,029的共同待審批申請更加詳細(xì)地討論了用于假設(shè)存儲器存取的后退出訪問跟蹤。此外,申請序列號為11/936,243的題為“A PRE-POST RETIRE HYBRID HARDWARELOCK ELISION (HLE) SCHEME (預(yù)先-后退出混合硬件鎖省略(HLE)方案)”的共同未決申請討論了用于嘗試性訪問跟蹤的混合方案。
[0053]在一個實(shí)施例中,每個加載緩沖器項(xiàng)一如項(xiàng)230包括阻塞代碼字段,例如阻塞代碼字段225。作為一個例子,假定與加載項(xiàng)230有關(guān)的有存儲意圖的加載(LSI)操作參考系統(tǒng)存儲器地址。無論初始擁有的且位于高速緩存線271a中或者響應(yīng)于對高速緩存270的未命中所取回的如何,假定由系統(tǒng)存儲器地址參考的元素當(dāng)前駐留在高速緩存線271a中。在該例子中,高速緩存線271a保持用于在臨界段執(zhí)行期間要訪問的地址或地址范圍的鎖值。因此,在加載線271a中讀取鎖值。這里,確定鎖271a是否保存鎖定值或者解鎖值。[0054]當(dāng)分配加載操作時(shí),存儲器更新字段225被默認(rèn)地更新為解鎖值以指示能夠分配處理加載操作。注意更新位、值或者字段不一定指示對位、值或者字段的改變。例如,如果字段225已經(jīng)設(shè)置為邏輯0,那么更新為邏輯O可能包括將邏輯O再寫入字段225、以及沒有動作而使字段225保持邏輯O。
[0055]與上述討論的方案相反,假定加載項(xiàng)230與后續(xù)的臨界段——如后續(xù)的開始臨界段操作相關(guān)聯(lián)。此外,當(dāng)前臨界段遇到后期鎖獲取事件。后期鎖獲取事件的例子包括計(jì)時(shí)器的到期、高速緩存裝置是滿的以及檢測不可撤回事件。在下面討論關(guān)于后期鎖獲取事件的更多細(xì)節(jié)。響應(yīng)于檢測后期鎖獲取事件,將字段225更新為阻塞值以阻塞/停止后續(xù)的開始臨界段操作。在下面還將更詳細(xì)地討論后續(xù)的開始臨界段操作的阻塞和停止以及用于后續(xù)臨界段檢查點(diǎn)的阻塞創(chuàng)建。
[0056]在一個實(shí)施例中,當(dāng)前臨界段確定在啟動后期鎖獲取之前是否滿足了預(yù)先的條件。預(yù)先條件的第一例子包括等待未決填充緩沖器項(xiàng)被全局地排序。這里,當(dāng)對高速緩存270的訪問未命中時(shí),即線不是呈現(xiàn)修改或者獨(dú)占的狀態(tài)中,那么分配填充緩沖器項(xiàng)以依據(jù)檢索來接收所請求的元素。在一個實(shí)施例中,全局排序包括至少在后期鎖獲取存儲之前的存儲的任何排序,以保證存儲器相干性,即沒有存儲器排序違規(guī)。
[0057]用于后期鎖獲取可能的預(yù)先條件的另一個例子包括確定當(dāng)前臨界段的開始臨界段操作已經(jīng)將鎖堆棧更新為鎖值。正如以上所討論的,開始臨界段操作可能包括加載/讀取以確定鎖是否保持鎖定或者解鎖值,以及存儲操作以對鎖位置執(zhí)行鎖值的存儲。但是,在HLE中鎖被取消并且嘗試性地執(zhí)行臨界段。因此,沒有執(zhí)行與存儲緩沖器280中的存儲項(xiàng)283相關(guān)聯(lián)的、用于更新線271a的存儲,而是將更新鎖堆棧205。事實(shí)上,當(dāng)嘗試后期鎖獲取的時(shí)候,來自鎖堆棧項(xiàng)206的鎖值用于將高速緩存存儲器線271a更新為鎖定值。換句話說,對于HLE,沒有獲取在高速緩存線271a中的鎖,直到通過用來自項(xiàng)206的鎖定值更新高速緩存線271a來執(zhí)行后期鎖。
[0058]但是,在一個實(shí)施例中,響應(yīng)于后期鎖獲取的啟動,來阻塞/停止存儲,例如高級存儲。因而,如果沒有執(zhí)行用鎖值更新鎖堆棧項(xiàng)206的存儲且啟動了后期鎖獲取,那么可能發(fā)生死鎖的情況。這里,沒有對鎖堆棧205執(zhí)行用于后期鎖獲取的鎖值的存儲,并且現(xiàn)在在后期鎖獲取期間停止那個存儲。換句話說,后期鎖獲取在等待鎖定堆棧205的存儲,并且存儲在等待后期鎖獲取在它更新鎖堆棧205之前完成。因此,在一個實(shí)施例中,預(yù)先條件包括:在為當(dāng)前臨界段啟動后期鎖獲取之前確定對于具有用于當(dāng)前臨界段鎖值的鎖堆棧205的存儲已經(jīng)執(zhí)行。
[0059]如上所述,在一個實(shí)施例中,在對于當(dāng)前臨界段的后期鎖獲取期間,當(dāng)遇到后續(xù)的臨界段時(shí),停止后續(xù)的臨界段。在一個實(shí)施例中,停止臨界段包括阻塞諸如與加載項(xiàng)230相關(guān)聯(lián)的LSI之類的開始臨界段操作創(chuàng)建檢查點(diǎn)。通常,當(dāng)LSI解除的時(shí)候創(chuàng)建檢查點(diǎn)。因此,在對于當(dāng)前臨界段的后期鎖獲取期間,將阻塞諸如與加載項(xiàng)230相關(guān)聯(lián)的LSI之類的開始后續(xù)臨界段操作。這里,更新邏輯210將字段225更新為阻塞值。響應(yīng)于字段225持有阻塞值,沒有分派與項(xiàng)230相關(guān)聯(lián)的LSI。作為一個例子,調(diào)度器沒有基于持有阻塞值的字段225來調(diào)度后續(xù)臨界段LSI。注意更新邏輯可能將任何數(shù)量的類似于字段225的字段設(shè)置為阻塞值以阻塞/停止任何其它的操作。
[0060]在一個實(shí)施例中,阻塞值包括標(biāo)識符(ID)。結(jié)果,當(dāng)解鎖諸如與項(xiàng)230相關(guān)聯(lián)的加載之類的存取操作的條件滿足的時(shí)候,由更新邏輯210廣播該ID。釋放——即解鎖包括ID的全部字段。例如,當(dāng)字段225包括諸如MOB_BLOCK_CODE值之類的阻塞值時(shí),就響應(yīng)于存儲緩沖器的枯竭,由更新邏輯210來廣播ID。釋放一即解鎖與ID相匹配的所有加載項(xiàng)。作為另一個例子,字段225可以是HLE_BLOCK_CODE字段。這里,響應(yīng)于后期鎖獲取的完成,將ID廣播給在加載緩沖器220中的項(xiàng),加載緩沖器220釋放/解鎖與ID匹配的加載項(xiàng)。
[0061]如上所述,在一個實(shí)施例中,在后期鎖獲取期間停止了高級存儲。這里諸如邏輯225的邏輯將諸如字段283a的字段更新為阻塞值停止高級存儲。這里,避免了諸如鎖釋放操作之類的終止臨界段操作與后期鎖獲取操作之間的競爭狀態(tài)。作為一個例子,假定在高速緩存線271a中保持鎖。取消獲取鎖的開始臨界段操作并且在鎖堆棧項(xiàng)206中存儲獲得鎖的值。然后,檢測出后期鎖獲取事件。這里,引用解鎖值的鎖釋放存儲將可能與后期鎖獲取存儲爭用以獲得鎖。結(jié)果,停止高級存儲分派以避免這種潛在的爭用。
[0062]注意,如所不,鎖堆棧205包括多個堆棧項(xiàng)。在一個實(shí)施例中,鎖堆棧205能夠?yàn)橹T如嵌套臨界段之類的多個臨界段維持多個項(xiàng)。作為一個例子,當(dāng)將要為一個嵌套在堆棧205上的臨界段執(zhí)行后期鎖獲取的時(shí)候,將為群毆它在堆棧205上參考的臨界段執(zhí)行后期鎖獲取。為了說明,由LIE206參考的臨界段是在由LIE207參考的第二個臨界段之內(nèi)所嵌套的最里面的臨界段。此外,第二臨界段嵌套在與項(xiàng)208相關(guān)聯(lián)的最外面的臨界段之內(nèi)。
[0063]這里,當(dāng)要為最里面的臨界段執(zhí)行后期鎖獲取的時(shí)候,還為第二個和最外面的臨界段執(zhí)行后期鎖獲取。但是,在另一個實(shí)施例中,當(dāng)已經(jīng)對最里面的臨界段觀察到鎖釋放并且為第二個臨界段執(zhí)行后期鎖獲取的時(shí)候,就為最外面的臨界段,而不是最里面的臨界段執(zhí)行后期鎖獲取。換句話說,在該實(shí)施例中對于所有的位于比當(dāng)前后期鎖獲取的更高嵌套深度的臨界段來執(zhí)行后期鎖獲取。
[0064]轉(zhuǎn)向圖3a_3c,示出了在臨界段的硬件鎖省略執(zhí)行期間所進(jìn)行的后期鎖獲取的方法的流程圖實(shí)施例。雖然該流程圖以合理地線性方式說明了流程,但是在不同實(shí)施例中流程可以任何順序發(fā)生。例如,可在確定是否當(dāng)前臨界段鎖值是否已經(jīng)更新鎖堆棧之后發(fā)生確定是否全局上觀察到過濾器緩沖器項(xiàng)。
[0065]在流程305中,檢測到后期鎖獲取事件。這里,已經(jīng)檢測到并且取消了開始臨界段操作。例如,將鎖值存儲在位于鎖堆棧上的鎖指令項(xiàng)(LIE)中,該鎖值將獲取臨界段的鎖。后期鎖獲取事件的例子包括計(jì)時(shí)器的到期,填滿的高速緩存集合,以及不可撤回事件。
[0066]在一個實(shí)施例中,計(jì)時(shí)器的到期包括監(jiān)視計(jì)時(shí)器的到期。這里,響應(yīng)于檢測到具有存儲意圖(LSI)操作和/或分配了相關(guān)聯(lián)的LIE來啟動監(jiān)視計(jì)時(shí)器。如果在監(jiān)視計(jì)時(shí)器期滿之前沒有檢測出相應(yīng)的鎖釋放指令那么執(zhí)行后期鎖獲取。換句話說,當(dāng)預(yù)知臨界段開始并且在相當(dāng)?shù)臅r(shí)間內(nèi)沒有發(fā)現(xiàn)相應(yīng)的臨界段末端時(shí),將獲取鎖。
[0067]在另一個實(shí)施例中,后期鎖獲取包括填滿的高速緩存集合。例如,在臨界段的執(zhí)行期間,對訪問進(jìn)行跟蹤以檢測數(shù)據(jù)沖突。但是,高速緩存集合可以用在臨界段的執(zhí)行期間跟蹤的嘗試性訪問來填充滿。因此,后續(xù)的訪問可以導(dǎo)致選擇高速緩存線用于收回,其中那個線包括對于先前嘗試性訪問的跟蹤信息。結(jié)果,可響應(yīng)于指示填滿的高速緩存集合的收回來啟動后期鎖獲取。
[0068]作為另一個例子,后期鎖獲取事件可以包括不可撤回事件的檢測,即可能是不容易廢止的事件、過程或訪問。作為具體的例子,I/o訪問通常是不可撤回的,因?yàn)閷/O設(shè)備的訪問很難是不恰當(dāng)?shù)?。因此,響?yīng)于檢測到I/o訪問,來啟動后期鎖獲取。
[0069]然后,在流程310中,在檢測到后期鎖獲取之后,確定是否已經(jīng)全局上觀察到先前的填充緩沖器項(xiàng)(FBE)。如果沒有全局上觀察到先前的項(xiàng),那么停止后期鎖獲取——即沒有啟動后期鎖獲取,直到在流程315中全局上觀察到/排序先前的FBE。在一個實(shí)施例中,全局上觀察到包括以任何方式排序,例如在總線/互連上要完成的分派。還是作為一個例子,后期鎖獲取的停止包括更新與具有阻塞值的后期鎖獲取存儲相關(guān)聯(lián)的存儲緩沖器項(xiàng)。
[0070]作為另一個后期鎖獲取的可能預(yù)先條件,在流程320中確定當(dāng)前臨界段鎖值是否已經(jīng)更新了鎖堆棧。如上所述,臨界段的開始臨界段指令通常包括通過對鎖位置存儲鎖值來獲取鎖的存儲指令。但是,在HLE期間,對鎖位置取消了存儲并且在與臨界段有關(guān)的鎖堆棧項(xiàng)中記錄鎖值。在一個實(shí)施例中,比如在流程335中,停止高級存儲。但是,因?yàn)樵诤笃阪i獲取期間將利用來自鎖堆棧的鎖值,在存儲高級停止之前,停止了后期鎖獲取直到在流程325中鎖值更新了鎖堆棧。
[0071]然后,在流程330中啟動后期鎖犾取。在個實(shí)施例中,啟動后期鎖犾取包括啟動存儲操作以將來自鎖堆棧的鎖值存儲到鎖位置以獲取鎖。注意后期鎖獲取可能失敗,如同在流程345中那樣,并且在流程355中可中斷并重試臨界段。例如,在后期鎖獲取期間,可能已經(jīng)由另一個處理部件獲取了該鎖。這里,后期鎖獲取可能自旋直到鎖被釋放然后當(dāng)它由另一個處理部件釋放的時(shí)候獲取鎖。換句話說,后期鎖獲取是立即失敗的并且中斷/重新開始臨界段。
[0072]在一個實(shí)施例中,如在流程335中所示,在后期鎖獲取期間停止高級存儲。注意,可在流程345中成功地完成后期鎖獲取,而不檢測后續(xù)的臨界段;而在這樣情況下,對加載以及高級存儲進(jìn)行解鎖,而在流程350中臨界段與鎖的執(zhí)行還繼續(xù)。但是,如果后續(xù)的臨界段在流程340中,那么流程通過連接流程360繼續(xù)到圖3a和3b。
[0073]圖3a示出在對臨界段后期鎖獲取的期間,處理后續(xù)臨界段的一個實(shí)施例,該后續(xù)臨界段例如為連貫的臨界段。這里,在流程365停止了后續(xù)的開始臨界段操作。例如,在加載緩沖器中阻塞了具有存儲意圖的加載操作直到完成了后期鎖的獲取。圖3b說明了在對當(dāng)前臨界段后期鎖獲取期間,處理后續(xù)臨界段的另一個實(shí)施例。
[0074]在流程370中,確定是否排空存儲緩沖器。如果沒有排空存儲緩沖器,那么阻塞后續(xù)臨界段的加載直到在流程375中排空存儲緩沖器。在一個實(shí)施例中,加載緩沖器項(xiàng)包括阻塞代碼(blOCk_COde)字段。當(dāng)阻塞代碼字段持有阻塞值的時(shí)候,阻塞來自分派的相關(guān)聯(lián)加載。這里,當(dāng)排空存儲緩沖器的時(shí)候,將諸如ID之類的值廣播給加載緩沖器。對于分派解鎖/釋放與該值匹配的加載緩沖器項(xiàng)。
[0075]在排空存儲緩沖器之后,在流程380中確定后續(xù)的臨界段是否是嵌套臨界段。在一個實(shí)施例中,當(dāng)排空存儲緩沖器的時(shí)候,如果沒有檢測到關(guān)于當(dāng)前臨界段的鎖釋放——即釋放鎖的存儲,那么后續(xù)的臨界段是嵌套臨界段。這里,沒有創(chuàng)建檢查點(diǎn),因?yàn)殛P(guān)于最外面的臨界段的初始檢查點(diǎn)就可能足夠了。相反,阻塞后續(xù)臨界段訪問,例如具有存儲意圖的加載訪問,直到完成后期鎖獲取。在一個實(shí)施例中,停止L_S_I包括阻塞L_S_I去創(chuàng)建檢查點(diǎn)。這里,可以利用與上述的阻塞代碼字段類似的阻塞代碼字段來阻塞訪問。為了說明,第一個阻塞代碼字段是M0B_BL0CK_C0DE字段并且第二個阻塞代碼字段是HLE_BL0CK_C0DE字段。類似地,當(dāng)完成后期鎖獲取的時(shí)候,將值廣播以釋放/解鎖L_S_I。[0076]如同上述所說明的,可以利用事務(wù)性存儲器和/或硬件鎖省略(HLE)來執(zhí)行臨界段。作為中斷臨界段以及通過再試臨界段而浪費(fèi)先前執(zhí)行周期的替代,后期鎖獲取可以嘗試?yán)^續(xù)向前執(zhí)行臨界段。但是,為了避免死鎖以及無效數(shù)據(jù),在啟動后期鎖獲取之前以及在后期鎖獲取期間,可以選擇地施加某些條件。例如,可以停止后續(xù)連貫的臨界段直到對于當(dāng)前臨界段完成后期鎖獲取以保證相干性以及數(shù)據(jù)有效性。
[0077]可以通過存儲在機(jī)器可訪問或者機(jī)器可讀介質(zhì)上的、可由處理部件執(zhí)行的指令或者代碼來實(shí)現(xiàn)上面所闡述的方法、軟件、固件或代碼的實(shí)施例。機(jī)器可訪問的/可讀介質(zhì)包括以由諸如計(jì)算機(jī)或者電子系統(tǒng)之類的機(jī)器可讀的形式來提供(即,存儲和/或發(fā)送)信息的任何機(jī)制。例如,機(jī)器可訪問的介質(zhì)包括隨機(jī)存取存儲器(RAM),如靜態(tài)RAM (SRAM)或動態(tài)RAM(DRAM);只讀存儲器(ROM);磁或光存儲介質(zhì);以及閃存設(shè)備。作為另一個例子,機(jī)器可訪問/可讀介質(zhì)包括接收、復(fù)制、存儲、發(fā)送或者以其它方式操作電、光、聲或其它傳播信號(例如,載波,紅外信號,數(shù)字信號)形式的任何機(jī)制;等等,包括了上面所提出方法、軟件、固件或代碼的實(shí)施例。
[0078]貫穿本說明書的對“一個實(shí)施例”或者“實(shí)施例”的參考指的是結(jié)合實(shí)施例描述的特定的特征、結(jié)構(gòu)或特性被包括在本發(fā)明的一個實(shí)施例中并且沒有必要在所有討論的實(shí)施例中出現(xiàn)。因此,在貫穿于本說明書中不同地方中出現(xiàn)的短語“在一個實(shí)施例中”或者“在實(shí)施例中”不必完全指代相同的實(shí)施例。此外,可以在一個或多個實(shí)施例中以任何適合的方式來組合特定的特征、結(jié)構(gòu)或特性。
[0079]在上述說明書中,已經(jīng)參考具體的示例性實(shí)施例給出了詳細(xì)說明。但是,顯然地可以對其進(jìn)行不同的修改和變化而不背離所附權(quán)利要求所提出的本發(fā)明寬廣的精神和范圍。相應(yīng)地,將說明書和附圖作為說明的意義而非限制的意義。此外,上述實(shí)施例及其它示例性語言的使用不一定指代相同的實(shí)施例或者相同的例子,但是可能參考不同的和個別的實(shí)施例,并且可能是相同的實(shí)施例。
【權(quán)利要求】
1.一種裝置,包括: 處理部件,其執(zhí)行臨界段,所述臨界段由開始臨界段操作和終止臨界段操作來劃界,其中所述開始臨界段操作參考鎖值和地址; 存儲區(qū),其與處理部件相關(guān)聯(lián)以保持與所述臨界段相關(guān)聯(lián)的項(xiàng),所述項(xiàng)保持所述鎖值;以及 后期鎖獲取邏輯,其與所述存儲區(qū)耦合,以響應(yīng)于在所述臨界段的未決期間遇到后期鎖獲取事件來嘗試對地址的鎖值更新。
2.如權(quán)利要求1所述的裝置,其特征在于,還包括與所述處理部件相關(guān)聯(lián)的高速緩存存儲器,其中所述高速緩存存儲器的線將與所述地址相關(guān),并且其中嘗試對地址鎖值更新的后期鎖獲取邏輯包括后期鎖獲取邏輯以嘗試對高速緩存存儲器線的鎖值更新。
3.如權(quán)利要求2所述的裝置,其特征在于,存儲區(qū)將在項(xiàng)堆棧中保存項(xiàng)并且所述項(xiàng)還將保持地址的表示,并且其中所述開始臨界段操作包括對所述地址的鎖值存儲操作,當(dāng)通過所述處理部件執(zhí)行所述鎖值的存儲操作時(shí),對與所述臨界段相關(guān)聯(lián)的項(xiàng)而不是所述地址進(jìn)行所述鎖值的存儲操作。
4.如權(quán)利要求3所述的裝置,其特征在于,與所述處理部件相關(guān)聯(lián)的存儲緩沖器將保持與所述鎖值的存儲相關(guān)的存儲項(xiàng),所述存儲項(xiàng)包括阻塞代碼字段,其中與所述存儲緩沖器相關(guān)的更新邏輯將響應(yīng)于所遇到的后期鎖獲取事件將所述阻塞代碼字段更新為阻塞值。
5.如權(quán)利要求4所述的裝置,其特征在于,更新邏輯響應(yīng)于由后期鎖獲取邏輯嘗試用所述鎖值更新高速緩存存儲器線是成功的來將所述阻塞代碼字段更新為解鎖值。
6.如權(quán)利要求5所述的裝置,其特征在于,由后期鎖獲取邏輯嘗試更新高速緩存存儲器線是成功的包括在所述高速緩存存儲器線中表示解鎖值的當(dāng)前值允許執(zhí)行由鎖值的后期鎖獲取邏輯所進(jìn)行的更新。
7.如權(quán)利要求1所述的裝置,其特征在于,后期鎖獲取事件是從由計(jì)時(shí)器到期事件、填滿的高速緩存集合事件以及不可撤回事件所組成的分組中挑選出來。
8.一種裝置,包括: 處理部件,其執(zhí)行當(dāng)前臨界段以及后續(xù)的臨界段; 與所述處理部件相關(guān)聯(lián)的訪問緩沖器,其保持與來自所述后續(xù)臨界段的訪問操作相關(guān)聯(lián)的訪問項(xiàng),所述訪問緩沖器項(xiàng)包括阻塞代碼字段,其中所述阻塞代碼字段將保持阻塞值以指示將阻止所述訪問操作的分派;以及 與所述訪問緩沖器相耦合的更新邏輯,其響應(yīng)于檢測到與所述當(dāng)前臨界段相關(guān)聯(lián)的后期鎖獲取事件來更新所述阻塞代碼字段以保持阻塞值。
9.如權(quán)利要求8所述的裝置,其特征在于,所述阻塞代碼字段將默認(rèn)地保持解鎖值以指示將要分派所述訪問操作。
10.如權(quán)利要求8所述的裝置,其特征在于,所述后期鎖獲取事件是從由計(jì)時(shí)器期滿事件、填滿的高速緩存集合事件以及不可撤回事件所組成的分組中挑選出來。
11.如權(quán)利要求8所述的裝置,其特征在于,所述更新邏輯響應(yīng)于檢測到所述后期鎖獲取事件以及響應(yīng)于滿足后期鎖獲取預(yù)先條件來將所述阻塞代碼字段更新為所述阻塞值。
12.如權(quán)利要求11所述的裝置,其特征在于,所述后期鎖獲取預(yù)先條件包括允許全局上觀察到多個未解決的填充緩沖器項(xiàng)。
13.如權(quán)利要求11所述的裝置,其特征在于,所述訪問緩沖器是加載緩沖器,并且其中所述訪問操作包括后續(xù)的具有存儲意圖的加載(L_S_I)操作以指明所述后續(xù)臨界段的開始。
14.如權(quán)利要求13所述的裝置,其特征在于,還包括鎖堆棧,其包括與指明當(dāng)前臨界段開始的當(dāng)前L_S_I操作相關(guān)聯(lián)的鎖堆棧項(xiàng),其中后期鎖獲取預(yù)先條件包括等待與當(dāng)前臨界段的當(dāng)前L_S_I相關(guān)的存儲操作以更新鎖堆棧項(xiàng)。
15.如權(quán)利要求13所述的裝置,其特征在于,所述阻塞值包括標(biāo)識符,并且其中響應(yīng)于后期鎖獲取的完成,所述更新邏輯將所述標(biāo)識符廣播到所述加載緩沖器項(xiàng)以允許分派L_S_I操作。
16.—種方法,包括: 在當(dāng)前臨界段執(zhí)行期間檢測后期鎖獲取事件; 啟動對于所述當(dāng)前臨界段的后期鎖獲??;以及 響應(yīng)于對于所述當(dāng)前臨界段啟動所述后期鎖獲取來阻止多個高級存儲。
17.如權(quán)利要求16所述的方法,其特征在于,所述后期鎖獲取事件是從包括監(jiān)視計(jì)時(shí)器到期、對于已經(jīng)在所述臨界段的執(zhí)行期間跟蹤存儲器存取的收回選擇高速緩存線、以及遇到不可撤回事件的分組中選出來的。
18.如權(quán)利要求16所述的方法,其特征在于,對于所述當(dāng)前臨界段啟動后期鎖獲取包括啟動參考鎖地址的鎖值存儲,所述鎖值以及地址保持在與所述當(dāng)前臨界段的開始臨界段操作相關(guān)聯(lián)的鎖堆棧項(xiàng)中。
19.如權(quán)利要求18所述的方法,其特征在于,所述多個高級存儲被保持在存儲緩沖器中,并且其中所述多個高級存儲被解鎖,以響應(yīng)于參照所述鎖地址退役的鎖值的存儲來分配。
20.如權(quán)利要求16所述的方法,其特征在于,響應(yīng)于全局上觀察到多個未決的填充緩沖器項(xiàng)來啟動所述臨界段的所述后期鎖獲取,并且用鎖值來更新確定與所述臨界段相關(guān)聯(lián)的鎖堆棧項(xiàng)。
21.如權(quán)利要求20所述的方法,其特征在于,還包括: 對后續(xù)臨界段檢測后續(xù)開始臨界段操作;及 阻塞與所述后續(xù)臨界段相關(guān)的檢查點(diǎn)的創(chuàng)建。
22.如權(quán)利要求21所述的方法,其特征在于,阻塞與后續(xù)臨界段相關(guān)的檢查點(diǎn)的創(chuàng)建是響應(yīng)于檢測到所述后續(xù)的開始臨界段操作的。
23.如權(quán)利要求21 所述的方法,其特征在于,還包括:確定所述后續(xù)的臨界段不是嵌套臨界段,其中阻塞所述檢查點(diǎn)的創(chuàng)建是響應(yīng)于確定所述后續(xù)的臨界段不是嵌套臨界段的。
24.如權(quán)利要求23所述的方法,其特征在于,確定所述后續(xù)的臨界段不是嵌套臨界段包括: 響應(yīng)于所述存儲緩沖器保持存儲緩沖器項(xiàng)來排空存儲緩沖器; 響應(yīng)于所述存儲緩沖器是排空的: 對沒有檢測到當(dāng)前終止臨界段操作作出響應(yīng)來確定所述后續(xù)臨界段是嵌套臨界段;以及 對檢測到當(dāng)前終止臨界段操作作出響應(yīng)來確定所述后續(xù)臨界段不是嵌套臨界段。
25.如權(quán)利要求21所述的方法,其特征在于,對于所述后續(xù)臨界段的所述開始臨界段操作包括具有存儲意向的加載(L_S_I)操作,并且其中阻塞與所述后續(xù)臨界段相關(guān)的檢查點(diǎn)的創(chuàng)建包括:阻塞所述L_S_I操作被從加載緩沖器中分配。
【文檔編號】G06F9/46GK103544052SQ201310482999
【公開日】2014年1月29日 申請日期:2008年11月7日 優(yōu)先權(quán)日:2007年11月7日
【發(fā)明者】H·阿卡瑞, R·拉杰瓦, S·T·斯里尼瓦桑 申請人:英特爾公司