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