使能混合事務(wù)存儲(chǔ)器系統(tǒng)中的最大并發(fā)性的制作方法
【專(zhuān)利摘要】在事務(wù)存儲(chǔ)器系統(tǒng)的一實(shí)施例中,設(shè)備包括處理器和執(zhí)行邏輯,以便實(shí)現(xiàn)第一軟件事務(wù)模式的至少一個(gè)第一軟件事務(wù)和第二軟件事務(wù)模式的第二軟件事務(wù)以及第一硬件事務(wù)模式的至少一個(gè)硬件事務(wù)和第二硬件事務(wù)模式的至少一個(gè)第二硬件事務(wù)的并發(fā)執(zhí)行。在一個(gè)示例中,執(zhí)行邏輯可在處理器中實(shí)現(xiàn)。描述并且要求保護(hù)其他實(shí)施例。
【專(zhuān)利說(shuō)明】使能混合事務(wù)存儲(chǔ)器系統(tǒng)中的最大并發(fā)性
【背景技術(shù)】
[0001] 在并行編程計(jì)算環(huán)境中,共享對(duì)相同存儲(chǔ)器位置的訪問(wèn)要求適當(dāng)管理和同步,這 會(huì)比較難以執(zhí)行。按傳統(tǒng),訪問(wèn)共享存儲(chǔ)器的線程之間的同步使用鎖定來(lái)實(shí)現(xiàn),以保護(hù)共享 數(shù)據(jù)免于同時(shí)訪問(wèn)。但是,鎖定在其對(duì)共享數(shù)據(jù)的串行化中常常是過(guò)度保守的(這在執(zhí)行時(shí) 可能不一定是必要的),但是確定編寫(xiě)代碼的時(shí)間常常是棘手或不可能的。
[0002] 作為備選解決方案提出了事務(wù)存儲(chǔ)器,以允許線程推測(cè)地并行執(zhí)行臨界區(qū)(稱作 事務(wù))。如果沖突在執(zhí)行時(shí)發(fā)生,則線程停止或終止其事務(wù),并且再次執(zhí)行它們以解決沖突。 在事務(wù)存儲(chǔ)器系統(tǒng)中,線程能夠推測(cè)地執(zhí)行事務(wù),而無(wú)需改變共享存儲(chǔ)器位置的內(nèi)容,直到 事務(wù)隨后提交。如果在兩個(gè)事務(wù)之間檢測(cè)到?jīng)_突,則可中止事務(wù)其中之一,使得其他事務(wù)能 夠提交,在這時(shí),所提交事務(wù)可改變共享存儲(chǔ)器位置的內(nèi)容。
【附圖說(shuō)明】
[0003] 圖1是按照一實(shí)施例的系統(tǒng)的框圖。
[0004] 圖2是按照一實(shí)施例的事務(wù)的執(zhí)行的高級(jí)流程圖。
[0005] 圖3示出按照一實(shí)施例的硬件事務(wù)與軟件事務(wù)之間的可能定時(shí)。
[0006] 圖4是按照本發(fā)明的一實(shí)施例的混合事務(wù)存儲(chǔ)器系統(tǒng)流程的框圖。
[0007] 圖5是按照一實(shí)施例的第一硬件事務(wù)的執(zhí)行的流程圖。
[0008] 圖6是按照一實(shí)施例的第一硬件事務(wù)的階段的細(xì)節(jié)。
[0009]圖7是按照一實(shí)施例的第二事務(wù)的執(zhí)行的流程圖。
[0010] 圖8是按照一實(shí)施例的基于基本布隆過(guò)濾器的硬件事務(wù)的細(xì)節(jié)。
[0011] 圖9是按照一實(shí)施例的基于優(yōu)化布隆過(guò)濾器的硬件事務(wù)的細(xì)節(jié)。
[0012] 圖10是按照一實(shí)施例的推測(cè)軟件事務(wù)的執(zhí)行的流程圖。
[0013] 圖11示出按照一實(shí)施例的軟件事務(wù)執(zhí)行的細(xì)節(jié)。
[0014] 圖12是按照一實(shí)施例的不可撤銷(xiāo)軟件事務(wù)的執(zhí)行的流程圖。
[0015] 圖13示出按照一實(shí)施例的不可撤銷(xiāo)軟件事務(wù)的細(xì)節(jié)。
[0016] 圖14是按照另一個(gè)實(shí)施例的系統(tǒng)的框圖。
【具體實(shí)施方式】
[0017] 在實(shí)現(xiàn)事務(wù)存儲(chǔ)器系統(tǒng)的各個(gè)實(shí)施例中,可在與一個(gè)或多個(gè)軟件事務(wù)并發(fā)執(zhí)行的 一個(gè)或多個(gè)硬件事務(wù)之間使用與被訪問(wèn)存儲(chǔ)器位置有關(guān)的信息來(lái)確定沖突。在某些實(shí)現(xiàn) 中,這個(gè)信息可通過(guò)與執(zhí)行事務(wù)的線程關(guān)聯(lián)的過(guò)濾器組來(lái)保持。更具體來(lái)說(shuō),實(shí)施例可將這 些過(guò)濾器組作為所謂的布隆過(guò)濾器來(lái)實(shí)現(xiàn),其中可存儲(chǔ)與被訪問(wèn)存儲(chǔ)器位置有關(guān)的信息。
[0018] -般來(lái)說(shuō),布隆過(guò)濾器可實(shí)現(xiàn)為位向量,其包括各提供與一個(gè)或多個(gè)存儲(chǔ)器位置 關(guān)聯(lián)的值的多個(gè)字段。在操作中,將被訪問(wèn)存儲(chǔ)器位置地址(或者其一部分)與一個(gè)或多個(gè) 哈希值進(jìn)行哈希。哈希結(jié)果用來(lái)裝載位向量的對(duì)應(yīng)條目。更具體來(lái)說(shuō),在訪問(wèn)和哈希計(jì)算 時(shí),位向量的所指示字段可設(shè)置在邏輯一或有效值,以指示已經(jīng)訪問(wèn)對(duì)應(yīng)地址。類(lèi)似地,具 有邏輯零或無(wú)效值的任何字段指示尚未訪問(wèn)存儲(chǔ)器的一個(gè)或多個(gè)給定地址。
[0019] 沖突檢測(cè)可至少部分使用多個(gè)布隆過(guò)濾器值來(lái)執(zhí)行。更具體來(lái)說(shuō),第一線程的布 隆過(guò)濾器可使其內(nèi)容與具有并發(fā)執(zhí)行事務(wù)的第二線程的布隆過(guò)濾器的內(nèi)容進(jìn)行比較。如果 交叉比較指示訪問(wèn)存儲(chǔ)器位置在一個(gè)或多個(gè)位置中交叉,則檢測(cè)到?jīng)_突,并且終止或中止 事務(wù)的一個(gè)或多個(gè)的操作可發(fā)生。而如果交叉比較指示被訪問(wèn)位置沒(méi)有交叉,則事務(wù)之一 或兩者可在沒(méi)有沖突檢測(cè)的情況下繼續(xù)提交。
[0020] 實(shí)施例可用來(lái)確定與軟件事務(wù)并發(fā)執(zhí)行的硬件事務(wù)之間的沖突。使用為各線程提 供布隆過(guò)濾器的一實(shí)施例,在軟件全局鎖定由軟件事務(wù)所保持的同時(shí)完成執(zhí)行的硬件事務(wù) 僅當(dāng)發(fā)現(xiàn)沖突時(shí)才可被迫中止。布隆過(guò)濾器有時(shí)能夠允許誤報(bào),因此假中止仍然能夠發(fā)生。 然而,布隆過(guò)濾器的使用能夠改進(jìn)硬件事務(wù)的提交率。
[0021] 實(shí)施例可用于混合事務(wù)存儲(chǔ)器(HTM)(其使用將要由給定軟件事務(wù)所獲取的單個(gè) 全局鎖定來(lái)提供軟件事務(wù)和硬件事務(wù))中。硬件事務(wù)存儲(chǔ)器可以只通過(guò)處理器硬件來(lái)實(shí)現(xiàn), 其使用盡力來(lái)完成要提交的事務(wù)。軟件事務(wù)存儲(chǔ)器完全通過(guò)軟件來(lái)實(shí)現(xiàn),以便在多線程程 序中同步共享存儲(chǔ)器。
[0022] 在硬件事務(wù)結(jié)束時(shí),硬件事務(wù)咨詢單個(gè)全局鎖定。如果鎖定為空,則硬件事務(wù)能夠 成功提交。在單個(gè)全局鎖定不為空的情況下,沖突檢測(cè)可使用每線程布隆過(guò)濾器(其表示各 事務(wù)的讀和寫(xiě)集合)來(lái)執(zhí)行。這樣,即使單個(gè)全局鎖定被軟件事務(wù)占用,非沖突硬件事務(wù)也 能夠提交。
[0023] 因此,實(shí)施例實(shí)現(xiàn)混合事務(wù)存儲(chǔ)器系統(tǒng)中所實(shí)現(xiàn)的并發(fā)量的增加。為了檢測(cè)軟件 事務(wù)與硬件事務(wù)之間的沖突,各線程與布隆過(guò)濾器關(guān)聯(lián)。在線程中的事務(wù)的執(zhí)行期間,注解 每個(gè)讀和寫(xiě),以便將存儲(chǔ)器位置添加到布隆過(guò)濾器。在一實(shí)施例中,這個(gè)注解可通過(guò)資料庫(kù) 調(diào)用進(jìn)行。但是,其他實(shí)施例可采用讀和寫(xiě)存儲(chǔ)器訪問(wèn)來(lái)嵌入這類(lèi)注解。備選地,編譯器可 插入指令,以操控布隆過(guò)濾器插入。
[0024] 在完成硬件事務(wù)(即,事務(wù)的臨界區(qū))時(shí),事務(wù)在提交之前咨詢?nèi)宙i定,以及如果 鎖定為空,則該事務(wù)能夠成功提交。但是,如果鎖定被占用,則在交叉操作中比較硬件事務(wù) 和軟件事務(wù)(其擁有全局鎖定)的布隆過(guò)濾器內(nèi)容,以確定是否存在沖突。布隆過(guò)濾器允許 誤報(bào),但是不允許漏報(bào)。因此,盡管事務(wù)沒(méi)有實(shí)際沖突,也可檢測(cè)到?jīng)_突,但是如果事務(wù)訪問(wèn) 相同存儲(chǔ)器位置,則交叉比較將不會(huì)報(bào)告零沖突。因此,即使鎖定被占用,硬件事務(wù)也能夠 成功提交,只要布隆過(guò)濾器沒(méi)有報(bào)告沖突。
[0025] 在一個(gè)特定混合事務(wù)存儲(chǔ)器系統(tǒng)中,單個(gè)軟件事務(wù)可與一個(gè)或多個(gè)硬件事務(wù)并發(fā) 執(zhí)行。在軟件事務(wù)開(kāi)始時(shí),它獲取單個(gè)全局鎖定以確保獨(dú)占性。各硬件事務(wù)在臨界區(qū)結(jié)束時(shí) 讀取這個(gè)鎖定,以確定它是否能夠設(shè)法提交或者要咨詢布隆過(guò)濾器。在一實(shí)施例中,單個(gè)全 局鎖定能夠存儲(chǔ)擁有者線程的標(biāo)識(shí)符,因而向硬件事務(wù)指示要對(duì)哪一個(gè)布隆過(guò)濾器檢查沖
[0026] 在一實(shí)施例中,布隆過(guò)濾器可實(shí)現(xiàn)為軟件布隆過(guò)濾器。使用這些過(guò)濾器,各事務(wù) (硬件或軟件)在讀取/寫(xiě)入那個(gè)位置時(shí)將所讀取或?qū)懭氲母鞔鎯?chǔ)器位置添加到其自己的布 隆過(guò)濾器。在硬件事務(wù)結(jié)束時(shí),布隆過(guò)濾器用來(lái)識(shí)別與當(dāng)前保持單個(gè)全局鎖定(若有的話) 的軟件事務(wù)的沖突。
[0027] 注意,硬件事務(wù)主要通過(guò)硬件來(lái)執(zhí)行,但是使讀和寫(xiě)訪問(wèn)被注解,使得所讀取/寫(xiě) 入的位置被輸入到每線程軟件布隆過(guò)濾器中。在提交時(shí)間,硬件事務(wù)檢查全局鎖定,以及如 果它為空,則它們能夠提交,否則它們計(jì)算它們自己的布隆過(guò)濾器與軟件布隆過(guò)濾器之間 的組交叉。如果不存在沖突,則硬件事務(wù)能夠成功提交。在提交時(shí)(在確認(rèn)沒(méi)有沖突或過(guò)濾 器交叉之后),通過(guò)將已更新值寫(xiě)到存儲(chǔ)器(使得所有更新立即變?yōu)榭梢?jiàn)),由硬件事務(wù)所執(zhí) 行的更新變成是其他線程可見(jiàn)的。如果事務(wù)中止,則所有更新恢復(fù)到其初始狀態(tài)。
[0028] 中止的硬件事務(wù)重試多次。在N(其是可配置參數(shù))重試之后,硬件事務(wù)轉(zhuǎn)變成軟件 事務(wù),并且尋求獲取單個(gè)全局鎖定。在軟件事務(wù)沒(méi)有中止的一實(shí)施例中,這個(gè)轉(zhuǎn)變確保前向 進(jìn)展。
[0029] 在這個(gè)實(shí)施例中,只有一個(gè)軟件事務(wù)能夠在任何給定時(shí)間執(zhí)行。軟件事務(wù)在其線 程擁有單個(gè)全局鎖定時(shí)能夠執(zhí)行。它通過(guò)在鎖定位置寫(xiě)入其線程標(biāo)識(shí)符(ID)來(lái)獲取鎖定, 并且開(kāi)始執(zhí)行其臨界區(qū)。由軟件事務(wù)所執(zhí)行的所有更新在原位進(jìn)行(換言之,軟件事務(wù)直接 更新存儲(chǔ)器)。此外,軟件事務(wù)還在其線程的布隆過(guò)濾器中存儲(chǔ)所讀取/寫(xiě)入的位置,以允許 任何并發(fā)硬件事務(wù)檢查沖突。在一實(shí)施例中,軟件事務(wù)能夠從不中止。
[0030] 混合事務(wù)存儲(chǔ)器方式可用來(lái)實(shí)現(xiàn)更快的事務(wù)執(zhí)行以及與硬件事務(wù)存儲(chǔ)器關(guān)聯(lián)的 降低開(kāi)銷(xiāo),同時(shí)確保被操控事務(wù)的前向進(jìn)展。按照混合事務(wù)存儲(chǔ)器方式,各事務(wù)最初通過(guò)硬 件來(lái)操控,以及隨后在前向進(jìn)展無(wú)法通過(guò)軟件來(lái)取得時(shí)通過(guò)軟件來(lái)操控。在各個(gè)實(shí)施例中, 提供一種混合事務(wù)存儲(chǔ)器系統(tǒng),其中全局鎖定用來(lái)實(shí)現(xiàn)軟件事務(wù)和一個(gè)或多個(gè)硬件事務(wù)的 并發(fā)執(zhí)行。
[0031] 圖1是設(shè)備100的框圖。如圖1所示,設(shè)備100包括多個(gè)元件,其中包括處理器元件 102、存儲(chǔ)器元件104和事務(wù)管理模塊106。但是,實(shí)施例并不局限于所示元件的類(lèi)型、數(shù)量或 布置。
[0032]在各個(gè)實(shí)施例中,處理器元件102可使用能夠?qū)崿F(xiàn)任務(wù)級(jí)并行性的任何處理器或 邏輯裝置來(lái)實(shí)現(xiàn)。在一些實(shí)施例中,處理器元件102可以是多核處理器。在另一個(gè)示例實(shí)施 例中,處理器元件102可以是設(shè)置成并行執(zhí)行任務(wù)的多個(gè)處理器。存儲(chǔ)器元件104可使用能 夠存儲(chǔ)數(shù)據(jù)的任何機(jī)器可讀或計(jì)算機(jī)可讀介質(zhì)來(lái)實(shí)現(xiàn),包括易失性和非易失性存儲(chǔ)器。在 一些實(shí)施例中,存儲(chǔ)器元件104可包括處理器元件102的高速緩存。在各個(gè)實(shí)施例中,作為補(bǔ) 充或替代,存儲(chǔ)器元件104可包括其他類(lèi)型的數(shù)據(jù)存儲(chǔ)介質(zhì),例如只讀存儲(chǔ)器(R0M)、隨機(jī)存 儲(chǔ)存儲(chǔ)器(RAM)、動(dòng)態(tài)RAM(DRAM)、雙倍數(shù)據(jù)速率DRAM(DDRAM)、同步DRAM(SDRAM)、靜態(tài)RAM (SRAM)、可編程ROM(PROM)、可擦可編程ROM(EPROM)、電可擦可編程ROM(EEPR0M)、閃速存儲(chǔ) 器、聚合物存儲(chǔ)器(例如鐵電聚合物存儲(chǔ)器、奧式存儲(chǔ)器、相變或鐵電存儲(chǔ)器、硅氧化氮化氧 化硅(S0N0S)存儲(chǔ)器)、磁或光卡或者適合存儲(chǔ)信息的任何其他類(lèi)型的介質(zhì)。存儲(chǔ)器元件104 的部分或全部可包含在與處理器元件102相同的集成電路上,或者備選地,存儲(chǔ)器元件104 的部分或全部可設(shè)置在處理器元件102的集成電路外部的集成電路或其他介質(zhì)(例如硬盤(pán) 驅(qū)動(dòng)器)上。
[0033]在一些實(shí)施例中,事務(wù)管理模塊106可包括電路、邏輯、其他硬件和/或指令,以按 照事務(wù)存儲(chǔ)器范例來(lái)管理事務(wù)的執(zhí)行。在各個(gè)實(shí)施例中,事務(wù)管理模塊106可引起硬件事務(wù) 和軟件事務(wù)的執(zhí)行。硬件事務(wù)可以是由處理器元件102中的邏輯裝置電路直接執(zhí)行的事務(wù)。 軟件事務(wù)可以是由執(zhí)行于處理器元件102的編程邏輯間接執(zhí)行的事務(wù)。
[0034]如圖1進(jìn)一步所示,提供系統(tǒng)140,其包括設(shè)備100和收發(fā)器144。收發(fā)器144可包括 一個(gè)或多個(gè)無(wú)線電單元,其能夠使用各種適當(dāng)?shù)臒o(wú)線通信技術(shù)來(lái)傳送和接收信號(hào)。這類(lèi)技 術(shù)可涉及跨一個(gè)或多個(gè)無(wú)線網(wǎng)絡(luò)的通信。示范無(wú)線網(wǎng)絡(luò)包括(但不限于)無(wú)線局域網(wǎng) (WLAN)、無(wú)線個(gè)人區(qū)域網(wǎng)絡(luò)(WPAN)、無(wú)線城域網(wǎng)(WMN)、蜂窩網(wǎng)絡(luò)和衛(wèi)星網(wǎng)絡(luò)。
[0035] 在一些實(shí)施例中,處理器元件102可托管一個(gè)或多個(gè)線程108。各線程108可對(duì)應(yīng)于 執(zhí)行于處理器元件102的應(yīng)用或程序,以及任何特定應(yīng)用或程序可具有一個(gè)以上關(guān)聯(lián)線程 108。應(yīng)用或程序可使用特定線程108來(lái)請(qǐng)求一個(gè)或多個(gè)事務(wù)110的執(zhí)行。事務(wù)110可引起各 種計(jì)算或其他任務(wù)的執(zhí)行被處理器元件102來(lái)執(zhí)行。
[0036]在各個(gè)實(shí)施例中,當(dāng)線程108請(qǐng)求事務(wù)的執(zhí)行時(shí),事務(wù)管理模塊106按照混合事務(wù) 存儲(chǔ)器算法來(lái)管理事務(wù)。在一些實(shí)施例中,混合事務(wù)存儲(chǔ)器算法可實(shí)現(xiàn)多個(gè)執(zhí)行階段或模 式,在此期間,嘗試執(zhí)行和提交事務(wù)。在各個(gè)實(shí)施例中,混合事務(wù)存儲(chǔ)器算法可包括硬件階 段和軟件階段。在一些實(shí)施例中,事務(wù)管理模塊106可以僅在硬件階段不成功之后將軟件階 段用于事務(wù)。
[0037]在一些實(shí)施例中,事務(wù)管理模塊106可利用全局鎖定112,以便實(shí)現(xiàn)軟件事務(wù)和一 個(gè)或多個(gè)硬件事務(wù)的并發(fā)執(zhí)行。在各個(gè)實(shí)施例中,事務(wù)管理模塊106可在軟件事務(wù)經(jīng)歷執(zhí)行 時(shí)使全局鎖定112被設(shè)置或者是有效的,以及在沒(méi)有軟件事務(wù)經(jīng)歷執(zhí)行時(shí)使全局鎖定112被 清除或者是無(wú)效的。在一些實(shí)施例中,全局鎖定112可以是自旋鎖定。在其他實(shí)施例中, Mellor-Crummey-Scott (MCS)鎖定可用于全局鎖定112,以便降低鎖定高速緩存線上的爭(zhēng) 用。在各個(gè)這類(lèi)實(shí)施例中,"MCS_acquire"和"MCS_release"方法可用來(lái)利用硬件事務(wù)來(lái)加 速比較和交換(CAS)指令的執(zhí)行。在一些實(shí)施例中,這個(gè)全局鎖定進(jìn)一步可使用如本文所述 的過(guò)濾機(jī)制來(lái)實(shí)現(xiàn)。
[0038]在一些實(shí)施例中,如果全局鎖定112在事務(wù)結(jié)束時(shí)是無(wú)效的并且沒(méi)有其他沖突在 事務(wù)執(zhí)行期間發(fā)生,則事務(wù)管理模塊106可使硬件事務(wù)進(jìn)行提交。而如果全局鎖定112在硬 件事務(wù)尋求提交時(shí)是有效的或者被占用,則事務(wù)管理模塊116可通過(guò)參照與發(fā)起事務(wù)的線 程關(guān)聯(lián)的布隆過(guò)濾器中存儲(chǔ)的信息,來(lái)確定沖突是否存在于硬件事務(wù)與未決軟件事務(wù)之 間。
[0039]在各個(gè)實(shí)施例中,事務(wù)管理模塊106可包括執(zhí)行邏輯114。在一些實(shí)施例中,執(zhí)行邏 輯114可以是執(zhí)行事務(wù)110的電路、其他硬件和/或指令。在各個(gè)實(shí)施例中,每當(dāng)線程108請(qǐng)求 新事務(wù)的執(zhí)行時(shí),執(zhí)行邏輯114可執(zhí)行事務(wù)的一個(gè)或多個(gè)執(zhí)行。在一些實(shí)施例中,執(zhí)行邏輯 114最初可將事務(wù)作為硬件事務(wù)來(lái)執(zhí)行一次或多次,并且隨后在事務(wù)執(zhí)行于硬件時(shí)無(wú)法提 交時(shí)將事務(wù)作為軟件事務(wù)來(lái)執(zhí)行。因此,在一些實(shí)施例中,軟件事務(wù)模式可以是回退執(zhí)行階 段,在此期間,事務(wù)被指配最高優(yōu)先級(jí),以確保它將提交并且將取得前向進(jìn)展。在一些實(shí)施 例中,執(zhí)行邏輯114還可在硬件事務(wù)結(jié)束時(shí)檢查全局鎖定112。
[0040] 在一些實(shí)施例中,事務(wù)管理模塊106可包括跟蹤邏輯116。在各個(gè)實(shí)施例中,跟蹤邏 輯116可包括管理全局鎖定112、重試計(jì)數(shù)器118和重試閾值120的電路、其他硬件和/或指 令。在一些實(shí)施例中,跟蹤邏輯116可基于來(lái)自執(zhí)行邏輯114的指令來(lái)設(shè)置全局鎖定112。例 如,當(dāng)執(zhí)行邏輯114開(kāi)始軟件階段中的事務(wù)的執(zhí)行時(shí),執(zhí)行邏輯114可指示跟蹤邏輯116來(lái)設(shè) 置全局鎖定112。在各個(gè)實(shí)施例中,重試計(jì)數(shù)器118可包括在硬件事務(wù)模式已經(jīng)進(jìn)行以執(zhí)行 事務(wù)的執(zhí)行總嘗試次數(shù)。在一些實(shí)施例中,重試閾值120可包括嘗試次數(shù),在該嘗試次數(shù)之 后,執(zhí)行邏輯114應(yīng)當(dāng)從作為硬件事務(wù)的執(zhí)行進(jìn)入作為軟件事務(wù)的執(zhí)行。在各個(gè)實(shí)施例中, 當(dāng)接收新事務(wù)時(shí),跟蹤邏輯116可將重試計(jì)數(shù)器118(對(duì)應(yīng)于事務(wù))重置為零。在一些實(shí)施例 中,在事務(wù)的每個(gè)不成功執(zhí)行之后,跟蹤邏輯116可使重試計(jì)數(shù)器118遞增。
[0041]如圖1進(jìn)一步所示,存儲(chǔ)器元件104包括每線程讀集合存儲(chǔ)裝置126和每線程寫(xiě)集 合存儲(chǔ)裝置128。在一實(shí)施例中,存儲(chǔ)裝置可存儲(chǔ)與事務(wù)期間所讀取或?qū)懭氲闹涤嘘P(guān)的信 息。另外,各線程可具有與其關(guān)聯(lián)的對(duì)應(yīng)布隆過(guò)濾器134和136,其各與給定讀集合存儲(chǔ)裝置 或?qū)懠洗鎯?chǔ)裝置(和線程)關(guān)聯(lián)。如本文將進(jìn)一步描述,在事務(wù)的執(zhí)行期間,每個(gè)讀和寫(xiě)可 注解到對(duì)應(yīng)布隆過(guò)濾器中,以指示在事務(wù)期間已經(jīng)訪問(wèn)給定存儲(chǔ)器地址。這個(gè)信息以后可 用來(lái)確定至少潛在沖突是否存在于并發(fā)執(zhí)行事務(wù)之間。
[0042]在各個(gè)實(shí)施例中,事務(wù)管理模塊106可包括最終完成邏輯128。在一些實(shí)施例中,最 終完成邏輯128可包括確定在事務(wù)由執(zhí)行邏輯114來(lái)執(zhí)行之后是提交還是中止事務(wù)的電路、 其他硬件和/或指令。在各個(gè)實(shí)施例中,最終完成邏輯128可在事務(wù)與其他事務(wù)沖突或潛在 沖突時(shí)確定任何特定事務(wù)將被中止。在一些實(shí)施例中,最終完成邏輯128可通過(guò)檢查全局鎖 定112來(lái)確定事務(wù)是否可能與并發(fā)軟件事務(wù)潛在地沖突。在各個(gè)實(shí)施例中,如果全局鎖定 112被設(shè)置并且事務(wù)是硬件事務(wù),則最終完成邏輯128然后可引用交叉邏輯124來(lái)確定是否 至少潛在沖突存在于硬件事務(wù)與軟件事務(wù)之間。為此,交叉邏輯124可訪問(wèn)發(fā)起事務(wù)的線程 的相應(yīng)布隆過(guò)濾器134和136,以確定過(guò)濾器組是否交叉。如果是這樣的話,則至少潛在沖突 存在,并且因此交叉邏輯124可向最終完成邏輯128報(bào)告有效交叉。如果過(guò)濾器組而是沒(méi)有 指示交叉,則向最終完成邏輯128報(bào)告這個(gè)無(wú)效交叉。
[0043] 最終完成邏輯128又可在發(fā)現(xiàn)交叉時(shí)使硬件事務(wù)被中止,否則使硬件事務(wù)能夠提 交(假定沒(méi)有檢測(cè)到其他沖突)。
[0044] 在一些實(shí)施例中,如果全局鎖定112被設(shè)置并且事務(wù)是軟件事務(wù),則最終完成邏輯 128可提交事務(wù),并且指示跟蹤邏輯116釋放全局鎖定112。在各個(gè)實(shí)施例中,如果全局鎖定 112沒(méi)有設(shè)置,則最終完成邏輯128可提交硬件事務(wù),并且指示跟蹤邏輯116清除重試計(jì)數(shù)器 118,而無(wú)需與交叉邏輯124進(jìn)行交互以確定過(guò)濾器組是否指示潛在沖突。
[0045] 在一些實(shí)施例中,事務(wù)管理模塊106可包括中止處理程序邏輯130。在各個(gè)實(shí)施例 中,中止處理程序邏輯130可包括操控最終完成邏輯128所指示的事務(wù)的中止的電路、其他 硬件和/或指令。在一些實(shí)施例中,中止處理程序邏輯130可確定被中止事務(wù)的下一個(gè)嘗試 執(zhí)行是應(yīng)當(dāng)作為硬件事務(wù)還是作為軟件事務(wù)發(fā)生。在各個(gè)實(shí)施例中,中止處理程序邏輯130 可確定事務(wù)是否因與其他事務(wù)的沖突或潛在沖突或者由于另一種原因而被中止。如果事務(wù) 由于另一種原因、例如因非法指令、容量上溢或者不規(guī)則存儲(chǔ)器訪問(wèn)模式引起的高速緩存 關(guān)聯(lián)性上溢而被中止,則中止處理程序邏輯130可確定執(zhí)行邏輯114應(yīng)當(dāng)直接進(jìn)入軟件階 段。如果事務(wù)因與其他事務(wù)的沖突或潛在沖突而被中止,則中止處理程序邏輯130可例如基 于重試次數(shù)來(lái)確定事務(wù)是應(yīng)當(dāng)在當(dāng)前階段還是在下一個(gè)階段來(lái)重試。
[0046]在各個(gè)實(shí)施例中,為了確定被中止事務(wù)的下一個(gè)嘗試執(zhí)行應(yīng)當(dāng)作為硬件事務(wù)還是 軟件事務(wù)來(lái)操控,中止處理程序邏輯130可將重試計(jì)數(shù)器118與重試閾值120進(jìn)行比較。在一 些實(shí)施例中,如果重試計(jì)數(shù)器118小于重試閾值120,則中止處理程序邏輯130可指示執(zhí)行邏 輯114將事務(wù)作為硬件事務(wù)來(lái)重試。否則中止處理程序邏輯130可指示執(zhí)行邏輯114將事務(wù) 作為軟件事務(wù)來(lái)重試。在各個(gè)實(shí)施例中,跟蹤邏輯116可基于嘗試事務(wù)的成功和/或不成功 提交數(shù)量自適應(yīng)地確定重試閾值120的值。雖然在圖1實(shí)施例中以這個(gè)較高等級(jí)示出,但是 要理解,本發(fā)明的范圍并不局限于這個(gè)方面,以及混合事務(wù)存儲(chǔ)器系統(tǒng)可采取許多不同形 式并且具有許多變化。
[0047] 現(xiàn)在參照?qǐng)D2,所示的是按照一實(shí)施例的事務(wù)的執(zhí)行的高級(jí)流程圖。如在圖2中看 到,按照方法200,所有事務(wù)作為硬件事務(wù)通過(guò)硬件開(kāi)始執(zhí)行(框210)。在對(duì)每個(gè)讀或?qū)懙膱?zhí) 行期間(框215),事務(wù)在對(duì)應(yīng)線程的軟件布隆過(guò)濾器中記錄所讀取或?qū)懭氲母魑恢谩T谟布?事務(wù)完成其臨界區(qū)的執(zhí)行之后(框220),它通過(guò)檢查與軟件事務(wù)(若存在的話)的沖突來(lái)嘗 試提交。硬件事務(wù)首先檢查全局鎖定是否被占用(菱形框225)。如果這個(gè)鎖定為空,則硬件 事務(wù)能夠成功提交(假定如菱形框240所確定沒(méi)有中止發(fā)生)。如果鎖定被占用,則鎖定的值 指示保持鎖定的線程的索引或標(biāo)識(shí)符,其因而執(zhí)行軟件事務(wù)。
[0048] 在這種情況下,硬件事務(wù)轉(zhuǎn)到菱形框230,以便訪問(wèn)執(zhí)行軟件事務(wù)的線程的布隆過(guò) 濾器,以確定是否存在任何沖突。更具體來(lái)說(shuō),在菱形框230,交叉操作可在2個(gè)過(guò)濾器之間 執(zhí)行,以確定2個(gè)布隆過(guò)濾器的任何條目或字段是否交叉(例如,兩者均具有有效或邏輯一 值)。如果是這樣的話,則硬件事務(wù)中止,并且控制轉(zhuǎn)到菱形框270,以確定給定硬件事務(wù)的 重試次數(shù)是否已經(jīng)達(dá)到可配置數(shù)N。注意,各種步驟可在中止事務(wù)時(shí)進(jìn)行,包括逐出與線程 關(guān)聯(lián)的緩沖器或其他存儲(chǔ)裝置中的任何已更新值。
[0049] 如果而是確定布隆過(guò)濾器之間不存在交叉,則控制轉(zhuǎn)到菱形框240,以確定事務(wù)是 否例如因另一種原因而被中止。如果不是的話,則控制轉(zhuǎn)到框250,其中提交事務(wù)。為了進(jìn)行 提交,硬件事務(wù)可采用任何已更新值(其先前存儲(chǔ)于僅在硬件事務(wù)執(zhí)行期間是給定線程可 見(jiàn)的緩沖器中)來(lái)更新存儲(chǔ)器。
[0050] 還要理解,雖然關(guān)于事務(wù)是否中止的確定在圖2實(shí)施例的特定位置以菱形框240示 出,但是有可能在通過(guò)沖突檢測(cè)邏輯(其可檢測(cè)其他類(lèi)型的沖突或者事務(wù)期間的中止的其 他原因)使硬件事務(wù)在其執(zhí)行期間的任何時(shí)間中止。但是,為了便于說(shuō)明,要理解,菱形框 240在圖2所示的位置中表示。
[0051] 又參照?qǐng)D2,如果在菱形框270確定重試次數(shù)尚未達(dá)到閾值數(shù)N,則控制轉(zhuǎn)到框280, 其中使重試次數(shù)遞增,并且然后控制轉(zhuǎn)回到框210以再次開(kāi)始硬件事務(wù)。否則,如果重試次 數(shù)已經(jīng)達(dá)到重試閾值N,則控制改為從菱形框270轉(zhuǎn)到框260,其中執(zhí)行可切換到軟件事務(wù)模 式。更具體來(lái)說(shuō),在僅準(zhǔn)許單個(gè)軟件事務(wù)的這個(gè)實(shí)現(xiàn)中,事務(wù)因而可在軟件事務(wù)模式執(zhí)行以 完成,從而允許事務(wù)在框250提交。
[0052]布隆過(guò)濾器確保軟件事務(wù)與硬件事務(wù)之間的沖突檢測(cè)。由硬件事務(wù)存儲(chǔ)器系統(tǒng)來(lái) 確保硬件事務(wù)之間的沖突檢測(cè)和解決。在一實(shí)施例中,單個(gè)全局鎖定確保在任何時(shí)間只有 一個(gè)軟件事務(wù)執(zhí)行,并且因此沒(méi)有為軟件事務(wù)提供附加沖突檢測(cè)機(jī)制。
[0053]圖3示出按照一實(shí)施例的硬件事務(wù)與軟件事務(wù)之間的可能定時(shí)。在情況310,軟件 事務(wù)首先更新變量X,并且硬件事務(wù)稍后將相同變量X更新成不同值。當(dāng)硬件事務(wù)嘗試提交 時(shí),執(zhí)行過(guò)濾器組交叉,其識(shí)別雙重訪問(wèn),因而產(chǎn)生沖突并且中止硬件事務(wù)。類(lèi)似操作在情 況320發(fā)生。但是,在情況330和340,在硬件事務(wù)提交的點(diǎn),軟件線程已經(jīng)提交并且釋放單個(gè) 全局鎖定。因此,當(dāng)硬件線程檢查這個(gè)鎖定時(shí),發(fā)現(xiàn)它被釋放,并且因而事務(wù)能夠成功提交。 [0054]在情況330和340,當(dāng)硬件事務(wù)設(shè)法提交時(shí),鎖定為空,表示沒(méi)有軟件事務(wù)并發(fā)地執(zhí) 行。即使存在重疊軟件事務(wù),它到這個(gè)點(diǎn)也已經(jīng)提交,在硬件事務(wù)之前串行化。如果軟件事 務(wù)已經(jīng)執(zhí)行在硬件事務(wù)之后串行化的任何沖突操作,則硬件事務(wù)在沖突時(shí)會(huì)被中止(由于 硬件沖突檢測(cè)機(jī)制)。因此,當(dāng)鎖定為空時(shí)使硬件事務(wù)能夠提交提供正確行為。
[0055] 如果當(dāng)硬件事務(wù)設(shè)法提交時(shí)鎖定而是被占用(如同情況310和320中一樣),則并發(fā) 軟件事務(wù)執(zhí)行。提交硬件事務(wù)因軟件事務(wù)所執(zhí)行的可能將來(lái)沖突操作而在這個(gè)軟件事務(wù)之 前串行化。但是,軟件事務(wù)可能在硬件事務(wù)開(kāi)始跟蹤那些位置之前對(duì)一個(gè)或多個(gè)存儲(chǔ)器位 置執(zhí)行了沖突操作,并且因而在軟件事務(wù)之前串行化硬件事務(wù)會(huì)不正確地表現(xiàn)。因此,實(shí)施 例使用布隆過(guò)濾器來(lái)確定這種情況。
[0056] 注意,軟件布隆過(guò)濾器沒(méi)有包含軟件事務(wù)在將來(lái)將訪問(wèn)的所有位置,而只是事務(wù) 已經(jīng)訪問(wèn)的位置。然而,將來(lái)訪問(wèn)將在所提交硬件事務(wù)之后正確地串行化。因此,如果布隆 過(guò)濾器沒(méi)有交叉,則硬件事務(wù)能夠在軟件事務(wù)之前正確地串行化。如果布隆過(guò)濾器識(shí)別沖 突,則沖突操作首先在軟件事務(wù)中并且然后在硬件事務(wù)中發(fā)生,否則硬件事務(wù)已經(jīng)中止。在 這種情況下,硬件事務(wù)無(wú)法在軟件事務(wù)之前串行化,并且將被中止。因此,實(shí)施例正確地識(shí) 別這些沖突,并且中止硬件事務(wù)。注意,在一實(shí)施例中,有可能使布隆過(guò)濾器不正確地報(bào)告 沖突(作為難區(qū)分的誤報(bào)),因此硬件事務(wù)也將在這兩種情況下中止。但是,布隆過(guò)濾器沒(méi)有 引起漏報(bào),并且因此識(shí)別和防止所有沖突。
[0057]在一實(shí)施例中,有效布隆過(guò)濾器實(shí)現(xiàn)允許在0(1)時(shí)間的插入和組交叉,從而使開(kāi) 銷(xiāo)為最小。此外,硬件事務(wù)只在提交之前僅讀取全局鎖定并且讀取軟件布隆過(guò)濾器,從而當(dāng) 硬件事務(wù)可能因軟件事務(wù)修改這些位置而被中止時(shí)減小窗口。在一實(shí)施例中,讀取鎖定和 布隆過(guò)濾器可以僅對(duì)事務(wù)的讀集合添加兩個(gè)附加高速緩存線。在一些實(shí)施例中,這能夠優(yōu) 化成使得布隆過(guò)濾器的位用來(lái)指示鎖定是否被占用并且布隆過(guò)濾器的其余部分用作布隆 過(guò)濾器。在這種實(shí)現(xiàn)中,鎖定位置能夠服務(wù)于兩種目的,從而將硬件事務(wù)的讀集合大小減小 到僅一個(gè)附加位置。事務(wù)自己的布隆過(guò)濾器對(duì)寫(xiě)集合添加附加高速緩存線,但是在一實(shí)現(xiàn) 中,這可能低至僅一個(gè)高速緩存線,這取決于布隆過(guò)濾器大小。
[0058] 使用一實(shí)施例,訪問(wèn)其本身的分離存儲(chǔ)器訪問(wèn)的許多小硬件事務(wù)和并發(fā)執(zhí)行大軟 件事務(wù)能夠進(jìn)行提交。作為一個(gè)這種示例,考慮表示開(kāi)放尋址哈希表的陣列。線程能夠執(zhí)行 這個(gè)哈希表中的lookup (X)操作和insert (X)操作。一旦取得占據(jù)的閾值,線程決定通過(guò)分 配新陣列并且將元素從舊陣列重新哈希到新陣列來(lái)使哈希表的大小翻倍。查找和插入操作 是短事務(wù),并且能夠在大多數(shù)時(shí)間通過(guò)硬件成功進(jìn)行。重新哈??筛臑樽鳛檐浖聞?wù)來(lái)執(zhí) 行(以及執(zhí)行重新哈希的線程獲取單個(gè)全局鎖定)。在這種情況下,通過(guò)軟件事務(wù)與并發(fā)硬 件事務(wù)之間的準(zhǔn)確沖突檢測(cè),作為硬件事務(wù)所執(zhí)行的查找操作能夠在對(duì)新陣列的重新哈希 發(fā)生的同時(shí)使用來(lái)自舊陣列的數(shù)據(jù)進(jìn)行提交。此外,作為硬件事務(wù)所執(zhí)行的對(duì)舊陣列結(jié)束 (即,在尚未重新哈希的部分中)進(jìn)行的插入操作也能夠在重新哈希期間提交。因此,實(shí)施例 通過(guò)允許小硬件事務(wù)與長(zhǎng)執(zhí)行軟件事務(wù)并發(fā)地提交來(lái)改進(jìn)吞吐量。
[0059] 雖然如上所述提供布隆過(guò)濾器沖突檢測(cè)技術(shù)改進(jìn)并行性,但是在給定上述實(shí)施例 中的單個(gè)全局鎖定的使用的情況下,仍然能夠存在低效。在其他實(shí)施例中,可提供一種事務(wù) 存儲(chǔ)器系統(tǒng),其使多個(gè)硬件事務(wù)和多個(gè)軟件事務(wù)能夠并行地執(zhí)行和提交。一般來(lái)說(shuō),基于高 速緩存的硬件事務(wù)存儲(chǔ)器系統(tǒng)可用于硬件組件,以及基于失效的軟件事務(wù)存儲(chǔ)器系統(tǒng)可用 于軟件組件。這些實(shí)施例提供一種混合事務(wù)存儲(chǔ)器系統(tǒng),其允許多個(gè)硬件事務(wù)與多個(gè)軟件 事務(wù)并發(fā)地執(zhí)行,同時(shí)仍然保證前向進(jìn)展。
[0060] 現(xiàn)在參照?qǐng)D4,所示的是按照本發(fā)明的一實(shí)施例的混合事務(wù)存儲(chǔ)器系統(tǒng)的框圖。如 圖4所示,HTM系統(tǒng)400提供多個(gè)硬件事務(wù)模式和多個(gè)軟件事務(wù)模式。在圖4所示的實(shí)現(xiàn)中,事 務(wù)在第一硬件事務(wù)模式410(本文中稱作輕硬件(LiteHW)事務(wù)模式)開(kāi)始。如果上溢或者未 支持指令發(fā)生,則事務(wù)立即升級(jí)到另一種類(lèi)型的事務(wù)模式。如果事務(wù)而是由于另一種原因 (例如因沖突)而中止,則事務(wù)在被升級(jí)到第二硬件事務(wù)模式420(本文中稱作布隆過(guò)濾器硬 件(BFHff)模式)之前重試多次。類(lèi)似重試發(fā)生,并且在事務(wù)沒(méi)有提交時(shí)將其更新到第一軟件 事務(wù)模式430 (本文中稱作推測(cè)軟件(SpecSW)模式)。再次在這個(gè)模式中,事務(wù)可在被升級(jí)到 第二軟件事務(wù)模式440(本文中稱作不可撤銷(xiāo)軟件(IrrevocSW)模式)之前重試多次。要理 解,雖然在圖4中采用特定模式和交互來(lái)示出,但是實(shí)施例并不局限于這個(gè)方面。
[0061 ]如果大多數(shù)事務(wù)較短、訪問(wèn)能夠符合TM支持高速緩存空間的存儲(chǔ)器并且沒(méi)有包含 未支持指令,則它們能夠直接通過(guò)硬件成功進(jìn)行,而無(wú)需與軟件事務(wù)進(jìn)行同步。最輕量類(lèi)型 的事務(wù)是第一硬件事務(wù)模式(LiteHff)。這個(gè)事務(wù)類(lèi)型在沒(méi)有讀和寫(xiě)的任何注解的情況下執(zhí) 行,并且在它設(shè)法提交時(shí)沒(méi)有軟件事務(wù)執(zhí)行時(shí)能夠成功提交。這種類(lèi)型的事務(wù)是簡(jiǎn)單和快 速的,但是它允許與軟件事務(wù)的極少并發(fā)性。
[0062]第二硬件事務(wù)模式BFHW使用軟件布隆過(guò)濾器來(lái)記錄硬件事務(wù)所讀取和寫(xiě)入的位 置,以實(shí)現(xiàn)與并發(fā)執(zhí)行的軟件事務(wù)的沖突的檢測(cè)。這種事務(wù)類(lèi)型與LiteHff事務(wù)相比增加額 外開(kāi)銷(xiāo),但是能夠甚至在并發(fā)執(zhí)行軟件事務(wù)存在的情況下也能夠提交。硬件事務(wù)較快,但是 在盡力HTM中因未支持指令或上溢而會(huì)出故障,并且因而提供軟件回退。
[0063]第一軟件事務(wù)模式SpecSW又執(zhí)行推測(cè)軟件事務(wù),其中事務(wù)在與其他軟件和硬件事 務(wù)的沖突檢測(cè)的布隆過(guò)濾器中記錄所讀取和寫(xiě)入的位置,并且將所有寫(xiě)存儲(chǔ)在哈希表中供 提交階段期間的延緩更新。失效在提交后發(fā)生,以中止進(jìn)行中沖突事務(wù),并且每事務(wù)鎖定用 來(lái)確保不透明性。在這個(gè)第一軟件事務(wù)模式中,驗(yàn)證每個(gè)讀,以防止僵事務(wù)(將中止的事務(wù)) 達(dá)到不一致?tīng)顟B(tài)。
[0064]最后,第二軟件事務(wù)模式IrrevocSW在原位執(zhí)行所有更新(直接對(duì)存儲(chǔ)器),并且無(wú) 法被中止。由于這個(gè)質(zhì)量,只有一個(gè)IrrevocSW事務(wù)能夠在任何給定時(shí)間執(zhí)行。但是,多個(gè) SpecSW和BFHff事務(wù)能夠與IrrevocSW事務(wù)并發(fā)地執(zhí)行。
[0065]多個(gè)軟件事務(wù)之間的沖突檢測(cè)使用布隆過(guò)濾器來(lái)實(shí)現(xiàn),如上所述。軟件與硬件事 務(wù)之間的沖突檢測(cè)也使用布隆過(guò)濾器,但是,使用沒(méi)有逸出動(dòng)作的盡力HTM-般導(dǎo)致在沖突 檢測(cè)時(shí)中止硬件事務(wù)。這種行為歸因于硬件事務(wù)的強(qiáng)隔離:由硬件來(lái)跟蹤的任何存儲(chǔ)器位 置將引起沖突,由此當(dāng)軟件事務(wù)執(zhí)行對(duì)那個(gè)位置的沖突訪問(wèn)時(shí)中止硬件事務(wù)。此外,硬件更 新沒(méi)有變成是其他線程可見(jiàn)的,直到硬件事務(wù)提交。
[0066]實(shí)施例將硬件與軟件事務(wù)之間的沖突檢測(cè)推遲到硬件事務(wù)已經(jīng)提交之后。硬件事 務(wù)則執(zhí)行提交后階段,其中它使所有進(jìn)行中沖突軟件事務(wù)失效。因?yàn)橛布聞?wù)已經(jīng)提交,所 以與其他線程的共享布隆過(guò)濾器信息無(wú)法使它中止。
[0067] 無(wú)論是軟件還是硬件的各事務(wù)經(jīng)過(guò)多個(gè)階段。這些階段的每個(gè)中的行為取決于事 務(wù)的類(lèi)型。第一階段是開(kāi)始事務(wù)的開(kāi)始階段。硬件事務(wù)調(diào)用開(kāi)始硬件事務(wù)指令,而軟件事務(wù) 記錄與起始地址有關(guān)的信息,并且經(jīng)由指示至少一個(gè)軟件事務(wù)的存在的指示符、例如標(biāo)志 (例如,sw_exists標(biāo)志)來(lái)通知其他線程關(guān)于其存在。
[0068] 在執(zhí)行階段期間,注解讀和寫(xiě)操作,并且根據(jù)事務(wù)執(zhí)行的類(lèi)型來(lái)判定行為。所有事 務(wù)類(lèi)型在布隆過(guò)濾器中記錄被訪問(wèn)位置,除了 LiteHff事務(wù)之外。
[0069] 在中止階段期間,硬件中止由硬件自動(dòng)地應(yīng)對(duì)。對(duì)于軟件事務(wù),軟件清除事務(wù)執(zhí)行 期間所記錄的信息,并且從開(kāi)始階段期間所存儲(chǔ)的地址重新開(kāi)始。
[0070] 在提交階段期間,執(zhí)行沖突檢測(cè),以及如果事務(wù)能夠提交,則進(jìn)行存儲(chǔ)器更新。其 實(shí)現(xiàn)取決于事務(wù)類(lèi)型。
[0071] 在提交后階段期間,事務(wù)可執(zhí)行失效。注意,這個(gè)階段在事務(wù)已經(jīng)提交并且采用其 寫(xiě)集合位置來(lái)更新存儲(chǔ)器。這個(gè)階段確保與剛提交的事務(wù)沖突的所有進(jìn)行中軟件事務(wù)將被 中止。
[0072] 如以上概述,第一硬件模式LiteHW是最簡(jiǎn)單和最快的類(lèi)型,因?yàn)樗肟珊雎愿?加軟件開(kāi)銷(xiāo),并且完全通過(guò)硬件來(lái)執(zhí)行。LiteHff事務(wù)只能在軟件事務(wù)不存在的情況下提交。 圖5是按照一實(shí)施例的這種事務(wù)的執(zhí)行的流程圖。方法500例如經(jīng)由用戶級(jí)硬件事務(wù)開(kāi)始指 令來(lái)開(kāi)始硬件事務(wù)的執(zhí)行(框510)。隨后,執(zhí)行事務(wù)主體(框520)。執(zhí)行這個(gè)臨界區(qū),而沒(méi)有 記錄讀或?qū)懙娜我粋€(gè)。當(dāng)事務(wù)嘗試提交(在框530)時(shí),它檢查是否有任何軟件事務(wù)當(dāng)前正執(zhí) 行(例如,通過(guò)檢查sw_exists標(biāo)志(如果軟件事務(wù)正執(zhí)行,則sw_exists != 0))(菱形框 540)。如果存在并發(fā)執(zhí)行的軟件事務(wù),則控制轉(zhuǎn)到菱形框550,以確定是否已經(jīng)達(dá)到重試閾 值(M)。如果不是的話,則控制轉(zhuǎn)到框555,并且使重試計(jì)數(shù)遞增。控制隨后轉(zhuǎn)回到上述框 510。如果事務(wù)而是重試了閾值次數(shù),則控制轉(zhuǎn)到框558,其中事務(wù)切換到第二硬件事務(wù)模式 BFHff模式。
[0073]如果在菱形框540確定沒(méi)有軟件事務(wù)執(zhí)行(sw_exi Sts=O ),則事務(wù)能夠成功提交, 假定事務(wù)在菱形框560尚未中止。因?yàn)長(zhǎng)iteHff是硬件事務(wù),所以其提交可瞬時(shí)執(zhí)行(框565)。 如果事務(wù)在由硬件沖突檢測(cè)機(jī)制的執(zhí)行期間的任何點(diǎn)被中止,則中止處理程序檢查硬件所 設(shè)置的中止?fàn)顟B(tài),以確定是否在相同模式重試這個(gè)事務(wù)(最多M次),或者切換到SpecSW(框 570)(例如,如果中止通過(guò)上溢所引起)或者切換到IrrevocSW(框580)(例如,如果事務(wù)通過(guò) 未支持指令、例如輸入/輸出指令所引起)。
[0074]圖6示出LiteHW事務(wù)501的更多細(xì)節(jié)。在開(kāi)始階段期間,事務(wù)執(zhí)行開(kāi)始硬件事務(wù)指 令(例如txbegin指令)。在執(zhí)行期間,OnRead和OnWrite處理程序(其是采用訪問(wèn)來(lái)更新布隆 過(guò)濾器的處理程序、例如基于資料庫(kù)的處理程序)為空。OnAbort處理程序使重試次數(shù)遞增, 并且基于重試次數(shù)和中止原因來(lái)判定是將事務(wù)作為L(zhǎng)iteHW事務(wù)來(lái)重試還是切換到不同模 式。最后,也通過(guò)硬件所執(zhí)行的提交階段檢查SWjXiStS標(biāo)志,并且調(diào)用硬件事務(wù)結(jié)束指令 (例如txend指令)。這種事務(wù)類(lèi)型沒(méi)有提交后階段。
[0075] 圖7是按照一實(shí)施例的BFHW事務(wù)的執(zhí)行的流程圖。方法600例如經(jīng)由用戶級(jí)硬件事 務(wù)開(kāi)始指令來(lái)開(kāi)始硬件事務(wù)的執(zhí)行(框610)。隨后,執(zhí)行事務(wù)主體(框620)。在其執(zhí)行期間, 事務(wù)在其讀和寫(xiě)布隆過(guò)濾器中記錄所讀取或?qū)懭氲拇鎯?chǔ)器位置。當(dāng)事務(wù)設(shè)法提交(菱形框 630)時(shí),它檢查提交鎖定是否被占用(菱形框640)。如果鎖定為空,并且假定沒(méi)有中止已經(jīng) 發(fā)生(如在菱形框660所確定),則事務(wù)獲取其自己的硬件事務(wù)鎖定(在框670)并且提交(框 675) 〇
[0076] 如果事務(wù)鎖定被占用,則軟件事務(wù)當(dāng)前正提交。在一實(shí)施例中,在這種情況下要做 的最簡(jiǎn)單事情是中止,因?yàn)橛布聞?wù)可能具有與提交軟件事務(wù)的沖突存儲(chǔ)器更新。這種情 況在以下圖8中更詳細(xì)示出。
[0077] 但是,如果硬件事務(wù)沒(méi)有與提交軟件事務(wù)的任何沖突,則硬件事務(wù)可能在軟件事 務(wù)正提交的同時(shí)進(jìn)行提交。這能夠使用布隆過(guò)濾器比較來(lái)確定。這個(gè)硬件事務(wù)模式的優(yōu)化 行為是在發(fā)現(xiàn)提交鎖定被占用時(shí)檢查提交軟件事務(wù)的布隆過(guò)濾器。如果布隆過(guò)濾器指示沖 突,則硬件事務(wù)中止,否則它能夠提交(在它如上所述獲取其自己的事務(wù)鎖定之后)。這種情 況在圖9中示出。
[0078]與Li teHW相似,OnAbort處理程序確定是否上升到多個(gè)軟件模式其中之一(例如在 框658和690)或者達(dá)到閾值數(shù)的重試次數(shù)是否已經(jīng)發(fā)生(在菱形框650)。否則,重試次數(shù)在 框655遞增,并且事務(wù)在框610再次開(kāi)始。
[0079] 被寫(xiě)入事務(wù)存儲(chǔ)器完全通過(guò)硬件來(lái)提交。首先,事務(wù)通過(guò)檢查提交鎖定和軟件布 隆過(guò)濾器(提交鎖定是否被占用)來(lái)確定它是否能夠提交(在菱形框650)。如果不存在沖突 (鎖定為空或者硬件交易的布隆過(guò)濾器沒(méi)有與軟件事務(wù)的布隆過(guò)濾器交叉),則硬件事務(wù)獲 取其自己的事務(wù)鎖定(在框675)(在圖8和圖9中示為tlock)。這個(gè)鎖定僅通過(guò)擁有它的硬件 事務(wù)來(lái)獲取,因此它在那個(gè)事務(wù)設(shè)法獲取它時(shí)始終為空。但是,它用來(lái)防止與開(kāi)始其提交階 段的軟件事務(wù)的競(jìng)爭(zhēng),如以下更詳細(xì)描述。
[0080] 注意,如果事務(wù)被中止,則事務(wù)的鎖定自動(dòng)釋放,因?yàn)樗瞧渫茰y(cè)寫(xiě)集合的部分。 此外,寫(xiě)到鎖定的值僅當(dāng)硬件事務(wù)對(duì)存儲(chǔ)器提交其變更時(shí)才變成是其他線程可見(jiàn)的。如果 其他線程在鎖定被占用之后但是在變更提交給存儲(chǔ)器之前檢查這個(gè)位置,則硬件事務(wù)被中 止,從而確保競(jìng)爭(zhēng)不是可能的。
[0081] 仍然參照?qǐng)D7,在框675的提交之后,這個(gè)第二硬件事務(wù)模式的提交后階段通過(guò)軟 件來(lái)執(zhí)行,并且在硬件事務(wù)對(duì)存儲(chǔ)器提交其變更之后發(fā)生。如看到,提交后操作包括使沖突 軟件事務(wù)失效(框680)。注意,在這個(gè)點(diǎn),硬件事務(wù)已經(jīng)被提交,但是它確保與其沖突的所有 軟件事務(wù)將被中止。這通過(guò)針對(duì)進(jìn)行中軟件事務(wù)的布隆過(guò)濾器檢查硬件事務(wù)的布隆過(guò)濾器 來(lái)取得。如果檢測(cè)到?jīng)_突,則軟件事務(wù)被中止。在完成失效過(guò)程之后,硬件事務(wù)重置其鎖定。
[0082] 圖8示出包括開(kāi)始階段、執(zhí)行階段、提交階段和提交后階段的基于基本布隆過(guò)濾器 的硬件事務(wù)601。如看到,在執(zhí)行期間,將讀和寫(xiě)添加到對(duì)應(yīng)讀和寫(xiě)布隆過(guò)濾器。但是要理 解,在其他實(shí)施例中,單個(gè)布隆過(guò)濾器可用于讀和寫(xiě)集合。隨后確定提交鎖定是否被占用, 以及如果是這樣的話,則事務(wù)在這個(gè)基本實(shí)現(xiàn)中中止。否則,事務(wù)鎖定被占用,并且事務(wù)寫(xiě) 入被提交。然后在提交后階段中,執(zhí)行布隆過(guò)濾器交叉,以中止所有沖突軟件事務(wù),并且此 后釋放事務(wù)鎖定。
[0083] 圖9示出包括開(kāi)始階段、執(zhí)行階段、提交階段和提交后階段的基于優(yōu)化布隆過(guò)濾器 的硬件事務(wù)602。在這種情況下,如果提交鎖定被占用,則沖突可使用布隆過(guò)濾器交叉來(lái)檢 測(cè),以確定沖突是否存在,以及如果不是的話,則硬件線程可提交,而如果沖突存在,則事務(wù) 中止。否則,操作與圖8類(lèi)似地發(fā)生。
[0084] 圖10是按照一實(shí)施例的推測(cè)軟件事務(wù)的執(zhí)行的流程圖。方法700開(kāi)始軟件事務(wù)的 執(zhí)行(框710)。隨后,執(zhí)行事務(wù)主體(框720)。如看到,在執(zhí)行期間,將讀和寫(xiě)位置記錄到布隆 過(guò)濾器。在提交時(shí)(框730),事務(wù)獲取提交鎖定(框740),并且咨詢爭(zhēng)用管理器(在框760)(其 可通過(guò)硬件、軟件、固件或其他邏輯或者其組合來(lái)實(shí)現(xiàn)),以確定它是提交還是中止(使得沖 突進(jìn)行中軟件事務(wù)能夠繼續(xù)執(zhí)行)。如果爭(zhēng)用管理器決定中止事務(wù),則事務(wù)釋放提交鎖定, 并且作為SpecSW事務(wù)進(jìn)行重試,這取決于在菱形框790所確定的重試次數(shù)。如果低于這個(gè)閾 值,則重試計(jì)數(shù)器在框792遞增,并且事務(wù)在推測(cè)軟件事務(wù)模式重新執(zhí)行(在框710)。如果高 于閾值,則事務(wù)在框795切換到不可撤銷(xiāo)軟件事務(wù)模式。
[0085]否則,如果事務(wù)能夠提交,則它獲取不可撤銷(xiāo)鎖定(在框765),對(duì)存儲(chǔ)器提交其變 更(在框770),使進(jìn)行中沖突軟件事務(wù)失效(在框775),并且釋放鎖定(在框780)。
[0086] SpecSW事務(wù)執(zhí)行的其他細(xì)節(jié)在圖11中示出。如看到,推測(cè)軟件事務(wù)701通過(guò)軟件執(zhí) 行所有階段。在圖11的實(shí)施例中,在主要執(zhí)行期間,讀取被驗(yàn)證并且添加到讀布隆過(guò)濾器, 而寫(xiě)被添加到寫(xiě)布隆過(guò)濾器。注意,延緩更新可通過(guò)將任何已更新值寫(xiě)到哈希表或其他暫 時(shí)存儲(chǔ)裝置來(lái)執(zhí)行。在提交階段期間,假定允許事務(wù)進(jìn)行提交,它得到不可撤銷(xiāo)鎖定并且更 新存儲(chǔ)器。否則,它釋放鎖定,并且重新開(kāi)始事務(wù)。然后在提交后階段,事務(wù)在釋放鎖定之前 執(zhí)行失效,從而使任何沖突軟件事務(wù)失效。
[0087] 最后要注意,SpecSW事務(wù)甚至當(dāng)BFHW正提交時(shí)也提供正確執(zhí)行。如果SpecSW事務(wù) 在BFHW準(zhǔn)備好提交時(shí)已經(jīng)開(kāi)始提交過(guò)程,則BFHW事務(wù)將觀測(cè)到提交鎖定被占用,并且將檢 查針對(duì)軟件布隆過(guò)濾器對(duì)其布隆過(guò)濾器檢查沖突。如果不存在沖突,則硬件事務(wù)能夠提交, 否則BFHff將中止。
[0088]但是,如果BFHW在SpecSW事務(wù)開(kāi)始提交階段之前檢查提交鎖定,則兩種狀況之一 能夠發(fā)生:提交鎖定在BFHff硬件事務(wù)提交之前改變(其中止硬件事務(wù),從而消除任何潛在沖 突);或者提交鎖定在BFHW硬件事務(wù)提交之后改變。推測(cè)軟件事務(wù)不檢查與硬件事務(wù)的沖 突,并且因而它可能遺漏與新提交硬件事務(wù)的沖突,并且可能開(kāi)始對(duì)存儲(chǔ)器提交其變更。為 了避免這種狀況,所有SpecSW事務(wù)在獲取提交鎖定之后檢查所有硬件事務(wù)的鎖定,并且等 待到它們?yōu)榭?。如果SpecSW事務(wù)在事務(wù)鎖定為空時(shí)仍然有效,則它沒(méi)有與任何所提交硬件 事務(wù)的沖突。
[0089] 現(xiàn)在參照?qǐng)D12,所示的是不可撤銷(xiāo)軟件事務(wù)IrrevocSW的執(zhí)行的流程圖。如在圖12 中看到,方法800開(kāi)始于事務(wù)的開(kāi)始階段(框810)。隨后,事務(wù)獲取不可撤銷(xiāo)鎖定并且提交鎖 定(框820)。然后,主要事務(wù)主體可在框830執(zhí)行。注意,對(duì)于不可撤銷(xiāo)軟件事務(wù),所有更新在 原位執(zhí)行(直接對(duì)存儲(chǔ)器),因而事務(wù)在開(kāi)始執(zhí)行時(shí)立即獲取不可撤銷(xiāo)并且提交鎖定,以確 保串行性。隨后,事務(wù)進(jìn)行提交(框840)。此后,例如基于布隆過(guò)濾器組交叉來(lái)使沖突軟件事 務(wù)失效(框850)。最后,釋放兩種鎖定(框860)。
[0090] 圖13示出按照一實(shí)施例的不可撤銷(xiāo)軟件事務(wù)801的其他細(xì)節(jié)。注意,在執(zhí)行開(kāi)始 時(shí),獲取兩種鎖定,并且設(shè)置軟件標(biāo)志。在主體中,雖然使用直接更新,但是將讀和寫(xiě)添加到 對(duì)應(yīng)布隆過(guò)濾器,以實(shí)現(xiàn)與沖突軟件事務(wù)的以后失效。在一實(shí)施例中,不可撤銷(xiāo)事務(wù)無(wú)法被 中止,并且因而提交階段基本上是沒(méi)有操作(Ν0Ρ)。提交后階段與推測(cè)軟件事務(wù)的提交后階 段相似:當(dāng)前事務(wù)已經(jīng)提交,并且因而它使進(jìn)行中沖突軟件事務(wù)失效。
[0091] 在一實(shí)施例中,爭(zhēng)用管理器由推測(cè)軟件事務(wù)用來(lái)確定它們?cè)诘竭_(dá)其提交階段時(shí)是 否能夠提交。爭(zhēng)用管理器考慮在提交事務(wù)被允許提交時(shí)會(huì)被中止的所有進(jìn)行中事務(wù),并且 基于各種因素來(lái)判定允許要中止的哪一個(gè)事務(wù)或哪些事務(wù)前進(jìn)。在一實(shí)施例中,這個(gè)判定 可基于優(yōu)先級(jí)、提交和沖突事務(wù)的讀和寫(xiě)集合大小以及各線程的事務(wù)進(jìn)展(例如至此的提 交數(shù)量)以及其他因素。
[0092] 在提交之后執(zhí)行的失效確保新事務(wù)能夠在提交階段期間開(kāi)始,而沒(méi)有被失效過(guò)程 遺漏。如果事務(wù)被失效過(guò)程遺漏(因?yàn)樗^(guò)遲開(kāi)始),則它在提交事務(wù)的失效過(guò)程之后開(kāi)始。 因此,它在提交事務(wù)提交其與之后開(kāi)始,并且因而新開(kāi)始事務(wù)的所有讀在提交事務(wù)之后串 行化并且因而是一致的。下表1是按照一實(shí)施例的失效過(guò)程的偽代碼表示。
[0093] 表 1 If _ 義 eis 錄.1. irrevoc !ock ^ im tnrid; -.W WV .. MEyBARSTLD(i; for {mr - 0; thr < MAX..THREADS.: { if {ixns|thr].stalus ACTIVE) | if |bf.Jnter'sectsieixnsfthn.rbloo^.( etxnsi.jm....ihnd|Avb!oom)'} { ^rirBvocjDOk -- CASmt〇〇^m^yPTY; 'I y'· 對(duì)于不是執(zhí)行讀的事務(wù)的寫(xiě)集合的部分的每一個(gè)讀執(zhí)行驗(yàn)證。如果讀是寫(xiě)集合的部 分,則從存儲(chǔ)事務(wù)的已更新值的哈希表返回值,并且沒(méi)有驗(yàn)證需要被執(zhí)行。
[0094] 在一實(shí)施例中,驗(yàn)證可執(zhí)行如下。首先,線程將新讀位置插入其布隆過(guò)濾器,并且 然后它讀取該位置。該順序確保潛在沖突將不會(huì)被提交事務(wù)的失效過(guò)程遺漏。在讀取讀位 置的值之后,被返回仍然不是安全的,因?yàn)槠渌聞?wù)可能處于其提交階段中間、從而更新存 儲(chǔ)器位置。如果當(dāng)前讀針對(duì)剛更新的位置,則返回這個(gè)讀可能生成不正確程序行為,因?yàn)楫?dāng) 前事務(wù)的所有其他讀來(lái)自提交事務(wù)更新存儲(chǔ)器之前。
[0095] 為了避免這種狀況,可對(duì)所有先前未寫(xiě)入的讀執(zhí)行驗(yàn)證碼。這個(gè)代碼檢查不可撤 銷(xiāo)鎖定是否被占用,以及如果是的話,則它讀取軟件事務(wù)的布隆過(guò)濾器(通過(guò)不可撤銷(xiāo)鎖定 的標(biāo)識(shí)符所指示),以確定是否存在任何沖突。如果鎖定在同時(shí)發(fā)生變化,則沖突能夠被驗(yàn) 證碼忽略。但是在驗(yàn)證結(jié)束時(shí),事務(wù)檢查是否由其他軟件事務(wù)使它失效。如果鎖定在同時(shí)被 釋放,則表示提交事務(wù)必須完成了失效。如果驗(yàn)證通過(guò)并且沒(méi)有由提交事務(wù)使事務(wù)失效,則 讀是安全的。
[0096] 現(xiàn)在參照表2,所示的是按照一實(shí)施例的驗(yàn)證過(guò)程的偽代碼。
[0097] 表 2 負(fù)吝txnslJmJhrk^rbloomi Saddf); MEMBARSTLOO; vai:~ (%|idciii|:; local.jrrevoc.Jock - irrevoc.jock; if |ei 電'_f otherbf ~ txnspocal..jrrevc€ jock].vvt>lD〇m; if Oocal sirevoc lock srrevoc lock)! if(bf..jnt.ersecis(&o出erb[ ^xns[_Jn\…thridl、rb!oom>){ tx.ns[_Jrrs Jhrid].status - iNVAUD; }: if (ixns[ im J:hrid].staS:us ~~ INVALID) { restarts: Jm Jhrid); 不可撤銷(xiāo)事務(wù)在開(kāi)始執(zhí)行時(shí)獲取提交鎖定和不可撤銷(xiāo)鎖定。推測(cè)事務(wù)首先獲取提交鎖 定,并且咨詢爭(zhēng)用管理器關(guān)于它是否能夠提交。如果爭(zhēng)用管理器允許事務(wù)進(jìn)行提交,則就在 將其更新寫(xiě)到存儲(chǔ)器之前獲取不可撤銷(xiāo)鎖定。
[0098] 提交事務(wù)可從其提交階段開(kāi)始來(lái)獲取不可撤銷(xiāo)鎖定,從而使提交鎖定是不必要 的。但是,推測(cè)事務(wù)將其驗(yàn)證碼基于所獲取的不可撤銷(xiāo)鎖定。如果提交鎖定不存在并且不可 撤銷(xiāo)鎖定在提交階段開(kāi)始時(shí)獲取,則在咨詢爭(zhēng)用管理器之前,下列狀況可能發(fā)生??紤]執(zhí)行 讀并且執(zhí)行驗(yàn)證碼的SpecSW事務(wù),注意其讀與提交軟件事務(wù)沖突。因此,它決定重新開(kāi)始。 提交事務(wù)咨詢爭(zhēng)用管理器,但是不允許它進(jìn)行提交(例如因具有高優(yōu)先級(jí)的進(jìn)行中事務(wù))。 因此,提交事務(wù)也中止。但是,其他事務(wù)已經(jīng)終止。此外,競(jìng)爭(zhēng)可能發(fā)生,使得爭(zhēng)用管理器將 其中止判定基于剛決定在驗(yàn)證期間中止的事務(wù),因此兩個(gè)事務(wù)相互中止,而沒(méi)有前進(jìn)。
[0099] 提交鎖定可用來(lái)避免這種狀況。因此,提交事務(wù)要求提交鎖定,其僅在被給予提交 準(zhǔn)許之后升級(jí)到不可撤銷(xiāo)鎖定。驗(yàn)證碼僅因與保持不可撤銷(xiāo)鎖定的其他事務(wù)的沖突而中止 事務(wù)。因此,事務(wù)因與肯定提交的事務(wù)的沖突而僅被驗(yàn)證中止。
[0100] 硬件用來(lái)確保相對(duì)并發(fā)硬件事務(wù)的正確性。硬件事務(wù)極大地隔離,因此對(duì)存儲(chǔ)器 進(jìn)行的變更僅當(dāng)事務(wù)提交時(shí)才變成是其他線程原子可見(jiàn)的。此外,沖突檢測(cè)通過(guò)硬件來(lái)實(shí) 現(xiàn),因此事務(wù)的沖突事務(wù)將被中止。因此,不存在其他軟件組件來(lái)確保多個(gè)LiteHW事務(wù)與多 個(gè)BFHff事務(wù)之間的正確交互。
[0101] 并發(fā)軟件事務(wù)之間的沖突檢測(cè)使用失效方法來(lái)確保。所有提交事務(wù)檢查與其他進(jìn) 行中軟件事務(wù)的沖突,并且在存在沖突時(shí)中止它們。沒(méi)有軟件事務(wù)能夠在失效過(guò)程期間進(jìn) 行提交,因?yàn)樘峤皇聞?wù)保持提交鎖定。不可撤銷(xiāo)事務(wù)在它變成有效時(shí)立即獲取提交鎖定,并 且因此沒(méi)有其他軟件事務(wù)能夠在其執(zhí)行期間變?yōu)椴豢沙蜂N(xiāo)或提交。當(dāng)不可撤銷(xiāo)事務(wù)提交 時(shí),它還使進(jìn)行中沖突事務(wù)失效,從而確保沒(méi)有違反可串行化正確性。
[0102] 關(guān)于硬件-軟件正確性,在一實(shí)施例中,LiteHW事務(wù)能夠與軟件事務(wù)同時(shí)執(zhí)行,但 是它們?cè)谲浖聞?wù)當(dāng)前執(zhí)行時(shí)無(wú)法提交。這是因?yàn)長(zhǎng)iteHW事務(wù)沒(méi)有保持被訪問(wèn)存儲(chǔ)器位置 的記錄,因此LiteHff事務(wù)與軟件事務(wù)之間的沖突檢測(cè)無(wú)法執(zhí)行。
[0103] 相比之下,BFHff事務(wù)跟蹤它們?cè)L問(wèn)的存儲(chǔ)器位置,因此它們能夠執(zhí)行沖突檢測(cè)。此 外,BFHW事務(wù)甚至當(dāng)軟件事務(wù)正執(zhí)行時(shí)也能夠進(jìn)行提交。如果提交軟件事務(wù)具有與BFHW事 務(wù)的沖突,則后者將由硬件自動(dòng)中止。如果提交BFHff事務(wù)具有與進(jìn)行中軟件事務(wù)的沖突,則 軟件事務(wù)在BFHW提交后階段(失效階段)期間被中止。此外,在硬件事務(wù)結(jié)束時(shí)將硬件事務(wù) 的布隆過(guò)濾器與軟件事務(wù)的布隆過(guò)濾器進(jìn)行比較是充分的。這樣,能夠避免硬件事務(wù)的每 一個(gè)讀和寫(xiě)的沖突檢測(cè)。
[0104] 實(shí)施例還實(shí)現(xiàn)存儲(chǔ)器的一致性。對(duì)于并發(fā)硬件事務(wù),不透明性由硬件自動(dòng)保持,因 為更新沒(méi)有變成是可見(jiàn)的,直到硬件事務(wù)進(jìn)行提交,從而確保一致性。
[0105] 通過(guò)在不可撤銷(xiāo)事務(wù)使用直接更新正執(zhí)行的同時(shí)或者推測(cè)事務(wù)正執(zhí)行回寫(xiě)的同 時(shí)讀取存儲(chǔ)器位置,硬件事務(wù)可進(jìn)入不一致?tīng)顟B(tài)。但是,在硬件事務(wù)中發(fā)生的故障和循環(huán)將 使事務(wù)中止和重新開(kāi)始,而沒(méi)有對(duì)其他線程的顯著影響。
[0106] 在軟件事務(wù)之間使用每個(gè)新讀的驗(yàn)證碼來(lái)確保不透明性,如上所述,使得軟件事 務(wù)無(wú)法因其他軟件事務(wù)所引起的更新而進(jìn)入不一致?tīng)顟B(tài)。
[0107] 通過(guò)讀取剛提交的硬件事務(wù)所修改的存儲(chǔ)器位置,軟件事務(wù)可進(jìn)入不一致?tīng)顟B(tài)。 在一實(shí)施例中,不允許軟件事務(wù)進(jìn)行提交,并且通過(guò)硬件事務(wù)的提交后階段使其失效。但 是,由于具有讀不一致數(shù)據(jù),軟件事務(wù)在注意到使其失效之前可能進(jìn)入非法狀態(tài)。
[0108] 為了防止這種狀況,一實(shí)施例可對(duì)SpecSW事務(wù)提供軟件沙箱。備選地,軟件事務(wù)的 不透明性能夠使用硬件提交后計(jì)數(shù)器來(lái)提供。在這種情況下,計(jì)數(shù)器對(duì)于在BFHW模式剛提 交并且當(dāng)前在提交后階段中的硬件事務(wù)的數(shù)量進(jìn)行計(jì)數(shù)。BFHff事務(wù)在提交硬件事務(wù)之前使 用存儲(chǔ)操作使這個(gè)計(jì)數(shù)器遞增。如果違反原子性,則中止硬件事務(wù),從而沒(méi)有留下變化痕 跡。在提交后階段完成之后,BFHff事務(wù)例如使用取和置換指令使提交后計(jì)數(shù)器遞減。使用這 個(gè)計(jì)數(shù)器,能夠在BFHW事務(wù)存在的情況下對(duì)SpecSW事務(wù)實(shí)現(xiàn)不透明性。SpecSW事務(wù)又可讀 取這個(gè)計(jì)數(shù)器,并且在對(duì)其讀集合添加新值之前等待到它達(dá)到零。這確保SpecSW事務(wù)所讀 取的所有新值在硬件事務(wù)的提交后階段之外來(lái)讀取,并且因而是一致的(否則SpecSW事務(wù) 在BFHW事務(wù)的提交后階段期間標(biāo)記為INVALID)。此外,BFHff事務(wù)可使用這個(gè)提交后計(jì)數(shù)器 來(lái)確保SpecSW事務(wù)的一致性,并且確保在提交階段期間與SpecSW事務(wù)的互斥(在一實(shí)施例 中使每事務(wù)鎖定未使用)。
[0109] 注意,提交鎖定串行化軟件事務(wù)的提交階段和提交后階段。但是,硬件事務(wù)沒(méi)有相 對(duì)并發(fā)提交軟件和硬件事務(wù)來(lái)串行化;因此它們能夠并發(fā)地提交和執(zhí)行失效,從而使系統(tǒng) 更為可縮放和實(shí)用。
[0110] 現(xiàn)在參照?qǐng)D14,所示的是按照另一個(gè)實(shí)施例的設(shè)備的框圖。如圖14所示,設(shè)備100' 包括與以上針對(duì)圖1所述的設(shè)備100類(lèi)似的電路、組件和邏輯。實(shí)際上,在許多系統(tǒng)實(shí)現(xiàn)中, 混合事務(wù)存儲(chǔ)器系統(tǒng)可執(zhí)行于相同硬件,無(wú)論它是按照實(shí)現(xiàn)單個(gè)全局鎖定的一實(shí)施例(如 以上在圖2中所述)還是實(shí)現(xiàn)多個(gè)鎖定和多個(gè)軟件模式事務(wù)模式的系統(tǒng)(例如,如圖4所述)。
[0111]為了便于論述,在圖14的實(shí)施例中與圖1相同的組件、電路和邏輯將不作論述。本 論述而是將集中于實(shí)現(xiàn)具有多個(gè)硬件事務(wù)模式和多個(gè)軟件事務(wù)模式的混合事務(wù)存儲(chǔ)器事 務(wù)的執(zhí)行的設(shè)備100'的差別。如看到,代替單個(gè)全局鎖定,提供提交鎖定112和不可撤銷(xiāo)鎖 定113,以使不同軟件事務(wù)能夠在事務(wù)中根據(jù)事務(wù)模式在不同時(shí)間獲取這些鎖定(當(dāng)然要理 解,在其他實(shí)施例中,附加或不同鎖定可存在)。另外,可提供多個(gè)重試計(jì)數(shù)器118,其中各重 試計(jì)數(shù)器與給定事務(wù)模式的重試計(jì)數(shù)關(guān)聯(lián)。以及類(lèi)似地,還提供多個(gè)重試閾值120。
[0112]仍然參照?qǐng)D14,事務(wù)管理模塊106還包括失效邏輯125,其配置成如上所述執(zhí)行提 交后失效。一般來(lái)說(shuō),設(shè)備100'和系統(tǒng)140'的其余部分與圖1中相同。注意,給定在例如結(jié)合 圖4-13所述的混合事務(wù)存儲(chǔ)器系統(tǒng)中執(zhí)行的附加功能性和操作,在各種邏輯組件的實(shí)現(xiàn)中 可存在一些差別。此外要理解,雖然在圖14以這個(gè)較高等級(jí)示出,但是許多變化和備選方案 是可能的。
[0113]以下示例涉及其他實(shí)施例。
[0114]在示例1中,一種設(shè)備包括:處理器;執(zhí)行邏輯,在事務(wù)存儲(chǔ)器系統(tǒng)中實(shí)現(xiàn)第一軟件 事務(wù)模式的至少一個(gè)第一軟件事務(wù)和第二軟件事務(wù)模式的第二軟件事務(wù)以及第一硬件事 務(wù)模式的至少一個(gè)硬件事務(wù)和第二硬件事務(wù)模式的至少一個(gè)第二硬件事務(wù)的并發(fā)執(zhí)行;跟 蹤邏輯,激活標(biāo)志,以指示至少一個(gè)軟件事務(wù)正經(jīng)歷在第一軟件事務(wù)模式或第二軟件事務(wù) 模式的執(zhí)行;交叉邏輯,確定在第二硬件事務(wù)模式的第一硬件事務(wù)的結(jié)束時(shí),第二硬件事務(wù) 模式的第一硬件事務(wù)的過(guò)濾器組是否與經(jīng)歷執(zhí)行的至少一個(gè)軟件事務(wù)的過(guò)濾器組沖突;以 及最終完成邏輯,在沒(méi)有沖突時(shí)提交第一硬件事務(wù),而在存在沖突時(shí)中止第一硬件事務(wù)。注 意,在一些實(shí)現(xiàn)中,執(zhí)行邏輯、跟蹤邏輯、交叉邏輯和最終完成邏輯中的一個(gè)或多個(gè)可在處 理器中實(shí)現(xiàn)。還要注意,上述處理器能夠使用各種部件來(lái)實(shí)現(xiàn)。在一示例中,處理器包括結(jié) 合在用戶設(shè)備觸摸使能裝置中的芯片上系統(tǒng)(SoC)。在另一個(gè)示例中,一種系統(tǒng)包括顯示器 和存儲(chǔ)器,并且包括本文中的示例的一個(gè)或多個(gè)的處理器。
[0115] 在示例2中,在第二硬件事務(wù)模式,第一硬件事務(wù)可選地更新第一硬件事務(wù)的各存 儲(chǔ)器訪問(wèn)的第一硬件事務(wù)的過(guò)濾器組。
[0116] 在示例3中,在第一軟件事務(wù)模式,第一軟件事務(wù)在第一軟件事務(wù)結(jié)束時(shí)可選地得 到第一鎖定和第二鎖定,并且采用哈希表中存儲(chǔ)的寫(xiě)數(shù)據(jù)來(lái)更新事務(wù)存儲(chǔ)器系統(tǒng)的事務(wù)存 儲(chǔ)器。
[0117] 在示例4中,在第一軟件事務(wù)模式,在第一軟件事務(wù)的提交之后,第一軟件事務(wù)可 選地使第一軟件事務(wù)模式的其他軟件事務(wù)失效。
[0118] 在示例5中,在第二硬件事模式,第二硬件事務(wù)可選地在第二硬件事務(wù)的提交之前 得到提交鎖定和事務(wù)鎖定。
[0119] 在示例6中,其中如果交叉在第一軟件事務(wù)的過(guò)濾器組與其他軟件事務(wù)的過(guò)濾器 組之間發(fā)生,則示例4的第一軟件事務(wù)可選地使其他軟件事務(wù)失效。
[0120] 在示例7中,在示例3的第一軟件事務(wù)模式,第一軟件事務(wù)在執(zhí)行期間可選地驗(yàn)證 讀數(shù)據(jù)。
[0121] 在示例8中,在上述示例的任一個(gè)的第二軟件事務(wù)模式:在第二軟件事務(wù)的開(kāi)始, 第二軟件事務(wù)得到第一鎖定和第二鎖定;以及在第二軟件事務(wù)模式的第二軟件事務(wù)的執(zhí)行 期間,第二軟件事務(wù)直接更新事務(wù)存儲(chǔ)器系統(tǒng)的事務(wù)存儲(chǔ)器。
[0122] 在示例9中,一種方法包括:由事務(wù)存儲(chǔ)器系統(tǒng)中的處理器并發(fā)地執(zhí)行第一線程的 軟件事務(wù)和第二線程的硬件事務(wù);激活全局鎖定,以指示軟件事務(wù)的執(zhí)行;以及在硬件事務(wù) 結(jié)束時(shí),確定全局鎖定的狀態(tài),以及如果全局鎖定是有效的,則確定第一線程的過(guò)濾器組是 否與第二線程的過(guò)濾器組交叉,而如果不是的話,則提交硬件事務(wù)。
[0123] 在示例10中,示例9的方法可選地還包括提交軟件事務(wù),并且在軟件事務(wù)結(jié)束時(shí)停 用全局鎖定。
[0124] 在示例11中,示例9或10的方法可選地還包括在全局鎖定在硬件事務(wù)結(jié)束時(shí)是無(wú) 效的時(shí)候提交硬件事務(wù),而沒(méi)有確定過(guò)濾器組是否交叉。
[0125] 在示例12中,示例9-1其中之一的方法可選地還包括:由硬件事務(wù)將對(duì)事務(wù)存儲(chǔ)器 系統(tǒng)的事務(wù)存儲(chǔ)器的訪問(wèn)的地址插入第一線程的過(guò)濾器組中;以及基于將訪問(wèn)的地址與一 個(gè)或多個(gè)哈希值進(jìn)行哈希來(lái)更新第一線程的過(guò)濾器組的一個(gè)或多個(gè)字段。
[0126] 在示例13中,示例9-12其中之一的方法可選地還包括在第一線程的寫(xiě)集合中存儲(chǔ) 第一線程的過(guò)濾器組,過(guò)濾器組包括布隆過(guò)濾器。
[0127] 在示例14中,示例13的方法可選地還包括將全局鎖定添加到第一線程的過(guò)濾器 組,并且基于確定過(guò)濾器組是否交叉來(lái)確定全局鎖定的狀態(tài)。
[0128] 在示例15中,示例9-14中的任一個(gè)的方法可選地還包括:在軟件事務(wù)中并發(fā)地將 哈希表從第一大小重新哈希到第二大??;以及在硬件事務(wù)中訪問(wèn)哈希表,并且使硬件事務(wù) 能夠在并發(fā)重新哈希期間提交。
[0129] 在另一個(gè)示例中,包括指令的計(jì)算機(jī)可讀介質(zhì)執(zhí)行上述示例的任一個(gè)的方法。在 又一個(gè)示例中,一種設(shè)備包括用于執(zhí)行上述示例的任一個(gè)的方法的部件。
[0130] 在示例16中,至少一個(gè)計(jì)算機(jī)可讀介質(zhì)包括指令,其在執(zhí)行時(shí)使系統(tǒng)能夠:在事務(wù) 存儲(chǔ)器系統(tǒng)的第二硬件事務(wù)模式執(zhí)行第二硬件事務(wù);在第二硬件事務(wù)結(jié)束時(shí)提交第二硬件 事務(wù);以及在第二硬件事務(wù)的提交之后,如果沖突存在于第二硬件事務(wù)與至少一個(gè)軟件事 務(wù)之間,則使與第二硬件事務(wù)并發(fā)執(zhí)行的至少一個(gè)軟件事務(wù)失效。
[0131] 在示例17中,示例16的至少一個(gè)計(jì)算機(jī)可讀介質(zhì)可選地還包括指令,其在執(zhí)行時(shí) 使系統(tǒng)在第二硬件事務(wù)的提交之前確定是否獲取了提交鎖定,以及如果是的話,則確定沖 突是否存在于第二硬件事務(wù)與獲取了提交鎖定的第一軟件事務(wù)之間。
[0132] 在示例18中,示例17的至少一個(gè)計(jì)算機(jī)可讀介質(zhì)可選地還包括指令,其在執(zhí)行時(shí) 使系統(tǒng)能夠在沖突存在于第二硬件事務(wù)與第一軟件事務(wù)之間時(shí)中止第二硬件事務(wù),其中如 果第二硬件事務(wù)的過(guò)濾器組與第一軟件事務(wù)的過(guò)濾器組交叉,則確定沖突存在。
[0133] 在示例19中,示例17的至少一個(gè)計(jì)算機(jī)可讀介質(zhì)可選地還包括指令,其在執(zhí)行時(shí) 使系統(tǒng)能夠在第一軟件事務(wù)獲取提交鎖定之后確定是否由一個(gè)或多個(gè)硬件事務(wù)獲取了一 個(gè)或多個(gè)事務(wù)鎖定,以及如果是的話,則將第一軟件事務(wù)的提交延遲到一個(gè)或多個(gè)事務(wù)鎖 定被釋放。
[0134] 在示例20中,示例17的至少一個(gè)計(jì)算機(jī)可讀介質(zhì)可選地還包括指令,其在執(zhí)行時(shí) 使系統(tǒng)能夠:在事務(wù)存儲(chǔ)器系統(tǒng)的第一硬件事務(wù)模式執(zhí)行第一硬件事務(wù);在第一硬件事務(wù) 結(jié)束時(shí)確定至少一個(gè)軟件事務(wù)是否并發(fā)地執(zhí)行;以及如果是的話,則中止第一硬件事務(wù),否 則提交第一硬件事務(wù)。
[0135] 在示例21中,示例17的至少一個(gè)計(jì)算機(jī)可讀介質(zhì)可選地還包括指令,其在執(zhí)行時(shí) 使系統(tǒng)能夠:驗(yàn)證由第一軟件事務(wù)在第一軟件事務(wù)的執(zhí)行期間對(duì)事務(wù)存儲(chǔ)器系統(tǒng)的事務(wù)存 儲(chǔ)器的讀操作;以及如果讀操作被驗(yàn)證,則將讀操作的位置添加到第一軟件事務(wù)的過(guò)濾器 組。
[0136] 在示例22中,示例17的至少一個(gè)計(jì)算機(jī)可讀介質(zhì)可選地還包括指令,其在執(zhí)行時(shí) 使系統(tǒng)能夠:在第二軟件事務(wù)模式執(zhí)行第二軟件事務(wù),包括在第二軟件事務(wù)的執(zhí)行開(kāi)始時(shí) 獲取第一鎖定和提交鎖定,并且在第二軟件事務(wù)執(zhí)行期間直接更新一個(gè)或多個(gè)存儲(chǔ)器位 置;以及在第二軟件事務(wù)結(jié)束時(shí),提交第二軟件事務(wù),使第一軟件事務(wù)模式的一個(gè)或多個(gè)并 發(fā)執(zhí)行軟件事務(wù)失效,并且此后釋放第一鎖定和提交鎖定。
[0137] 在示例23中,一種系統(tǒng)包括:處理器,包括混合事務(wù)存儲(chǔ)器邏輯,以便并發(fā)地執(zhí)行 至少一個(gè)硬件事務(wù)和至少一個(gè)軟件事務(wù)?;旌鲜聞?wù)存儲(chǔ)器邏輯可在第一硬件事務(wù)模式執(zhí)行 第一事務(wù),直到提交第一事務(wù)或者第一事務(wù)在第一硬件事務(wù)模式重試第一閾值次數(shù),并且 此后如果沒(méi)有提交第一事務(wù),則在第一軟件事務(wù)模式執(zhí)行第一事務(wù)?;旌鲜聞?wù)存儲(chǔ)器邏輯 可包括交叉邏輯,以確定關(guān)聯(lián)在第一硬件模式所執(zhí)行的第一事務(wù)的過(guò)濾器組是否與關(guān)聯(lián)在 第一軟件事務(wù)模式所執(zhí)行的第二事務(wù)的過(guò)濾器組沖突,以及響應(yīng)沖突,混合事務(wù)存儲(chǔ)器邏 輯防止在第一硬件事務(wù)模式的第一事務(wù)進(jìn)行提交。該系統(tǒng)還包括耦合到處理器的事務(wù)存儲(chǔ) 器。
[0138] 在示例24中,混合事務(wù)存儲(chǔ)器邏輯可選地可在第一軟件事務(wù)模式執(zhí)行第一事務(wù), 直到提交第一事務(wù)或者第一事務(wù)在第一軟件事務(wù)模式重試第二閾值次數(shù),以及在第二閾值 次數(shù)之后,在第二軟件事務(wù)模式執(zhí)行第一事務(wù),其中第一事務(wù)直接更新事務(wù)存儲(chǔ)器。
[0139] 在示例25中,混合事務(wù)存儲(chǔ)器邏輯可選地可在第一硬件事務(wù)模式的執(zhí)行之前在第 二硬件事務(wù)模式執(zhí)行第一事務(wù),其中在第一硬件事務(wù)模式執(zhí)行第一事務(wù)之前,混合事務(wù)存 儲(chǔ)器邏輯在第二硬件事務(wù)模式將第一事務(wù)執(zhí)行第三閾值次數(shù)。
[0140]在示例26中,混合事務(wù)存儲(chǔ)器邏輯可選地可使第一事務(wù)在第一軟件事務(wù)模式的執(zhí) 行期間驗(yàn)證讀數(shù)據(jù),基于與讀數(shù)據(jù)關(guān)聯(lián)的地址來(lái)更新與在第一軟件事務(wù)模式所執(zhí)行的第一 事務(wù)關(guān)聯(lián)的過(guò)濾器組,并且采用寫(xiě)數(shù)據(jù)來(lái)更新哈希表。
[0141] 在示例27中,示例26的混合事務(wù)存儲(chǔ)器邏輯可選地可使:在第二軟件事務(wù)模式的 第二事務(wù)在第二事務(wù)開(kāi)始時(shí)得到第一鎖定和第二鎖定,并且此后在第二事務(wù)的執(zhí)行期間直 接更新事務(wù)存儲(chǔ)器;以及在第一軟件事務(wù)模式的第一事務(wù)在第一事務(wù)的提交時(shí)得到第一鎖 定和第二鎖定,并且此后采用來(lái)自哈希表的寫(xiě)數(shù)據(jù)來(lái)更新事務(wù)存儲(chǔ)器,并且使在第一軟件 事務(wù)模式并發(fā)地執(zhí)行的至少一個(gè)其他軟件事務(wù)失效。
[0142] 在示例28中,一種用于執(zhí)行事務(wù)存儲(chǔ)器事務(wù)的系統(tǒng)包括:用于在事務(wù)存儲(chǔ)器系統(tǒng) 的第二硬件事務(wù)模式執(zhí)行第二硬件事務(wù)的部件;用于在第二硬件事務(wù)結(jié)束時(shí)提交第二硬件 事務(wù)的部件;以及用于在第二硬件事務(wù)的提交之后、在沖突存在于第二硬件事務(wù)與至少一 個(gè)軟件事務(wù)之間時(shí)使與第二硬件事務(wù)并發(fā)執(zhí)行的至少一個(gè)軟件事務(wù)失效的部件。
[0143] 在示例29中,示例28的系統(tǒng)可選地還包括用于執(zhí)行下列步驟的部件:在第二硬件 事務(wù)的提交之前確定是否獲取了提交鎖定,以及如果是的話,則確定沖突是否存在于第二 硬件事務(wù)與獲取了提交鎖定的第一軟件事務(wù)之間。
[0144] 在示例30中,示例28的系統(tǒng)可選地還包括在沖突存在于第二硬件事務(wù)與第一軟件 事務(wù)之間時(shí)中止第二硬件事務(wù)的部件,其中如果第二硬件事務(wù)的過(guò)濾器組與第一軟件事務(wù) 的過(guò)濾器組交叉,則確定沖突存在。
[0145] 在示例31中,示例28的系統(tǒng)可選地還包括用于執(zhí)行下列步驟的部件:在第一軟件 事務(wù)獲取提交鎖定之后確定是否由一個(gè)或多個(gè)硬件事務(wù)獲取了一個(gè)或多個(gè)事務(wù)鎖定,以及 如果是的話,則將第一軟件事務(wù)的提交延遲到一個(gè)或多個(gè)事務(wù)鎖定被釋放。
[0146] 在示例32中,示例28的系統(tǒng)可選地還包括:用于在事務(wù)存儲(chǔ)器系統(tǒng)的第一硬件事 務(wù)模式執(zhí)行第一硬件事務(wù)的部件;用于在第一硬件事務(wù)結(jié)束時(shí)確定至少一個(gè)軟件事務(wù)是否 并發(fā)地執(zhí)行的部件;以及用于執(zhí)行下列步驟的部件:如果是的話,則中止第一硬件事務(wù),否 則提交第一硬件事務(wù)。
[0147] 在示例33中,示例28的系統(tǒng)可選地還包括:用于驗(yàn)證由第一軟件事務(wù)在第一軟件 事務(wù)的執(zhí)行期間對(duì)事務(wù)存儲(chǔ)器系統(tǒng)的事務(wù)存儲(chǔ)器的讀操作的部件;以及用于在讀操作被驗(yàn) 證時(shí)將讀操作的位置添加到第一軟件事務(wù)的過(guò)濾器組的部件。
[0148] 在示例34中,示例28的系統(tǒng)可選地還包括:用于執(zhí)行下列步驟的部件:在第二軟件 事務(wù)模式執(zhí)行第二軟件事務(wù),包括在第二軟件事務(wù)的執(zhí)行開(kāi)始時(shí)獲取第一鎖定和提交鎖 定,并且在第二軟件事務(wù)執(zhí)行期間直接更新一個(gè)或多個(gè)存儲(chǔ)器位置;以及用于執(zhí)行下列步 驟的部件:在第二軟件事務(wù)結(jié)束時(shí),提交第二軟件事務(wù),使第一軟件事務(wù)模式的一個(gè)或多個(gè) 并發(fā)執(zhí)行軟件事務(wù)失效,并且此后釋放第一鎖定和提交鎖定。
[0149] 要理解,上述示例的各種組合是可能的。
[0150] 實(shí)施例可用于許多不同類(lèi)型的系統(tǒng)中。例如,在一個(gè)實(shí)施例中,通信裝置能夠設(shè)置 成執(zhí)行本文所述的各種方法和技術(shù)。當(dāng)然,本發(fā)明的范圍并不局限于通信裝置,而是其他實(shí) 施例能夠針對(duì)用于處理指令的其他類(lèi)型的設(shè)備或者包括指令的一個(gè)或多個(gè)機(jī)器可讀介質(zhì), 指令響應(yīng)執(zhí)行于計(jì)算裝置而使該裝置執(zhí)行本文所述方法和技術(shù)的一個(gè)或多個(gè)。
[0151] 實(shí)施例可通過(guò)代碼來(lái)實(shí)現(xiàn),并且可存儲(chǔ)在非暫時(shí)存儲(chǔ)介質(zhì)上,存儲(chǔ)介質(zhì)上存儲(chǔ)了 能夠用于將系統(tǒng)編程為執(zhí)行指令的指令。存儲(chǔ)介質(zhì)可包括但不限于:任何類(lèi)型的磁盤(pán),包括 軟盤(pán)、光盤(pán)、固態(tài)驅(qū)動(dòng)器(SSD)、致密光盤(pán)只讀存儲(chǔ)器(CD-ROM)、可改寫(xiě)光盤(pán)(CD-RW)和磁光 盤(pán);半導(dǎo)體器件,例如只讀存儲(chǔ)器(R0M)、諸如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)和靜態(tài)隨機(jī)存取 存儲(chǔ)器(SARAM)之類(lèi)的隨機(jī)存取存儲(chǔ)器(RAM)、可擦可編程只讀存儲(chǔ)器(EPROM)、閃速存儲(chǔ) 器、電可擦可編程只讀存儲(chǔ)器(EEPROM)、磁卡或光卡;或者適合于存儲(chǔ)電子指令的任何其他 類(lèi)型的介質(zhì)。
[0152] 雖然針對(duì)有限數(shù)量的實(shí)施例描述了本發(fā)明,但是本領(lǐng)域的技術(shù)人員將會(huì)從中知道 大量修改和變更。預(yù)計(jì)所附權(quán)利要求書(shū)涵蓋落入本發(fā)明的真實(shí)精神和范圍之內(nèi)的所有這類(lèi) 修改和變更。
【主權(quán)項(xiàng)】
1. 一種設(shè)備,包括: 處理器; 執(zhí)行邏輯,用于在事務(wù)存儲(chǔ)器系統(tǒng)中使能第一軟件事務(wù)模式的至少一個(gè)第一軟件事務(wù) 和第二軟件事務(wù)模式的第二軟件事務(wù)以及第一硬件事務(wù)模式的至少一個(gè)硬件事務(wù)和第二 硬件事務(wù)模式的至少一個(gè)第二硬件事務(wù)的并發(fā)執(zhí)行; 跟蹤邏輯,用于激活標(biāo)志,以指示至少一個(gè)軟件事務(wù)正經(jīng)歷在所述第一軟件事務(wù)模式 或者所述第二軟件事務(wù)模式的執(zhí)行; 交叉邏輯,用于確定在所述第二硬件事務(wù)模式的第一硬件事務(wù)結(jié)束時(shí)所述第二硬件事 務(wù)模式的所述第一硬件事務(wù)的過(guò)濾器組是否與經(jīng)歷執(zhí)行的所述至少一個(gè)軟件事務(wù)的過(guò)濾 器組沖突;以及 最終完成邏輯,用于在不存在沖突時(shí)提交所述第一硬件事務(wù),而在存在沖突時(shí)終止所 述第一硬件事務(wù)。2. 如權(quán)利要求1所述的設(shè)備,其中,在所述第二硬件事務(wù)模式,所述第一硬件事務(wù)更新 所述第一硬件事務(wù)的各存儲(chǔ)器訪問(wèn)的所述第一硬件事務(wù)的所述過(guò)濾器組。3. 如權(quán)利要求1所述的設(shè)備,其中,在所述第一軟件事務(wù)模式,第一軟件事務(wù)在所述第 一軟件事務(wù)結(jié)束時(shí)得到第一鎖定和第二鎖定,并且采用哈希表中存儲(chǔ)的寫(xiě)數(shù)據(jù)來(lái)更新所述 事務(wù)存儲(chǔ)器系統(tǒng)的事務(wù)存儲(chǔ)器。4. 如權(quán)利要求3所述的設(shè)備,其中,在所述第一軟件事務(wù)模式,在所述第一軟件事務(wù)的 提交之后,所述第一軟件事務(wù)使所述第一軟件事務(wù)模式的另一個(gè)軟件事務(wù)失效。5. 如權(quán)利要求4所述的設(shè)備,其中,在所述第二硬件事模式,第二硬件事務(wù)在所述第二 硬件事務(wù)的提交之前得到提交鎖定和事務(wù)鎖定。6. 如權(quán)利要求4所述的設(shè)備,其中如果交叉在所述第一軟件事務(wù)的過(guò)濾器組與所述另 一個(gè)軟件事務(wù)的過(guò)濾器組之間發(fā)生,則所述第一軟件事務(wù)使所述另一個(gè)軟件事務(wù)失效。7. 一種方法,包括: 由事務(wù)存儲(chǔ)器系統(tǒng)中的處理器并發(fā)地執(zhí)行第一線程的軟件事務(wù)和第二線程的硬件事 務(wù); 激活全局鎖定,以指示所述軟件事務(wù)的執(zhí)行;以及 在所述硬件事務(wù)結(jié)束時(shí),確定所述全局鎖定的狀態(tài),以及如果所述全局鎖定是有效的, 則確定所述第一線程的過(guò)濾器組是否與所述第二線程的過(guò)濾器組交叉,而如果不是的話, 則提交所述硬件事務(wù)。8. 如權(quán)利要求7所述的方法,還包括提交所述軟件事務(wù),并且在所述軟件事務(wù)結(jié)束時(shí)停 用所述全局鎖定。9. 如權(quán)利要求7所述的方法,還包括在所述全局鎖定在所述硬件事務(wù)結(jié)束時(shí)是無(wú)效的 時(shí)候在沒(méi)有確定所述過(guò)濾器組是否交叉的情況下提交硬件事務(wù)。10. 如權(quán)利要求7所述的方法,還包括: 將所述硬件事務(wù)對(duì)所述事務(wù)存儲(chǔ)器系統(tǒng)的事務(wù)存儲(chǔ)器的訪問(wèn)的地址插入所述第一線 程的所述過(guò)濾器組;以及 基于將所述訪問(wèn)的地址與一個(gè)或多個(gè)哈希值進(jìn)行哈希來(lái)更新所述第一線程的所述過(guò) 濾器組的一個(gè)或多個(gè)字段。11. 如權(quán)利要求7所述的方法,還包括: 在所述軟件事務(wù)中并發(fā)地將哈希表從第一大小重新哈希到第二大?。灰约? 在所述硬件事務(wù)中訪問(wèn)所述哈希表,并且使所述硬件事務(wù)能夠在所述并發(fā)重新哈希期 間進(jìn)行提交。12. -種方法,包括: 在事務(wù)存儲(chǔ)器系統(tǒng)的第二硬件事務(wù)模式執(zhí)行第二硬件事務(wù); 在所述第二硬件事務(wù)結(jié)束時(shí)提交所述第二硬件事務(wù);以及 在所述第二硬件事務(wù)的提交之后,如果沖突存在于所述第二硬件事務(wù)與所述至少一個(gè) 軟件事務(wù)之間,則使與所述第二硬件事務(wù)并發(fā)執(zhí)行的至少一個(gè)軟件事務(wù)失效。13. 如權(quán)利要求12所述的方法,還包括在所述第二硬件事務(wù)的提交之前確定是否獲取 了提交鎖定,以及如果是的話,則確定沖突是否存在于所述第二硬件事務(wù)與獲取了所述提 交鎖定的第一軟件事務(wù)之間。14. 如權(quán)利要求12所述的方法,還包括在所述沖突存在于所述第二硬件事務(wù)與所述第 一軟件事務(wù)之間時(shí)中止所述第二硬件事務(wù),其中如果所述第二硬件事務(wù)的過(guò)濾器組與所述 第一軟件事務(wù)的過(guò)濾器組交叉,則確定沖突存在。15. 如權(quán)利要求12所述的方法,還包括在所述第一軟件事務(wù)獲取所述提交鎖定之后,確 定是否由一個(gè)或多個(gè)硬件事務(wù)獲取了一個(gè)或多個(gè)事務(wù)鎖定,以及如果是的話,則將所述第 一軟件事務(wù)的提交延遲直到所述一個(gè)或多個(gè)事務(wù)鎖定被釋放。16. 如權(quán)利要求12所述的方法,還包括: 在所述事務(wù)存儲(chǔ)器系統(tǒng)的第一硬件事務(wù)模式執(zhí)行第一硬件事務(wù); 在所述第一硬件事務(wù)結(jié)束時(shí),確定至少一個(gè)軟件事務(wù)是否并發(fā)地執(zhí)行;以及 如果是的話,則中止所述第一硬件事務(wù),否則提交所述第一硬件事務(wù)。17. 如權(quán)利要求12所述的方法,還包括: 驗(yàn)證由所述第一軟件事務(wù)在所述第一軟件事務(wù)的執(zhí)行期間對(duì)所述事務(wù)存儲(chǔ)器系統(tǒng)的 事務(wù)存儲(chǔ)器的讀操作;以及 如果所述讀操作被驗(yàn)證,則將所述讀操作的位置添加到所述第一軟件事務(wù)的過(guò)濾器 組。18. 如權(quán)利要求12所述的方法,還包括: 在第二軟件事務(wù)模式執(zhí)行第二軟件事務(wù),包括在所述第二軟件事務(wù)的執(zhí)行開(kāi)始時(shí)獲取 第一鎖定和提交鎖定,并且在所述第二軟件事務(wù)執(zhí)行期間直接更新一個(gè)或多個(gè)存儲(chǔ)器位 置;以及 在所述第二軟件事務(wù)結(jié)束時(shí),提交所述第二軟件事務(wù),使所述第一軟件事務(wù)模式的一 個(gè)或多個(gè)并發(fā)執(zhí)行軟件事務(wù)失效,并且此后釋放所述第一鎖定和所述提交鎖定。19. 包括多個(gè)指令的至少一個(gè)機(jī)器可讀介質(zhì),所述指令響應(yīng)在計(jì)算裝置上執(zhí)行而使所 述計(jì)算裝置執(zhí)行如權(quán)利要求12至18中的任一項(xiàng)所述的方法。20. -種系統(tǒng),包括: 處理器,包括混合事務(wù)存儲(chǔ)器邏輯,以便并發(fā)地執(zhí)行至少一個(gè)硬件事務(wù)和至少一個(gè)軟 件事務(wù), 其中所述混合事務(wù)存儲(chǔ)器邏輯在第一硬件事務(wù)模式執(zhí)行第一事務(wù),直到提交所述第一 事務(wù)或者所述第一事務(wù)在所述第一硬件事務(wù)模式重試第一閾值次數(shù),以及此后,如果沒(méi)有 提交所述第一事務(wù),則在第一軟件事務(wù)模式執(zhí)行所述第一事務(wù),其中所述混合事務(wù)存儲(chǔ)器 邏輯包括交叉邏輯,以確定關(guān)聯(lián)在所述第一硬件模式所執(zhí)行的所述第一事務(wù)的過(guò)濾器組是 否與關(guān)聯(lián)在所述第一軟件事務(wù)模式所執(zhí)行的第二事務(wù)的過(guò)濾器組沖突,并且響應(yīng)所述沖 突,所述混合事務(wù)存儲(chǔ)器邏輯防止在所述第一硬件事務(wù)模式的所述第一事務(wù)進(jìn)行提交;以 及 耦合到所述處理器的事務(wù)存儲(chǔ)器。21. 如權(quán)利要求20所述的系統(tǒng),其中,所述混合事務(wù)存儲(chǔ)器邏輯在所述第一軟件事務(wù)模 式執(zhí)行所述第一事務(wù),直到提交所述第一事務(wù)或者所述第一事務(wù)在所述第一軟件事務(wù)模式 重試第二閾值次數(shù),以及在所述第二閾值次數(shù)之后,在第二軟件事務(wù)模式執(zhí)行所述第一事 務(wù),其中所述第一事務(wù)直接更新所述事務(wù)存儲(chǔ)器。22. 如權(quán)利要求20所述的系統(tǒng),其中,所述混合事務(wù)存儲(chǔ)器邏輯在所述第一硬件事務(wù)模 式的執(zhí)行之前在第二硬件事務(wù)模式執(zhí)行所述第一事務(wù),其中在所述第一硬件事務(wù)模式執(zhí)行 所述第一事務(wù)之前,所述混合事務(wù)存儲(chǔ)器邏輯在所述第二硬件事務(wù)模式將所述第一事務(wù)執(zhí) 行第三閾值次數(shù)。23. 如權(quán)利要求20所述的系統(tǒng),其中,所述混合事務(wù)存儲(chǔ)器邏輯使所述第一事務(wù)在所述 第一軟件事務(wù)模式的執(zhí)行期間驗(yàn)證讀數(shù)據(jù),基于與所述讀數(shù)據(jù)關(guān)聯(lián)的地址來(lái)更新與在所述 第一軟件事務(wù)模式所執(zhí)行的所述第一事務(wù)關(guān)聯(lián)的過(guò)濾器組,并且采用寫(xiě)數(shù)據(jù)來(lái)更新哈希 表。24. 如權(quán)利要求23所述的系統(tǒng),其中,所述混合事務(wù)存儲(chǔ)器邏輯使: 在第二軟件事務(wù)模式的第二事務(wù)在所述第二事務(wù)開(kāi)始時(shí)得到第一鎖定和第二鎖定,并 且此后在所述第二事務(wù)的執(zhí)行期間直接更新所述事務(wù)存儲(chǔ)器;以及 在所述第一軟件事務(wù)模式的所述第一事務(wù)在所述第一事務(wù)的提交時(shí)得到所述第一鎖 定和所述第二鎖定,并且此后采用來(lái)自所述哈希表的所述寫(xiě)數(shù)據(jù)來(lái)更新所述事務(wù)存儲(chǔ)器, 以及使在所述第一軟件事務(wù)模式并發(fā)執(zhí)行的至少一個(gè)其他軟件事務(wù)失效。
【文檔編號(hào)】G06F17/30GK106062707SQ201580010928
【公開(kāi)日】2016年10月26日
【申請(qǐng)日】2015年3月25日
【發(fā)明人】I.卡爾丘, J.E.戈特施利奇, T.什佩斯曼, G.A.波坎
【申請(qǐng)人】英特爾公司