專利名稱:自適應(yīng)優(yōu)化的比較-交換操作的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及在由計(jì)算處理器執(zhí)行的代碼中實(shí)現(xiàn)的比較-交換操作。
背景技術(shù):
CMPXCHG(比較-交換)操作通常被用作構(gòu)成在代碼區(qū)域(即,指令、操作等)周圍 的臨界區(qū)的指令序列中的一個(gè)指令。它允許代碼區(qū)域原子地執(zhí)行。當(dāng)滿足兩個(gè)條件時(shí)指令 集可以被認(rèn)為是原子的第一,直到整個(gè)指令集完成,沒有其他進(jìn)程可以知道做出的改變, 以及第二,如果集合中的任何一個(gè)指令失敗那么整個(gè)指令集失敗。當(dāng)整個(gè)指令集失敗時(shí),執(zhí) 行指令的計(jì)算機(jī)系統(tǒng)的狀態(tài)恢復(fù)為指令中任何一個(gè)開始之前其所處的狀態(tài)。在一些實(shí)施例 中,CMPXCHG指令可以被認(rèn)為是具有臨界區(qū)的代碼區(qū)域的軟件定義的包裝(wrapper)。換言 之,可以將該包裝設(shè)計(jì)為軟件代碼,但是其不是硬件這樣實(shí)施意義上的包裝。CMPXCHG指令通過檢查以確保在原子集開始時(shí)從存儲(chǔ)器獲取的值在指令集的執(zhí) 行期間沒有被另一進(jìn)程修改來幫助原子地執(zhí)行該指令集。例如,如果存儲(chǔ)器中特定位置的 值被加載到位于原子指令集合的開頭的寄存器中,那么在該指令集完成之后可能有將新 (即,修改的)值加載回原始存儲(chǔ)器位置的請(qǐng)求(該修改的值是該指令集的結(jié)果)??梢栽谠又噶罴Y(jié)束時(shí)使用CMPXCHG指令檢查從特定存儲(chǔ)器位置原始加載的 值是否仍然在存儲(chǔ)器的該位置中(即,沒有被另一進(jìn)程或線程在原子指令集執(zhí)行期間的某 個(gè)時(shí)候修改)。如果原始值仍然在那里,那么CMPXCHG指令將新的值加載到存儲(chǔ)舊的值的該 特定存儲(chǔ)器位置,并且原子指令集成功地完成。如果原始值不在那里,這意味著另一進(jìn)程或 線程在原子指令集執(zhí)行期間修改了該值,那么CMPXCHG指令不將新的值加載到所述特定存 儲(chǔ)器位置,而是向系統(tǒng)通知該情況,并且作為通知的結(jié)果,可以在代碼中實(shí)現(xiàn)有條件跳轉(zhuǎn)以 跳轉(zhuǎn)到原子指令集的開始處以進(jìn)行另一成功完成的嘗試。
本發(fā)明以示例的方式來說明并且不受附圖限制,在附圖中,相似的標(biāo)號(hào)指示類似 的元件,并且其中圖1說明了用于CLMARK命令的高速緩存行標(biāo)簽的集合的實(shí)施例。圖2是說明關(guān)于是執(zhí)行完整的CMPXCHG微操作序列還是只執(zhí)行CMPXCHG操作的 STORE部分的FASTCMPXCHG指令決策樹的實(shí)施例的流程圖。圖3說明了包括能夠執(zhí)行CLMARK和FASTCMPXCHG指令的一個(gè)或多個(gè)CPU核心的 計(jì)算機(jī)系統(tǒng)的實(shí)施例。
具體實(shí)施例方式描述了實(shí)現(xiàn)自適應(yīng)優(yōu)化的比較-交換操作的機(jī)器可讀介質(zhì)、處理器以及系統(tǒng)的實(shí) 施例。引入了兩個(gè)指令CLMARK(高速緩存行標(biāo)記)和FASTCMPXCHG(快速比較-交換)。CLMARK指令在標(biāo)簽識(shí)別結(jié)構(gòu)中用微架構(gòu)暗示比特(hint bit)為特定的高速緩存 行加標(biāo)簽。當(dāng)被檢驗(yàn)時(shí),暗示比特能夠通知處理器中的執(zhí)行邏輯準(zhǔn)備執(zhí)行兩個(gè)方法中的 FASTCMPXCHG方法。具體地說,從高速緩存讀取的在原子指令序列中使用的數(shù)據(jù)會(huì)或不會(huì)被 篡改。如果數(shù)據(jù)在原子指令序列期間未被篡改(即,修改),那么FASTCMPXCHG指令退回到 標(biāo)準(zhǔn)CMPXCHG (比較-交換)指令,其包括LOAD-COMPARE-STORE (加載-比較-存儲(chǔ))的微 操作序列。另一方面,如果通過檢驗(yàn)標(biāo)簽識(shí)別結(jié)構(gòu)中的暗示比特,執(zhí)行邏輯可以確定在特定 高速緩存行中的數(shù)據(jù)明確地沒有被修改,那么可以執(zhí)行CMPXCHG的“快速”版本,其中唯一 使用的微操作是最后的STORE。因此,在許多實(shí)施例中,LOAD和COMPARE微操作可以被丟棄 而無需執(zhí)行,并且這可以加快處理器中的執(zhí)行效率。在以下說明書和權(quán)利要求中引用的本公開技術(shù)的“一個(gè)實(shí)施例”、“實(shí)施例”是指結(jié) 合該實(shí)施例而描述的具體特征、結(jié)構(gòu)或特性被包括在所公開技術(shù)的至少一個(gè)實(shí)施例中。因 此,在整個(gè)說明書不同位置中,短語“在一個(gè)實(shí)施例中”的多次出現(xiàn)不一定全部都是指同樣 的實(shí)施例。在以下說明書和權(quán)利要求中,可以使用術(shù)語“包括”和“包含”以及它們的派生 詞,并且意圖將它們用作彼此的同義詞。在當(dāng)今的多線程環(huán)境中,在執(zhí)行中間可以中斷正執(zhí)行原子指令集的線程。然后另 一線程可以被給予存儲(chǔ)器的控制并且潛在地改變一些或許多存儲(chǔ)的值。這僅是原子指令集 使用的在存儲(chǔ)器位置處的值在新的值有機(jī)會(huì)被重寫到同一存儲(chǔ)器位置之前可能已經(jīng)被修 改的原因的一個(gè)例子。實(shí)際的CMPXCHG指令的使用實(shí)質(zhì)上包括以下基本格式lock CMPXCHG [mem],rdx具體地說,CMPXCHG執(zhí)行流程導(dǎo)致發(fā)生以下操作1)將存儲(chǔ)在[mem](由mem地址指向的存儲(chǔ)器位置)的值加載(LOAD指令)到第 一寄存器(“第一”寄存器包括執(zhí)行邏輯針對(duì)嵌入在CMPXCHG中的LOAD微操作所使用的專 用寄存器)中。2)將第一寄存器中的值與eax/rax寄存器(eax還是rx取決于操作數(shù)的大小)進(jìn) 行比較(COMPARE微操作)。3)如果比較表明兩個(gè)值相等(即,存儲(chǔ)器中的值沒有改變),那么將rdx寄存器中 的值寫入(STORE微操作)到[mem]。4)如果比較表明兩個(gè)值不同(即,存儲(chǔ)器中的值已改變),那么將存儲(chǔ)在[mem]中 的當(dāng)前值加載到eax/rax中。lock(鎖定)前綴使得CMPXCHG指令本身變?yōu)樵又噶?。這是推薦的,因?yàn)?CMPXCHG指令被分解成上文描述的L0AD-C0MPARE-ST0RE微操作組合。整個(gè)C0MXCHG指令成功還是失敗基于上文步驟2中的COMPARE指令的結(jié)果。用于 檢查CMPXCHG成功的簡單方法是如果它成功那么零標(biāo)志(ZF)被設(shè)置,如果沒有成功那么ZF 被清零。微操作集合(L0AD-C0MPARE-ST0RE)在CMPXCHG指令本身之前的某個(gè)時(shí)刻以額外 的LOAD指令作為開端,因?yàn)樵谠撛又噶罴_始時(shí),CMPXCHG指令需要將[mem]處的值初 始LOAD到eax/rax寄存器中。整個(gè)原子指令集的例子可以類似于以下代碼try_again mov rax, [mem];將位置[mem]處的存儲(chǔ)器中的值加載到rax中
mov rdx, rax ;將 rax 中的值力口載至Ll rdx**插入代碼以將rdx操控為(潛在地)新的值**lock cmpxchg[mem],rdx ;如果rax中的值仍然等于在位置[mem]處的存儲(chǔ)器中的 值,那么將rdx加載到在位置[mem]處的存儲(chǔ)器中jnz try_again ;如果cmpxchg成功,那么ZF = 1,否則ZF = 0,從而跳轉(zhuǎn),如果未 成功,則零操作將導(dǎo)致另一嘗試當(dāng)使用CMPXCHG指令時(shí),使用的L0AD-C0MPARE-ST0RE微操作組合是串行依賴的 流。由于該串行流的依賴性,完成CMPXCHG指令所需微操作的數(shù)量可能是很大的。如前文所述,CMPXCHG指令通常用作構(gòu)成在代碼區(qū)域周圍的臨界區(qū)的指令序列中 的一個(gè)指令,并且特別用于確定另一進(jìn)程/線程是否對(duì)討論中的在特定存儲(chǔ)器位置處的值 進(jìn)行了修改。如果討論中的核心內(nèi)沒有其他的進(jìn)程/線程中斷過原子指令集的代碼流并且 如果沒有運(yùn)行不同代碼的其他核心監(jiān)聽討論中的高速緩存行,那么在該存儲(chǔ)器位置處的值 將沒有改變。因此,如果可以在甚至不用看在存儲(chǔ)器位置處的值的情況下預(yù)先知道沒有同 一核心或另一核心中的其他進(jìn)程/線程修改了在該存儲(chǔ)器位置處的存儲(chǔ)器內(nèi)容,那么一般 將不需要執(zhí)行CMPXCHG指令的LOAD和COMPARE部分。相反,如果通過其他的方法,可以確 定對(duì)在存儲(chǔ)器位置處的值沒有外部(即,其他進(jìn)程/線程/核心)的影響,那么CMPXCHG指 令唯一需要的部分將是將新的值返回到該存儲(chǔ)器位置的最后STORE微操作。所以,在許多實(shí)施例中,可以實(shí)現(xiàn)兩個(gè)新的指令以提供標(biāo)準(zhǔn)CMPXCHG微操作組合 中通常未必執(zhí)行的COMPARE-STORE部分。換言之,在多數(shù)情況下,新指令將允許僅執(zhí)行組合 的STORE部分。在許多實(shí)施例中,這兩個(gè)指令可以被稱為CLMARK指令和FASTCMPXCHG指令。第一 新指令是CLMARK。CLMARK指令可以具有以下特定的格式CLMARK8B memMem字段包括落在一個(gè)高速緩存行內(nèi)的基礎(chǔ)存儲(chǔ)器地址。8B字段指示考慮從mem 地址開始有多少字節(jié)用于FASTCMPXCHG指令。在許多實(shí)施例中,可以有多個(gè)CLMARK指令的 版本,其具有的8B字段支持所有2的冪的字節(jié)大小,直至CPU(中央處理單元)的高速緩存 行大小。CLMARK操作在mem位置引用的目標(biāo)高速緩存行上設(shè)置需要的唯一識(shí)別標(biāo)簽,來指 示原子序列的預(yù)期的所有權(quán)。例如,可以在唯一識(shí)別標(biāo)簽中使用“有效”比特以表明該特定 mem位置的高速緩存行中的數(shù)據(jù)仍然有效。此外,如果CPU支持每個(gè)核心多個(gè)硬件上下文, 那么唯一識(shí)別標(biāo)簽還可以包括硬件上下文ID。唯一識(shí)別標(biāo)簽中的另一個(gè)額外的可能性是可 以包括用于每一個(gè)高速緩存行的比特-屏蔽(bit-mask)(或潛在地在存儲(chǔ)于CPU內(nèi)的專門 小表中)。針對(duì)高速緩存行中的每一個(gè)字節(jié),比特-屏蔽可以使用單個(gè)比特。該比特-屏蔽 可以用來最小化在共享數(shù)據(jù)結(jié)構(gòu)中的誤共享沖突。如果CPU不支持CLMARK指令,那么核心中的執(zhí)行邏輯可以僅用“無操作”(NOP)指 令取代每一個(gè)CLMARK。該CLMARK — NOP替換是將CLMARK標(biāo)簽比特認(rèn)為是暗示比特的原 因。此外,實(shí)現(xiàn)CLMARK/FASTCMP)(CHG指令的系統(tǒng)也可以隨時(shí)進(jìn)行CLMARK —NOP替換。關(guān)于 能夠使用CLMARK/FASTCMPXCHG的系統(tǒng)替代地決定使用CMPXCHG的原因,可以有許多例子。 例如,內(nèi)部共享資源已被耗盡、發(fā)生了特定事件,以及設(shè)置了調(diào)試/測試寄存器等等原因。
圖1說明了用于CLMARK命令的高速緩存行標(biāo)簽集合的實(shí)施例。如所陳述的,每一個(gè)標(biāo)簽可以包括一個(gè)或多個(gè)以下結(jié)構(gòu)部件高速緩存行標(biāo)簽ID 100、有效比特102、冊(cè)上下文ID 104,以及比特-屏蔽106。圖1中說明的所有標(biāo)簽信息可 以作為整體被稱為標(biāo)簽識(shí)別結(jié)構(gòu)。在許多實(shí)施例中,比特-屏蔽基于每個(gè)字節(jié)屏蔽高速緩 存行,其中每個(gè)字節(jié)具有用于屏蔽的其自己的比特。因此,如果高速緩存行中有N個(gè)字節(jié), 那么在用于字節(jié)0到N-I的比特-屏蔽中存在多個(gè)比特。當(dāng)執(zhí)行CLMARK指令時(shí),mem基地 址和8B大小字段用于設(shè)置適合的比特-屏蔽值,其為即將到來的FASTCMPXCHG序列涉及的 高速緩存行中的那些字節(jié)加標(biāo)志。在可替代的實(shí)施例中,可以不使用每字節(jié)比特-屏蔽字段。當(dāng)不使用每字節(jié)比 特-屏蔽字段時(shí),單個(gè)比特可以用于整個(gè)高速緩存行來指示CLMARK/FASTCMPXCHG指令中涉 及的高速緩存行。FASTCMPXCHG是第二新指令。FASTCMPXCHG指令可以具有以下特定的格式lock FASTCMPXCHG8B[mem],testval, newval以與原始CMPXCHG指令不同的方式給出FASTCMPXCHG指令,以避免遺留代碼問題。 換言之,如果CMPXCHG指令被更新以像FASTCMPXCHG指令那樣操作,則使用CMPXCHG的遺留 代碼可能不包括正確的格式或可能有意外事件,因此使用兩個(gè)單獨(dú)的指令。遺留和新的指 令可以或可以不共享執(zhí)行單元。但是,考慮到兩個(gè)指令之間功能復(fù)制的量,在遺留的和新的 指令間可以高效地共享執(zhí)行單元。FASTCMPXCHG [mem]字段指向存儲(chǔ)器中位置的基本存儲(chǔ)器地址,其對(duì)應(yīng)于存儲(chǔ)要用 于比較和交換目的的值的高速緩存行。與上文中CLMARK8B字段的目的對(duì)應(yīng)地,該8B字段 指示考慮從[mem]地址開始有多少字節(jié)用于FASTCMPXCHG指令。在許多實(shí)施例中,可以有 多個(gè)FASTCMPXCHG指令的版本,其具有的8B字段支持所有2的冪的字節(jié)大小,直至CPU的 高速緩存行大小。如上文所詳述的,F(xiàn)ASTCMPXCHG指令分解為單獨(dú)的L0AD-C0MPARE-ST0RE μ op (微 操作)階段,但是在LOAD之前可以存在分支。內(nèi)部分支確定是否順序地執(zhí)行全部 L0AD-C0MPARE-ST0RE μ op序列,或是否跳過LOAD-COMPARE部分并且實(shí)際上只執(zhí)行STORE。 FASTCMPXCHG指令中的分支基于多個(gè)決策來確定要采取哪條路徑。因此,在任何一種情況 下,F(xiàn)ASTCMPXCHG操作可以適于在執(zhí)行代碼的硬件上的功能。圖2是說明關(guān)于是執(zhí)行完整的CMPXCHG微操作序列還是只執(zhí)行CMPXCHG操作的 STORE部分的FASTCMPXCHG指令決策樹的實(shí)施例的流程圖。確定決策樹中在哪個(gè)方向繼續(xù)進(jìn)行的處理邏輯可以包括硬件(例如,執(zhí)行單元 電路)、固件(例如,通用CPU微代碼),或硬件和固件二者的組合。轉(zhuǎn)向圖2,處理邏輯 從接收?qǐng)?zhí)行管線中的FASTCMPXCHG操作開始(處理框200)。處理邏輯然后查找包括與 FASTCMPXCHG指令相關(guān)聯(lián)的微架構(gòu)暗示比特的高速緩存行標(biāo)簽(處理框20 。如果硬 件能夠處理FASTCMPXCHG,則對(duì)于每一個(gè)高速緩存行將存在可以在CLMARK之前使用的標(biāo) 簽。如果硬件不具有該標(biāo)簽,那么不支持CLMARK和FASTCMPXCHG。所以,處理邏輯然后 將僅使用[mem]、testval和newval參數(shù),來執(zhí)行標(biāo)準(zhǔn)CMPXCHG指令以替代代碼中列出的 FASTCMPXCHG 指令(處理框 212)。否則,如果存在包含微架構(gòu)暗示比特的標(biāo)簽,那么處理邏輯進(jìn)行檢查以查看暗示比特對(duì)于[mem]地址是否有效(處理框204)。處理邏輯可以通過檢查匹配[mem]地址的 高速緩存行標(biāo)簽的“有效”比特(如圖1中所述)來確定該比特是否有效。CLMARK指令可 以將該比特設(shè)置為“有效”。如果沒有設(shè)置“有效”比特,那么該高速緩存行中的數(shù)據(jù)對(duì)于 FASTCMPXCHG指令不是有效的數(shù)據(jù),并且處理邏輯然后使用[mem] ,testval和newval參數(shù) 執(zhí)行正常的CMPXCHG指令(處理框212)。如果設(shè)置了 “有效”比特,那么表明在[mem]地 址處的高速緩存行中的數(shù)據(jù)是有效的,并且處理邏輯然后將確定當(dāng)前硬件上下文是否與高 速緩存行標(biāo)簽中的微架構(gòu)暗示比特中的硬件上下文ID( S卩,圖1中暗示比特104)匹配(處 理框206)。如果硬件不支持多個(gè)硬件上下文,那么冊(cè)上下文ID 104暗示比特將始終相同 并且處理的該部分將始終成功。如果支持多個(gè)硬件上下文,那么HW上下文ID104將需要匹 配,以使得處理的該部分成功。如果冊(cè)上下文ID沒有匹配,那么處理邏輯使用[mem]、testval和newval參數(shù) 執(zhí)行正常的CMPXCHG指令(處理框212)。另一方面,如果冊(cè)上下文ID匹配或冊(cè)不支持 多個(gè)上下文,那么處理邏輯確定是否正確地設(shè)置了比特-屏蔽(處理框208)。處理邏輯將 CLMARK比特-屏蔽與FASTCMPXCHG比特-屏蔽進(jìn)行比較。如果這些比特-屏蔽不匹配,那 么處理邏輯使用[mem]、testval和newval參數(shù)執(zhí)行正常的CMPXCHG指令(處理框212)。 否則,如果比特-屏蔽匹配,那么處理邏輯然后可以繼續(xù)前進(jìn)并且執(zhí)行新的FASTCMPXCHG指 令,其使得在不執(zhí)行CMPXCHG指令的LOAD-COMPARE部分的情況下直接存儲(chǔ)(STORE)新的 值。如所描述的,如果圖2中決策樹的任何分叉失敗,那么正常的CMPXCHG始終作為退 回情況而被執(zhí)行。這確保代碼的向前進(jìn)行。在以下任何一個(gè)條件下,可以針對(duì)給定的高速緩存行對(duì)微架構(gòu)暗示比特(圖1中 詳細(xì)描述)進(jìn)行清零和設(shè)置為無效1)在高速緩存行上成功地執(zhí)行了 FASTCMPXCHG指令。2)從高速緩存回收具有暗示比特的高速緩存行。3)以該高速緩存行為目標(biāo)的另一硬件上下文執(zhí)行CLMARK。4)由任意硬件上下文對(duì)該高速緩存行進(jìn)行寫入。5)發(fā)生中斷。6)在CLMARK發(fā)生時(shí)與FASTCMPXCHG指令成功完成之前的時(shí)間期間發(fā)生任何硬件故障。在其他實(shí)施例中,當(dāng)FASTCMPXCHG指令成功執(zhí)行時(shí)可以對(duì)微架構(gòu)暗示比特清 零。在以下情況下不對(duì)暗示比特清零可以更高效只要指令對(duì)相同數(shù)據(jù)進(jìn)行操作,后續(xù) FASTCMPXCHG操作可以在沒有與CLMARK指令相關(guān)聯(lián)的開銷的情況下發(fā)生。在使用比特-屏蔽的許多實(shí)施例中,上文中列出的用于使高速緩存行暗示比特清 零和無效的規(guī)則可以被相應(yīng)地修改,以考慮以下高速緩存情形盡管高速緩存行可能受影 響,但是由CLMARK加標(biāo)志的字節(jié)沒有受特別地影響。此外,lock前綴還可以用于FASTCMPXCHG指令,以將其變?yōu)樵又噶睢_@是推薦 的,因?yàn)槿绻ㄟ^除去CMPXCHG指令中的LOAD-COMPARE部分未使FASTCMPXCHG指令成功進(jìn) 行,那么要執(zhí)行完整的L0AD-C0MPARE-ST0RE微操作組合,因此需要鎖定,正如原始CMPXCHG 指令所需的一樣。
下面描述了執(zhí)行CLMARK-FASTCMPXCHG指令的CPU的實(shí)施例。在該實(shí)施例中,CPU 包括能夠用需要的微架構(gòu)暗示比特為高速緩存加標(biāo)志的一個(gè)或多個(gè)核心。整個(gè)數(shù)量的樣本 代碼列出如下try_again clmark[mem];設(shè)定[mem]處的高速緩存行的暗示比特mov rax, [mem];將位置[mem]處的存儲(chǔ)器中的值加載到rax中mov rdx, rax ;將 rax 中的值力口載至Ll rdxinc rdx ; 1^ rdxlock fastcmpxchg[mem],rdx ;如果圖2中關(guān)于[mem]處的高速緩存行的暗示比特 的處理框202、204、206以及208都為真,那么將rdx存儲(chǔ)到[mem]處的存儲(chǔ)器中,否則,執(zhí) 行標(biāo)準(zhǔn)cmpxchgjnz try_again ;如果 fastcmpxchg 成功,那么 ZF = 1,否則 ZF = 0,從而跳轉(zhuǎn),如 果未成功,則零指令將導(dǎo)致另一嘗試圖3說明了包括能夠執(zhí)行CLMARK和FASTCMPXCHG指令的一個(gè)或多個(gè)CPU核心的 計(jì)算機(jī)系統(tǒng)的實(shí)施例。示出了計(jì)算機(jī)系統(tǒng)300。計(jì)算機(jī)系統(tǒng)可以是臺(tái)式機(jī)、服務(wù)器、工作站、膝上型計(jì)算 機(jī)、手持設(shè)備、電視機(jī)頂盒、媒體中心、游戲控制臺(tái)、集成系統(tǒng)(例如在汽車中),或其他類型 的計(jì)算機(jī)系統(tǒng)。在若干實(shí)施例中,計(jì)算機(jī)系統(tǒng)300包括一個(gè)或多個(gè)中央處理單元(CPU)。盡 管在許多實(shí)施例中潛在地有許多CPU,但是為了清楚在圖3中示出的實(shí)施例中只示出了兩 個(gè)CPU(302和304)。CPU 302和304可以是英特爾 公司的CPU或另外品牌的CPU。每個(gè) CPU包括一個(gè)或多個(gè)核心。在示出的實(shí)施例中,CPU 302包括核心AO (306)、核心Al (308)、 核心A2(310)和核心A3 (312),并且CPU 304包括核心BO (314)、核心Bl (316)、核心B2(318) 以及核心B3 (320)。在其他的實(shí)施例中,CPU 302和304的每一個(gè)可以具有多于或少于圖3中示出的每 一個(gè)具有的四個(gè)核心的多個(gè)核心。在許多實(shí)施例中,每一個(gè)核心(例如核心A0(306))包括 內(nèi)部功能塊,例如一個(gè)或多個(gè)執(zhí)行單元、收回單元、通用和專用寄存器集合等。如果圖3中 示出的核心是多線程的或超線程的,那么每一個(gè)硬件線程也可以被認(rèn)為是核心。CPU 302和304的每一個(gè)還可以分別包括一個(gè)或多個(gè)高速緩存,例如末級(jí)高速緩 存(LLC) 322和324。在沒有示出的許多實(shí)施例中,實(shí)現(xiàn)了不同于高速緩存322和324的另 外的高速緩存,其中在每一個(gè)核心中的執(zhí)行單元和存儲(chǔ)器之間存在多級(jí)高速緩存。在不同 的實(shí)施例中,可以以不同的方式分配高速緩存。在不同的實(shí)施例中,高速緩存322和324中 每一個(gè)可以是多個(gè)不同大小中的一個(gè)。例如,高速緩存322和3M每一個(gè)可以是8兆字節(jié) (MB)高速緩存、16MB高速緩存等。此外,在不同的實(shí)施例中,高速緩存可以是直接映射高速 緩存、全相聯(lián)高速緩存、多路組相聯(lián)高速緩存(multi-way set-associative cache),或具 有其他類型映射的高速緩存。每一個(gè)高速緩存可以包括在各個(gè)CPU中所有核心之間共享的 一個(gè)大部分,或可以被分為數(shù)個(gè)單獨(dú)的功能片(例如,每個(gè)核心一片)。每個(gè)高速緩存還可 以包括在所有核心之間共享的一個(gè)部分,和作為每核心單獨(dú)的功能片的數(shù)個(gè)其他部分。在許多實(shí)施例中,CPU 302和304的每一個(gè)包括其自己的系統(tǒng)存儲(chǔ)器控制器(分 別為3 和328),用于提供與系統(tǒng)存儲(chǔ)器330和332進(jìn)行通信的接口。在沒有示出的其他實(shí)施例中,存儲(chǔ)器控制器330和332可以是分立的設(shè)備或被集成到計(jì)算機(jī)系統(tǒng)300中的其 他設(shè)備內(nèi)。系統(tǒng)存儲(chǔ)器330和332可以包括動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)(例如一種雙倍數(shù)據(jù) 速率(DDR)DRAM)、非易失性存儲(chǔ)器(例如閃速存儲(chǔ)器、相變存儲(chǔ)器(PCM)),或另外類型的存 儲(chǔ)器技術(shù)。系統(tǒng)存儲(chǔ)器330和332可以是存儲(chǔ)分別由CPU 302和304操作的數(shù)據(jù)和指令的 通用存儲(chǔ)器。此外,計(jì)算機(jī)系統(tǒng)300中還可以存在能夠?qū)ο到y(tǒng)存儲(chǔ)器進(jìn)行讀取和寫入的其 他可能的設(shè)備,例如具備直接存儲(chǔ)器存取(DMA)能力的1/0(輸入/輸出)設(shè)備。將每個(gè)CPU與每一個(gè)各自的系統(tǒng)存儲(chǔ)器耦合起來的鏈路(S卩,總線、互連等)可以 包括能夠傳輸數(shù)據(jù)、地址、控制以及時(shí)鐘信息的一個(gè)或多個(gè)光、金屬或其他線(即,線路)。此外,CPU 302和304可以分別使用P2P接口電路334和336通過點(diǎn)到點(diǎn)(P2P) 接口與彼此進(jìn)行通信。P2P接口可以包括高速雙向串行鏈路、分離的多對(duì)單向串行鏈路,或 并行實(shí)現(xiàn)的鏈路等等。除了彼此通信,CPU 302和304還可以通過相同類型的P2P接口與 高性能接口復(fù)合體338進(jìn)行通信。具體地,CPU 302可以通過在CPU側(cè)的P2P接口電路340 和在復(fù)合體338側(cè)的P2P接口電路342與復(fù)合體338進(jìn)行通信,并且CPU 304可以通過在 CPU側(cè)的P2P接口電路344和在復(fù)合體338側(cè)的P2P接口電路346與復(fù)合體338進(jìn)行通信。高性能接口復(fù)合體338可以為需要高數(shù)據(jù)吞吐量的任何子系統(tǒng)提供接口。例如, 高性能圖形子系統(tǒng)348可以通過I/O接口 350與CPU進(jìn)行通信,并且高性能通信子系統(tǒng)352 可以通過I/O接口 3M進(jìn)行通信。高性能接口復(fù)合體338還可以包括用于與使用I/O接口 360的I/O集線器復(fù)合體358進(jìn)行通信的I/O接口 356。用于計(jì)算機(jī)系統(tǒng)300中示出的每 一個(gè)I/O接口的電路可以是相同的或可以是不同的。例如,將高性能圖形子系統(tǒng)348耦合 到復(fù)合體338的I/O接口 350可以包括16通道外圍組件接口(PCI)-快速協(xié)議鏈路,而將 高性能接口復(fù)合體338耦合到I/O復(fù)合體358的I/O接口 356可以使用不同的協(xié)議。I/O集線器復(fù)合體358可以在耦合到一個(gè)或多個(gè)I/O互連(即,總線)的設(shè)備與 CPU 302和304之間提供通用通信接口。例如,I/O集線器復(fù)合體358可以包括主控制器 362和364。每一個(gè)主控制器可以提供允許I/O設(shè)備通信地耦合到計(jì)算機(jī)系統(tǒng)300的其余 部件的接口。例如,一個(gè)I/O集線器復(fù)合體可以是通用串行總線(USB)集線器復(fù)合體,而另 一個(gè)可以是遺留的PCI集線器復(fù)合體。示出的I/O設(shè)備366和370分別耦合到I/O主控制 器362和364。在許多實(shí)施例中,可以存在耦合到I/O主控制器(例如I/O主控制器362) 的大容量存儲(chǔ)設(shè)備368。大容量存儲(chǔ)設(shè)備368可以是硬盤驅(qū)動(dòng)器、固態(tài)驅(qū)動(dòng)器、相變存儲(chǔ)器 陣列,或另外形式的大容量儲(chǔ)存器。此外,可以存在與其他遺留的總線有接口的一個(gè)或多個(gè) 橋。例如,橋372可以耦合到I/O主控制器接口,并且該橋可以提供到在其上耦合I/O設(shè)備 374的另一協(xié)議互連/總線的協(xié)議轉(zhuǎn)換。能夠成功地執(zhí)行CLMARK和FASTCMPXCHG指令的處理邏輯的至少一個(gè)實(shí)施例可 以存在于計(jì)算機(jī)系統(tǒng)300的每一個(gè)核心中。該邏輯由分別位于核心A0(306)、Al(308)、 A2(310) ^P A3 (312)中的處理邏輯400、402、404和406表示,以及由分別位于BO (314)、 Bl (316), B2 (318)和B3 (320)中的處理邏輯408、410、412和414表示。此外,在其他實(shí)施 例中,能夠成功執(zhí)行CLMARK和FASTCMPXCHG指令的處理邏輯可以遍及圖3中說明的若干電 路、邏輯單元或設(shè)備而分布。盡管沒有說明,但是使用CPU、總線、存儲(chǔ)器等的不同布局的其他計(jì)算機(jī)系統(tǒng)實(shí)現(xiàn)對(duì)于實(shí)現(xiàn)本發(fā)明而言也是完全可接受的。此外,在操作期間,包括CLMARK和FASTCMPXCHG指令的代碼在不同時(shí)間可以駐留 在計(jì)算機(jī)系統(tǒng)300中的一個(gè)或多個(gè)位置。例如,實(shí)現(xiàn)新的指令的代碼416可以駐留(S卩,被 存儲(chǔ)在)系統(tǒng)存儲(chǔ)器330或332中(代碼416A或代碼416B)、高速緩存322或324中(代 碼416C或代碼416D)、大容量存儲(chǔ)設(shè)備368中(代碼416E),或計(jì)算機(jī)系統(tǒng)300內(nèi)部或外部 的其他地方。因此,描述了用于實(shí)現(xiàn)自適應(yīng)優(yōu)化的比較-交換操作的機(jī)器可讀介質(zhì)、處理器以 及系統(tǒng)的實(shí)施例。參考其具體的示例性實(shí)施例描述了這些實(shí)施例。對(duì)于從本公開獲益的 人員將顯而易見的是,可以在不脫離本文描述的實(shí)施例的寬泛精神和范圍的情況下,對(duì)這 些實(shí)施例進(jìn)行各種修改和改變。本說明書和附圖應(yīng)當(dāng)相應(yīng)地被認(rèn)為是說明性的而非限制性 的。
權(quán)利要求
1.一種機(jī)器可讀介質(zhì),其上存儲(chǔ)有第一指令,如果由機(jī)器執(zhí)行,所述第一指令使得所述 機(jī)器執(zhí)行方法,所述方法包括執(zhí)行快速比較-交換操作; 存儲(chǔ)所述快速比較-交換操作的結(jié)果。
2.根據(jù)權(quán)利要求1所述的機(jī)器可讀介質(zhì),其中,所執(zhí)行的方法還包括 在執(zhí)行所述快速比較-交換操作之前執(zhí)行高速緩存行標(biāo)記操作。
3.根據(jù)權(quán)利要求2所述的機(jī)器可讀介質(zhì),其中,所執(zhí)行的方法還包括響應(yīng)于所述快速比較-交換操作成功,用所述快速比較-交換操作的第一微操作執(zhí)行 所述結(jié)果的存儲(chǔ)。
4.根據(jù)權(quán)利要求2所述的機(jī)器可讀介質(zhì),其中,所執(zhí)行的方法還包括 響應(yīng)于所述快速比較-交換操作失敗,執(zhí)行比較-交換操作。
5.根據(jù)權(quán)利要求2所述的機(jī)器可讀介質(zhì),其中,所述高速緩存行標(biāo)記操作包括存儲(chǔ)器 地址位置的參數(shù)。
6.根據(jù)權(quán)利要求5所述的機(jī)器可讀介質(zhì),其中,所述高速緩存行標(biāo)記操作還包括設(shè)置高速緩存行的標(biāo)簽識(shí)別結(jié)構(gòu)中的有效比特,所述高速緩存行存儲(chǔ)從所述存儲(chǔ)器地 址位置處的存儲(chǔ)器獲取的數(shù)據(jù)。
7.根據(jù)權(quán)利要求6所述的機(jī)器可讀介質(zhì),其中,所述高速緩存行標(biāo)記操作還包括 設(shè)置所述標(biāo)簽識(shí)別結(jié)構(gòu)中的比特-屏蔽,所述比特-屏蔽指示所述高速緩存行的哪些比特與所述高速緩存行標(biāo)記操作相關(guān)。
8.根據(jù)權(quán)利要求7所述的機(jī)器可讀介質(zhì),其中,所述高速緩存行標(biāo)記操作還包括設(shè)置所述標(biāo)簽識(shí)別結(jié)構(gòu)中的硬件上下文識(shí)別值,所述硬件上下文識(shí)別值指示執(zhí)行所述 高速緩存行標(biāo)記操作的特定硬件上下文。
9.根據(jù)權(quán)利要求8所述的機(jī)器可讀介質(zhì),還包括響應(yīng)于以下條件而執(zhí)行成功的快速比較-交換操作 確認(rèn)設(shè)置了所述有效比特;確認(rèn)在高速緩存行標(biāo)記比特-屏蔽和快速比較-交換比特屏蔽之間正確地設(shè)置了所述 比特-屏蔽;以及確認(rèn)高速緩存行標(biāo)記硬件識(shí)別上下文與快速比較-交換硬件識(shí)別上下文相匹配。
10.根據(jù)權(quán)利要求2所述的機(jī)器可讀介質(zhì),其中,所執(zhí)行的方法還包括響應(yīng)于確認(rèn)所述機(jī)器不支持高速緩存行標(biāo)記指令,用無操作指令替換所述高速緩存行 標(biāo)記指令。
11.根據(jù)權(quán)利要求6所述的機(jī)器可讀介質(zhì),其中,所執(zhí)行的方法還包括當(dāng)以下條件之一出現(xiàn)時(shí)將所述有效比特清零快速比較-交換操作成功地執(zhí)行、高速 緩存行被回收、對(duì)所述高速緩存行執(zhí)行來自另一硬件上下文的高速緩存行標(biāo)記操作、任何 硬件上下文對(duì)所述高速緩存行進(jìn)行寫入、出現(xiàn)中斷,以及在高速緩存行標(biāo)記序列進(jìn)行期間 出現(xiàn)任何硬件故障。
12.一種處理器,包括用于解碼快速比較-交換指令的解碼邏輯;以及用于在所述快速比較-交換指令被解碼之后執(zhí)行所述快速比較-交換指令的執(zhí)行邏輯。
13.根據(jù)權(quán)利要求12所述的處理器,還包括 用于解碼高速緩存行標(biāo)記指令的解碼邏輯;以及用于在所述高速緩存行標(biāo)記指令被解碼之后執(zhí)行所述高速緩存行標(biāo)記指令的執(zhí)行邏輯。
14.根據(jù)權(quán)利要求13所述的處理器,其中,所述執(zhí)行邏輯還可操作來 存儲(chǔ)所述快速比較-交換操作的結(jié)果。
15.根據(jù)權(quán)利要求14所述的處理器,其中,響應(yīng)于所述快速比較-交換操作成功,使用 作為第一微操作的存儲(chǔ)微操作來存儲(chǔ)所述結(jié)果,所述第一微操作作為所述快速比較-交換 操作的一部分而被執(zhí)行。
16.根據(jù)權(quán)利要求13所述的處理器,其中,所述執(zhí)行邏輯還可操作來響應(yīng)于所述快速比較-交換操作失敗,將所述快速比較-交換指令執(zhí)行為比較-交換 指令。
17.根據(jù)權(quán)利要求13所述的處理器,其中,所述處理器包括用于存儲(chǔ)存儲(chǔ)器地址位置 的寄存器。
18.根據(jù)權(quán)利要求17所述的處理器,其中,所述執(zhí)行邏輯還可操作來設(shè)置高速緩存行的標(biāo)簽識(shí)別結(jié)構(gòu)中的有效比特,所述高速緩存行存儲(chǔ)從所述存儲(chǔ)器地 址位置處的存儲(chǔ)器獲取的數(shù)據(jù)。
19.根據(jù)權(quán)利要求18所述的處理器,其中,所述執(zhí)行邏輯還可操作來設(shè)置所述標(biāo)簽識(shí)別結(jié)構(gòu)中的比特-屏蔽,所述比特-屏蔽指示所述高速緩存行的哪些 比特與所述高速緩存行標(biāo)記操作相關(guān)。
20.根據(jù)權(quán)利要求19所述的處理器,其中,所述執(zhí)行邏輯還可操作來設(shè)置所述標(biāo)簽識(shí)別結(jié)構(gòu)中的硬件上下文識(shí)別值,所述硬件上下文識(shí)別值指示執(zhí)行所述 高速緩存行標(biāo)記操作的特定硬件上下文。
21.根據(jù)權(quán)利要求20所述的處理器,其中,所述執(zhí)行邏輯還可操作來 確定是否設(shè)置了所述有效比特;確定是否在高速緩存行標(biāo)記比特-屏蔽和快速比較-交換比特屏蔽之間正確地設(shè)置了 所述比特-屏蔽;以及確定高速緩存行標(biāo)記硬件識(shí)別上下文與快速比較-交換硬件識(shí)別上下文是否匹配; 其中,響應(yīng)于所有確定被確認(rèn),所述執(zhí)行邏輯可操作來執(zhí)行成功的快速比較-交換操作。
22.根據(jù)權(quán)利要求13所述的處理器,其中,所述執(zhí)行邏輯還可操作來響應(yīng)于確認(rèn)所述處理器不支持所述高速緩存行標(biāo)記指令,用無操作指令替換所述高速 緩存行標(biāo)記指令。
23.—種系統(tǒng),包括存儲(chǔ)器,用于存儲(chǔ)高速緩存行標(biāo)記指令; 處理器,用于執(zhí)行所述高速緩存行標(biāo)記指令; 所述存儲(chǔ)器用于存儲(chǔ)快速比較-交換指令;以及所述處理器用于執(zhí)行所述快速比較-交換指令,其中,當(dāng)所述快速比較-交換指令成功時(shí),所述快速比較-交換指令的執(zhí)行產(chǎn)生結(jié)果。
24.根據(jù)權(quán)利要求23所述的系統(tǒng),其中,響應(yīng)于所述快速比較-交換操作成功,使用作 為第一微操作的存儲(chǔ)微操作來存儲(chǔ)所述結(jié)果,所述第一微操作作為所述快速比較-交換操 作的一部分而被執(zhí)行。
25.根據(jù)權(quán)利要求23所述的系統(tǒng),其中,所述執(zhí)行邏輯還可操作來響應(yīng)于所述快速比較-交換操作失敗,將所述快速比較-交換指令執(zhí)行為比較-交換 指令。
全文摘要
公開了執(zhí)行快速比較-交換操作的技術(shù)。更具體地說,描述了實(shí)現(xiàn)快速比較-交換操作以及高速緩存行標(biāo)記操作的機(jī)器可讀介質(zhì)、處理器和系統(tǒng),所述高速緩存行標(biāo)記操作使得能夠進(jìn)行所述快速比較-交換操作。
文檔編號(hào)G06F9/30GK102103482SQ20101059971
公開日2011年6月22日 申請(qǐng)日期2010年12月17日 優(yōu)先權(quán)日2009年12月18日
發(fā)明者A·T·福賽思, E·格羅霍夫斯基, J·B·弗萊曼 申請(qǐng)人:英特爾公司