專利名稱:引退前-后混合硬件鎖定省略(hle)方案的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及處理器執(zhí)行領(lǐng)域,具體來說,涉及跟蹤執(zhí)行期間的存 儲(chǔ)器訪問。
背景技術(shù):
半導(dǎo)體處理和邏輯設(shè)計(jì)的發(fā)展允許集成電路裝置上存在的邏輯 的數(shù)量增加。結(jié)果,計(jì)算機(jī)系統(tǒng)配置從系統(tǒng)中的單個(gè)或多個(gè)集成電路 發(fā)展到在各個(gè)集成電路上存在多個(gè)核和多個(gè)邏輯處理器。處理器或集 成電路通常包括單個(gè)處理器管芯,其中該處理器管芯可以包括任意數(shù) 量的核或邏輯處理器。集成電路上數(shù)量不斷增加的核和邏輯處理器使得能夠執(zhí)行更多 的軟件線程。然而,可以同時(shí)執(zhí)行的軟件線程的數(shù)量的增加已經(jīng)造成 了在軟件線程之間共享的數(shù)據(jù)的同步問題。在多核或多邏輯處理器系 統(tǒng)中訪問共享數(shù)據(jù)的 一個(gè)通常的解決方法包括使用鎖定來保證對(duì)共 享數(shù)據(jù)的多個(gè)訪問間的互斥。然而,不斷增長的執(zhí)行多個(gè)軟件線程的 能力潛在地導(dǎo)致,£竟?fàn)幒蛨?zhí)行串行化。例如,考慮保存共享數(shù)據(jù)的散列表。利用鎖定系統(tǒng),程序員可以 鎖定整個(gè)散列表,以允許一個(gè)線程訪問整個(gè)散列表。然而,其他線程 的吞吐量和性能會(huì)潛在地受到不利的影響,因?yàn)樵诮獬i定之前,它 們不能訪問散列表中的任何條目。或者,可以鎖定散列表中的每個(gè)條 目。然而,這會(huì)增加編程復(fù)雜性,因?yàn)槌绦騿T必須考慮散列表中的更 多鎖定。另一種數(shù)據(jù)同步技術(shù)包括使用事務(wù)存儲(chǔ)器(TM)。事務(wù)執(zhí)行通 常包括推測(cè)性地執(zhí)行多個(gè)微操作、操作或指令的分組。在上述示例中, 兩個(gè)線程都在散列表中執(zhí)行,并且它們的訪問受到監(jiān)視/跟蹤。如果兩個(gè)線程訪問/改變相同的條目,那么會(huì)中止其中一個(gè)事務(wù)以解決沖突。 然而,某些應(yīng)用可以不利用事務(wù)存儲(chǔ)器編程。結(jié)果,利用通常稱為硬件鎖定省略(HLE—Hardware Lock Elision )的硬件數(shù)據(jù)同步技術(shù)來去 掉鎖定以獲得類似于事務(wù)存儲(chǔ)器的同步益處。因此,通過使用事務(wù)存 儲(chǔ)器和HLE來執(zhí)行代碼的臨界段時(shí),通常會(huì)產(chǎn)生有效地跟蹤存儲(chǔ)器訪 問的問題。發(fā)明內(nèi)容本發(fā)明涉及一種設(shè)備,包括處理元件,用于執(zhí)行代碼的非臨界段和代碼的臨界段;與所述處理元件相關(guān)聯(lián)的存儲(chǔ)器,其中所述存儲(chǔ)器的行將與跟蹤 字段相關(guān)聯(lián),并且所述代碼的臨界段將包含引用所述行的操作;與所述存儲(chǔ)器相關(guān)聯(lián)的跟蹤邏輯,其響應(yīng)于所述代碼的臨界段是 代碼的隨后連續(xù)臨界段,啟動(dòng)對(duì)所述跟蹤字段的操作引退后更新(a post-retire of the operation update)以指示在所述臨界段執(zhí)行期間發(fā)生了 對(duì)所述行的訪問,并且響應(yīng)于所述代碼的臨界段不是代碼的隨后連續(xù) 臨界段,啟動(dòng)對(duì)所述跟蹤字段的操作引退前更新(a pre-retire of the operation update)以指示在所述代碼的臨界段執(zhí)行期間發(fā)生了對(duì)所述 行的訪問。本發(fā)明涉及一種系統(tǒng),包括集成電路,包括能夠執(zhí)行代碼的臨界段(CS)的執(zhí)行單元,所述CS包括引 用地址的加載操作,其中所述CS將通過開始CS操作和結(jié)束CS操作 進(jìn)行劃分;耦合到所述執(zhí)行單元的存儲(chǔ)器,所述存儲(chǔ)器包括與所述地址 相關(guān)聯(lián)的存儲(chǔ)器行,其中加載跟蹤字段將與所述存儲(chǔ)器行相關(guān)聯(lián);與所述執(zhí)行單元相關(guān)聯(lián)的臨界段邏輯,用于確定所述臨界段 是否是連續(xù)臨界段;以及耦合到所述臨界段邏輯的加載緩沖器,用于保存將與所述加載操作相關(guān)聯(lián)的加載條目,其中所述加載條目將包括存儲(chǔ)器更新字 段,所述存儲(chǔ)器更新字段響應(yīng)于所述臨界段邏輯確定所述臨界段不是 連續(xù)臨界段而保持第一值以指示將執(zhí)行對(duì)所迷加栽跟蹤字段的引退前更新,并且響應(yīng)于所述臨界段邏輯確定所述臨界段是連續(xù)臨界段而 保持第二值以指示將執(zhí)行對(duì)所述加栽跟蹤字段的引退后更新;以及耦合到所述集成電路的較高級(jí)的存儲(chǔ)器,用于在與所述地址相關(guān) 聯(lián)的存儲(chǔ)單元上存儲(chǔ)元素。本發(fā)明涉及一種方法,包括執(zhí)行對(duì)第一訪問跟蹤字段的引退前更新,以指示在第一未決臨界 段的執(zhí)行期間訪問了對(duì)存儲(chǔ)器的第一行的訪問,所述存儲(chǔ)器的第一行與所述第一訪問跟蹤字段相關(guān)聯(lián);以及執(zhí)行對(duì)第二訪問跟蹤字段的引退后更新,以指示在第二未決臨界 段的執(zhí)行期間訪問了對(duì)存儲(chǔ)器的第二行的訪問,所述存儲(chǔ)器的第二行 與所述第二訪問跟蹤字段相關(guān)聯(lián)。
通過附圖中的各圖舉例說明本發(fā)明,但不希望本發(fā)明受到附圖中 的各圖的限制。圖1示出能夠執(zhí)行引退前和引退后存儲(chǔ)器訪問跟蹤的多處理元件 處理器的實(shí)施例。圖2示出用于對(duì)連續(xù)臨界段存儲(chǔ)器訪問執(zhí)行引退后訪問跟蹤的跟 蹤邏輯的實(shí)施例。圖3示出執(zhí)行引退前和引退后訪問跟蹤的方法的流程圖的實(shí)施例。圖4a示出用于跟蹤臨界段的開始的方法的流程圖的實(shí)施例。 圖4b示出用于跟蹤臨界段的結(jié)束的方法的流程圖的實(shí)施例。 圖4c示出執(zhí)行引退前和引退后訪問跟蹤的方法的流程圖的實(shí)施例。圖5示出示范性的連續(xù)臨界段時(shí)間線。
具體實(shí)施方式
在下面的描述中,闡述了許多特定的細(xì)節(jié),例如硬件鎖定省略(HLE)的特定石更件支持、特定的跟蹤/元數(shù)據(jù)方法、處理器中的特定 類型的局部/存儲(chǔ)器、以及特定類型的存儲(chǔ)器訪問和單元等的示例,以 便充分理解本發(fā)明。然而,本領(lǐng)域的技術(shù)人員將明白,不需要采用這 些特定的細(xì)節(jié)也可實(shí)施本發(fā)明。在其他情況下,沒有詳細(xì)描述^^知的 組件或方法,例如軟件形式的臨界段的編碼、臨界段的劃分、特定的 多核和多線程處理器體系結(jié)構(gòu)、中斷生成/處理、高速緩存組織、和微 處理器的特定操作細(xì)節(jié),以免不必要地使本發(fā)明晦澀難懂。本文描述的方法和設(shè)備是用于對(duì)臨界段的執(zhí)行期間的試探性訪問 進(jìn)行引退前和引退后混合跟蹤的。具體來說,主要參考多核處理器計(jì) 算機(jī)系統(tǒng)來論述混合方案。然而,混合訪問跟蹤的方法和設(shè)備不限于 此,它們可以在任何集成電路裝置或系統(tǒng)上實(shí)現(xiàn)或者與任何集成電路 裝置或系統(tǒng)聯(lián)合地實(shí)現(xiàn),集成電路裝置或系統(tǒng)如蜂窩電話、個(gè)人數(shù)字 助理、嵌入式控制器、移動(dòng)平臺(tái)、桌面平臺(tái)和服務(wù)器平臺(tái);并且它們 可以結(jié)合執(zhí)行臨界段的諸如硬件/軟件線程的其他資源執(zhí)行。此外,還 將主要參考HLE期間的訪問跟蹤來論述混合方案。然而,可以在任何 存儲(chǔ)器訪問方案期間,例如在事務(wù)執(zhí)行期間,利用混合存儲(chǔ)器訪問跟 蹤。參考圖1 ,示出能夠執(zhí)行引退前和引退后混合訪問跟蹤的多核處理 器100的實(shí)施例。如圖所示,物理處理器100包括任何數(shù)量的處理元 件。處理元件是指線程、進(jìn)程、上下文、邏輯處理器、硬件線程、核 和/或潛在地共享對(duì)處理器資源的訪問的任何處理元件,處理器資源如 預(yù)約單元、執(zhí)行單元、管線和較高級(jí)高速緩存/存儲(chǔ)器。物理處理器通 常是指集成電路,它可以包括任何數(shù)量的處理元件,如核或硬件線程。 核通常是指位于集成電路上能夠保持獨(dú)立的體系結(jié)構(gòu)狀態(tài)的邏 輯,其中每個(gè)獨(dú)立保持的體系結(jié)構(gòu)狀態(tài)與至少一些專用執(zhí)行資源相關(guān) 聯(lián)。與核相比,硬件線程通常是指位于集成電路上能夠保持獨(dú)立的體 系結(jié)構(gòu)狀態(tài)的任何邏輯,其中獨(dú)立保持的體系結(jié)構(gòu)狀態(tài)共享對(duì)執(zhí)行資源的訪問。如圖1所示,物理處理器100包括兩個(gè)核,即核101和102, 它們共享對(duì)較高級(jí)高速緩存110的訪問。此外,核101包括兩個(gè)硬件 線程101a和101b,而核102包括兩個(gè)硬件線程102a和102b。因此, 諸如操作系統(tǒng)或應(yīng)用程序的軟件實(shí)體潛在地將處理器100視為是四個(gè) 獨(dú)立的處理器,而處理器100能夠執(zhí)行四個(gè)軟件線程??梢?,當(dāng)某些資源是共享的而其他資源專用于某個(gè)體系結(jié)構(gòu)狀態(tài) 時(shí),硬件線程和核的命名之間的線重疊。然而,操作系統(tǒng)通常將核和 硬件線程視為是單獨(dú)的邏輯處理器,其中操作系統(tǒng)能夠在每個(gè)邏輯處 理器上單獨(dú)地調(diào)度操作。因此,處理元件包括前面提到的能夠保存上 下文的任何實(shí)體,例如核、線程、硬件線程、虛擬機(jī)或其他資源。在一個(gè)實(shí)施例中,處理器IOO是能夠并行執(zhí)行多個(gè)線程的多核處 理器。此處,第一線程與體系結(jié)構(gòu)狀態(tài)寄存器101a相關(guān)聯(lián),第二線程 與體系結(jié)構(gòu)狀態(tài)寄存器101b相關(guān)聯(lián),第三線程與體系結(jié)構(gòu)狀態(tài)寄存 器102a相關(guān)聯(lián),并且第四線程與體系結(jié)構(gòu)狀態(tài)寄存器102b相關(guān)聯(lián)。 在一個(gè)實(shí)施例中,提到處理器100中的處理元件時(shí)包括提到核101和 102以及線程101a、 101b、 102a和102b。在另一個(gè)實(shí)施例中,處理元 件是指位于處理域的層級(jí)中的相同級(jí)別的元件。例如,核101和102 處于相同的域級(jí)別,線程101a和101b處于核101內(nèi)的相同的域級(jí)別, 并且線程101a、 101b、 102a和102b處于相同的域級(jí)別。盡管處理器IOO可以包括不對(duì)稱的核,即,具有不同配置、功能 單元和/或邏輯的核,但是圖中示出對(duì)稱核。因此,不再詳細(xì)論述與核 101等同示出的核102,以免使論述晦澀難懂。如圖所示,由于體系結(jié)構(gòu)狀態(tài)寄存器101a是從體系結(jié)構(gòu)狀態(tài)寄存 器101b中復(fù)制的,所以能夠?yàn)檫壿嬏幚砥?01a和邏輯處理器101b 存儲(chǔ)獨(dú)立的體系結(jié)構(gòu)狀態(tài)/上下文。還可為線程101a和101b復(fù)制其他 更小的資源,例如指令指針和重命名分配器邏輯130中的重命名邏輯。 可以通過分區(qū)來共享一些資源,諸如重排序器/引退單元135中的重排 序緩沖器、ILTB120、加載/存儲(chǔ)緩沖器和隊(duì)列??蓾撛诘赝耆蚕砥?他資源,例如通用內(nèi)部寄存器、頁表基址寄存器、低級(jí)數(shù)據(jù)高速緩存和數(shù)據(jù)-TLB 110、執(zhí)行單元140和無序單元135。總線接口模塊105用于與位于處理器100外部的裝置通信,這些 裝置如系統(tǒng)存儲(chǔ)器175、芯片組、北橋或其他集成電路。存儲(chǔ)器175 可專用于處理器100或與系統(tǒng)中的其他裝置共享。存儲(chǔ)器175的示例 包括動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、靜態(tài)RAM (SRAM)、非易失 性存儲(chǔ)器(NV存儲(chǔ)器)和長期存儲(chǔ)設(shè)備。通常,總線接口單元105包括用于在互連170上發(fā)送和接收總線 信號(hào)的輸7v/輸出(I/O)緩沖器?;ミB170的示例包括射電收發(fā)邏輯 (GTL )總線、GTL+總線、雙倍數(shù)據(jù)速率(DDR )總線、并發(fā)總線(pumped bus)、差分總線、高速緩存相干總線、點(diǎn)對(duì)點(diǎn)總線、多點(diǎn)總線或其他 已知的用于實(shí)現(xiàn)任何已知的總線協(xié)議的互連。所示的總線接口單元 105還與較高級(jí)的高速緩存110通信。較高級(jí)或更遠(yuǎn)離的高速緩存110用于緩存最近提取和/或操作的 元素。注意,較高級(jí)或更遠(yuǎn)離(ftirther-out)是指增加的或進(jìn)一步遠(yuǎn)離 (increasing or getting further way from)執(zhí)行單元的高速緩存級(jí)。在一 個(gè)實(shí)施例中,較高級(jí)的高速緩存IIO是二級(jí)數(shù)據(jù)高速緩存。然而,較 高級(jí)的高速緩存110并不限于此,它可以是或者可以包括指令高速緩 存(又可稱為蹤跡高速緩存)。蹤跡高速緩存而是可以耦合在解碼器 125之后以便存儲(chǔ)最近的解碼蹤跡。模塊120還潛在地包括用于預(yù)測(cè) 將要執(zhí)行/采取的分支的分支目標(biāo)緩沖器以及用于存儲(chǔ)指令的地址轉(zhuǎn) 換條目的指令-轉(zhuǎn)換緩沖器(I-TLB)。此處,能夠進(jìn)行推測(cè)性執(zhí)行的 處理器潛在地預(yù)取并且推測(cè)性地執(zhí)行所預(yù)測(cè)的分支。解碼才莫塊125耦合到提取單元120以解碼所提取的元素。在一個(gè) 實(shí)施例中,處理器100與定義/指定可在處理器100上執(zhí)行的指令的指 令集體系結(jié)構(gòu)(ISA)相關(guān)聯(lián)。此處,由ISA辨識(shí)的機(jī)器代碼指令通 常包括被稱為操作碼的指令的 一部分,其引用/指定將要執(zhí)行的指令或 操作。在一個(gè)示例中,分配器和重命名器塊130包括分配器以用于預(yù)約 資源,例如用于存儲(chǔ)指令處理結(jié)果的寄存器文件。然而,線程101a和101b潛在地能夠無序執(zhí)行,其中分配器和重命名器塊130還預(yù)約 其他資源,例如用于跟蹤指令結(jié)果的重排序緩沖器。單元130還可包 括寄存器重命名器以用來將程序/指令引用寄存器重命名為位于處理 器100內(nèi)部的其他寄存器。如圖所示,跟蹤邏輯180也與分配;f莫塊130 相關(guān)聯(lián)。如稍后將論述,在一個(gè)實(shí)施例中,跟蹤邏輯180從"前端" 角度幫助確定臨界段的邊界。重排序器/引退單元135包括用于支持無序執(zhí)行以及稍后對(duì)無序 執(zhí)行的指令的有序引退的組件,例如上文提到的重排序緩沖器、加載 緩沖器和存儲(chǔ)緩沖器。此外,跟蹤邏輯180也分布在引退邏輯135中。 在一個(gè)實(shí)施例中,跟蹤邏輯180從"后端"角度確定臨界段的邊界。 盡管圖中將跟蹤邏輯180示為是分布在處理器100中并且與分配和引 退邏輯相關(guān)聯(lián),但跟蹤邏輯180不限于此。事實(shí)上,跟蹤邏輯180可 以設(shè)置在一個(gè)區(qū)域中,并且與處理器管線的前端或后端的任何部分相 關(guān)聯(lián)。此外,跟蹤邏輯180的部分可以包含在高速緩存150、高速緩 存控制邏輯或較高級(jí)的高速緩存110中。在一個(gè)實(shí)施例中,調(diào)度器和執(zhí)行單元塊140包括用于在執(zhí)行單元 上調(diào)度指令/操作的調(diào)度器單元。事實(shí)上,潛在地根據(jù)它們的類型可用 性而在執(zhí)行單元上調(diào)度指令/操作。例如,在具有可用的浮點(diǎn)執(zhí)行單元 的執(zhí)行單元的端口上調(diào)度浮點(diǎn)指令。還包括與執(zhí)行單元相關(guān)聯(lián)的寄存 器文件以用于存儲(chǔ)信息指令處理結(jié)果。示范性的執(zhí)行單元包括浮點(diǎn)執(zhí) 行單元、整數(shù)執(zhí)行單元、跳轉(zhuǎn)執(zhí)行單元、加栽執(zhí)行單元、存儲(chǔ)執(zhí)行單 元和其/f也已知的扭J亍單元。從上文注意到,如所說明的,處理器100能夠執(zhí)行至少四個(gè)軟件 線程。此外,在一個(gè)實(shí)施例中,處理器100能夠進(jìn)行事務(wù)執(zhí)行。事務(wù) 執(zhí)行通常包括將多個(gè)指令或者操作分組為事務(wù)、代碼的原子段、或代 碼的臨界段。在一些情況中,字指令的使用涉及由多個(gè)操作組成的宏 指令。在處理器中,通常推測(cè)性地"J丸行事務(wù),并且在事務(wù)結(jié)束后提交 事務(wù)。本文所用的事務(wù)的未決是指已經(jīng)開始執(zhí)行但尚未提交或中止 (即,未決)的事務(wù)。通常,當(dāng)事務(wù)仍然未決時(shí),跟蹤從存儲(chǔ)器加載和寫入到存儲(chǔ)器內(nèi)的單元。
在成功確認(rèn)那些存儲(chǔ)單元后,提交事務(wù),并使在事務(wù)期間所做的 更新變?yōu)槿挚梢?。然而,如果事?wù)在它的未決期間是無效的,則重 新開始事務(wù)而不需要使更新全局可見。通常,以代碼形式包含軟件劃 分以識(shí)別事務(wù)。例如,可以通過指示事務(wù)開始和事務(wù)結(jié)束的指令來將 事務(wù)分組。然而,事務(wù)執(zhí)行通常利用程序員或編譯器來插入事務(wù)的開 始和結(jié)束指令。
因此,在一個(gè)實(shí)施例中,處理器100能夠進(jìn)行硬件鎖定省略
(HLE),其中硬件能夠去掉對(duì)臨界段的鎖定并且同時(shí)執(zhí)行它們。此處, 沒有事務(wù)支持的預(yù)先編譯的二進(jìn)制數(shù)或利用鎖定編程的新編譯的二 進(jìn)制數(shù)能夠從通過支持HLE的同步執(zhí)行中獲益。作為提供透明兼容性 的結(jié)果,HLE通常包括用于檢測(cè)臨界段以及跟蹤存儲(chǔ)器訪問的硬件。 事實(shí)上,由于去掉了確保數(shù)據(jù)排斥的鎖定,所以可以按照與事務(wù)執(zhí)行 期間相類似的方式跟蹤存儲(chǔ)器訪問。因此,可以在事務(wù)執(zhí)行、HLE、 其他存儲(chǔ)器訪問跟蹤方案、或其組合期間利用本文論述的引退前和引 退后混合訪問跟蹤方案。因此,下文對(duì)臨界段的執(zhí)行的論述潛在地包 括提到事務(wù)的臨界段或由HLE檢測(cè)的臨界段。
在一個(gè)實(shí)施例中,利用正被訪問的存儲(chǔ)器裝置來跟蹤來自臨界段 的訪問。例如,利用較低級(jí)的數(shù)據(jù)高速緩存150來跟蹤來自臨界段的 訪問;這些臨界段要么與事務(wù)執(zhí)行相關(guān)聯(lián),要么與HLE相關(guān)聯(lián)。高速 緩存150用于存儲(chǔ)最近訪問的元素,例如數(shù)據(jù)操作數(shù),其潛在地保持 在存儲(chǔ)器相干狀態(tài)(例如修改、獨(dú)占、共享和無效(MESI)狀態(tài))中。 高速緩存150可以組織成全關(guān)聯(lián)、組關(guān)聯(lián)、直4妄映射、或其他已知的 高速緩存組織。盡管沒有示出,但D-TLB可以與高速緩存150相關(guān)聯(lián) 以存儲(chǔ)最近的虛擬/線性-物理地址轉(zhuǎn)換。
如圖所示,行151、 152和153包括多個(gè)部分和多個(gè)字段,例如 部分151a和字段151b。在一個(gè)實(shí)施例中,字段151b、 152b和153b 以及部分151a、 152a和153a是組成行151、 152和153的相同存儲(chǔ)器 陣列的部分。在另一個(gè)實(shí)施例中,字段151b、 152b和153b是通過來自行151a、 152a和153a的獨(dú)立的專用端口訪問的獨(dú)立陣列的部分。 然而,即使當(dāng)字段151b、 152b和153b是獨(dú)立陣列的部分時(shí),字段151b、 152b和153b仍分別與部分151a、 152a和153a相關(guān)聯(lián)。因此,當(dāng)提 到高速緩存150的行151時(shí),行151潛在地包括部分151a、 151b或其 組合。例如,當(dāng)從行151加載時(shí),可以從部分151a加載。另外,當(dāng)設(shè) 置跟蹤字段以跟蹤從行151的加載時(shí),訪問字段151b。
在一個(gè)實(shí)施例中,行、單元、塊或字(例如行151a、 152a和153a) 能夠存儲(chǔ)多個(gè)元素。元素是指通常存儲(chǔ)在存儲(chǔ)器中的任何指令、操作 數(shù)、數(shù)據(jù)操作數(shù)、變量或其他邏輯值分組(grouping)。作為一個(gè)示 例,高速緩存行151在部分151a中存儲(chǔ)四個(gè)元素,例如四個(gè)操作數(shù)。 存儲(chǔ)在高速緩存行151a中的元素可以處于打包或者壓縮狀態(tài)、以及未 壓縮狀態(tài)。此外,元素可以與高速緩存150的行、組或路的邊界對(duì)準(zhǔn) 或不對(duì)準(zhǔn)地存儲(chǔ)在高速緩存150中。下文將參考示范性實(shí)施例更詳細(xì) 地論述存儲(chǔ)器150。
高速緩存150和處理器100中的其他特征和裝置存儲(chǔ)和/或操作邏 輯<直。通常,邏輯級(jí)、或邏輯ii (logic values/logical values)的4吏用 又稱為1和0,其簡單地表示二進(jìn)制邏輯狀態(tài)。例如,1表示高邏輯 級(jí),而0表示低邏輯級(jí)。還使用計(jì)算機(jī)系統(tǒng)中的其他值表示,例如邏 輯值或二進(jìn)制值的十進(jìn)制和十六進(jìn)制表示。例如,釆用十進(jìn)制數(shù)IO, 其用二進(jìn)制值表示為1010,而用十六進(jìn)制則表示為字母A。
在如圖1所示的實(shí)施例中,跟蹤對(duì)行151、 152和153的訪問以 支持臨界段的執(zhí)行。訪問包括各種操作,例如讀、寫、存儲(chǔ)、加載、 驅(qū)逐、探聽或者其他已知的對(duì)存儲(chǔ)單元的訪問。利用諸如字段151b、 152b和153b的訪問跟蹤字段來跟蹤對(duì)它們的相應(yīng)存儲(chǔ)器行的訪問。 例如,存儲(chǔ)器行/部分151a與相應(yīng)的跟蹤字段151b相關(guān)聯(lián)。此處,訪 問跟蹤字段151b與高速緩存行151a相關(guān)聯(lián)并且對(duì)應(yīng)于高速緩存行 151a,因?yàn)楦欁侄?51b包括作為高速緩存行151的部分的位。關(guān)聯(lián) 可以通過如圖所示的物理放置進(jìn)行,或者可以通過其他關(guān)聯(lián)進(jìn)行,例 如在硬件或軟件查找表中將訪問跟蹤字段151b關(guān)聯(lián)或映射到存儲(chǔ)器行151a或151b。
作為簡化的說明性示例,假設(shè)訪問跟蹤字段151b、 152b和153b 包括兩個(gè)事務(wù)位笫一讀跟蹤位和第二寫跟蹤位。在默認(rèn)狀態(tài)中,即 在第一邏輯值,訪問跟蹤字段151b、 152b和153b中的第一和第二位 分別表示在臨界段的執(zhí)行期間并未訪問高速緩存行151、 152和153。
假設(shè)在臨界段中遇到從行151 a加載的加載操作。利用引退前和引 退后混合跟蹤方案,將第 一讀跟蹤位從默認(rèn)狀態(tài)更新到第二訪問狀 態(tài),例如第二邏輯值。如下所述,在混合方案中,可以在加載操作引 退之前(即,引退前)、或者在操作引退之后(即,在引退時(shí)或者在 引退之后)啟動(dòng)對(duì)第一讀跟蹤位的更新。此處,保持第二邏輯值的第 一讀跟蹤位表示在臨界段的執(zhí)行期間發(fā)生了從高速緩存行151的讀取 /加載??梢园凑疹愃朴诟碌?一寫跟蹤位的方式來處理存儲(chǔ)操作以指 示在臨界段的執(zhí)行期間發(fā)生了對(duì)存儲(chǔ)單元的存儲(chǔ)。
因此,如果檢查與行151相關(guān)聯(lián)的字段151b中的跟蹤位,并且 事務(wù)位表示默認(rèn)狀態(tài),那么在臨界段的未決期間并未訪問高速緩存行 151。相反地,如果第一讀跟蹤位表示第二值,那么之前在臨界段的 執(zhí)行期間已經(jīng)讀取過高速緩存行151。此外,如果第一寫跟蹤位表示 第二值,那么在臨界段的未決期間發(fā)生了對(duì)行151的寫入。
潛在地使用訪問字段151b、 152b和153b來支持任何類型的事 務(wù)執(zhí)行或HLE。在處理器100能夠進(jìn)行硬件事務(wù)執(zhí)行的一個(gè)實(shí)施例中, 如下所述,通過引退前和引退后訪問來設(shè)置訪問字段151b、 152b和 153b,以便檢測(cè)沖突并執(zhí)行確認(rèn)。在對(duì)事務(wù)執(zhí)行利用硬件事務(wù)存儲(chǔ)器 (HTM)、軟件事務(wù)存儲(chǔ)器(STM)或其混合的另一個(gè)實(shí)施例中,訪 問跟蹤字段151b、 152b和153b提供類似的引退前和引退后混合跟蹤 功能。
作為如何潛在地利用訪問字段、具體來說是利用跟蹤位來幫助事 務(wù)執(zhí)行的第一示例,題為 "Hardware acceleration for A Software Transactional Memory System (用于軟件事務(wù)存儲(chǔ)器系統(tǒng)的硬件加 速)"、序列號(hào)為11/349787的共同未決的申請(qǐng)公開使用訪問字段/事務(wù)位來加速STM。作為另一個(gè)示例,在題為"Global Overflow Method for Virtualized Transactional Memory(用于虛擬化事務(wù)存儲(chǔ)器的全局溢 出方法)"、序列號(hào)為11/479902、代理人案號(hào)為042390.P23547的共 同未決的申請(qǐng)中論述了包括將訪問字段/事務(wù)跟蹤位的狀態(tài)存儲(chǔ)到第 二存儲(chǔ)器中的事務(wù)存儲(chǔ)器擴(kuò)展/虛擬化。
在一個(gè)實(shí)施例中,跟蹤邏輯180用于啟動(dòng)引退前訪問以更新與臨 界段中的加載相關(guān)聯(lián)的跟蹤字段。例如,假設(shè)臨界段中的加載操作引 用(reference)行151。默認(rèn)地,如果檢測(cè)到臨界段內(nèi)的加載操作,那么 將執(zhí)行對(duì)跟蹤字段151b的引退前訪問/更新。然而,當(dāng)提交、成功執(zhí) 行或者中止臨界段時(shí),將訪問字段重置到它們的默認(rèn)狀態(tài)以準(zhǔn)備跟蹤 隨后的臨界段或者重新執(zhí)行中止的臨界段。然而,在能夠進(jìn)行無序 (OOO)執(zhí)行的處理器中,來自隨后的臨界段的操作可能已經(jīng)在高速 緩存150中設(shè)置了跟蹤信息。因此,在重置訪問跟蹤字段后,隨后臨 界段的跟蹤信息可能會(huì)丟失。因此,如果包括加載操作的臨界段是連 續(xù)的臨界段,即,在當(dāng)前臨界段結(jié)束之前就開始的隨后的臨界段,那 么將執(zhí)行加載操作引退后訪問以更新字段151b,從而確保準(zhǔn)確的跟蹤 信息。
轉(zhuǎn)到圖2,示出用于對(duì)連續(xù)的臨界段啟動(dòng)引退后訪問字段更新的 跟蹤邏輯的實(shí)施例。如上所述,事務(wù)通常由開始事務(wù)和結(jié)束事務(wù)指令 來劃分(demarcate),這允許容易地識(shí)別臨界段。然而,HLE包括檢 測(cè)/識(shí)別臨界段,去掉劃分臨界段的鎖定(lock),在臨界段中止后對(duì)寄 存器狀態(tài)進(jìn)行檢查點(diǎn)操作以用于回滾,跟蹤試探性存儲(chǔ)器更新,以及 檢測(cè)潛在的數(shù)據(jù)沖突。檢觀'V識(shí)別臨界段的一個(gè)困難在于規(guī)則鎖定指令 和劃分臨界段的鎖定/鎖定解除指令之間的定界(delineating)。
在一個(gè)實(shí)施例中,對(duì)于HLE,通過鎖定指令(即,開始臨界段指 令)和匹配的鎖定解除指令(即,結(jié)束臨界段指令)來定義臨界段。 鎖定(lock)指令可以包括從地址位置加載,即,檢查鎖定是否可用; 以及對(duì)該地址位置進(jìn)行修改/寫入,即,更新該地址位置以便設(shè)置鎖定。 可以用作鎖定指令的指令的幾個(gè)例子包括比較和交換指令、位測(cè)試和設(shè)置指令、以及交換和增加指令。在英特爾的IA-32和IA-64指令集 中,前面提到的指令包括CMPXCHG、 BTS和XADD,如在上面論述 的Intel 64和IA-32指令集文件中所描述的。
作為檢測(cè)/辨識(shí)諸如CMPXCHG、 BTS和XADD的預(yù)定指令的示 例,檢測(cè)邏輯和/或解碼邏輯利用操作碼字段或指令的其他字段來檢測(cè) 指令。作為示例,CMPXCHG與下面的操作碼相關(guān)聯(lián)OF B0/r, REX+0F B0/r,和REX.W+0F Bl/r。在另一個(gè)實(shí)施例中,利用與指令相關(guān)聯(lián)的 操作來檢測(cè)鎖定指令。例如,在x86中,通常使用下面這三個(gè)存儲(chǔ)器 微操作來執(zhí)行指示潛在的鎖定指令的原子存儲(chǔ)器更新(1 )操作碼 為0x63的Load—Store—Intent(L_S_I); (2 )操作碼為0x76的STA; 以及(3)操作碼為0x7F的STD。此處,L—S—I在獨(dú)占所有權(quán)狀態(tài)獲 得該存儲(chǔ)單元并對(duì)該存儲(chǔ)單元進(jìn)行讀取,而STA和STD操作對(duì)該存 儲(chǔ)單元進(jìn)行修改和寫入。換言之,檢測(cè)邏輯搜索具有存儲(chǔ)意圖的加載 (L—S—I)以定義臨界段的開始。注意,鎖定指令可以具有任意數(shù)量的 與讀、寫、修改存儲(chǔ)器操作相關(guān)聯(lián)的其他非存儲(chǔ)器以及其他存儲(chǔ)器操 作。
盡管在圖2中沒有示出,但通常利用堆棧(例如鎖定堆棧)來保 存與鎖定指令(檢測(cè)到時(shí))相關(guān)聯(lián)的條目。鎖定指令條目(L正)可 以包括任意數(shù)量的字段以存儲(chǔ)與臨界段相關(guān)的信息,例如鎖定指令存 儲(chǔ)物理地址(LIStrPA)、鎖定指令加載值和加載大小、鎖定指令存 儲(chǔ)值和大小、微操作計(jì)數(shù)、解除標(biāo)志、稍后鎖定的獲得標(biāo)志、以及上 一個(gè)指令指針字段。
此處,對(duì)應(yīng)于鎖定指令的鎖定解除指令劃分臨界段的結(jié)束。檢測(cè) 邏輯搜索對(duì)應(yīng)于由鎖定指令修改的地址的鎖定解除指令。注意,由鎖 定指令修改的地址可以保存在鎖定堆棧上的鎖定指令條目(LIE)中。 因此,在一個(gè)實(shí)施例中,鎖定解除指令包括將由相應(yīng)鎖定指令修改的 地址設(shè)置回到未鎖定值的任何存儲(chǔ)操作。將存儲(chǔ)在鎖定堆棧中的 L—S—I指令所引用的地址與隨后的存儲(chǔ)指令進(jìn)行比較以檢測(cè)相應(yīng)的鎖 定解除指令。關(guān)于臨界段的檢測(cè)和預(yù)測(cè)的更多信息可以參見題為"ACRITICAL SECTION DETECTION AND PREDICTION MECHANISM FOR HARDWARE LOCK ELISION (硬件鎖定省略的臨界段檢測(cè)和預(yù) 測(cè)機(jī)制)"、申請(qǐng)序列號(hào)為11/599009的共同未決的申請(qǐng)。
換言之,在HLE的情況下,通過L一S—I指令和相應(yīng)的鎖定解除指 令來劃分臨界段。類似地,通過開始事務(wù)指令和結(jié)束事務(wù)指令來定義 事務(wù)的臨界段。因此,提到開始臨界段操作/指令時(shí)包括開始HLE、
事務(wù)存儲(chǔ)器或其他臨界段的任何指令,而提到結(jié)束臨界段操作/指令時(shí) 包括啟動(dòng)HLE、事務(wù)存儲(chǔ)器或其他臨界段結(jié)束指令。
Fend(前端)205用于保存前端計(jì)數(shù)以指示執(zhí)行處于臨界段內(nèi)的時(shí) 間。在一個(gè)實(shí)施例中,F(xiàn)end205包括前端計(jì)數(shù)器。作為示例,將前端 計(jì)數(shù)器初始化為零默認(rèn)值。響應(yīng)于檢測(cè)到開始臨界段指令,前端計(jì)數(shù) 器遞增,并且響應(yīng)于檢測(cè)到結(jié)束臨界段指令,前端計(jì)數(shù)器遞減。作為 說明,假設(shè)檢測(cè)到L_S—I指令。在分配指令后,例如在分配加載后, Fend 205遞增為l。因此,假設(shè)隨后的指令在分配時(shí)位于臨界段內(nèi), 這是因?yàn)镕end 205包括非零值1。
在一個(gè)實(shí)施例中,F(xiàn)end 205還提供臨界段的嵌套深度。此處,如 果分配多個(gè)開始臨界段操作,那么Fend205相應(yīng)地遞增,以便表示臨 界段的嵌套深度。例如,假設(shè)在第二臨界段內(nèi)嵌套有第一臨界段,而 第二臨界段嵌套在笫三臨界段內(nèi)。因此,在分配第三臨界段的L_S_I 后,F(xiàn)end 205遞增到1,在分配第二臨界段的L—S—I后遞增到2,并 在分配第一臨界段的L_S—I后遞增到3。此外,響應(yīng)于鎖定解除指令 (即,相應(yīng)的存儲(chǔ)操作)的引退,F(xiàn)end205遞減。
因此,響應(yīng)于執(zhí)行鎖定解除的第 一臨界段的存儲(chǔ)操作的引退, Fend 205遞減到2,并且依次類推,直到第三臨界段的鎖定解除使Fend 205遞減到0為止。此處,因?yàn)镕end 205保持零值,所以假設(shè)隨后的 指令/操作不在臨界段內(nèi)。注意,在一個(gè)實(shí)施例中,將在分支之前對(duì)
Fend205的值進(jìn)行檢查點(diǎn)操作,這是因?yàn)镕end205的值可能因錯(cuò)誤預(yù) 測(cè)的路徑(即,分支錯(cuò)誤預(yù)測(cè))而需要恢復(fù)。
在一個(gè)實(shí)施例中,諸如加載緩沖器或存儲(chǔ)緩沖器的訪問緩沖器用于保存與存儲(chǔ)器訪問操作相關(guān)聯(lián)的訪問條目。每個(gè)訪問緩沖器條目包 括跟蹤字段部分和/或存儲(chǔ)器更新字段。默認(rèn)地,存儲(chǔ)器更新字段用于 保持第一值,如邏輯0,以指示將不執(zhí)行任何引退前訪問跟蹤。然而,
當(dāng)Fend 205是指示操作位于臨界段之內(nèi)的非0時(shí),將存儲(chǔ)器更新字段 更新為第二值,如邏輯1,以指示將執(zhí)行引退前訪問以更新訪問跟蹤字段。
盡管在圖2中示出了加載緩沖器220,但諸如存儲(chǔ)緩沖器的任何 訪問緩沖器都可按照類似的方式操作。因此,下面將詳細(xì)論述加載緩 沖器220以說明訪問緩沖器的示范性操作。加載緩沖器220包括多個(gè) 加載緩沖器條目,如條目226-233。當(dāng)遇到加栽操作時(shí),在加載緩沖 器220中創(chuàng)建/存儲(chǔ)加載緩沖器條目。在一個(gè)實(shí)施例中,加載緩沖器 220按照程序順序(即,指令或操作在程序代碼中的排序的順序)存 儲(chǔ)加載緩沖器條目。此處,加載尾指針235引用最新的加載緩沖器條 目226,即,最近存儲(chǔ)的加載緩沖器條目。相反,加載頭指針236引 用最早的加載緩沖器條目230,它不是較早的加載。
在有序執(zhí)行的處理元件中,按照存儲(chǔ)在加載緩沖器中的程序順序 執(zhí)行加載操作。因此,首先執(zhí)行最早的緩沖器條目,并且將加載頭指 針236重新指向下一個(gè)最早的條目,例如條目229。相比之下,在無 序機(jī)器中,根據(jù)調(diào)度,按任何順序執(zhí)行操作。然而,通常會(huì)按照程序 順序移除條目,即,從加載緩沖器解除條目分配。因此,加載頭指針 236和加載尾指針235按照類似方式在兩種類型的執(zhí)行之間進(jìn)行操作。
在一個(gè)實(shí)施例中,每個(gè)加載緩沖器條目(如條目230)包括存儲(chǔ) 器更新字段225,它又可稱作跟蹤字段、設(shè)置高速緩存位字段和更新 事務(wù)位字段。加載緩沖器條目230可以包括任何類型的信息,例如存 儲(chǔ)器更新值、指針值、對(duì)相關(guān)聯(lián)的加載操作的引用、對(duì)與加栽操作相 關(guān)聯(lián)的地址的引用、從地址加載的值、以及其他相關(guān)聯(lián)的加載緩沖器 值、標(biāo)志或引用。
作為示例,假設(shè)與加載條目230相關(guān)聯(lián)的加載操作引用系統(tǒng)存儲(chǔ) 器地址。無論是高速緩存行271a原始擁有并位于高速緩存行271a中還是響應(yīng)于高速緩存270未命中而提取的,都假設(shè)系統(tǒng)存儲(chǔ)器地址引 用的元素當(dāng)前駐留在高速緩存行271a中。因此,當(dāng)在臨界段執(zhí)行期間 從高速緩存行271a加載時(shí),將更新讀跟蹤位271r以指示在臨界段的 未決期間已經(jīng)訪問了相關(guān)聯(lián)的高速緩存行271a。
當(dāng)分配加載操作時(shí),基于Fend 205的值更新存儲(chǔ)器更新字段225。 響應(yīng)于Fend 205保持值0而指示加載操作不在臨界段之內(nèi),將更新字 段225更新為邏輯O,以指示將不進(jìn)行對(duì)跟蹤位271r的引退前訪問。 注意,位、值或字段的更新不一定指示位、值或字段的改變。例如, 如果先前將字段225設(shè)置為邏輯0,那么對(duì)邏輯0的更新潛在地包括 將邏輯0重寫到字段225、以及不采取任何動(dòng)作而讓字段225保持邏 輯0。
與上面論述的情景相反,如果在分配加載操作后Fend 205保持非 零值,那么將字段225設(shè)置為引退前(pre-retire)值,例如邏輯l,以指 示將執(zhí)行對(duì)跟蹤位271r的引退前訪問。在一個(gè)實(shí)施例中,更新邏輯 210將在分配與條目230相關(guān)聯(lián)的加載操作后更新字段225。作為示 例,更新邏輯210包括用于讀取/保存來自Fend 205的當(dāng)前值的寄存 器或其他邏輯和用于更新條目230中的字段225的邏輯。此處,引退 前訪問包括在引退與條目230相關(guān)聯(lián)的加載操作之前更新讀跟蹤位 271r的任何訪問。在一個(gè)實(shí)施例中,當(dāng)字段225保持引退前值時(shí),響 應(yīng)于與條目230相關(guān)聯(lián)的加載操作的分派,啟動(dòng)對(duì)位271r的更新。換 言之,當(dāng)分派與條目230相關(guān)聯(lián)的加載時(shí),如果字段225保持引退前 值,則調(diào)度用于更新位271r的訪問。相反,如果字段225保持非引退 前值,如邏輯O,那么在分派后不調(diào)度任何訪問。
然而,在無序執(zhí)行的處理器中,可以無序地執(zhí)行指令/操作。在一 個(gè)實(shí)例中,可以在引退當(dāng)前臨界段指令的結(jié)束以使Fend 205遞減之前 分配隨后的非臨界段加載。因此,與非臨界段加載相關(guān)聯(lián)的加載緩沖 器條目包括引退前值,這導(dǎo)致假的訪問跟蹤,即,即使加載不在臨界 段之內(nèi),仍跟蹤高速緩存中的加載。然而,假(spurious)的訪問跟蹤不 會(huì)導(dǎo)致不正確的數(shù)據(jù),并且很少導(dǎo)致由于不正確的數(shù)據(jù)爭奪檢測(cè)而引起的假中止。
或者,假設(shè)在引退來自當(dāng)前臨界段的結(jié)束指令之前分配從隨后臨 界段的加載。與加載相關(guān)聯(lián)的加栽緩沖器條目將保持引退前值。然而, 如果結(jié)束指令現(xiàn)在是在分派加栽之前引退的,那么重置包括保持引退 前值的相關(guān)聯(lián)的加載緩沖器條目的加載緩沖器中的更新跟蹤字段。因
此,在分派(dispatch)加載后,不調(diào)度任何引退前訪問。此處,另一處 理元件可以更新所加載的單元并且沒有檢測(cè)到數(shù)據(jù)沖突,這是因?yàn)樵L 問跟蹤字段已經(jīng)不再跟蹤訪問了 。
因此,在引退加載操作后,如果與加載操作相關(guān)聯(lián)的加栽緩沖器 條目230的存儲(chǔ)器更新字段225包括諸如邏輯0的重置值,那么檢查 后端(Bend)邏輯215。 Bend215以類似于Fend205的方式操作,不 同之處在于,并不是關(guān)于Fend 205 ^f皮分配,當(dāng)引退開始臨界段指令時(shí), Bend 215遞增。此外,響應(yīng)于結(jié)束臨界段操作的引退,Bend 215遞減。 如果如上所述,Bend保持指示臨界段內(nèi)的執(zhí)行的非0值并且字段225 保持重置值,那么調(diào)度對(duì)高速緩存270的引退后訪問以更新讀跟蹤位 271r。
圖5包括連續(xù)臨界段的簡化的說明性實(shí)施例。注意,省略了指令 /操作的操作/訪問、分配和分派以簡化示例,并且這些操作可以按任 何順序進(jìn)行。在時(shí)間1 (tl),分配開始臨界段1指令/操作。作為響 應(yīng),F(xiàn)end 205遞增到l。隨后,在t2,引退開始臨界段l操作,這使 Bend215遞增到1。在t3,分配開始臨界段2操作,由此導(dǎo)致Fend205 遞增到2。隨后,在時(shí)間t4,分配從臨界段2的加載,它將從高速緩 存270的行271a加栽。由于Fend205保持值2,即,非零值,所以更 新邏輯210將加載緩沖器條目230中的訪問跟蹤字段225設(shè)置為引退 前值邏輯l。注意,加載緩沖器條目230與從臨界段2的加載相關(guān)聯(lián)。
在t5 ,盡管沒有示出分配,但引退結(jié)束臨界段1操作,這導(dǎo)致Fend 205遞減到1,而Bend 215遞減到0。響應(yīng)于Bend 215遞減到0,將 訪問跟蹤字段225重置為0。在t6,分派從臨界段2的加載;然而, 更新/訪問跟蹤字段保持0,因此不調(diào)度對(duì)高速緩存270的引退前訪問。因此,位271r仍處于指示在臨界段2期間沒有訪問的默認(rèn)狀態(tài)。在t7, 引退開始臨界段2操作,這使Bend 215遞增到1 。
此外,在t8,引退從臨界段2的加栽。此處,更新字段225保持 值0,而Bend 215保持非零值,即1。作為更新邏輯260所采取的那 些狀況的結(jié)果,調(diào)度對(duì)高速緩存270的引退前訪問。更新位271r以指 示在臨界段2的執(zhí)行期間發(fā)生了對(duì)行271a的訪問。可見,通過實(shí)現(xiàn)引 退前和引退后混合系統(tǒng),可以避免不跟蹤從連續(xù)臨界段的加栽的可 能。因此,在一個(gè)實(shí)施例中,對(duì)臨界段存儲(chǔ)器訪問執(zhí)行引退前更新, 但對(duì)隨后的連續(xù)臨界段,執(zhí)行引退后更新。在上述的示例中,根據(jù)存 儲(chǔ)器更新字段225保持O值并且Bend 215保持非零值來確定連續(xù)臨界 段。換言之,在一個(gè)實(shí)施例中,連續(xù)臨界段位于在分配第二臨界段操 作的開始之前不引退第一臨界段操作的結(jié)束的位置。此處,可在臨界 段之間分配和/或執(zhí)行幾個(gè)或一些非事務(wù)搡作。然而,可以利用檢測(cè)/ 確定連續(xù)臨界段的任何方法。
用于更新訪問跟蹤字段的引退后訪問可以按任何方式執(zhí)行。在一 個(gè)實(shí)施例中,訪問緩沖器能夠保存較早的訪問以允許引退后訪問。如 圖2所示,加載緩沖器220包括用于保存較早的加栽緩沖器條目 231-233的較早的加載部分250。當(dāng)引退加載、例如與加載緩沖器條目 230相關(guān)聯(lián)的加載時(shí),加載頭指針236指向下一個(gè)最早的條目229, 并且條目230變成較早的加栽部分250的部分。如果較早的加栽緩沖 器條目未指定用于引退后更新,即,按照保持引退前值的字段225的 指定執(zhí)行引退前訪問或者訪問不在臨界段之內(nèi),那么可立即從加載緩 沖器220中解除對(duì)它的分配。然而,當(dāng)加載較早頭指針237指向條目 230時(shí),那么通過調(diào)度器來調(diào)度引退后訪問以更新讀跟蹤字段271r。 題為"A POST-RETIRE SCHEME FOR TRACKING TENTATIVE ACCESSES DURING TRANSACTIONAL EXECUTION (用于跟蹤事 務(wù)執(zhí)行期間的試探性訪問的引退后方案)"、申請(qǐng)序列號(hào)為11/517029 的共同未決申請(qǐng)更詳細(xì)地論述了較早訪問緩沖器條目和用于跟蹤試 探性存儲(chǔ)器訪問的引退后訪問。接下來參考圖3,示出用于執(zhí)行引退前和引退后混合更新以跟蹤 試探性訪問的方法的流程圖的實(shí)施例。在流程305中,確定操作是否 是連續(xù)臨界段的部分。在一個(gè)實(shí)施例中,臨界段是事務(wù)存儲(chǔ)器臨界段。 在另一個(gè)實(shí)施例中,臨界段是HLE檢測(cè)的臨界段。如上所述,在一個(gè) 實(shí)施例中,連續(xù)臨界段包括在引退另 一個(gè)未決臨界段的結(jié)束臨界段之 前分配的臨界段的開始臨界段操作。作為示例,如上所述,根據(jù)諸如 前端計(jì)數(shù)器和后端計(jì)數(shù)器的計(jì)數(shù)器來確定分配和引退。因此,連續(xù)臨 界段可以在代碼中互相緊跟,或者相反,可在連續(xù)臨界段之間存在非 事務(wù)操作。
如果操作是非連續(xù)臨界段的部分,那么在流程310中,執(zhí)行對(duì)存 儲(chǔ)器的引退前訪問以更新跟蹤信息。在一個(gè)實(shí)施例中,跟蹤信息包括 讀和寫位/字段以分別指示是否在臨界段的未決期間發(fā)生了讀和寫。作 為示例,在分派該操作后,調(diào)度對(duì)存儲(chǔ)器的訪問以更新讀和寫位/字段。
相反,如果操作是連續(xù)臨界段的部分,那么在流程320中,執(zhí)行 對(duì)存儲(chǔ)器的引退后訪問以更新跟蹤信息。換言之,如果之前的臨界段 的結(jié)束臨界段操作尚未引退并且當(dāng)前的連續(xù)臨界段的開始事務(wù)操作 已經(jīng)分配完成,那么當(dāng)引退之前的結(jié)束臨界段時(shí),可以重置或以其他 方式影響當(dāng)前連續(xù)臨界段的引退前跟蹤數(shù)據(jù)。因此,在這個(gè)示例中, 引退后跟蹤連續(xù)臨界段的存儲(chǔ)器訪問。在一個(gè)實(shí)施例中,在引退該操 作后,與該操作相關(guān)聯(lián)的訪問緩沖器條目成為較早的訪問緩沖器條 目。響應(yīng)于操作變?yōu)檩^早的訪問,操作引退后調(diào)度對(duì)跟蹤信息的更新。
圖4a-4c示出執(zhí)行引退前和引退后混合訪問跟蹤的方法的流程圖 的實(shí)施例。參考圖4a,在流程405中,檢測(cè)臨界段操作的開始。在一 個(gè)實(shí)施例中,開始臨界段操作是具有存儲(chǔ)意圖的加載(L_S_I)操作。 如上所述,在序列號(hào)為11/599009的共同未決申請(qǐng)中論述了臨界段的 檢測(cè)和預(yù)測(cè)示例。
在另一個(gè)實(shí)施例中,開始臨界段操作包括開始事務(wù)操作。編譯器 通常插入開始事務(wù)操作。例如,開始事務(wù)函數(shù)調(diào)用可以置于臨界段之 前以執(zhí)行特定的事務(wù)功能,例如檢查點(diǎn)操作(checkpointing)、確認(rèn)和日志記錄。隨后,在流程410中,分配開始臨界段操作。注意,可以包 含和分配多于一個(gè)開始臨界段操作。繼續(xù)上面的示例,分配L—S—I操 作。
在流程415中,F(xiàn)end計(jì)數(shù)響應(yīng)于開始臨界段操作的分配而遞增。 注意,流程圖從流程415分支到判定流程A。稍后的圖中將說明,利 用Fend計(jì)數(shù)變量作為流程中的其他判定的輸入。盡管流程415通過 遞增來影響Fend計(jì)數(shù)的值,但諸如圖4b的流程440的其他流程也會(huì) 影響Fend計(jì)數(shù)的值。
然后,在分派之后,在流程420引退開始臨界段操作。例如,如 果開始臨界段操作是L_S—I,那么引退加栽條目,并且稍后潛在地從 加載緩沖器解除對(duì)加載條目的分配。在流程425中,Bend計(jì)數(shù)響應(yīng)于 引退開始臨界段操作而遞增。類似于判定流程A,判定流程B采用 Bend的遞增作為輸入。
接著參考圖4b,在流程430中,在流程430檢測(cè)并在流程435引 退結(jié)束臨界段操作。在一個(gè)實(shí)施例中,結(jié)束臨界段操作是將鎖定值更 新為未鎖定的相應(yīng)的存儲(chǔ)操作。在另一個(gè)實(shí)施例中,結(jié)束臨界段操作 是結(jié)束事務(wù)指令/操作。類似于開始事務(wù)指令,編譯器可插入操作以執(zhí) 行各種任務(wù),例如確認(rèn)、回滾和提交。
在流程440和445中,F(xiàn)end和Bend都響應(yīng)于引退結(jié)束臨界段操 作而遞減。此處,在HLE臨界段情況下,如上文提到的,可能需要地 址比較以確定臨界段操作的HLE結(jié)束。通常,在分配該操作后,因此 即使在一個(gè)實(shí)施例中,F(xiàn)end在分配結(jié)束臨界段操作后遞減,地址仍是 不可用的;此處,在引退結(jié)束臨界段操作時(shí),也遞減Fend。如上所述, Fend和Bend的遞減分別被作為判定流程A和B的輸入。盡管未示出, {旦參考圖4c更詳細(xì)地論述的更新訪問字,殳可以響應(yīng)Bend遞減到零而 重置、清零或更新。
轉(zhuǎn)到圖4c,在流程450中分配加載操作。在流程455中,確定 Fend是否為非零。來自圖4a和4b的判定流程A ^皮輸入到流程455。 如果Fend保持0值,那么在流程460中繼續(xù)正常的非臨界段執(zhí)行。否則,如果Fend因開始臨界段操作而遞增并且不會(huì)因結(jié)束臨界段操 作而遞減到o,那么假設(shè)加載操作位于執(zhí)行臨界段之內(nèi)。此處,對(duì)訪
問字段、更新跟蹤字段或與加栽操作相關(guān)聯(lián)的加栽緩沖器條目中的其
他字段進(jìn)行更新以指示將在流程465中執(zhí)行對(duì)加載跟蹤字段的引退前訪問。
在流程470中,分派加栽。如果根據(jù)判定流程475中所確定的, 將訪問字段設(shè)置為流程465中的引退前訪問值,那么在流程480中啟 動(dòng)對(duì)加載跟蹤字段的引退前訪問。在一個(gè)實(shí)施例中,調(diào)度器基于在分 派相關(guān)聯(lián)的加載操作后保持引退前值的訪問字段調(diào)度訪問。在啟動(dòng)引 退前訪問之后或者直接在判定流程475之后,將在流程485中引退加 栽操作。
響應(yīng)于引退加載操作,在流程490中確定Bend是否是非零并且 訪問字段是否指示無引退前訪問。注意,判定流程B是流程490的輸 入。如果Bend是非零并且訪問字段指示沒有引退前訪問,那么在流 程495中,啟動(dòng)對(duì)加載跟蹤字段的引退后更新。否則,執(zhí)行按正常繼續(xù)。
如上所述,可以對(duì)大部分臨界段執(zhí)行引退前訪問跟蹤。然而,為 了保證有效的訪問跟蹤,可以對(duì)連續(xù)的臨界段執(zhí)行引退后更新。因此, 通過執(zhí)行大部分引退前更新,因?yàn)椴槐卦L問高速緩存兩次,即, 一次 用于訪問而一次用于更新跟蹤信息,所以可以節(jié)約功率。然而,通過 使用對(duì)跟蹤信息的 一些引退后更新而保持了數(shù)據(jù)跟蹤的準(zhǔn)確性。
上述方法、軟件、固件或代碼的實(shí)施例可以經(jīng)由存儲(chǔ)在可由處理 元件執(zhí)行的機(jī)器可訪問或機(jī)器可讀介質(zhì)上的指令或代碼來實(shí)現(xiàn)。機(jī)器 可訪問/可讀介質(zhì)包括以諸如計(jì)算機(jī)或電子系統(tǒng)的機(jī)器可讀的形式提 供(即,存儲(chǔ)和/或發(fā)送)信息的任何機(jī)構(gòu)。例如,機(jī)器可訪問介質(zhì)包 括隨機(jī)存取存儲(chǔ)器(RAM),如靜態(tài)RAM (SRAM)或動(dòng)態(tài)RAM (DRAM);只讀存儲(chǔ)器(ROM);磁或光存儲(chǔ)介質(zhì);以及閃存裝置。 作為另一個(gè)示例,機(jī)器可訪問/可讀介質(zhì)包括用于接收、復(fù)制、存儲(chǔ)、 傳送或以其他方式操縱包括上述方法、軟件、固件或代碼的實(shí)施例的電、光、聲或其他形式的傳播信號(hào)(例如栽波、紅外信號(hào)、數(shù)字信號(hào)) 等等的任何機(jī)構(gòu)。
整篇說明書中提到"一個(gè)實(shí)施例"或"實(shí)施例"時(shí)意味著,結(jié)合 該實(shí)施例描述的特定的特征、結(jié)構(gòu)或特性包含在本發(fā)明的一個(gè)實(shí)施例 中,并且不需要出現(xiàn)在所論述的所有實(shí)施例中。因此,在整篇說明書 的不同地方出現(xiàn)短語"在一個(gè)實(shí)施例中"或"在實(shí)施例中,,時(shí)不一定 都指相同的實(shí)施例。此外,可以在一個(gè)或多個(gè)實(shí)施例中以任何合適的 方式組合這些特定的特征、結(jié)構(gòu)或特性。
在以上說明中,參考特定的示范性實(shí)施例給出了詳細(xì)描述。然而, 很明顯,在不脫離如隨附權(quán)利要求所述的本發(fā)明的更寬的精神和范圍 的情況下,可以對(duì)此做出各種修改和變化。因此,應(yīng)將i兌明書和附圖 視為是具說明性意義而不是限制性意義的。此外,上文對(duì)實(shí)施例和其 他示范性語言的使用不一定指相同的實(shí)施例或相同的示例,而是可以 指完全不同的實(shí)施例,同時(shí)也可以潛在地指相同的實(shí)施例。
權(quán)利要求
1、一種設(shè)備,包括處理元件,用于執(zhí)行代碼的非臨界段和代碼的臨界段;與所述處理元件相關(guān)聯(lián)的存儲(chǔ)器,其中所述存儲(chǔ)器的行將與跟蹤字段相關(guān)聯(lián),并且所述代碼的臨界段將包含引用所述行的操作;與所述存儲(chǔ)器相關(guān)聯(lián)的跟蹤邏輯,其響應(yīng)于所述代碼的臨界段是代碼的隨后連續(xù)臨界段,啟動(dòng)對(duì)所述跟蹤字段的操作引退后更新以指示在所述臨界段執(zhí)行期間發(fā)生了對(duì)所述行的訪問,并且響應(yīng)于所述代碼的臨界段不是代碼的隨后連續(xù)臨界段,啟動(dòng)對(duì)所述跟蹤字段的操作引退前更新以指示在所述代碼的臨界段執(zhí)行期間發(fā)生了對(duì)所述行的訪問。
2、 根據(jù)權(quán)利要求1所述的設(shè)備,其中所述跟蹤邏輯包括用于確 定所述操作包含在所述代碼的臨界段中的前端跟蹤邏輯。
3、 根據(jù)權(quán)利要求2所述的設(shè)備,其中所述前端跟蹤邏輯包括前 端計(jì)數(shù)器,所述前端計(jì)數(shù)器響應(yīng)于分配所述臨界段操作的開始而遞 增,并且響應(yīng)于所述前端計(jì)數(shù)器保持大于所述前端計(jì)數(shù)器的預(yù)定值的 值,確定所述操作包含在所述代碼的臨界段中。
4、 根據(jù)權(quán)利要求3所述的設(shè)備,其中所述前端計(jì)數(shù)器響應(yīng)于引 退所述臨界段操作的結(jié)束而遞減,并且所述臨界段操作的開始包括具 有存儲(chǔ)意圖的加載(L_S—I)操作,而所述臨界段操作的結(jié)束包括引 用對(duì)應(yīng)于所述L—S_I操作的地址的存儲(chǔ)操作。
5、 根據(jù)權(quán)利要求3所述的設(shè)備,其中所述前端計(jì)數(shù)器響應(yīng)于分 配所述臨界段操作的結(jié)束而遞減,并且所述臨界段操作的開始包括開 始事務(wù)操作,而所述臨界段操作的結(jié)束包括結(jié)束事務(wù)操作。
6、 根據(jù)權(quán)利要求3所述的設(shè)備,其中所述跟蹤邏輯還包括后端 計(jì)數(shù)器,所述后端計(jì)數(shù)器響應(yīng)于引退所述臨界段操作的開始而遞增, 并且響應(yīng)于引退所述臨界段操作的結(jié)束而遞減。
7、 根據(jù)權(quán)利要求6所述的設(shè)備,還包括能夠保存較早訪問條目的訪問緩沖器,所述訪問緩沖器包括對(duì)應(yīng)于所述操作的訪問條目,其 中所述訪問條目包括跟蹤字段部分。
8、 根據(jù)權(quán)利要求7所述的設(shè)備,其中所述操作是加載操作,所 述訪問緩沖器包括能夠保存較早加載條目的加載緩沖器,并且所述訪 問條目包括對(duì)應(yīng)于所述加載操作的加載條目。
9、 根據(jù)權(quán)利要求7所述的設(shè)備,還包括耦合到所述前端計(jì)數(shù)器 和所述訪問緩沖器的更新邏輯,響應(yīng)于在分配所述操作后所述前端計(jì) 數(shù)器保持大于默認(rèn)值的值,所述更新邏輯更新所述訪問條目的跟蹤字 段部分以指示將啟動(dòng)對(duì)所述跟蹤字段的所述操作引退前更新。
10、 根據(jù)權(quán)利要求9所述的設(shè)備,其中所述更新邏輯還耦合到所 述后端計(jì)數(shù)器,響應(yīng)于所述后端計(jì)數(shù)器遞減到默認(rèn)值,所述更新邏輯 重置所述訪問條目的跟蹤字段部分以指示將不啟動(dòng)對(duì)所逸跟蹤字段 的所述操作引退前更新。
11、 根據(jù)權(quán)利要求10所述的設(shè)備,其中所述跟蹤邏輯響應(yīng)于所 述代碼的臨界段是代碼的隨后連續(xù)臨界段而啟動(dòng)對(duì)所述跟蹤字段的 所述操作引退后更新以指示在所述臨界段執(zhí)行期間發(fā)生的對(duì)所述行 的訪問包括所述跟蹤邏輯響應(yīng)于所述訪問條目的跟蹤字段部分的重 置以及所述后端計(jì)數(shù)器保持大于所述默認(rèn)值的值而啟動(dòng)對(duì)所述跟蹤 字段的所述操作引退后更新。
12、 一種系統(tǒng),包括 集成電路,包括能夠執(zhí)行代碼的臨界段(CS)的執(zhí)行單元,所述CS包括引 用地址的加載操作,其中所述CS將通過開始CS操作和結(jié)束CS操作 進(jìn)行劃分;耦合到所述執(zhí)行單元的存儲(chǔ)器,所述存儲(chǔ)器包括與所述地址 相關(guān)聯(lián)的存儲(chǔ)器行,其中加載跟蹤字段將與所述存儲(chǔ)器行相關(guān)聯(lián);與所述執(zhí)行單元相關(guān)聯(lián)的臨界段邏輯,用于確定所述臨界段 是否是連續(xù)臨界段;以及耦合到所述臨界段邏輯的加載緩沖器,用于保存將與所述加載操作相關(guān)聯(lián)的加載條目,其中所述加載條目將包括存儲(chǔ)器更新字 段,所述存儲(chǔ)器更新字段響應(yīng)于所述臨界段邏輯確定所述臨界段不是 連續(xù)臨界段而保持第一值以指示將執(zhí)行對(duì)所述加載跟蹤字段的引退 前更新,并且響應(yīng)于所述臨界段邏輯確定所述臨界段是連續(xù)臨界段而 保持第二值以指示將執(zhí)行對(duì)所述加載跟蹤字段的引退后更新;以及耦合到所述集成電路的較高級(jí)的存儲(chǔ)器,用于在與所述地址相關(guān) 聯(lián)的存儲(chǔ)單元上存儲(chǔ)元素。
13、 根據(jù)權(quán)利要求12所述的系統(tǒng),其中所述臨界段邏輯包括 第一計(jì)數(shù)器,其響應(yīng)于^r測(cè)到所述開始CS操作而遞增并且響應(yīng)于引退所述結(jié)束CS操作而遞減;第二計(jì)數(shù)器,其響應(yīng)于引退所述開始CS操作而遞增并且響應(yīng)于 引退所述結(jié)束CS操作而遞減。
14、 根據(jù)權(quán)利要求13所述的系統(tǒng),其中響應(yīng)于在所述第一計(jì)數(shù) 器保持非零值時(shí)檢測(cè)到所述加載操作,將所述存儲(chǔ)器更新字段設(shè)置為所述第一值,并且響應(yīng)于所述第二計(jì)數(shù)器遞減到零值,將所述存儲(chǔ)器 更新字段設(shè)置為所述第二值。
15、 根據(jù)權(quán)利要求14所述的系統(tǒng),其中所述臨界段邏輯確定所 述臨界段是否是連續(xù)臨界段包括響應(yīng)于所述存儲(chǔ)器更新字段保持所 述第二值并且所述第二計(jì)數(shù)器保持非零值,確定所述臨界段是連續(xù)臨界段。
16、 根據(jù)權(quán)利要求15所述的系統(tǒng),其中所述開始CS操作是從由 開始事務(wù)操作、具有存儲(chǔ)意圖的加載(L—S—I)操作、以及組合的加 載和存儲(chǔ)操作組成的組中選擇的操作,并且所述結(jié)束CS操作是從由 結(jié)束事務(wù)操作、對(duì)應(yīng)于之前的I^S—I操作的存儲(chǔ)操作、以及組合的算 術(shù)和存儲(chǔ)操作組成的組中選擇的。
17、 根據(jù)權(quán)利要求15所述的系統(tǒng),其中所述加載緩沖器能夠保 存較早的加載條目,并且當(dāng)引用所述加栽條目作為所述加載緩沖器中 的頭較早加載條目時(shí),將執(zhí)行對(duì)所述存儲(chǔ)器行的引退后更新。
18、 根據(jù)權(quán)利要求15所述的系統(tǒng),其中對(duì)所述加載跟蹤字段的所述引退前和所述引退后更新將更新所述跟蹤字段以指示在所述臨 界段的執(zhí)行期間發(fā)生了從所述存儲(chǔ)器行的加載。
19、 一種方法,包括執(zhí)行對(duì)第 一訪問跟蹤字段的引退前更新,以指示在第一未決臨界 段的執(zhí)行期間訪問了對(duì)存儲(chǔ)器的第一行的訪問,所述存儲(chǔ)器的第一行 與所述第一訪問跟蹤字段相關(guān)聯(lián);以及執(zhí)行對(duì)第二訪問跟蹤字段的引退后更新,以指示在第二未決臨界 段的執(zhí)行期間訪問了對(duì)存儲(chǔ)器的第二行的訪問,所述存儲(chǔ)器的第二行 與所述第二訪問跟蹤字段相關(guān)聯(lián)。
20、 根據(jù)權(quán)利要求19所述的方法,還包括確定所述第一未決 臨界段是非連續(xù)未決臨界段;以及確定所述第二未決臨界段是連續(xù)未 決臨界段。
21、 根據(jù)權(quán)利要求20所述的方法,其中確定所述第一未決臨界 段是非連續(xù)未決臨界段包括響應(yīng)于分配開始臨界段操作而將前端計(jì)數(shù)遞增; 響應(yīng)于引退結(jié)束臨界段操作而將所述前端計(jì)數(shù)遞減; 響應(yīng)于在分配所述訪問后所述前端計(jì)數(shù)表示非零值,將對(duì)應(yīng)于與所述存儲(chǔ)器的第 一 行相關(guān)聯(lián)的訪問的訪問緩沖器條目中的字段更新為引退前值;以及響應(yīng)于在引退所述訪問后所述訪問緩沖器條目中的所述字段保持所述引退前值,確定所述第一未決臨界段是非連續(xù)臨界段。
22、 根據(jù)權(quán)利要求21所述的方法,其中保持所述第一值的所述 第一訪問緩沖器條目中的所述字段用于指示將響應(yīng)于分派所述第一 訪問而執(zhí)行對(duì)所述第 一訪問跟蹤字段的引退前更新。
23、 根據(jù)權(quán)利要求20所述的方法,其中確定所述第二未決臨界 段是連續(xù)未決臨界段包括響應(yīng)于引退開始臨界段操作而將后端計(jì)數(shù)遞增; 響應(yīng)于引退結(jié)束臨界段操作而將所述后端計(jì)數(shù)遞減; 響應(yīng)于所述后端計(jì)數(shù)遞減到零,將對(duì)應(yīng)于與所述存儲(chǔ)器的第二行響應(yīng)于在引退所述訪問之后所述訪問緩沖器條目中的所述字段 保持所述非訪問值并且所述后端計(jì)數(shù)保持非零值,確定所述第二未決 臨界段是連續(xù)臨界段。
全文摘要
本文描述一種用于進(jìn)行引退前和引退后混合試探性訪問跟蹤的方法和設(shè)備。通常在臨界段的執(zhí)行期間執(zhí)行訪問跟蹤,臨界段可以通過傳統(tǒng)的鎖定或事務(wù)存儲(chǔ)器指令定義。執(zhí)行對(duì)存儲(chǔ)器的引退前訪問以更新臨界段執(zhí)行期間的訪問的跟蹤信息。然而,當(dāng)引退之前的結(jié)束臨界段操作時(shí),對(duì)管線中的隨后的連續(xù)臨界段訪問執(zhí)行對(duì)跟蹤信息的引退后更新。
文檔編號(hào)G06F9/46GK101533363SQ200810190809
公開日2009年9月16日 申請(qǐng)日期2008年11月7日 優(yōu)先權(quán)日2007年11月7日
發(fā)明者G·S·謝菲爾, H·阿卡里, R·拉瓦, S·T·斯里尼瓦桑, S·雷金 申請(qǐng)人:英特爾公司