用于在事務(wù)性存儲器系統(tǒng)中實現(xiàn)強原子性的方法、裝置和系統(tǒng)的制作方法
【專利摘要】本申請公開了用于在事務(wù)性存儲器系統(tǒng)中實現(xiàn)強原子性的方法、裝置和系統(tǒng)。在本文中描述了用于提供高效率的強原子性的方法和裝置??蓪⒔?jīng)優(yōu)化的強原子操作插在非事務(wù)性讀訪問處以提供高效率的強原子性。在非事務(wù)性功能的開始將全局事務(wù)值復(fù)制到本地事務(wù)值;這在本質(zhì)上創(chuàng)建出此全局事務(wù)值的本地時戳。在該功能內(nèi)的非事務(wù)性存儲器訪問處,將計數(shù)值或版本值與LTV比較以查看是否有事務(wù)已經(jīng)啟動更新存儲器位置——或尤其是被訪問的存儲器位置。如果存儲器位置還沒有被事務(wù)更新,則通過避免要用全套的慢徑強原子操作才保證訪問到的數(shù)據(jù)的有效性來令執(zhí)行加速。反之,可執(zhí)行慢徑操作以解決爭用相同存儲器位置的事務(wù)性和非事務(wù)性訪問之間的競爭。
【專利說明】用于在事務(wù)性存儲器系統(tǒng)中實現(xiàn)強原子性的方法、裝置和系統(tǒng)
[0001]本發(fā)明專利申請是2008年12月30日提交的申請?zhí)枮?00810188987.9,名稱為“用于在事務(wù)性存儲器系統(tǒng)中實現(xiàn)強原子性的機制”的發(fā)明專利申請的分案申請。
【技術(shù)領(lǐng)域】
[0002]本發(fā)明涉及處理器執(zhí)行領(lǐng)域,具體地涉及指令組的執(zhí)行。
【背景技術(shù)】
[0003]半導(dǎo)體處理和邏輯設(shè)計方面的進步已允許集成電路器件上可存在的邏輯量上的增加。結(jié)果,計算機系統(tǒng)配置已經(jīng)從系統(tǒng)中的單個或多個集成電路演進成存在于個體集成電路上的多核及多邏輯處理器。處理器或集成電路一般包括單個處理器管芯,其中該處理器管芯可包括任意數(shù)量的核或邏輯處理器。
[0004]集成電路上數(shù)量不斷增加的核和邏輯處理器使更多的軟件線程能夠并發(fā)執(zhí)行。然而,可同時執(zhí)行的軟件線程數(shù)量上的增加產(chǎn)生了關(guān)于使諸軟件線程間共享的數(shù)據(jù)同步的問題。用來訪問多個核或多個邏輯處理器系統(tǒng)中的共享數(shù)據(jù)的一種常用的解決方案包括使用鎖來保證對共享數(shù)據(jù)的多個訪問上的互斥。然而,不斷增長的執(zhí)行多個軟件線程的能力潛在可能導(dǎo)致錯誤的競爭和執(zhí)行的串行化。
[0005]例如,考慮持有共享數(shù)據(jù)的散列表。利用鎖系統(tǒng),程序員可對整個散列表加鎖,從而允許一個線程訪問整個散列表。然而,其它線程的吞吐量和性能潛在可能受到不利的影響,因為它們不能訪問散列表中的任何項,直到鎖被釋放。或者,散列表中的每個項可被加鎖。然而,這增加了編程復(fù)雜度,因為程序員不得不計及散列表內(nèi)更多的鎖。
[0006]另一種數(shù)據(jù)同步技術(shù)包括使用事務(wù)性存儲器(TM)。通常事務(wù)性執(zhí)行包括投機地執(zhí)行多個微操作、操作、或指令的編組。在以上的示例中,兩個線程皆在散列表內(nèi)執(zhí)行,且其訪問被監(jiān)控/跟蹤。如果兩個線程皆訪問/變更相同的項,則這兩個事務(wù)之一可被中斷以解決此沖突。一種類型的事務(wù)性執(zhí)行包括軟件事務(wù)性存儲器(STM),其中訪問被跟蹤,沖突解決、中斷任務(wù)、和其它事務(wù)性任務(wù)以軟件方式來執(zhí)行。
[0007]以前,為了確保事務(wù)性存儲器操作與非事務(wù)性存儲器操作之間不發(fā)生運行時沖突,編譯器將每個非事務(wù)性存儲器操作視為單個操作事務(wù)。換言之,事務(wù)性操作被插在非事務(wù)性存儲器操作處以確保不發(fā)生運行時沖突。然而,在非事務(wù)性存儲器操作處執(zhí)行周到的屏障潛在可能浪費執(zhí)行周期。
【發(fā)明內(nèi)容】
[0008]本發(fā)明的至少一個方面提出了一種用于在事務(wù)性存儲器系統(tǒng)中提供強原子性的裝置,包括:用于執(zhí)行多個事務(wù)性操作和多個非事務(wù)性操作的處理元素單元,其中所述處理元素單元將在功能內(nèi)執(zhí)行所述多個非事務(wù)性操作中的非事務(wù)性加載操作,所述非事務(wù)性加載操作在被執(zhí)行時用于從存儲器位置加載;以及與所述處理元素單元相關(guān)聯(lián)的用于確定從所述功能開始起所述存儲器位置是否已被更新過的邏輯單元;其中所述處理元素單元響應(yīng)于確定從所述功能開始起所述存儲器位置尚未被更新過而不執(zhí)行鎖操作,所述鎖操作在被執(zhí)行時用于確定與所述存儲器位置相關(guān)聯(lián)的元數(shù)據(jù)位置是否持有解鎖值。
[0009]本發(fā)明的另一個方面提出了一種用于在事務(wù)性存儲器系統(tǒng)中提供強原子性的方法,包括:檢測功能中的非事務(wù)性加載操作,所述非事務(wù)性加載操作在被執(zhí)行時從存儲器位置加載;以及響應(yīng)于在所述功能中檢測到所述非事務(wù)性加載操作而插入多個強原子性操作,所述多個強原子性操作在被執(zhí)行時用于確定從所述功能開始起是否已有事務(wù)啟動更新存儲器位置。本發(fā)明的另一個方面又提出了一種用于在事務(wù)性存儲器系統(tǒng)中提供強原子性的方法,包括:在功能中檢測非事務(wù)性加載操作,所述非事務(wù)性加載操作在被執(zhí)行時用于從存儲器位置加載;以及響應(yīng)于在所述功能中檢測到所述非事務(wù)性加載操作而插入多個強原子性操作,所述多個強原子性操作在被執(zhí)行時用于確定從所述功能開始起所述存儲器位置是否已被更新過。
[0010]本發(fā)明的還有一個方面提出了一種用于在事務(wù)性存儲器系統(tǒng)中提供強原子性的裝置,包括:用于檢測功能中的非事務(wù)性加載操作的裝置,所述非事務(wù)性加載操作在被執(zhí)行時從存儲器位置加載;以及用于響應(yīng)于在所述功能中檢測到所述非事務(wù)性加載操作而插入多個強原子性操作的裝置,所述多個強原子性操作在被執(zhí)行時用于確定從所述功能開始起是否已有事務(wù)啟動更新存儲器位置。
[0011]本發(fā)明的進一步方面提出了一種用于在事務(wù)性存儲器系統(tǒng)中提供強原子性的裝置,包括:用于在功能中檢測非事務(wù)性加載操作的裝置,所述非事務(wù)性加載操作在被執(zhí)行時用于從存儲器位置加載;以及用于響應(yīng)于在所述功能中檢測到所述非事務(wù)性加載操作而插入多個強原子性操作的裝置,所述多個強原子性操作在被執(zhí)行時用于確定從所述功能開始起所述存儲器位置是否已被更新過。
[0012]本發(fā)明的還有一個方面提出了一種用于在事務(wù)性存儲器系統(tǒng)中提供強原子性的系統(tǒng),包括:用于持有包括多個事務(wù)性操作和多個非事務(wù)性操作的程序代碼的存儲器,其中所述多個非事務(wù)性操作包括在功能中的非事務(wù)性加載操作;以及與所述存儲器相關(guān)聯(lián)的處理元素,用于執(zhí)行所述非事務(wù)性加載操作以從與所述存儲器中的存儲器位置相關(guān)聯(lián)的地址加載,并執(zhí)行所述多個非事務(wù)性操作的多個強原子性操作以確定從所述功能開始起所述存儲器位置是否已經(jīng)被更新過。
[0013]本發(fā)明的還有一個方面也提出了一種用于在事務(wù)性存儲器系統(tǒng)中提供強原子性的方法,包括:在功能開始時將全局事務(wù)值復(fù)制到本地事務(wù)值;執(zhí)行所述功能中的非事務(wù)性加載操作以從存儲器位置加載值;以及確定從所述功能開始起已有事務(wù)更新多個存儲器位置;以及響應(yīng)于確定從所述功能開始起所述事務(wù)已經(jīng)更新所述多個存儲器位置而執(zhí)行多個慢徑操作。
[0014]附圖簡述
[0015]本發(fā)明是藉附圖中的各圖為示例來示出且并非旨在為其所限定。
[0016]圖1示出能夠?qū)崿F(xiàn)高效率的強原子性的系統(tǒng)的實施例。
[0017]圖2示出用于提供高效率的強原子性的軟件事務(wù)性存儲器(STM)系統(tǒng)的實施例。
[0018]圖3a示出用于提供高效率的強原子性的邏輯的實施例。
[0019]圖3b示出用于提供高效率的強原子性的邏輯的另一個實施例。[0020]圖4a示出提供強原子性的方法的流程圖的實施例。
[0021 ] 圖4b示出圖4a中描繪的流程圖的實施例。
[0022]圖4c示出圖4a中描繪的流程圖的另一個實施例。
【具體實施方式】
[0023]在以下的描述中,陳述了眾多具體細節(jié),諸如對事務(wù)性執(zhí)行的具體硬件支持的例子、具體跟蹤/元數(shù)據(jù)方法、處理器中具體類型的本地/存儲器、和具體類型的存儲器訪問和位置等,以便提供對本發(fā)明的透徹理解。然而,本領(lǐng)域的技術(shù)人員將顯然易見的是并非必需要采用這些具體細節(jié)才能實踐本發(fā)明。在其它情況下,沒有詳細描述公知的組件和方法,諸如在軟件中編碼事務(wù)、事務(wù)的劃界、具體的多核及多線程處理器架構(gòu)、事務(wù)硬件、高速緩存組織、和微處理器的具體操作細節(jié),以免不必要地混淆本發(fā)明。
[0024]正如本文所使用的,值包括數(shù)、狀態(tài)、邏輯狀態(tài)、或二進制邏輯狀態(tài)的任何已知表示。通常,使用邏輯電平、邏輯值、或邏輯性值也是指I和0,它簡單地表示二進制邏輯狀態(tài)。例如,I指的是高邏輯電平而O指的是低邏輯電平。然而,也已使用過計算機系統(tǒng)中值的其它表示。例如,十進制數(shù)10還可作為二進制值1010和十六進制字母A。
[0025]此外,狀態(tài)可由值或者值的部分來表示。作為一個例子,加鎖狀態(tài)可由某位置中有第一值——諸如奇數(shù)——來表示,而位置中的版本號——諸如偶值——表示解鎖狀態(tài)。在此,可使用第一值和第二值的一部分來表示這些狀態(tài),諸如這些值的兩個低位,與這些值相關(guān)聯(lián)的符號位、或這些值的其它部分。此外,在一個實施例中,術(shù)語復(fù)位和置位分別指缺省和更新的值或狀態(tài)。例如,缺省值可能包括高邏輯值,即復(fù)位,而更新值可能包括低邏輯值,即置位。
[0026]本文描述的方法和裝置用于在事務(wù)性存儲器系統(tǒng)中提供強原子性。具體地,主要參考利用基于高速緩存行的沖突檢測和基于時戳的一致性的(STM)系統(tǒng)來討論提供強原子性。然而,這些用于提供強原子性的方法和裝置并不被限定于此,因為它們可實現(xiàn)在任何事務(wù)性存儲器系統(tǒng)上或與其相關(guān)聯(lián)地來實現(xiàn)。
[0027]參照圖1,示出了能夠在事務(wù)性存儲器系統(tǒng)中提供經(jīng)優(yōu)化的強原子性的多處理元素處理器的實施例。處理元素指的是共享對該處理器的諸如保留單元、執(zhí)行單元、流水線、和/或上級高速緩存/存儲器之類的資源的訪問的線程、進程、上下文、邏輯處理器、硬件線程、核、和/或任何處理元素。物理處理器一般指的是潛在可能包括任意數(shù)量的諸如核或硬件線程之類的其它處理元素的集成電路。
[0028]核通常指的是位于集成電路上的能夠維持獨立的架構(gòu)狀態(tài)——其中每個獨立維持的架構(gòu)狀態(tài)與至少某些專用的執(zhí)行資源相關(guān)聯(lián)——的邏輯。與核形成對比,硬件線程一般指的是位于集成電路上的能夠維持獨立的架構(gòu)狀態(tài)——其中獨立維持的架構(gòu)狀態(tài)共享對執(zhí)行資源的訪問一的任何邏輯。如圖1所示的物理處理器100包括兩個核一核101和102,它們共享對上級高速緩存110的訪問。此外,核101包括兩個硬件線程IOla和101b,而核102包括兩個硬件線程102a和102b。因此,諸如操作系統(tǒng)的軟件實體潛在可能將處理器100看作四個分別的處理器,而處理器100能夠執(zhí)行四個軟件線程。
[0029]正如所能看到的,當某些資源被共享而其它資源被專用于某架構(gòu)狀態(tài)時,硬件線程與核的命名體系之間的線索重疊。然而,通常核和硬件線程被操作系統(tǒng)看作個體的邏輯處理器,其中操作系統(tǒng)能夠個體地調(diào)度每個邏輯處理器上的操作。換言之,軟件將物理處理器上的兩個核或線程看作兩個獨立的處理器。另外,每個核潛在可能包括用于執(zhí)行多個軟件線程的多個硬件線程。因此,處理元素包括上述能夠維持上下文的元素一諸如核、線程、硬件線程、虛擬機、或其它資源一中的任何元素。
[0030]在一個實施例中,處理器100是能夠并行執(zhí)行多個線程的多核處理器。在本此,第一線程與架構(gòu)狀態(tài)寄存器IOla相關(guān)聯(lián),第二線程與架構(gòu)狀態(tài)寄存器IOlb相關(guān)聯(lián),第三線程與架構(gòu)狀態(tài)寄存器102a相關(guān)聯(lián),而第四線程與架構(gòu)狀態(tài)寄存器102b相關(guān)聯(lián)。在一個實施例中,對處理器100中的處理元素的引述包括對核101和102以及線程101a、101b、102a和102b的引述。在另一個實施例中,處理元素指的是在處理域的階層體系中在同一級上的元素。例如,核101和102處于同一域級,而線程101a、101b、102a和102b處于同一域級,因為它們?nèi)及ㄔ诤说挠騼?nèi)。
[0031]盡管處理器100可以包括不對稱核,即具有不同配置、功能單元和/或邏輯的核,但示出了對稱核。結(jié)果,將不對示為等同于核101的核102進行詳細討論,以免混淆本討論。
[0032]如所示,架構(gòu)狀態(tài)寄存器IOla被復(fù)制在架構(gòu)狀態(tài)寄存器IOlb中,如此使得能夠為邏輯處理器IOla和邏輯處理器IOlb存儲個體的架構(gòu)狀態(tài)/上下文。還可為線程IOla和IOlb復(fù)制諸如指令指針和重命名分配器邏輯130中的重命名邏輯之類的其它較小的資源。諸如重排序器/退役單元135中的重排序緩沖器、ILTB120、加載/存儲緩沖器、和隊列之類的某些資源可通過劃分來共享。諸如通用內(nèi)部寄存器、頁表基址寄存器、下級數(shù)據(jù)高速緩存和數(shù)據(jù)TLB115、執(zhí)行單元140、和脫序單元135部分之類的其它資源潛在可能被全共享。
[0033]總線接口模塊105用于與處理器100外部的設(shè)備,諸如系統(tǒng)存儲器175、芯片組、北橋、或其它集成電路通信。存儲器175可被專用于處理器100或與系統(tǒng)中的其它設(shè)備共享。存儲器175的例子包括動態(tài)隨機存取存儲器(DRAM)、靜態(tài)RAM (SRAM)、非易失性存儲器(NV存儲器)、和長期存儲。
[0034]典型的總線接口單元105包括輸入/輸出(I/O)緩沖器,用以在互連170上傳送和接收總線信號?;ミB170的例子包括射電收發(fā)器邏輯(GTL)總線、GTL+總線、雙倍數(shù)據(jù)率(DDR)總線、泵式總線(pumped bus)、差分總線、高速緩存相干總線、點對點總線、多站總線或其它已知的實現(xiàn)任何已知的總線協(xié)議的互連。如圖所示的總線接口單元105還用于與上級高速緩存110通信。
[0035]上級的或遠端高速緩存110用于高速緩沖近期取回和/或操作過的元素。注意,上級或遠端指的是高速緩存層級增加或更遠離執(zhí)行單元。在一個實施例中,上級高速緩存110是二級數(shù)據(jù)高速緩存。然而,上級高速緩存110并不被限定于此,因為它可以是也被稱為蹤跡高速緩存的指令高速緩存或包括指令高速緩存。蹤跡高速緩存可代替地耦合在解碼器125之后以存儲近期的解碼蹤跡。模塊120還潛在可能包括用于預(yù)測將被執(zhí)行/取道的分支的分支目標緩沖器和用于存儲指令的地址翻譯項的指令-翻譯緩沖器(Ι-TLB)。在此,能夠進行投機執(zhí)行的處理器潛在可能預(yù)取回并投機執(zhí)行預(yù)測出的分支。
[0036]解碼模塊125耦合到取回單元120以解碼取回的元素。在一個實施例中,處理器100與定義/規(guī)定處理器100上可執(zhí)行的指令的指令集架構(gòu)(ISA)相關(guān)聯(lián)。在此,通常由ISA認可的機器代碼指令包括被稱為操作碼的一部分指令,其參引/規(guī)定待執(zhí)行的指令或操作。[0037]在一個示例中,分配器和重命名器版塊130包括分配器以保留諸如用于存儲指令處理結(jié)果的寄存器堆之類的資源。然而,線程IOla和IOlb潛在可能是能夠進行脫序執(zhí)行的,在其中分配器和重命名器版塊130還保留其它資源,諸如用于跟蹤指令結(jié)果的重排序緩沖器。單元130還可包括寄存器重命名器,以將程序/指令參引寄存器重命名成處理器100內(nèi)部的其它寄存器。重排序器/退役單元135包括諸如上面提及的重排序緩沖器、加載緩沖器、和存儲緩沖器之類的組件,以支持脫序執(zhí)行以及脫序執(zhí)行了的指令稍后的按序退役。
[0038]在一個實施例中,調(diào)度器和執(zhí)行單元版塊140包括調(diào)度器單元以調(diào)度執(zhí)行單元上的指令/操作。事實上,指令/操作潛在可能根據(jù)其類型可用性在執(zhí)行單元上被調(diào)度。例如,浮點指令被調(diào)度在具有可用的浮點執(zhí)行單元的執(zhí)行單元的端口上。還包括與執(zhí)行單元相關(guān)聯(lián)的寄存器堆,以存儲信息指令處理結(jié)果。示例性執(zhí)行單元包括浮點執(zhí)行單元、整型執(zhí)行單元、跳變執(zhí)行單元、加載執(zhí)行單元、存儲執(zhí)行單元、和其它已知的執(zhí)行單元。
[0039]下級數(shù)據(jù)高速緩存和數(shù)據(jù)翻譯緩沖器(D_TLB)150耦合到執(zhí)行單元140。該數(shù)據(jù)高速緩存用于存儲近期使用/操作過的、潛在可能被保持在存儲器相干性狀態(tài)——諸如修改的、排他的、共享的、和無效的(MESI)狀態(tài)——的元素,諸如數(shù)據(jù)操作數(shù)。D-TLB用于存儲近期的虛擬/線性至物理地址翻譯。作為一個具體的例子,處理器可能包括頁表結(jié)構(gòu)以將物理存儲器分成多個虛擬頁。數(shù)據(jù)高速緩存150可用作事務(wù)性存儲器或其它存儲器,以如以下更詳細討論的那樣在事務(wù)的執(zhí)行期間跟蹤試探性訪問。此外當利用STM系統(tǒng)跟蹤試探性訪問時,軟件表/數(shù)據(jù)可被持有在系統(tǒng)存儲器175中并被高速緩沖在下級高速緩存150中。
[0040]也可被稱為臨界代碼段的事務(wù)包括可由硬件、軟件、固件、或其組合編組起來的指令、操作或微操作編組。例如,指令或操作可被用于對事務(wù)或臨界段進行劃界。一般地,在事務(wù)的執(zhí)行期間,并不令對存儲器的更新全局可見,直到該事務(wù)被提交。在事務(wù)仍未決時,跟蹤存儲器中加載自和寫至的位置。一旦成功地確認這些存儲器位置,事務(wù)就被提交,并且令在該事務(wù)期間作出的更新全局可見。
[0041]然而,如果事務(wù)在其未決期間被無效,則不令這些更新全局可見地即重啟該事務(wù)。結(jié)果,正如本文所使用的事務(wù)的未決指的是已經(jīng)開始執(zhí)行但尚未被提交或中斷——即未決中的事務(wù)。事務(wù)性執(zhí)行的示例實現(xiàn)包括硬件事務(wù)性存儲器(HTM)系統(tǒng)、軟件事務(wù)性存儲器(STM)系統(tǒng)、及其組合。
[0042]硬件事務(wù)性存儲器(HTM)系統(tǒng)通常指的是以處理器100的硬件來跟蹤與處理器100間的事務(wù)的執(zhí)行期間的訪問。例如,高速緩存150高速緩沖來自系統(tǒng)存儲器175的數(shù)據(jù)項/對象。在事務(wù)的執(zhí)行期間,利用與高速緩存150中持有該數(shù)據(jù)對象的高速緩存行相關(guān)聯(lián)的注解/屬性字段來跟蹤去往和來自此高速緩存行的訪問。在一個實施例中,注解字段包括讀存儲單元和寫存儲單元。每個存儲單元逢相應(yīng)的讀或?qū)懚恢梦?,以指示在事?wù)的未決期間是否已發(fā)生讀或?qū)憽?br>
[0043]軟件事務(wù)性存儲器(STM)系統(tǒng)通常指的是以軟件或至少部分地以軟件來執(zhí)行訪問跟蹤、沖突解決、或其它事務(wù)性存儲器任務(wù)。作為一般化的示例,編譯器在被執(zhí)行時編譯程序代碼以相應(yīng)地為作為此程序代碼內(nèi)的事務(wù)的一部分的加載和存儲操作插入讀和寫屏障。編譯器還可插入其它事務(wù)或非事務(wù)相關(guān)操作,諸如提交操作、中斷操作、簿記操作、沖突檢測操作、和強原子性操作。[0044]如上所述,以往非事務(wù)性存儲器操作在提供事務(wù)性和非事務(wù)性代碼之間的隔離的強原子系統(tǒng)中被作為單個事務(wù)來對待。通常,編譯器在非事務(wù)性存儲器訪問處插入操作以確保強原子性,即確保事務(wù)性和非事務(wù)性存儲器操作之間的有效性。以往的插在非事務(wù)性存儲器訪問操作處以確保強原子性的操作的例子包括諸如測試操作之類的鎖操作,以確定鎖是否指示存儲器位置可用/無主。然而,在一個實施例中,插入數(shù)量減少的強原子性操作以在不執(zhí)行諸如鎖操作之類的某些慢徑(slowpath)操作來確定鎖是否可用的情況下保證有效性。以下討論提供高效率的強原子性的更多細節(jié)。
[0045]參照圖2,描繪了 STM系統(tǒng)的簡化說明性實施例。數(shù)據(jù)對象201包括任何粒度的數(shù)據(jù),諸如字、數(shù)據(jù)元素/操作數(shù)、指令、存儲器行、高速緩存行、編程語言定義的對象、編程語言定義的對象的字段、表、散列表、或任何其它已知的數(shù)據(jù)結(jié)構(gòu)或?qū)ο?。在一個實施例中,參引數(shù)據(jù)對象201或與之相關(guān)聯(lián)的地址——諸如物理或虛擬地址——被散列以索引到鎖/元數(shù)據(jù)位置陣列/表中,諸如元數(shù)據(jù)陣列240。作為一個具體示例,地址的數(shù)個低位被掩掉然后被散列以索引到鎖陣列240中。在此,將數(shù)據(jù)對象201說成是與高速緩存行215相關(guān)聯(lián),因為高速緩存行215用于持有/高速緩沖數(shù)據(jù)對象201。此外,還將數(shù)據(jù)對象201說成是與元數(shù)據(jù)位置250相關(guān)聯(lián),因為是利用參引數(shù)據(jù)對象201或位置250的地址來索引到表240中位置250處。
[0046]通常,持有在元數(shù)據(jù)位置250中的值指示數(shù)據(jù)對象201是加鎖的還是可用的。在一個實施例中,當數(shù)據(jù)對象201是加鎖的時,元數(shù)據(jù)位置250包括第一值以表示加鎖狀態(tài),諸如讀/寫有主狀態(tài)252。然而,可在元數(shù)據(jù)位置250中使用和表示任何的鎖或者鎖狀態(tài)。當解鎖或可用時,元數(shù)據(jù)位置250包括第二值以指示解鎖狀態(tài)。在一個實施例中,第二值用于表示版本號251。在此,逢有對數(shù)據(jù)對象201的寫,版本號251就被更新,諸如遞增,以跟蹤數(shù)據(jù)對象201的當前版本。
[0047]讀/加載操作被記錄在讀日志265中,而寫/存儲操作被緩沖或記錄在寫空間270中。這種日志記錄/緩沖通常被稱為屏障操作,因為它們通常提供待執(zhí)行的用于確認事務(wù)性讀或?qū)懖僮鞯恼系K物。在一個實施例中,將讀記入日志包括在讀日志265中更新或創(chuàng)建具有與版本號251相關(guān)聯(lián)的地址266的表示的項。在此,讀日志265可類似于具有地址266的基于地址的查找表,地址266可以是參引數(shù)據(jù)對象201的、與對應(yīng)的版本號251相關(guān)聯(lián)的地址的線性、虛擬、物理或其它部分。注意,讀日志265可以是將被持有在系統(tǒng)存儲器中并被高速緩沖在高速緩存205中的數(shù)據(jù)對象,諸如數(shù)據(jù)對象201。
[0048]在一個實施例中,對數(shù)據(jù)對象201的寫是用新值更新高速緩存行215,且舊值272被持有在寫空間270中。一旦提交此事務(wù),寫日志270中的舊值就被丟棄且令試探值全局可見,而反之,一旦中斷此事務(wù),舊值就被復(fù)原到原始位置以蓋寫試探性持有的值。通常,這種類型的軟件事務(wù)性存儲器(STM)系統(tǒng)被稱為寫日志STM或就地(in-place)更新STM,因為寫空間270類似于寫日志那樣來持有舊值,而試探性事務(wù)值是被“就地更新”的。
[0049]在另一個實施例中,對數(shù)據(jù)對象201的寫被緩沖在類似于寫緩沖器的寫空間270中,而舊值仍持有在其原始位置中。在此,寫緩沖器270持有要被寫到位置215的試探性事務(wù)值。一旦中斷此事務(wù),持有在寫緩沖器270中的試探值就被丟棄,反之,一旦提交此事務(wù),試探值就被復(fù)制到相應(yīng)的存儲器位置以蓋寫舊值。通常這種類新的軟件事務(wù)性存儲器(STM)系統(tǒng)被稱為寫緩沖STM,因為寫空間270類似于寫緩沖器,且試探性事務(wù)值被緩沖/持有在寫空間270中。
[0050]注意,寫空間270可包括任何存儲區(qū)。在一個實施例中,寫空間270是上級存儲器,諸如二級聞速緩存或系統(tǒng)存儲器。在另一個實施例中,與空間270可以是持有在寄存器或其它的存儲器位置中的單獨的寫空間。寫空間270可類似于具有與記入日志的老值或緩沖的試探性值相關(guān)聯(lián)的地址的查找表。在又一個實施例中,寫空間270可包括持有在上述存儲區(qū)域中的任何區(qū)域或單獨的存儲區(qū)域中的程序棧或單獨的棧存儲器。
[0051]然而,不管是將寫空間270用作緩沖試探性值的寫緩沖器還是記錄舊值的寫日志,寫在被提交時都釋放鎖250。在一個實施例中,釋放鎖250包括將元數(shù)據(jù)位置250返回到表示解鎖或無主狀態(tài)的值。這個值是通過遞增全局時戳來獲得的。該時戳計數(shù)已經(jīng)完成執(zhí)行——即提交或中斷——的事務(wù)的數(shù)目。這種版本化允許其它事務(wù)能通過將其它這些事務(wù)在其讀日志中記錄的版本值與當前版本值251進行比較來確認其加載數(shù)據(jù)對象201的讀。
[0052]以上的例子包括實現(xiàn)STM的一個實施例;然而,可以使用STM的任何已知的實現(xiàn)。事實上,還可使用任何已知用于執(zhí)行事務(wù)性存儲器的系統(tǒng),諸如HTM、STM、無界事務(wù)性存儲器(UTM)系統(tǒng)、混合事務(wù)性存儲器系統(tǒng),諸如硬件加速STM (HASTM)、或任何其它事務(wù)性存儲器系統(tǒng)。例如,可利用諸如注解位之類的HTM特征來加速STM,諸如將其基于對高速緩存行的訪問來置位/復(fù)位,軟件可解釋和利用其來加速高速緩沖行層級上的事務(wù)性跟蹤/沖突檢測。
[0053]如上所述,在被執(zhí)行時編譯程序或應(yīng)用代碼的編譯器可在事務(wù)性存儲器訪問處插入事務(wù)性操作,這些事務(wù)性操作在被執(zhí)行時執(zhí)行讀和寫屏障功能。速度屏障操作的例子包括:計算編入鎖表240的索引以確定位置250,測試以查看元數(shù)據(jù)位置250是否持有無主版本值,以及在讀日志265中記錄此版本值。
[0054]在一個實施例中,高效率的強原子性操作被插在非事務(wù)性存儲器訪問處以執(zhí)行經(jīng)優(yōu)化的讀屏障功能來提供強原子性,即確保有效的非事務(wù)性存儲器訪問。作為一個例子,強原子性操作在被執(zhí)行時用于確定要由該非事務(wù)性讀訪問來訪問的存儲器位置從功能開始起是否已經(jīng)被更新。為了說明,強原子性操作被插在每個功能的開始處。強原子性操作在被執(zhí)行時用于制作全局事務(wù)值(GTV)的本地副本。
[0055]GTV響應(yīng)于結(jié)束事務(wù)而被遞增。在一個實施例中,在GTV被遞增后,新的GTV值就被用作無主版本值以釋放鎖。換言之,GTV跟蹤/指示最新或最近期中斷/提交的事務(wù),這通常導(dǎo)致GTV被稱為最近期事務(wù)值。結(jié)果,GTV在諸如功能開始之類的特定時間的副本可被稱為時戳,因為它提供了 GTV在功能開始處的快照。因此,在以上討論的實施例中,在功能的開始,制作GTV的副本。在此被稱為本地事務(wù)值的這一本地副本指示在復(fù)制/移動即功能開始時更新存儲器位置的最新事務(wù)。
[0056]在一個實施例中,插在功能內(nèi)的非事務(wù)性存儲器訪問處的強原子性操作在被執(zhí)行時用于將LTV同與作為執(zhí)行此非事務(wù)性存儲器讀操作的結(jié)果要被訪問的存儲器位置相關(guān)聯(lián)的版本值進行比較。在此,如果版本值大于LTV,則該存儲器位置從此功能的開始起已被更新過。換言之,從GTV被復(fù)制為LTV的時間起,已有事務(wù)結(jié)束了,GTV已被遞增,且新的GTV已作為新版本被寫到與此存儲器位置相關(guān)聯(lián)的鎖位置。因此,當版本大于LTV時,確定至少已發(fā)生了以上的更新過程。反之,如果版本值等于或小于LTV,則存儲器位置從功能的開始起還未被更新過。在一個實施例中,鎖位置在其被加鎖時存儲最高位被置位的值,而所有的版本號(以及GTV中的值)的最高位總是不置位的。為了防止GTV因有很多提交事務(wù)之故而溢出,可使用較大的值,諸如64位值。
[0057]為了說明,假設(shè)功能中的非事務(wù)性存儲器操作包括用于從高速緩存行215加載的加載操作。在此功能的開始,在本示例中以十進制值10起始的GTV響應(yīng)于執(zhí)行第一強原子操作而被復(fù)制作為LTV。隨著執(zhí)行繼續(xù),假定事務(wù)在提交期間更新高速緩存行215,將GTV遞增到十進制值12,并利用遞增了的GTV值12釋放與行215相關(guān)聯(lián)的鎖250。當遇到此非事務(wù)性加載時,執(zhí)行第二強原子操作以將LTV與持有在元數(shù)據(jù)位置250中的當前版本進行比較。因為元數(shù)據(jù)位置250先前已被更新為12且LTV持有值10,于是確定從此功能開始起行215已被更新過。因此,可響應(yīng)于確定待訪問的位置已經(jīng)被更新過而采取任何數(shù)量的動作,諸如執(zhí)行慢徑——即特強原子性屏障——操作,以確保此非事務(wù)性加載操作的有效性。
[0058]在另一個實施例中,插在非事務(wù)性存儲器訪問處的強原子性操作在被執(zhí)行時用于將LTV值與指示已經(jīng)啟動的事務(wù)數(shù)的計數(shù)值進行比較。換言之,在此,并不去確定該特定的存儲位置從功能的開始起是否已經(jīng)被更新過,而是確定從功能的開始起是否有任何事務(wù)已經(jīng)啟動更新任何存儲器位置。事務(wù)計數(shù)器響應(yīng)于事務(wù)開始和/或事務(wù)開始更新存儲器位置而被遞增。例如,在寫緩沖STM中,計數(shù)器在事務(wù)到達提交點并啟動更新存儲器位置時被遞增。作為另一個例子,在寫日志或就地更新STM中,計數(shù)器在事務(wù)啟動時被遞增。
[0059]利用以上例子,在包括非事務(wù)性加載操作的功能的開始處,值為10的GTV被復(fù)制作為LTV,且啟動事務(wù)計數(shù)器初始也持有值10。在此,當另一個事務(wù)開始或啟動更新存儲器位置時,取決于實現(xiàn),啟動事務(wù)計數(shù)器就被遞增,即從值10遞增至11。然而,在本實施例中,第二強原子性操作在被執(zhí)行時用于將LTV與此啟動事務(wù)計數(shù)器進行比較。當此計數(shù)器等于或小于LTV時,則確定此非事務(wù)性加載有效,即從該功能開始起,尚無事務(wù)更新存儲器位置。
[0060]然而,如在本示例中那樣,當啟動事務(wù)計數(shù)器值即11大于LTV即10時,則確定從該功能開始起存儲器位置已被更新過,即從該功能開始起已有事務(wù)啟動更新存儲器位置。如上,可響應(yīng)于確定從該功能開始起存儲器位置已被更新過而采取任意數(shù)量的動作,諸如執(zhí)行慢徑操作、執(zhí)行處理程序、和/或利用保證數(shù)據(jù)有效性的另一種方法。
[0061]轉(zhuǎn)到圖3a,示出了用于提供高效率的強原子性的邏輯的實施例。在一個實施例中,圖3a中示出的邏輯被包括在集成電路中,諸如包括在微處理器中。處理元素301和302包括上面提及的任意處理元素,諸如硬件線程、核、或其它邏輯處理器/處理元素。存儲元素305用于持有全局事務(wù)值(GTV)。注意,存儲元素包括用于持有值的任意存儲區(qū)域,諸如寄存器、存儲器位置、高速緩存位置、棧位置、或其它存儲區(qū)域。例如,存儲元素305包括用于持有GTV的寄存器。在另一個實施例中,程序棧位置用來持有GTV。
[0062]在要于PE301上執(zhí)行的功能的開始,響應(yīng)于執(zhí)行操作351,將把GTV的副本持有在存儲元素301b中作為本地事務(wù)值(LTV)。如上,存儲元素301b可包括任意存儲元素/區(qū)域,諸如寄存器、存儲位置、高速緩存位置、棧位置、或其它存儲區(qū)域。注意,存儲元素301b示出在PE301內(nèi);然而存儲元素301b可按任何方式與PE301相關(guān)聯(lián)。例如,存儲元素301b可以是與PE301相關(guān)聯(lián)的寄存器組中的寄存器或與處理元素301相關(guān)聯(lián)的程序棧位置。盡管沒有細述,但所討論的存儲元素302b以與存儲元素301b相似的方式工作。如所示,元素301b和302b是分開的;然而,它們可物理地位于同一設(shè)備或存儲區(qū)域中并且相應(yīng)地與PE301和302相關(guān)聯(lián)。GTV還可被稱為最近期事務(wù)值,即指示最新中斷/提交的事務(wù),或被稱為全局時戳,即指示在特定的時間點提交/中斷了的事務(wù)或事務(wù)數(shù)。如所示,操作351本質(zhì)上是拍下持有在存儲元素305中的GTV在功能執(zhí)行開始時的快照。
[0063]操作352包括非事務(wù)性加載操作,即不被包括在臨界事務(wù)段中的加載操作,該加載操作在被執(zhí)行時用于從高速緩存行310加載。處理元素302執(zhí)行導(dǎo)致對高速緩存行310更新的事務(wù)性操作353,諸如提交操作、中斷操作、和/或存儲操作。在一個實施例中,在事務(wù)的提交或中斷處,持有在存儲元素305中的GTV被更新/遞增。新遞增的GTV可被用作版本號來更新與高速緩存行310相關(guān)聯(lián)的元數(shù)據(jù)位置315。
[0064]從上文注意到,作為例子,可通過對與行310相關(guān)聯(lián)的地址的至少一部分使用散列函數(shù)以索引到元數(shù)據(jù)位置表內(nèi)的元數(shù)據(jù)位置315,來將元數(shù)據(jù)位置315與高速緩存行310相關(guān)聯(lián)。同樣,在一個實施例中,位置315中的版本號指示高速緩存行310是解鎖/無主的?;蛘?,高速緩存行310響應(yīng)于在位置315中持有加鎖/有主值而被加鎖。作為一個例子,通過在位置315的最高有效位(MSB)位置中持有邏輯I來在位置315中指示加鎖/有主值,而通過在位置315的MSB位置中持有邏輯O來指示版本號。
[0065]在操作354,比較邏輯320將元數(shù)據(jù)位置315中持有的鎖值與從功能開始起持有在LTV存儲區(qū)域310b中的GTV305副本比較。如果持有在位置315中的值小于或等于310b中的LTV,即指示持有在位置315中的版本——并且相關(guān)聯(lián)地還有存儲器位置310從GTV305被復(fù)制到LTV存儲元素310b中起尚未被更新過,則執(zhí)行正常繼續(xù)。當確定此訪問有效時,該執(zhí)行流程不執(zhí)行更多外加的外部操作即繼續(xù)進行。
[0066]反之,如果持有在元數(shù)據(jù)位置315中的值大于持有在存儲元素310b中的LTV,則確定從GTV被高速緩沖在LTV存儲元素301b中起存儲器位置310已被更新過。注意,在其中加鎖值包括持有在位置315的MSB位置中的邏輯I的實施例中,加鎖值將大于被用作版本號來更新位置315的任何GTV,因為版本號在MSB位置中包括O。因此,在一個實施例中,確定從位置315持有加鎖值的時間到元數(shù)據(jù)位置315被更新為更大的版本值的時間位置310已被更新過。
[0067]響應(yīng)于持有在位置315中的鎖值大于持有在存儲元素301b中的LTV,可采取任何數(shù)量的強原子性解決動作。作為一個例子,可執(zhí)行一組慢徑操作以確保有效的非事務(wù)性存儲器訪問。慢徑操作可包括其它更謹慎的操作,諸如在執(zhí)行訪問前對鎖可用性的測試/檢查。作為另一個例子,可利用其它競爭解決算法,諸如執(zhí)行處理程序或中斷正在爭用此存儲器位置的事務(wù)。
[0068]作為演示操作實施例的過于簡化的說明性示例,GTV305初始持有GTV0001 (十進制值I ),且元數(shù)據(jù)位置315也包括版本0001。在功能的開始,GTV值0001被復(fù)制到LTV存儲元素301b。執(zhí)行從行310進行的非事務(wù)性加載。另外,正由PE302執(zhí)行的事務(wù)提交,這導(dǎo)致GTV305被遞增到0010 (十進制值2)。在此事務(wù)執(zhí)行期間,位置315被轉(zhuǎn)移到諸如1000(十進制值8)的鎖值,并且行310被更新。此外,在更新后,當釋放此鎖時,新的GTV值0010作為新版本被存儲在元數(shù)據(jù)位置315中。當比較邏輯320將持有在元數(shù)據(jù)位置315中的鎖值與LTV301b進行比較時,鎖值不但在鎖被持有時大于LTV301b即1000>0001,而且在版本被更新之后亦是如此,即0010>0001。結(jié)果,強原子性解決可得以執(zhí)行,諸如執(zhí)行慢徑操作。[0069]轉(zhuǎn)到圖3b,示出了用于提供高效率的強原子性的模塊的另一個實施例。在此,操作351-353以與參考圖3a所討論的類似方式工作。然而,在操作354中,比較邏輯320是將LTV301b與持有在啟動事務(wù)計數(shù)器330中的事務(wù)計數(shù)值進行比較。在一個實施例中,事務(wù)計數(shù)值330是響應(yīng)于啟動事務(wù)而被遞增。在另一個實施例中,事務(wù)計數(shù)器330是響應(yīng)于事務(wù)啟動更新存儲器位置而被遞增。在更新就地STM中,更新在事務(wù)新存儲執(zhí)行時發(fā)生/開始。因此,計數(shù)器330將在該點被遞增。然而,在寫緩沖STM中,計數(shù)器330是在事務(wù)提交——即存儲器更新開始時被遞增。
[0070]如果計數(shù)器330小于或等于LTV301b,則尚無事務(wù)啟動更新存儲器位置,且執(zhí)行可正常繼續(xù)。然而,如果計數(shù)器330大于LTV301b,則已有事務(wù)啟動更新存儲器位置。因此,可執(zhí)行其它較慢路徑操作。例如,通過比較LTV和計數(shù)器值,可優(yōu)化或避免其它操作,諸如計算所訪問的存儲器位置、進入元數(shù)據(jù)位置的散列值、以及持有在元數(shù)據(jù)位置中的版本值。因此,如果計數(shù)值大于LTV,即指示存儲位置已經(jīng)被更新過,則可比較版本以確定所訪問的存儲器位置是否已經(jīng)被更新過。此外,可執(zhí)行任何其它的慢徑指令或操作。
[0071]作為演示操作實施例的過于簡化的說明性示例,GTV305初始持有GTV0001 (十進制值1),且計數(shù)器330包括事務(wù)值0001。在功能開始,GTV值0001被復(fù)制到LTV存儲元素301b。執(zhí)行從行310進行的非事務(wù)性加載。另外,正由PE302在寫緩沖STM中執(zhí)行的事務(wù)提交,這導(dǎo)致計數(shù)器330被遞增到0010。當比較事務(wù)值0010和LTV值0001時,事務(wù)值較大,這指示已有事務(wù)更新過存儲器位置。注意,在此,事務(wù)或許并不更新存儲器位置310。因此,比較邏輯320可如上所討論地有條件地將版本與LTV比較以明確地確定該事務(wù)是否已經(jīng)更新存儲器位置310。
[0072]接下來參照圖4a,示出了提供高效率的強原子性的方法的流程圖的實施例。此外,如上所討論的,編譯器在被執(zhí)行時用于編譯應(yīng)用/程序代碼。在編譯期間,可插入事務(wù)性操作,諸如讀屏障、寫屏障、提交操作、和中斷操作。另外,可插入非事務(wù)性強原子性操作,它在被執(zhí)行時用于執(zhí)行以上和/或以下參考圖4a_4c描述的操作/功能。
[0073]在流程405中,全局事務(wù)值(GTV)在功能開始被復(fù)制到本地事務(wù)值(LTV)。在一個實施例中,GTV是響應(yīng)于事務(wù)提交和中斷而被遞增/更新的全局時戳。作為一個例子,在被執(zhí)行時用于執(zhí)行復(fù)制/移動的強原子性操作被插在非事務(wù)性功能的開始。
[0074]接下來,在流程410中,執(zhí)行此功能內(nèi)所包括的非事務(wù)性加載操作以從存儲器位置加載。在流程415,確定從此功能開始起是否已有事務(wù)更新過存儲器位置。如果從此功能開始起尚未有事務(wù)更新過存儲器位置,則確定此加載有效且在流程425中正常地繼續(xù)執(zhí)行。反之,如果從此功能開始起事務(wù)已經(jīng)更新過存儲器位置,則在流程420執(zhí)行慢徑操作。注意,慢徑操作可包括任何用于確保非事務(wù)性加載的有效性的解決操作,包括檢查、測試、和/或在鎖上空轉(zhuǎn)(spinning) /等待、計算版本、檢查版本尚未被改變、和/或再次執(zhí)行此非事務(wù)性加載。
[0075]圖4b示出用于確定從圖4a的功能開始起已有事務(wù)更新過存儲器位置的流程圖的實施例。流程405、410、420、和425與圖4a中同樣的流程相似。然而,在流程416中,與加載自的存儲器位置相關(guān)聯(lián)的事務(wù)記錄值被確定。在一個實施例中,參引此存儲器位置的地址的至少一部分被散列到事務(wù)記錄表中。從與存儲器位置相關(guān)聯(lián)的事務(wù)記錄來確定此事務(wù)記錄值。在流程417,將此事務(wù)記錄值與在流程405中從GTV復(fù)制的本地事務(wù)值進行比較。在一個實施例中,全局事務(wù)值(GTV)響應(yīng)于有事務(wù)被提交/中斷而被遞增。另外,用新遞增的GTV更新此事務(wù)記錄值以釋放由正在提交的事務(wù)擁有的存儲器位置上的鎖。
[0076]因此,如果事務(wù)記錄值小于或等于LTV,則確定從此功能開始起該存儲器位置尚未被更新過,且在流程425執(zhí)行正常繼續(xù)。然而,如果事務(wù)記錄值大于LTV,則確定從GTV被高速緩沖為LTV起——即從此功能開始起——該存儲器位置已經(jīng)被更新過。在此,執(zhí)行慢徑指令/操作以確保該非事務(wù)性加載的有效性,諸如檢查事務(wù)記錄、在事務(wù)記錄上空轉(zhuǎn)/等待其變成解鎖/無主的、獲取事務(wù)記錄的所有權(quán)、和/或再次執(zhí)行該非事務(wù)性訪問。
[0077]轉(zhuǎn)到圖4c,示出了確定從功能開始起存儲位置是否已被更新的方法的流程圖的另一個實施例。在此,是在流程412在有事務(wù)啟動更新存儲器位置時遞增全局啟動計數(shù)器。在寫緩沖STM中,是在提交時更新位置,所以啟動事務(wù)計數(shù)器將在事務(wù)的提交時被遞增。然而,在就地更新STM中,存儲器位置是在事務(wù)的執(zhí)行期間試探性地更新的,所以計數(shù)器可響應(yīng)于啟動事務(wù)或在遇到第一個事務(wù)性存儲時被遞增。注意,計數(shù)器可被遞增整數(shù)或其倍數(shù)。例如,如果版本號包括偶數(shù),且有主值包括奇數(shù),則計數(shù)器可被遞增偶倍數(shù)以與版本或GTV相符。
[0078]在流程418中,將啟動計數(shù)器值與本地事務(wù)值(LTV)進行比較。因此確定從LTV最近被更新一即功能開始起是否已有任何事務(wù)啟動更新存儲器位置。注意,被訪問的特定存儲位置或許尚未被更新;然而,有事務(wù)已經(jīng)啟動更新存儲位置。在此,在流程420執(zhí)行慢徑操作時,以類似于圖4b所示的方法來比較版本,以確定特定的存儲器位置是否已經(jīng)被更新。然而,可替換地或補充地執(zhí)行確保非事務(wù)性加載的有效性的其它操作。
[0079]如上所示,可插入經(jīng)優(yōu)化的強原子性操作,這些操作在被執(zhí)行時用于為非事務(wù)性讀訪問提供高效率的強原子性。對每個非事務(wù)性加載周到的屏障操作潛在可能被避免以加速非事務(wù)性加載在事務(wù)性存儲器系統(tǒng)中的執(zhí)行。此外,可利用多級進取性執(zhí)行的組合。例如,可僅確定是否已有另一個事務(wù)啟動了就來執(zhí)行非事務(wù)性訪問,而不是非得計算版本值。如果尚無事務(wù)開始更新存儲器位置,則不是非得執(zhí)行周到的簿記也能繼續(xù)執(zhí)行。然而,如果存儲器位置已經(jīng)被更新,則可計算版本并將其與本地時戳進行比較以確定特定存儲位置是否已經(jīng)被更新。因此,通過避免在鎖上檢查/空轉(zhuǎn)仍可一定程度地加速執(zhí)行。此外,如果存儲器位置已經(jīng)被更新,則可執(zhí)行以往的全強原子性操作即較慢的指令路徑,以確保事務(wù)性與非事務(wù)性存儲器訪問之間的數(shù)據(jù)有效性。
[0080]上述的方法、軟件、固件或代碼集的實施例可經(jīng)由存儲在機器可訪問或機器可讀介質(zhì)上的、可由處理元素執(zhí)行的指令或代碼來實現(xiàn)。機器可訪問/可讀介質(zhì)包括任何提供(即,存儲和/或傳送)諸如計算機或電子系統(tǒng)之類的機器可讀形式的信息的機制。例如,機器可訪問介質(zhì)包括:隨機存取存儲器(RAM),諸如靜態(tài)RAM (SRAM)或動態(tài)RAM (DRAM)5ROM ;磁或光存儲介質(zhì);閃存設(shè)備;電、光、聲或其它形式的傳播信號(例如,載波、紅外信號、數(shù)字信號)等。
[0081]在本說明書全文中對“一個實施例”或“一實施例”的引述表示結(jié)合該實施例描述的特定特征、結(jié)構(gòu)、或特性包括在本發(fā)明的至少一個實施例中。因此,在本說明書全文中各處出現(xiàn)的短語“在一個實施例中”或“在一實施例中”不一定全指同一實施例。此外,這些特定的特征、結(jié)構(gòu)、或特性可以按任何適當?shù)姆绞皆谝粋€或更多個實施例中被組合。
[0082]在以上的說明書中,已參考具體的示例性實施例給出了詳細的描述。然而,顯然可對其進行各種修改和改變而不會脫離所附權(quán)利要求書中闡述的本發(fā)明的更寬的精神和范圍。因此本說明書和附圖應(yīng)在說明性的意義而不是限制性的意義上來對待。此外,上文對實施例和其它示例性語言的使用不一定指相同的實施例或相同的示例,而是既可指不同的和區(qū)別的實施例也可指潛在可能相同的實施例。
【權(quán)利要求】
1.一種方法,包括: 檢測功能中的包括多個存儲器操作的非事務(wù)性加載操作,所述非事務(wù)性加載操作從多個存儲器位置中的第一存儲器位置加載; 在所述功能中插入第一原子性操作以將全局事務(wù)值的副本存儲為本地事務(wù)值(LTV); 插入第二原子性操作以將所述LTV與事務(wù)計數(shù)器值進行比較以確定事務(wù)在所述功能開始之后是否已更新了所述多個存儲器位置中的任意存儲器位置,當任意存儲器位置被更新時所述事務(wù)計數(shù)器遞增;以及 當所述事務(wù)計數(shù)器值與所述LTV的比較指示所述事務(wù)在所述功能開始之后已更新了所述多個存儲器位置中的至少一個存儲器位置時,插入第三原子性操作以分析與所述存儲器位置中的所述第一存儲器位置相關(guān)聯(lián)的版本值,以確定所述存儲器位置中的所述第一存儲器位置在所述功能開始之后是否被更新,其中所述第一和第二原子性操作不包括鎖操作,所述鎖操作用于確定與所述存儲器位置中的所述第一存儲器位置相關(guān)聯(lián)的鎖是否是無主的。
2.如權(quán)利要求1所述的方法,其特征在于,還包括:響應(yīng)于確定所述事務(wù)在所述功能開始之后已更新所述存儲器位置中的至少一個存儲器位置,插入所述鎖操作以供執(zhí)行。
3.如權(quán)利要求1所述的方法,其特征在于,所述第一原子性操作用于更新用于保持所述LTV的寄存器。
4.一種方法,包括: 在功能中檢測非事務(wù)性加載操作,所述非事務(wù)性加載操作用于從多個存儲器位置中的第一存儲器位置加載;以及 響應(yīng)于在所述功能中檢測到所述非事務(wù)性加載操作,通過以下步驟確定所述多個存儲器位置中的任意存儲器位置在所述功能開始之后是否已被更新: 在所述功能中插入第一原子性操作以利用與全局事務(wù)值相對應(yīng)的本地事務(wù)值(LTV)來更新寄存器; 插入第二原子性操作以將與所述多個存儲器位置相關(guān)聯(lián)的事務(wù)計數(shù)器值與所述LTV進行比較,當所述存儲器位置中的任意存儲器位置被更新時所述事務(wù)計數(shù)器值會遞增;以及 當所述事務(wù)計數(shù)器值大于所述LTV時,插入第三原子性操作以分析與所述存儲器位置中的所述第一存儲器位置相關(guān)聯(lián)的版本值,以確定所述存儲器位置中的所述第一存儲器位置在所述功能開始之后是否已被更新,其中所述第三原子性操作包括: 第一版本操作,用于獲得與所述存儲器位置中的所述第一存儲器位置相關(guān)聯(lián)的地址;以及 第二版本操作,用于計算編入事務(wù)記錄表中的事務(wù)記錄中的索引以獲得所述版本值。
5.如權(quán)利要求4所述的方法,其特征在于,所述事務(wù)記錄用于保持加鎖值以指示所述存儲器位置中的所述第一存儲器位置為有主的,并用于保持所述版本值以指示所述存儲器位置中的所述第一存儲器位置為無主的,且其中所述加鎖值包括在所述事務(wù)記錄的最高有效位(MSB)中的邏輯I,且所述版本值包括在所述事務(wù)記錄的所述MSB中的邏輯O。
6.如權(quán)利要求4所述的方法,其特征在于,所述第二原子性操作用于: 如果所述事務(wù)計數(shù)器值大于所述LTV,則確定所述存儲器位置中的至少一個存儲器位置在所述功能開始之后已被更新;以及 如果所述事務(wù)計數(shù)器值小于或等于所述LTV,則確定所述存儲器位置中沒有存儲器位置在所述功能開始之后被更新。
7.一種系統(tǒng),包括: 存儲器,用于保持包括多個非事務(wù)性操作的程序代碼,其中所述多個非事務(wù)性操作包括在功能中的非事務(wù)性加載操作;以及 與所述存儲器通信的處理邏輯電路,用于執(zhí)行所述非事務(wù)性加載操作以從與所述存儲器中的多個存儲器位置中的第一存儲器位置相關(guān)聯(lián)的地址加載,并用于執(zhí)行所述多個非事務(wù)性操作中的多個原子性操作以確定所述存儲器位置中的所述第一存儲器位置在所述功能開始之后是否已被更新,所述多個原子性操作包括: 第一原子性操作,用于將全局事務(wù)值高速緩存為本地事務(wù)值(TLV); 第二原子性操作,用于將與所述多個存儲器位置相關(guān)聯(lián)的事務(wù)計數(shù)器值與所述LTV進行比較,以確定所述多個存儲器位置中的至少一個存儲器位置在所述功能開始之后是否被更新;以及 第三原子性操作,用于在所述第二原子性操作的結(jié)果指示所述多個存儲器位置中的所述至少一個存儲器位置被更新時,分析與所述多個存儲器位置中的所述第一存儲器位置相關(guān)聯(lián)的版本值以確定所述存儲器位置中的所述第一存儲器位置在所述功能開始之后是否被更新,其中所述第一和第二原子性操作不包括鎖操作,所述鎖操作用于確定與所述存儲器位置中的所述第一存儲器位置相關(guān)聯(lián)的鎖是否是無主的。
8.如權(quán)利要求7所述 的系統(tǒng),其特征在于,所述處理邏輯電路用于:如果所述事務(wù)計數(shù)器值大于所述LTV,則執(zhí)行與所述多個非事務(wù)性操作相關(guān)聯(lián)的多個慢徑操作;如果所述事務(wù)計數(shù)器值小于或等于所述LTV,則不執(zhí)行所述多個慢徑操作。
9.一種方法,包括: 在功能開始時將全局事務(wù)值復(fù)制到本地事務(wù)值(LTV); 執(zhí)行所述功能中的非事務(wù)性加載操作以從多個存儲器位置中的所選的一個存儲器位置加載值; 基于事務(wù)計數(shù)值與所述LTV的比較,確定事務(wù)從所述功能開始起是否已更新了所述多個存儲器位置中的至少一個存儲器位置;以及 如果所述事務(wù)從所述功能開始起已更新了所述多個存儲器位置中的至少一個存儲器位置,則分析與所述存儲器位置中的所選的所述一個存儲器位置相關(guān)聯(lián)的版本值,其中分析所述版本值包括: 獲得與所述存儲器位置中的所選的所述一個存儲器位置相關(guān)聯(lián)的地址;以及 計算編入事務(wù)記錄表中的事務(wù)記錄中的索引以獲得所述版本值。
10.如權(quán)利要求9所述的方法,其特征在于,確定所述事務(wù)從所述功能開始起是否已更新了所述多個存儲器位置中的所述至少一個存儲器位置包括: 如果所述事務(wù)計數(shù)器值大于所述LTV,則確定所述事務(wù)從所述功能開始起已更新了所述多個存儲器位置中的所述至少一個存儲器位置;以及 如果所述事務(wù)計數(shù)器值小于或等于所述LTV,則確定所述事務(wù)從所述功能開始起未更新所述多個存儲器位置中的所述至少一個存儲器位置。
11.如權(quán)利要求9所述的方法,其特征在于,所述版本值被保持在元數(shù)據(jù)位置,所述元數(shù)據(jù)位置通過與所述存儲器位置中的所選的所述一個存儲器位置相關(guān)聯(lián)的地址的至少一部分的散列值來引用。
12.如權(quán)利要求9所述的方法,其特征在于,確定所述事務(wù)從所述功能開始起是否已更新了所述多個存儲器位置中的所述至少一個存儲器位置包括: 響應(yīng)于開始所述事務(wù),更新所述事務(wù)計數(shù)器值; 將所述LTV與所述事務(wù)計數(shù)器值進行比較; 如果所述事務(wù)計數(shù)器值等于所述LTV,則確定所述事務(wù)從所述功能開始起未更新所述多個存儲器位置中的所述至少一個存儲器位置;以及 如果所述事務(wù)計數(shù)器值大于所述LTV,則確定所述事務(wù)從所述功能開始起已更新所述多個存儲器位置中的所述至少一個存儲器位置。
【文檔編號】G06F9/46GK103544054SQ201310487913
【公開日】2014年1月29日 申請日期:2008年12月30日 優(yōu)先權(quán)日:2007年12月30日
【發(fā)明者】B·薩哈, A-R·阿德爾-塔巴塔拜, C·王, T·史佩斯曼 申請人:英特爾公司