專利名稱:用于預(yù)測(cè)執(zhí)行無(wú)競(jìng)爭(zhēng)的鎖定指令的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及采用存儲(chǔ)器鎖定指令(對(duì)存儲(chǔ)器執(zhí)行讀_修改_寫的原子操作) 的微處理器,更具體地,涉及希望采用可以在無(wú)序執(zhí)行架構(gòu)中執(zhí)行的存儲(chǔ)器鎖定指令的微 處理器。
背景技術(shù):
現(xiàn)代的微處理器可以在其架構(gòu)中支持無(wú)序執(zhí)行。各指令可各自被解碼為一組對(duì)應(yīng) 的微操作,然后在執(zhí)行前被存儲(chǔ)到重新排序緩沖器中。調(diào)度器可確定哪些微操作已準(zhǔn)備好 被執(zhí)行,并可以不按嚴(yán)格的程序順序或“無(wú)序地”發(fā)出上述微操作。當(dāng)微操作準(zhǔn)備引退時(shí), 它們可以按程序順序引退,因此,看上去它們是按程序順序執(zhí)行的。在之前的無(wú)序處理器中造成問(wèn)題的一個(gè)指令族是鎖定指定族。該鎖定指令通常斷 言某個(gè)信號(hào)或采用執(zhí)行原子存儲(chǔ)器業(yè)務(wù)處理的某過(guò)程,也就是說(shuō),它鎖定存儲(chǔ)器中的特定 位置,以防止其他處理器或同一處理器上的其他線程訪問(wèn)在進(jìn)行作為其組成部分的加載與 存儲(chǔ)微操作期間使用的該存儲(chǔ)器位置(或等效的高速緩存線)。在不同實(shí)施例中,該信號(hào)可 包括總線信號(hào)或高速緩存一致性協(xié)議鎖定(protocollock)。這些鎖定指令的具體實(shí)施要求 在開始執(zhí)行鎖定指令之前引退(retire)所有先前的指令(按程序順序)。鎖定指令的加載 和存儲(chǔ)微操作通常被延遲,這使得它們盡可能的被一起執(zhí)行和引退,以限制處理器保護(hù)由 上述鎖定指令使用的存儲(chǔ)器地址或高速緩存線的時(shí)間。然而,這樣阻止了加載微操作和任 何其他介于其間的微操作的預(yù)測(cè)執(zhí)行,因此,向程序的關(guān)鍵路徑中加入了它們的等待時(shí)間。 這些具體實(shí)施也可能阻止后續(xù)的加載操作或其他后續(xù)操作的預(yù)測(cè)執(zhí)行,從而增加了后續(xù)操 作的等待時(shí)間。實(shí)際上,這可能意味著任何用于支持無(wú)序處理的重新排序緩沖器可能填滿 流水線和使該流水線發(fā)生停頓,這導(dǎo)致了應(yīng)用程序的性能進(jìn)一步下降。
發(fā)明內(nèi)容
根據(jù)第一實(shí)施例,本發(fā)明提供了一種處理器,包括預(yù)測(cè)器,用于作出鎖定指令是否會(huì)發(fā)生競(jìng)爭(zhēng)的預(yù)測(cè);以及調(diào)度器,用于當(dāng)所述預(yù)測(cè)表明所述鎖定指令不發(fā)生競(jìng)爭(zhēng)時(shí)以預(yù)測(cè)方式發(fā)出一組與 所述鎖定指令對(duì)應(yīng)的微操作;以及用于確定是否出現(xiàn)了競(jìng)爭(zhēng)指示的監(jiān)視器,其中,所述競(jìng)爭(zhēng)指示包括何時(shí)st0re_ with_unlock微操作在高速緩存中未命中。根據(jù)第二實(shí)施例,本發(fā)明提供了一種處理器,包括預(yù)測(cè)器,用于作出鎖定指令是否會(huì)發(fā)生競(jìng)爭(zhēng)的預(yù)測(cè);
解碼器,用于將所述鎖定指令解碼成l0ad_with0Ut_l0Ck微操作和存儲(chǔ)微操作; 以及監(jiān)視器,用于確定是否出現(xiàn)了競(jìng)爭(zhēng)指示,所述競(jìng)爭(zhēng)指示包括何時(shí)存儲(chǔ)微操作在高 速緩存中未命中。根據(jù)第三實(shí)施例,本發(fā)明提供了一種用于預(yù)測(cè)執(zhí)行無(wú)競(jìng)爭(zhēng)的鎖定指令的方法,包 括預(yù)測(cè)鎖定指令是否會(huì)發(fā)生競(jìng)爭(zhēng);當(dāng)所述預(yù)測(cè)認(rèn)為所述鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng)時(shí),發(fā)出對(duì)應(yīng)于所述鎖定指令的 load_without_lock 微操作;以及監(jiān)視競(jìng)爭(zhēng)指示,所述競(jìng)爭(zhēng)指示包括何時(shí)St0re_With_unl0Ck微操作在高速緩存中 未命中。根據(jù)第四實(shí)施例,本發(fā)明提供了一種用于預(yù)測(cè)執(zhí)行無(wú)競(jìng)爭(zhēng)的鎖定指令的裝置,包 括預(yù)測(cè)鎖定指令是否會(huì)發(fā)生競(jìng)爭(zhēng)的單元; 當(dāng)所述預(yù)測(cè)認(rèn)為所述鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng)時(shí)發(fā)出對(duì)應(yīng)于所述鎖定指令的load_ without_lock微操作的單元;以及監(jiān)視競(jìng)爭(zhēng)指示的單元,其中,所述競(jìng)爭(zhēng)指示包括何時(shí)St0re_With_unl0Ck微操作 在高速緩存中未命中。根據(jù)第五實(shí)施例,本發(fā)明提供了一種用于預(yù)測(cè)執(zhí)行無(wú)競(jìng)爭(zhēng)的鎖定指令的系統(tǒng),包 括第一處理器,該處理器包括預(yù)測(cè)器和調(diào)度器,所述預(yù)測(cè)器用于預(yù)測(cè)鎖定指令是否 會(huì)發(fā)生競(jìng)爭(zhēng),所述調(diào)度器用于在所述預(yù)測(cè)認(rèn)為所述鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng)時(shí)以預(yù)測(cè)方式發(fā) 出一組對(duì)應(yīng)于所述鎖定指令的微操作;用于確定是否出現(xiàn)了競(jìng)爭(zhēng)指示的監(jiān)視器,其中,所述競(jìng)爭(zhēng)指示包括何時(shí)st0re_ With_unl0Ck微操作在高速緩存中未命中;第一接口,用于將第一處理器耦合到第二處理器;第二接口,用于將第一處理器耦合到音頻輸入/輸出設(shè)備;以及耦合到所述第二接口的音頻輸入/輸出設(shè)備。根據(jù)第六實(shí)施例,本發(fā)明提供了一種用于預(yù)測(cè)執(zhí)行無(wú)競(jìng)爭(zhēng)的鎖定指令的系統(tǒng),包 括第一處理器,包括用于預(yù)測(cè)鎖定指令是否會(huì)發(fā)生競(jìng)爭(zhēng)的預(yù)測(cè)器,用于將所述鎖定 指令解碼成l0ad_With0Ut_l0Ck微操作和存儲(chǔ)微操作的解碼器,以及用于在所述存儲(chǔ)微操 作引退之前確定是否出現(xiàn)了競(jìng)爭(zhēng)指示的監(jiān)視器,其中,所述競(jìng)爭(zhēng)指示包括何時(shí)store_with_ unlock微操作在高速緩存中未命中;第一接口,用于將第一處理器耦合到第二處理器;第二接口,用于將第一處理器耦合到音頻輸入/輸出設(shè)備;以及耦合到所述第二接口的音頻輸入/輸出設(shè)備。根據(jù)第七實(shí)施例,本發(fā)明提供了一種處理器,包括用于最初指明鎖定指令不發(fā)生競(jìng)爭(zhēng)的部件;
調(diào)度器,用于以預(yù)測(cè)方式發(fā)出對(duì)應(yīng)于所述鎖定指令的一組微操作;以及用于確定是否出現(xiàn)了競(jìng)爭(zhēng)指示的監(jiān)視器,其中,所述競(jìng)爭(zhēng)指示包括何時(shí)st0re_ with_unlock微操作在高速緩存中未命中。根據(jù)第八實(shí)施例,本發(fā)明提供了一種處理器,包括用于最初指明鎖定指令不發(fā)生競(jìng)爭(zhēng)的部件;解碼器,用于將所述鎖定指令解碼成l0ad_With0Ut_l0Ck微操作和存儲(chǔ)微操作;以及監(jiān)視器,用于確定是否出現(xiàn)了競(jìng)爭(zhēng)指示,所述競(jìng)爭(zhēng)指示包括何時(shí)Store_With_ unlock微操作在高速緩存中未命中。根據(jù)第九實(shí)施例,本發(fā)明提供了一種用于預(yù)測(cè)執(zhí)行無(wú)競(jìng)爭(zhēng)的鎖定指令的方法,包 括最初假定鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng);發(fā)出對(duì)應(yīng)于所述鎖定指令的IoacLwithout_loCk微操作;以及監(jiān)視競(jìng)爭(zhēng)指示,所述競(jìng)爭(zhēng)指示包括何時(shí)St0re_With_unl0Ck微操作在高速緩存中 未命中。根據(jù)第十實(shí)施例,本發(fā)明提供了一種用于預(yù)測(cè)執(zhí)行無(wú)競(jìng)爭(zhēng)的鎖定指令的裝置,包 括最初假定鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng)的單元;發(fā)出對(duì)應(yīng)于所述鎖定指令的IoacLwithout_loCk微操作的單元;以及監(jiān)視競(jìng)爭(zhēng)指示的單元,所述競(jìng)爭(zhēng)指示包括何時(shí)St0re_With_unl0Ck微操作在高速 緩存中未命中。
在附圖中,通過(guò)舉例而非限制的方式說(shuō)明了本發(fā)明,且類似的附圖標(biāo)記表示類似 的元件,其中圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施例的處理器及其執(zhí)行流水線的示意圖,其中示出了 在流水線末端附近工作的鎖定競(jìng)爭(zhēng)預(yù)測(cè)器;圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的處理器及其執(zhí)行流水線的示意圖,其中示出了 在流水線起始附近工作的鎖定競(jìng)爭(zhēng)預(yù)測(cè)器;圖3是根據(jù)本發(fā)明的一個(gè)實(shí)施例的處理器及其執(zhí)行流水線的示意圖,其中示出了 在流水線末端附近工作的鎖定競(jìng)爭(zhēng)預(yù)測(cè)器;圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的鎖定指令執(zhí)行的狀態(tài)圖;以及圖5A和圖5B是根據(jù)本發(fā)明的兩個(gè)實(shí)施例的系統(tǒng)的示意圖,這些系統(tǒng)包括支持鎖 定競(jìng)爭(zhēng)預(yù)測(cè)器以預(yù)測(cè)執(zhí)行鎖定指令的處理器。
具體實(shí)施例方式以下的說(shuō)明描述了允許無(wú)序執(zhí)行鎖定指令的技術(shù),在所述鎖定指令未發(fā)生競(jìng)爭(zhēng) 時(shí),無(wú)序執(zhí)行是有利的。可以認(rèn)為,當(dāng)超過(guò)一個(gè)處理器或同一處理器中超過(guò)一個(gè)線程幾乎同 時(shí)地試圖鎖定存儲(chǔ)器中的相同位置時(shí),鎖定指令發(fā)生了競(jìng)爭(zhēng)。當(dāng)另一處理器或者同一處理器中的另一個(gè)線程試圖訪問(wèn)由另一處理器或者線程鎖定的存儲(chǔ)器位置時(shí),可以認(rèn)為鎖定指 令發(fā)生了競(jìng)爭(zhēng)。這是因?yàn)椴荒艽_定另一處理器(或另一線程)的存儲(chǔ)器訪問(wèn)是鎖定企圖還 是普通的存儲(chǔ)器訪問(wèn)。在以下的描述中,給出了大量具體細(xì)節(jié)(如邏輯實(shí)施方式、軟件模塊 分配、總線和其他接口信令技術(shù)和操作的細(xì)節(jié)),以便使讀者更為透徹地理解本發(fā)明。然而, 本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,在不具有這些具體細(xì)節(jié)時(shí)仍可以實(shí)施本發(fā)明。在其他實(shí)例中,未 詳細(xì)示出控制結(jié)構(gòu)、門級(jí)電路和完整的軟件指令序列,以避免干擾對(duì)本發(fā)明的說(shuō)明。利用本 文包括的說(shuō)明內(nèi)容,無(wú)需進(jìn)行過(guò)多試驗(yàn),本領(lǐng)域技術(shù)人員便可實(shí)現(xiàn)適當(dāng)?shù)墓δ?。在某些?shí)施 例中,以為與Pentium 兼容的處理器(如Intel 公司生產(chǎn)的處理器)預(yù)測(cè)符合要求的 預(yù)測(cè)值的形式公開了本發(fā)明。然而,也可以在其他種類的處理器(如與Itanium 族兼容 的處理器或與X-Scale⑧族兼容的處理器)中實(shí)施本發(fā)明。參考圖1,其中示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的處理器100及其執(zhí)行流水線,該 圖示出了在流水線的末端附近工作的鎖定競(jìng)爭(zhēng)預(yù)測(cè)器。在圖1的實(shí)施例中,示出了前端級(jí) 102、解碼級(jí)104、跟蹤高速緩存106、重新排序緩沖器(ROB) 108、執(zhí)行級(jí)112和引退級(jí)114。 在其他實(shí)施例中,可以在流水線中使用其他級(jí),且可以改變級(jí)的順序。 可通過(guò)前端級(jí)102從一級(jí)(Li)高速緩存124取得宏指令,并通過(guò)解碼級(jí)104將其 解碼成對(duì)應(yīng)的一組微操作??梢詫⑦@些成組的微操作以痕跡(trace)的形式存儲(chǔ)在跟蹤高 速緩存106中,在其他實(shí)施例中,可以將上述痕跡存儲(chǔ)在其他形式的緩沖器中。在另一些實(shí) 施例中,可以以不同于痕跡的形式將這些成組的微操作存儲(chǔ)在其他形式的緩沖器中。當(dāng)準(zhǔn) 備執(zhí)行該組微操作時(shí),可以將其加載到ROB 108之中。ROB 108可包括一系列存儲(chǔ)位置150 至166,其中,各存儲(chǔ)位置可以包含微操作、其源和目的地寄存器的標(biāo)識(shí)和執(zhí)行結(jié)果(當(dāng)存 在時(shí))。在其他實(shí)施例中,可以設(shè)置不同數(shù)目的存儲(chǔ)位置,且這些存儲(chǔ)位置的內(nèi)容的確切格 式可以不同。可使用調(diào)度器110來(lái)確定存儲(chǔ)位置150-166中的哪些微操作具有它們的源操作 數(shù)值(從而允許被執(zhí)行)。在一個(gè)實(shí)施例中,調(diào)度器110可以檢查存儲(chǔ)位置150-166中的 各微操作的源寄存器的狀態(tài)。然后,調(diào)度器110發(fā)出其源寄存器中包含用于執(zhí)行的有效數(shù) 據(jù)的那些微操作(在執(zhí)行級(jí)112中),而不論它們?cè)谒鶎懙能浖械捻樞?即可能是“無(wú)序 的”)。然后,可以將因這些微操作的執(zhí)行而得到的任何結(jié)果作為執(zhí)行結(jié)果臨時(shí)存儲(chǔ)在對(duì)應(yīng) 的存儲(chǔ)位置中。存儲(chǔ)位置150至166中的各個(gè)存儲(chǔ)位置可以具有相關(guān)的“完成”位130至146,這 些位可以指明對(duì)應(yīng)的微操作已完成執(zhí)行且執(zhí)行所得結(jié)果已作為執(zhí)行結(jié)果臨時(shí)存儲(chǔ)在對(duì)應(yīng) 的存儲(chǔ)位置150-166中。在一個(gè)實(shí)施例中,完成位130-146可以指明,一旦與之前指令(按 程序順序)對(duì)應(yīng)的微操作引退,則與該完成位對(duì)應(yīng)的微操作也準(zhǔn)備引退。(宏指令產(chǎn)生的微 操作仍必須按原始程序順序引退)??梢詫?zhǔn)備引退的微操作發(fā)送到引退級(jí)114。也可以 將調(diào)用存儲(chǔ)器引用的微操作置于存儲(chǔ)器順序緩沖器(MOB) 122之中。MOB 122可存儲(chǔ)若干等 待的存儲(chǔ)器引用操作。圖1中的處理器能執(zhí)行鎖定指令。一種形式的鎖定指令可以在處理器對(duì)被鎖定的 存儲(chǔ)位置執(zhí)行操作時(shí)阻止其他處理器或者多線程處理器中的其他線程訪問(wèn)該給定存儲(chǔ)位 置或高速緩存線。實(shí)際上,在執(zhí)行上述指令時(shí),鎖定了該具體存儲(chǔ)位置或高速緩存線,以防 止其他處理器或線程的訪問(wèn)。另一種觀點(diǎn)是,這種形式的鎖定允許指令對(duì)具體存儲(chǔ)位置或高速緩存線進(jìn)行原子修改(業(yè)內(nèi)通常稱為原子讀-修改-寫指令)。相比之下,這些鎖定指令可作為軟件旗語(yǔ)(semaphore)使用,以便以語(yǔ)義的方式鎖定覆蓋數(shù)目更多的指令的其他 存儲(chǔ)位置在本領(lǐng)域中,通常將這些數(shù)目更多的指令稱為臨界區(qū)(critical section)。在一 個(gè)實(shí)施例中,可以將鎖定指令實(shí)施成將附加到原始指令的鎖定前綴。在與Pentium 兼容的 架構(gòu)中,可以將鎖定前綴加到包含如下種類的指令(其中,目標(biāo)操作數(shù)為存儲(chǔ)器操作數(shù))之 前=ADD (加),ADC (進(jìn)位加),AND (邏輯與),BTC (位測(cè)試并求反),BTR (位測(cè)試并復(fù)位), BTS (位測(cè)試并置位),CMPXCHG (比較并交換),CMPXCH8B (比較并交換8個(gè)字節(jié)),DEC (遞 減),INC (遞增),NEG ( 二進(jìn)制補(bǔ)碼取反),NOT ( 二進(jìn)制反碼取反),OR (邏輯或),SBB (整 數(shù)借位減),SUB (減),XOR (異或),XADD (交換并加),以及XCHG (交換存儲(chǔ)器和寄存器)。 當(dāng)強(qiáng)制要求其他處理器或線程不能改變由這些指令指定的讀_修改_寫功能部分之間的目 的地存儲(chǔ)位置的值時(shí),可以用所述鎖定前綴來(lái)使得這些部分原子化(看上去為一個(gè)部分)。在一個(gè)實(shí)施例中,可以將鎖定指令解碼成若干微操作,包括“ load_with_store_ interblock”微操作和“stonimlock”微操作。對(duì)于上一段提及的各種指令,可以存在其 他微操作。為便于討論,我們可以將“l(fā)oad_with_store_intent_lock”微操作稱為“l(fā)oad_ with_lock”微操作,并將其記為loacLlock。在進(jìn)入執(zhí)行單元112時(shí),loacLlock微操作會(huì) 啟動(dòng)鎖定情形。當(dāng)從MOB 122發(fā)出storejniock微操作時(shí),可以去除該鎖定情形。前述實(shí)施例在滿足兩個(gè)條件之前不會(huì)發(fā)出loacLlock微操作。第一個(gè)條件是,原 始程序順序中的所有先前指令必須已執(zhí)行和引退。換言之,loacLlock微操作應(yīng)當(dāng)是ROB 108中最陳舊的微操作。第二個(gè)條件是,MOB 122中先前等待的存儲(chǔ)微操作必須已完成,且 與M0B122關(guān)聯(lián)的緩沖存儲(chǔ)器的內(nèi)容必須已排空(換言之,所有存儲(chǔ)操作必須已將其數(shù)據(jù)寫 入到存儲(chǔ)器系統(tǒng)中)。對(duì)無(wú)序執(zhí)行而言,這兩個(gè)條件不兼容。應(yīng)當(dāng)注意,鎖定指令經(jīng)常并非是絕對(duì)必要的。在很多情況下,存儲(chǔ)位置或者高速緩 存線在鎖定期間保持無(wú)競(jìng)爭(zhēng)狀態(tài)也就是說(shuō),沒(méi)有其他處理器或線程嘗試訪問(wèn)鎖定中的特 定存儲(chǔ)位置或高速緩存線,且沒(méi)有其他處理器事件威脅到該存儲(chǔ)位置的完整性。因此,處理 器100還包括鎖定競(jìng)爭(zhēng)預(yù)測(cè)器118和監(jiān)視器邏輯116。鎖定競(jìng)爭(zhēng)預(yù)測(cè)器118可以預(yù)測(cè)特定 鎖定指令在鎖定期間是否會(huì)發(fā)生競(jìng)爭(zhēng)。如果預(yù)測(cè)認(rèn)為該特定鎖定指令會(huì)發(fā)生競(jìng)爭(zhēng),則采用 先前的用于鎖定指令的執(zhí)行方法。然而,如果預(yù)測(cè)認(rèn)為該特定鎖定指令實(shí)際上不會(huì)發(fā)生競(jìng)爭(zhēng),則可以以預(yù)測(cè)的方式 發(fā)出正常的加載微操作,并用監(jiān)視器邏輯116監(jiān)視所關(guān)心的存儲(chǔ)位置,以確定是否出現(xiàn)了 任何競(jìng)爭(zhēng)指示。因此,在執(zhí)行指令的讀-修改-寫部分時(shí),實(shí)際上,我們可以不鎖定存儲(chǔ)位置 來(lái)實(shí)現(xiàn)原子性(atomicity),而是獨(dú)立執(zhí)行各個(gè)部分,同時(shí)監(jiān)視任何指明其他處理器或線程 可能破壞原子性的情形。所述競(jìng)爭(zhēng)指示可包括對(duì)包含加載指令的目標(biāo)地址的高速緩存線 的窺探(snoop)、中斷或是否隨后的storejniock微操作在高速緩存中發(fā)生未命中。在某 些實(shí)施例中,監(jiān)視器邏輯116監(jiān)視處理器中存在的若干已有的邏輯信號(hào)。如果在表示等效 鎖定情形的時(shí)段內(nèi)未出現(xiàn)競(jìng)爭(zhēng)指示,則上述以預(yù)測(cè)方式發(fā)出的正常加載微操作可以正常引 退。這樣,便允許無(wú)序執(zhí)行鎖定指令和提高處理器性能。然而,如果出現(xiàn)了競(jìng)爭(zhēng)指示,則必 須清洗(flush)流水線,并重新執(zhí)行鎖定指令。在重新執(zhí)行期間,可以按傳統(tǒng)實(shí)施方式非預(yù) 測(cè)地執(zhí)行鎖定指令,以幫助處理向前進(jìn)行。在另一個(gè)實(shí)施例中,在以非預(yù)測(cè)方式執(zhí)行指令之 前,處理器可以嘗試以預(yù)測(cè)方式執(zhí)行鎖定指令若干次,并在每次執(zhí)行時(shí)檢測(cè)競(jìng)爭(zhēng)。當(dāng)處理器以非預(yù)測(cè)方式執(zhí)行指令時(shí)(如在傳統(tǒng)實(shí)施方式中一樣),它可以斷言信號(hào)或者采用某過(guò)程 來(lái)防止任何其他線程(或處理器)訪問(wèn)所關(guān)心的存儲(chǔ)位置。這樣可確保處理器完成所述執(zhí) 行和引退所述鎖定指令,而無(wú)需任何隨后的重啟。如果在完成固定次數(shù)的預(yù)測(cè)執(zhí)行嘗試后, 處理器未回到非預(yù)測(cè)執(zhí)行方式,則可能是處理器在每次執(zhí)行中遇到了競(jìng)爭(zhēng)指示并被迫重復(fù) 地重啟所述鎖定指令,從而阻止了處理的向前進(jìn)行。鎖定競(jìng)爭(zhēng)預(yù)測(cè)器118可利用電路和有關(guān)多種著名的分支預(yù)測(cè)器之一的運(yùn)行的理 論(包括本地預(yù)測(cè)器和全局預(yù)測(cè)器的相關(guān)理論)。在一個(gè)實(shí)施例中,鎖定競(jìng)爭(zhēng)預(yù)測(cè)器118 可以是存儲(chǔ)某些鎖定指令的線性指令指針的表,且過(guò)去曾發(fā)現(xiàn)這些鎖定指令存在競(jìng)爭(zhēng)。在 一個(gè)實(shí)施例中,在處理器初始化時(shí),所述表可以為空,并預(yù)先假定所有鎖定指令不會(huì)發(fā)生競(jìng) 爭(zhēng)。當(dāng)發(fā)現(xiàn)關(guān)于給定鎖定指令的預(yù)測(cè)錯(cuò)誤時(shí),將該鎖定指令的線性指令指針寫入所述表中, 以備將來(lái)使用。當(dāng)鎖定競(jìng)爭(zhēng)預(yù)測(cè)器118預(yù)測(cè)給定的鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng)時(shí),調(diào)度器110可以從 ROB 108以預(yù)測(cè)方式發(fā)出對(duì)應(yīng)的loacLlock微操作。在一個(gè)實(shí)施例中,可以從ROB 108發(fā)出 作為預(yù)測(cè)的loacLwithoutJock微操作的對(duì)應(yīng)的loacLlock微操作。然后,兩種微操作均 可生成關(guān)于擁有對(duì)應(yīng)的高速緩存線的請(qǐng)求,在某些實(shí)施例中,這導(dǎo)致高速緩存線轉(zhuǎn)變?yōu)榕?他的“E”狀態(tài)(在使用修改的/排他的/共享的/無(wú)效的“MESI”高速緩存一致性協(xié)議的 高速緩存中)。如果在最低高速緩存中未命中加載微操作,則分配填充緩沖器,且所述加載 微操作作為等待的操作在M0B 122中進(jìn)行“休眠”。如果在高速緩存中命中了 loacLlock微操作,或當(dāng)通過(guò)對(duì)應(yīng)的高速緩存線填充喚 醒了在M0B 122中休眠的loacLlock微操作時(shí),則發(fā)生以下情形。在某些實(shí)施例中,可能有 必要在執(zhí)行l(wèi)oacLlock和引退storejnlock之間防止取代包含鎖定變量的高速緩存線。 在一個(gè)實(shí)施例中,在高速緩存線的標(biāo)簽(tag)中,可以將一個(gè)位置位,以防止上述取代,但 仍允許進(jìn)行存儲(chǔ)器排序協(xié)議所要求的窺探。然而,在更陳舊的加載操作之前,可以執(zhí)行一組 上述預(yù)測(cè)的loacLlock,從而用盡了高速緩存組中的所有途徑(way)。這樣,便未在高速緩 存組中為更陳舊的加載操作留下任何從下一級(jí)高速緩存填充其數(shù)據(jù)的途徑,從而防止了更 陳舊的加載操作的引退,因?yàn)樗鼰o(wú)法完成。上述預(yù)測(cè)的loacLlock無(wú)法引退,因?yàn)樗鼈儾皇?最陳舊的操作,從而形成了死鎖。為防止這種情況的出現(xiàn),僅當(dāng)所述高速緩存組中存在足夠 的未鎖定途徑時(shí)才以預(yù)測(cè)方式發(fā)出loacLlock,以便為更陳舊的指令留出至少某些可用的 途徑。如果不存在足夠的未鎖定途徑,則僅當(dāng)所有先前的指令引退后才發(fā)出loacLlock(與 傳統(tǒng)實(shí)施方式一樣)。在一個(gè)實(shí)施例中,至少必須具有兩個(gè)可用途徑才能發(fā)出預(yù)測(cè)的load_ lock。不管是load_lock微操作還是load_without_lock微操作從R0B 108發(fā)出,在所 述加載微操作之前或者之后,可以從R0B 108發(fā)出對(duì)應(yīng)的storejnlock微操作和任何居于 其間的微操作。然而,st0re_unl0Ck微操作可以在M0B 122中保持等待,直到加載微操作和 任何居于其間的微操作處于引退點(diǎn)(在該點(diǎn)處,M0B 122可以發(fā)出stonimlock微操作) 為止。如果監(jiān)視器邏輯116確定出現(xiàn)了競(jìng)爭(zhēng)指示,則不允許引退加載微操作和對(duì)應(yīng)的 stonimlock微操作。這意味著關(guān)于鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng)的預(yù)測(cè)是錯(cuò)誤的。在不同實(shí)施 例中,考慮所述競(jìng)爭(zhēng)指示的時(shí)段長(zhǎng)度可能不同。在一個(gè)實(shí)施例中,所述時(shí)段可在存儲(chǔ)器存儲(chǔ)操作(對(duì)應(yīng)于stonimlock)變得全局可見時(shí)結(jié)束。此處的“全局可見”意味著高速緩存 一致性域中的所有代理(agent)均可看到所述存儲(chǔ)位置的最新值。在另一個(gè)實(shí)施例中,所 述時(shí)段可在st0re_unl0Ck成為MOB 122中的最陳舊的存儲(chǔ)操作時(shí)結(jié)束。在該第二實(shí)施例 中,在store_unlock成為M0B122中最陳舊的存儲(chǔ)操作的時(shí)刻與store_unlock變得全局可 見的時(shí)刻之間的短暫時(shí)間內(nèi),可能需要實(shí)現(xiàn)實(shí)際的鎖定情形。在前述實(shí)施方式中,當(dāng)存儲(chǔ)器存儲(chǔ)操作變得全局可見時(shí),store_unlock微操作成 為ROB 108中最陳舊的未引退的微操作。然而,在一個(gè)實(shí)施例中,當(dāng)存儲(chǔ)器存儲(chǔ)操作變得全 局可見時(shí),store_unlock微操作不是ROB 108中最陳舊的未引退的微操作,因?yàn)榧虞d(存 在鎖定或不存在鎖定)微操作在存儲(chǔ)器存儲(chǔ)操作變得全局可見之前不會(huì)引退。因此,所述 加載操作是機(jī)器中最陳舊的未引退的微操作。在另一個(gè)實(shí)施例中,可以省略鎖定競(jìng)爭(zhēng)預(yù)測(cè)器118。相反,可以假定在所有情況下 鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng)。在各種情況下,最初可以預(yù)測(cè)執(zhí)行對(duì)應(yīng)的加載微操作。在加載指 令事實(shí)上發(fā)生競(jìng)爭(zhēng)的情況下,監(jiān)視器邏輯116可檢測(cè)競(jìng)爭(zhēng)指示,并重啟執(zhí)行流水線。僅那些 導(dǎo)致競(jìng)爭(zhēng)指示的出現(xiàn)的鎖定指令才會(huì)以非預(yù)測(cè)方式重新執(zhí)行。在另一個(gè)實(shí)施例中,可以省略監(jiān)視器邏輯116。在該實(shí)施例中,高速緩存系統(tǒng)可包 括邏輯,用于拒絕針對(duì)鎖定指令關(guān)心的地址的窺探。這樣,無(wú)需調(diào)用正式的鎖定,便可以保 持所關(guān)心的地址中的內(nèi)容的完整性。生成上述窺探的另一個(gè)代理可以將對(duì)其窺探的拒絕視 為稍后重新嘗試窺探的指示?,F(xiàn)在參考圖2,其中示出了根據(jù)一個(gè)實(shí)施例的處理器及其執(zhí)行流水線的示意圖,該 圖示出了在流水線起始附近工作的鎖定競(jìng)爭(zhēng)預(yù)測(cè)器。圖2所示的許多電路與圖1類似,但 鎖定競(jìng)爭(zhēng)預(yù)測(cè)器218可用于修改解碼級(jí)204的操作。當(dāng)鎖定競(jìng)爭(zhēng)預(yù)測(cè)器218確定鎖定指令 不會(huì)發(fā)生競(jìng)爭(zhēng)時(shí),解碼級(jí)204將鎖定指令解碼成包括常規(guī)的加載微操作和stonimlock微 操作的微操作,而不是總將鎖定指令解碼成loacLlock微操作和storejnlock微操作。在 某些實(shí)施例中,上述常規(guī)的加載微操作可能以附加了提示或其他狀態(tài)位的loacLlock微操 作的形式出現(xiàn)。然后可以用這些微操作來(lái)在跟蹤高速緩存206中構(gòu)建痕跡。在其他實(shí)施例 中,可以將上述微操作臨時(shí)存儲(chǔ)在另一種形式的緩沖器中。監(jiān)視器邏輯216可以執(zhí)行與圖1中的監(jiān)視器邏輯116所執(zhí)行功能類似的功能。 同樣的,如果監(jiān)視器邏輯216確定出現(xiàn)了競(jìng)爭(zhēng)指示,則不允許引退加載微操作和對(duì)應(yīng)的 stonimlock微操作。這意味著關(guān)于鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng)的預(yù)測(cè)是錯(cuò)誤的。在不同實(shí) 施例中,考慮上述競(jìng)爭(zhēng)指示的時(shí)段長(zhǎng)度可能不同。在一個(gè)實(shí)施例中,該時(shí)段可以在存儲(chǔ)器存 儲(chǔ)操作(對(duì)應(yīng)于storejnlock)變得全局可見時(shí)結(jié)束。在另一個(gè)實(shí)施例中,該時(shí)段可以在 store_unlock成為M0B 222中的最陳舊的存儲(chǔ)操作時(shí)結(jié)束。如果確定了競(jìng)爭(zhēng)指示,則恢復(fù)過(guò)程可能不同于以上結(jié)合圖1所述的過(guò)程。重啟 時(shí)不能從跟蹤高速緩存206中重新發(fā)出鎖定指令,因?yàn)楦櫨彺?06可能包含具有l(wèi)oad_ without_lock微操作的痕跡。必須在解碼級(jí)204中將上述鎖定指令再次解碼,這一次,將該 指令解碼成包括loacLlock微操作和對(duì)應(yīng)的storejnlock微操作的微操作。這些微操作 可能要求在跟蹤高速緩存206中構(gòu)建新的痕跡。現(xiàn)在參考圖3,其中示出了根據(jù)一個(gè)實(shí)施例的處理器及其執(zhí)行流水線的示意圖,該 圖示出了在流水線末端附近工作的鎖定競(jìng)爭(zhēng)預(yù)測(cè)器。圖3中的實(shí)施例包括指定為重放隊(duì)列322的修改后的M0B,以支持與Pentium 4兼容的處理器中的重放操作。重放操作可通 過(guò)重新執(zhí)行以預(yù)測(cè)方式發(fā)出的微操作來(lái)修復(fù)不正確的數(shù)據(jù)預(yù)測(cè),直到數(shù)據(jù)預(yù)測(cè)變得正確為 止。在一個(gè)實(shí)施例中,如果監(jiān)視器邏輯316指明了競(jìng)爭(zhēng)而未清洗流水線或者重啟鎖定指令, 則可以重放load_lock和store_unlock微操作。在另一個(gè)實(shí)施例中,可以使用檢查點(diǎn)恢復(fù)邏輯370執(zhí)行檢查點(diǎn)修復(fù)。在一個(gè)實(shí)施 例中,檢查點(diǎn)恢復(fù)邏輯370可以在loacLlock微操作之前的所有微操作均已引退時(shí)存儲(chǔ)處 理器狀態(tài)的快照。在執(zhí)行檢查點(diǎn)修復(fù)之后,組成所述預(yù)測(cè)執(zhí)行的鎖定指令的所有微操作和 在某些實(shí)施例中程序中的任何后續(xù)指令可以在完成后依次引退。如果監(jiān)視器邏輯316在存 儲(chǔ)器存儲(chǔ)操作(對(duì)應(yīng)于stonimlock)全局可見之前指明了競(jìng)爭(zhēng),這表明必須清洗處理器 流水線,然后,(從檢查點(diǎn)恢復(fù)邏輯370)恢復(fù)上述loacLlock之前的與其緊接的微操作引 退時(shí)的處理器狀態(tài)。可以重新執(zhí)行l(wèi)oacLlock、storejnlock和組成上述鎖定指令的任何 其他微操作。在該重新執(zhí)行期間,可以將作為組成部分的上述微操作視為傳統(tǒng)實(shí)施方式中 的微操作,并可以以非預(yù)測(cè)方式執(zhí)行這些微操作。在其他實(shí)施例中,可以在其他處理器(如 圖1和圖2中所示的處理器)中使用檢查點(diǎn)恢復(fù)邏輯370。在一個(gè)實(shí)施例中,當(dāng)鎖定競(jìng)爭(zhēng)預(yù)測(cè)器318確定鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng)時(shí),可以從 R0B 308以預(yù)測(cè)方式發(fā)出load_lock微操作或load_without_lock微操作。不管是load_ lock微操作還是l0ad_with0ut_l0Ck微操作從R0B 308發(fā)出,在加載微操作之前或者之后, 可以從R0B 308發(fā)出對(duì)應(yīng)的storejnlock微操作和任何居于其間的微操作。當(dāng)不正確的 數(shù)據(jù)預(yù)測(cè)創(chuàng)建了壞地址時(shí),一個(gè)或者多個(gè)數(shù)據(jù)檢查邏輯368將無(wú)效的地址信號(hào)372發(fā)送到 重放隊(duì)列322??梢詫o(wú)效地址信號(hào)372與監(jiān)視器邏輯316 —起使用,以確定對(duì)預(yù)測(cè)的加載 微操作和對(duì)應(yīng)的store_unlock微操作的處理。當(dāng)無(wú)效地址信號(hào)372為假且監(jiān)視器邏輯316未檢測(cè)到競(jìng)爭(zhēng)指示時(shí),加載微操作和 store_unlock微操作可以正常引退。當(dāng)無(wú)效地址信號(hào)372為假且監(jiān)視器邏輯316檢測(cè)到競(jìng) 爭(zhēng)指示時(shí),可以清洗流水線并重啟鎖定指令。在另一個(gè)實(shí)施例中,如果監(jiān)視器邏輯316檢測(cè) 到競(jìng)爭(zhēng)指示,則可以重放加載微操作。然而,當(dāng)無(wú)效地址信號(hào)372為真時(shí),監(jiān)視器邏輯316 的狀態(tài)是無(wú)關(guān)的,因?yàn)槿魏胃?jìng)爭(zhēng)指示均可與錯(cuò)誤地址相關(guān)聯(lián)。從而,當(dāng)無(wú)效地址信號(hào)372為 真時(shí),發(fā)生重放,且任何來(lái)自監(jiān)視器邏輯316的競(jìng)爭(zhēng)指示均不會(huì)更新鎖定競(jìng)爭(zhēng)預(yù)測(cè)器318?,F(xiàn)在參考圖4,其中示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的鎖定指令的執(zhí)行的狀態(tài)圖。 在框410中,作出關(guān)于鎖定指令是否會(huì)發(fā)生競(jìng)爭(zhēng)的預(yù)測(cè)。如果預(yù)測(cè)認(rèn)為會(huì)發(fā)生競(jìng)爭(zhēng),則過(guò)程 沿競(jìng)爭(zhēng)路徑414離開,并進(jìn)入框460。在框460中,當(dāng)loacLlock微操作引退且僅在所有等 待的存儲(chǔ)緩沖器排空后,將loacLlock微操作發(fā)送到存儲(chǔ)器系統(tǒng)。然后,在框470中,以非 預(yù)測(cè)方式正常執(zhí)行鎖定指令的其他微操作。如果框410中作出的預(yù)測(cè)認(rèn)為鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng),則過(guò)程沿未競(jìng)爭(zhēng)路徑412 離開,且可以以預(yù)測(cè)方式發(fā)出loacLlock微操作(或是某些實(shí)施例中的附有關(guān)于所述鎖定 操作不會(huì)發(fā)生競(jìng)爭(zhēng)的某些提示的loacLlock微操作,或是某些實(shí)施例中的、變形為load_ with_uncontended_lock微操作或load_without_lock微操作之類的某些新的微操作的 loacLlock微操作),以供執(zhí)行。然后,在框430中,當(dāng)loadjock微操作引退時(shí),可以將 storejnlock微操作發(fā)送到存儲(chǔ)器。然后,該storejnlock微操作準(zhǔn)備引退。在一個(gè)實(shí)施 例中,該stonimlock微操作在存儲(chǔ)器存儲(chǔ)操作變得全局可見時(shí)準(zhǔn)備引退。這樣也允許上述loacLlock微操作引退。在另一個(gè)實(shí)施例中,上述st0re_unl0Ck微操作在存儲(chǔ)器存儲(chǔ)操 作成為存儲(chǔ)器排序緩充器中最陳舊的等待的存儲(chǔ)微操作時(shí)準(zhǔn)備引退。而這允許上述load_ lock微操作引退。如果上述storejnlock微操作準(zhǔn)備引退(在一個(gè)實(shí)施例中,當(dāng)其成為全局可見 時(shí))而無(wú)任何競(jìng)爭(zhēng)指示,則過(guò)程沿路徑432離開,并且在框440中上述loacLlock微操作引 退,且用預(yù)測(cè)結(jié)果真更新預(yù)測(cè)邏輯。然而,如果在上述stonimlock微操作準(zhǔn)備引退之前 出現(xiàn)了競(jìng)爭(zhēng)指示,則程序沿路徑434離開,并在框450中重啟鎖定指令,且用假預(yù)測(cè)結(jié)果更 新預(yù)測(cè)邏輯。在該重新執(zhí)行中,可以如傳統(tǒng)實(shí)施方式一樣以非預(yù)測(cè)方式執(zhí)行鎖定指令,以幫 助處理向前進(jìn)行。在另一個(gè)實(shí)施例中,可以省略框410、460和470。相反的,可以假定在所有情況下 鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng)。在各種情況下,最初以預(yù)測(cè)方式執(zhí)行對(duì)應(yīng)的加載微操作(框420)。 在加載指令事實(shí)上發(fā)生競(jìng)爭(zhēng)的情況下,監(jiān)視器邏輯160可以檢測(cè)競(jìng)爭(zhēng)指示,清洗執(zhí)行流水 線,并重啟鎖定指令(框450)。僅那些導(dǎo)致了競(jìng)爭(zhēng)指示的鎖定指令才會(huì)以非預(yù)測(cè)方式重新 執(zhí)行。現(xiàn)在參考圖5A和圖5B,其中示出了根據(jù)本發(fā)明的兩個(gè)實(shí)施例的、包括支持鎖定競(jìng) 爭(zhēng)預(yù)測(cè)器和監(jiān)視器邏輯的處理器的系統(tǒng)的示意圖。圖5A中的系統(tǒng)一般性地示出了通過(guò)系 統(tǒng)總線將處理器、存儲(chǔ)器和輸入/輸出設(shè)備相互連接起來(lái)的系統(tǒng),而圖5B的系統(tǒng)一般性地 示出了通過(guò)若干點(diǎn)到點(diǎn)接口將處理器、存儲(chǔ)器和輸入/輸出設(shè)備相互連接起來(lái)的系統(tǒng)。圖5A的系統(tǒng)可以包括若干處理器,其中,為清楚起見,僅示出了兩個(gè)處理器40、 60。處理器40、60可以包括一級(jí)高速緩存42、62。圖5A的系統(tǒng)可以具有通過(guò)總線接口 44、 64、12、8與系統(tǒng)總線6連接的若干功能。在一個(gè)實(shí)施例中,系統(tǒng)總線6可以是Intel .公司 生產(chǎn)的Pentium 微處理器采用的前端總線(FSB)。在其他實(shí)施例中,可以使用其他總線。 在某些實(shí)施例中,存儲(chǔ)器控制器34和總線橋32統(tǒng)稱為芯片組。在某些實(shí)施例中,可以以不 同于圖5A的實(shí)施例中所示內(nèi)容的方式在各物理芯片之間劃分芯片組的各個(gè)功能。存儲(chǔ)器控制器34允許處理器40、60讀和寫系統(tǒng)存儲(chǔ)器10、基本輸入/輸出系統(tǒng) (BIOS)的可擦除可編程只讀存儲(chǔ)器(EPR0M)36。在某些實(shí)施例中,BIOS EPR0M 36可利用 閃存。存儲(chǔ)器控制器34可以包括總線接口 8,以允許將存儲(chǔ)器讀和寫的數(shù)據(jù)送至系統(tǒng)總線 6上的總線代理(bus agents)和從這些代理接收上述數(shù)據(jù)。通過(guò)高性能的圖形接口 39,存 儲(chǔ)器控制器34也可以與高性能的圖形電路38相連。在某些實(shí)施例中,高性能圖形接口 39 可以是先進(jìn)圖形端口(AGP)類型的接口。存儲(chǔ)器控制器34可以通過(guò)高性能圖形接口 39將 數(shù)據(jù)從系統(tǒng)存儲(chǔ)器10導(dǎo)向高性能圖形電路38。圖5B的系統(tǒng)也可以包括若干處理器,其中,為清楚起見,僅示出了兩個(gè)處理器70、 80。處理器70、80各自包括本地內(nèi)存控制器集線器(MCH)72、82,以連接到存儲(chǔ)器2、4。處 理器70、80可通過(guò)點(diǎn)到點(diǎn)接口 50和使用點(diǎn)到點(diǎn)接口電路78、88交換數(shù)據(jù)。處理器70、80 可各自通過(guò)單獨(dú)的點(diǎn)到點(diǎn)接口 52、54和使用點(diǎn)到點(diǎn)接口電路76、94、86、98與芯片組90交 換數(shù)據(jù)。芯片組90也可以通過(guò)高性能圖形接口 92與高性能圖形電路38交換數(shù)據(jù)。在圖5A的系統(tǒng)中,總線橋路32允許系統(tǒng)總線6和總線16之間的數(shù)據(jù)交換,在某 些實(shí)施例中,上述總線是工業(yè)標(biāo)準(zhǔn)架構(gòu)(ISA)總線或者外圍組件互連(PCI)總線進(jìn)行。在 圖5B的系統(tǒng)中,芯片組90可通過(guò)總線接口 96與總線16交換數(shù)據(jù)。在這兩個(gè)系統(tǒng)中,總線16上存在各種輸入/輸出I/O設(shè)備14,在某些實(shí)施例中,這些設(shè)備包括低性能圖形控制器、 視頻控制器和網(wǎng)絡(luò)控制器。在某些實(shí)施例中,可以使用另一個(gè)總線橋18來(lái)允許在總線16 和總線20之間交換數(shù)據(jù)。在某些實(shí)施例中,總線20可以是小型計(jì)算機(jī)系統(tǒng)接口(SCSI)總 線、集成驅(qū)動(dòng)電子設(shè)備(IDE)總線或通用串行總線(USB)型的總線??梢詫⑵渌鸌/O設(shè)備 與總線20相連。這些設(shè)備包括鍵盤和光標(biāo)控制設(shè)備22 (包括鼠標(biāo))、音頻I/O 24、通信設(shè) 備26 (包括調(diào)制解調(diào)器和網(wǎng)絡(luò)接口)和數(shù)據(jù)存儲(chǔ)設(shè)備28??梢詫④浖a30存儲(chǔ)在數(shù)據(jù) 存儲(chǔ)設(shè)備28上。在某些實(shí)施例中,數(shù)據(jù)存儲(chǔ)設(shè)備28可以是固定的磁盤、軟盤驅(qū)動(dòng)器、光盤 驅(qū)動(dòng)器、磁光盤驅(qū)動(dòng)器、磁帶或非易失性存儲(chǔ)器(包括閃存)。 在以上說(shuō)明中,結(jié)合具體的實(shí)施例對(duì)本發(fā)明進(jìn)行了描述。然而,顯然可以對(duì)本發(fā) 明進(jìn)行各種修改和變更,而不至于背離由所附權(quán)利要求限定的本發(fā)明的更廣泛的精神和范 圍。因此,應(yīng)將本說(shuō)明書和附圖視為說(shuō)明性的而非限制性的。
權(quán)利要求
一種處理器,包括預(yù)測(cè)器,用于作出鎖定指令是否會(huì)發(fā)生競(jìng)爭(zhēng)的預(yù)測(cè);以及調(diào)度器,用于當(dāng)所述預(yù)測(cè)表明所述鎖定指令不發(fā)生競(jìng)爭(zhēng)時(shí)以預(yù)測(cè)方式發(fā)出一組與所述鎖定指令對(duì)應(yīng)的微操作;以及用于確定是否出現(xiàn)了競(jìng)爭(zhēng)指示的監(jiān)視器,其中,所述競(jìng)爭(zhēng)指示包括何時(shí)store_with_unlock微操作在高速緩存中未命中。
2.根據(jù)權(quán)利要求1所述的處理器,其中,所述調(diào)度器發(fā)出作為l0ad_With0Ut_l0Ck微操 作的load_with_lock微操作。
3.根據(jù)權(quán)利要求1所述的處理器,其中,當(dāng)所述監(jiān)視器確定出現(xiàn)了競(jìng)爭(zhēng)指示時(shí),所述處 理器重啟對(duì)所述鎖定指令的處理。
4.根據(jù)權(quán)利要求3所述的處理器,其中,所述競(jìng)爭(zhēng)指示是對(duì)包含所述鎖定指令的目標(biāo) 地址的高速緩存線的窺探。
5.根據(jù)權(quán)利要求3所述的處理器,其中,所述競(jìng)爭(zhēng)指示包括中斷。
6.根據(jù)權(quán)利要求1所述的處理器,其中,所述監(jiān)視器在所述St0re_With_iml0Ck微操作 成為最陳舊的未引退的存儲(chǔ)微操作之前確定所述競(jìng)爭(zhēng)指示。
7.根據(jù)權(quán)利要求1所述的處理器,其中,所述監(jiān)視器在所述St0re_With_iml0Ck微操作 的結(jié)果變得全局可見之前確定所述競(jìng)爭(zhēng)指示。
8.根據(jù)權(quán)利要求1所述的處理器,還包括窺探拒絕,用于拒絕對(duì)所述鎖定指令的目標(biāo) 地址的窺探。
9.一種處理器,包括預(yù)測(cè)器,用于作出鎖定指令是否會(huì)發(fā)生競(jìng)爭(zhēng)的預(yù)測(cè);解碼器,用于將所述鎖定指令解碼成l0ad_With0Ut_l0Ck微操作和存儲(chǔ)微操作;以及監(jiān)視器,用于確定是否出現(xiàn)了競(jìng)爭(zhēng)指示,所述競(jìng)爭(zhēng)指示包括何時(shí)存儲(chǔ)微操作在高速緩 存中未命中。
10.根據(jù)權(quán)利要求9所述的處理器,其中,所述處理器在所述監(jiān)視器確定出現(xiàn)了競(jìng)爭(zhēng)指 示時(shí)重啟對(duì)所述鎖定指令的處理。
11.根據(jù)權(quán)利要求10所述的處理器,其中,所述競(jìng)爭(zhēng)指示包括對(duì)包括所述鎖定指令的 目標(biāo)地址的高速緩存線的窺探。
12.根據(jù)權(quán)利要求10所述的處理器,其中,所述競(jìng)爭(zhēng)指示包括中斷。
13.根據(jù)權(quán)利要求9所述的處理器,其中,所述監(jiān)視器在所述存儲(chǔ)微操作成為最陳舊的 未引退的存儲(chǔ)微操作之前確定所述競(jìng)爭(zhēng)指示。
14.根據(jù)權(quán)利要求9所述的處理器,其中,所述監(jiān)視器在所述存儲(chǔ)微操作的結(jié)果變得全 局可見之前確定所述競(jìng)爭(zhēng)指示。
15.一種用于預(yù)測(cè)執(zhí)行無(wú)競(jìng)爭(zhēng)的鎖定指令的方法,包括預(yù)測(cè)鎖定指令是否會(huì)發(fā)生競(jìng)爭(zhēng);當(dāng)所述預(yù)測(cè)認(rèn)為所述鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng)時(shí),發(fā)出對(duì)應(yīng)于所述鎖定指令的load_ without_lock微操作;以及監(jiān)視競(jìng)爭(zhēng)指示,所述競(jìng)爭(zhēng)指示包括何時(shí)St0re_With_unl0Ck微操作在高速緩存中未命中。
16.根據(jù)權(quán)利要求15所述的方法,還包括在所述監(jiān)視檢測(cè)到所述競(jìng)爭(zhēng)指示時(shí)重啟對(duì)所 述鎖定指令的執(zhí)行。
17.根據(jù)權(quán)利要求15所述的方法,其中,所述競(jìng)爭(zhēng)指示包括對(duì)包括所述鎖定指令的目 標(biāo)地址的高速緩存線的窺探。
18.根據(jù)權(quán)利要求15所述的方法,其中,所述競(jìng)爭(zhēng)指示包括中斷。
19.根據(jù)權(quán)利要求15所述的方法,其中,所述發(fā)出包括從緩沖器發(fā)送所述load_ without_lock 微操作。
20.根據(jù)權(quán)利要求19所述的方法,其中,所述loacLwithoutJock微操作作為load_ with_lock微操作存儲(chǔ)在所述緩沖器中。
21.根據(jù)權(quán)利要求15所述的方法,其中,所述發(fā)出包括從所述鎖定指令解碼所述load_ without_lock 微操作。
22.一種用于預(yù)測(cè)執(zhí)行無(wú)競(jìng)爭(zhēng)的鎖定指令的裝置,包括預(yù)測(cè)鎖定指令是否會(huì)發(fā)生競(jìng)爭(zhēng)的單元;當(dāng)所述預(yù)測(cè)認(rèn)為所述鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng)時(shí)發(fā)出對(duì)應(yīng)于所述鎖定指令的load_ without_lock微操作的單元;以及監(jiān)視競(jìng)爭(zhēng)指示的單元,其中,所述競(jìng)爭(zhēng)指示包括何時(shí)st0re_With_iml0ck微操作在高 速緩存中未命中。
23.根據(jù)權(quán)利要求22所述的裝置,還包括在所述監(jiān)視檢測(cè)到所述競(jìng)爭(zhēng)指示時(shí)重啟對(duì)所 述鎖定指令的執(zhí)行的單元。
24.根據(jù)權(quán)利要求22所述的裝置,其中,所述競(jìng)爭(zhēng)指示包括對(duì)包括所述鎖定指令的目 標(biāo)地址的高速緩存線的窺探。
25.根據(jù)權(quán)利要求22所述的裝置,其中,所述競(jìng)爭(zhēng)指示包括中斷。
26.根據(jù)權(quán)利要求22所述的裝置,其中,所述發(fā)出單元包括從緩沖器發(fā)送所述load_ without_lock微操作的單元。
27.根據(jù)權(quán)利要求26所述的裝置,其中,所述l0ad_with0ut_l0Ck微操作作為load_ with_lock微操作存儲(chǔ)在所述緩沖器中。
28.根據(jù)權(quán)利要求22所述的裝置,其中,所述發(fā)出單元包括從所述鎖定指令解碼所述 load_without_lock微操作的單元。
29.一種用于預(yù)測(cè)執(zhí)行無(wú)競(jìng)爭(zhēng)的鎖定指令的系統(tǒng),包括第一處理器,該處理器包括預(yù)測(cè)器和調(diào)度器,所述預(yù)測(cè)器用于預(yù)測(cè)鎖定指令是否會(huì)發(fā) 生競(jìng)爭(zhēng),所述調(diào)度器用于在所述預(yù)測(cè)認(rèn)為所述鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng)時(shí)以預(yù)測(cè)方式發(fā)出一 組對(duì)應(yīng)于所述鎖定指令的微操作;用于確定是否出現(xiàn)了競(jìng)爭(zhēng)指示的監(jiān)視器,其中,所述競(jìng)爭(zhēng)指示包括何時(shí)st0re_with_ unlock微操作在高速緩存中未命中;第一接口,用于將第一處理器耦合到第二處理器;第二接口,用于將第一處理器耦合到音頻輸入/輸出設(shè)備;以及耦合到所述第二接口的音頻輸入/輸出設(shè)備。
30.根據(jù)權(quán)利要求29所述的系統(tǒng),其中,所述調(diào)度器發(fā)出作為l0ad_with0Ut_l0Ck微操 作的load_with_lock微操作。
31.根據(jù)權(quán)利要求29所述的系統(tǒng),其中,所述監(jiān)視器用于確定在St0re_With_iml0ck微 操作引退之前是否出現(xiàn)了競(jìng)爭(zhēng)指示。
32.根據(jù)權(quán)利要求29所述的系統(tǒng),其中,所述處理器在所述監(jiān)視器確定出現(xiàn)了所述競(jìng) 爭(zhēng)指示時(shí)重啟對(duì)所述鎖定指令的處理。
33.根據(jù)權(quán)利要求29所述的系統(tǒng),其中,所述監(jiān)視器在所述St0re_With_iml0Ck微操作 成為最陳舊的未引退的存儲(chǔ)微操作之前確定所述競(jìng)爭(zhēng)指示。
34.根據(jù)權(quán)利要求29所述的系統(tǒng),其中,所述監(jiān)視器在所述St0re_With_iml0Ck微操作 的結(jié)果變得全局可見之前確定所述競(jìng)爭(zhēng)指示。
35.一種用于預(yù)測(cè)執(zhí)行無(wú)競(jìng)爭(zhēng)的鎖定指令的系統(tǒng),包括第一處理器,包括用于預(yù)測(cè)鎖定指令是否會(huì)發(fā)生競(jìng)爭(zhēng)的預(yù)測(cè)器,用于將所述鎖定指令 解碼成l0ad_With0Ut_l0Ck微操作和存儲(chǔ)微操作的解碼器,以及用于在所述存儲(chǔ)微操作 引退之前確定是否出現(xiàn)了競(jìng)爭(zhēng)指示的監(jiān)視器,其中,所述競(jìng)爭(zhēng)指示包括何時(shí)store_with_ unlock微操作在高速緩存中未命中;第一接口,用于將第一處理器耦合到第二處理器;第二接口,用于將第一處理器耦合到音頻輸入/輸出設(shè)備;以及耦合到所述第二接口的音頻輸入/輸出設(shè)備。
36.根據(jù)權(quán)利要求35所述的系統(tǒng),其中,所述處理器在所述監(jiān)視器確定出現(xiàn)了所述競(jìng) 爭(zhēng)指示時(shí)重啟對(duì)所述鎖定指令的處理。
37.根據(jù)權(quán)利要求35所述的系統(tǒng),其中,所述監(jiān)視器在所述存儲(chǔ)微操作成為最陳舊的 未引退的存儲(chǔ)微操作之前確定所述競(jìng)爭(zhēng)指示。
38.根據(jù)權(quán)利要求35所述的處理器,其中,所述監(jiān)視器在所述存儲(chǔ)微操作的結(jié)果變得 全局可見之前確定所述競(jìng)爭(zhēng)指示。
39.一種處理器,包括用于最初指明鎖定指令不發(fā)生競(jìng)爭(zhēng)的部件;調(diào)度器,用于以預(yù)測(cè)方式發(fā)出對(duì)應(yīng)于所述鎖定指令的一組微操作;以及用于確定是否出現(xiàn)了競(jìng)爭(zhēng)指示的監(jiān)視器,其中,所述競(jìng)爭(zhēng)指示包括何時(shí)st0re_with_ unlock微操作在高速緩存中未命中。
40.根據(jù)權(quán)利要求39所述的處理器,其中,所述調(diào)度器發(fā)出作為l0ad_with0Ut_l0Ck微 操作的load_with_lock微操作。
41.根據(jù)權(quán)利要求39所述的處理器,其中,所述處理器在所述監(jiān)視器確定出現(xiàn)了所述 競(jìng)爭(zhēng)指示時(shí)重啟對(duì)所述鎖定指令的處理。
42.根據(jù)權(quán)利要求39所述的處理器,其中,所述監(jiān)視器在所述St0re_With_iml0Ck微操 作成為最陳舊的未引退的存儲(chǔ)微操作之前確定所述競(jìng)爭(zhēng)指示。
43.根據(jù)權(quán)利要求39所述的處理器,其中,所述監(jiān)視器在所述St0re_With_iml0Ck微操 作的結(jié)果變得全局可見之前確定所述競(jìng)爭(zhēng)指示。
44.根據(jù)權(quán)利要求39所述的處理器,還包括窺探拒絕,用于拒絕對(duì)所述鎖定指令的目 標(biāo)地址的窺探。
45.一種處理器,包括用于最初指明鎖定指令不發(fā)生競(jìng)爭(zhēng)的部件;解碼器,用于將所述鎖定指令解碼成l0ad_With0Ut_l0Ck微操作和存儲(chǔ)微操作;以及監(jiān)視器,用于確定是否出現(xiàn)了競(jìng)爭(zhēng)指示,所述競(jìng)爭(zhēng)指示包括何時(shí)St0re_With_unl0Ck 微操作在高速緩存中未命中。
46.根據(jù)權(quán)利要求45所述的處理器,其中,所述處理器在所述監(jiān)視器確定出現(xiàn)了所述 競(jìng)爭(zhēng)指示時(shí)重啟對(duì)所述鎖定指令的處理。
47.根據(jù)權(quán)利要求45所述的處理器,其中,所述監(jiān)視器在所述存儲(chǔ)微操作成為最陳舊 的未引退的存儲(chǔ)微操作之前確定所述競(jìng)爭(zhēng)指示。
48.根據(jù)權(quán)利要求45所述的處理器,其中,所述監(jiān)視器在所述存儲(chǔ)微操作的結(jié)果變得 全局可見之前確定所述競(jìng)爭(zhēng)指示。
49.一種用于預(yù)測(cè)執(zhí)行無(wú)競(jìng)爭(zhēng)的鎖定指令的方法,包括最初假定鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng);發(fā)出對(duì)應(yīng)于所述鎖定指令的l0ad_with0ut_l0Ck微操作;以及監(jiān)視競(jìng)爭(zhēng)指示,所述競(jìng)爭(zhēng)指示包括何時(shí)St0re_With_unl0Ck微操作在高速緩存中未命中。
50.根據(jù)權(quán)利要求49所述的方法,還包括在所述監(jiān)視檢測(cè)到所述競(jìng)爭(zhēng)指示時(shí)重啟對(duì)所 述鎖定指令的執(zhí)行。
51.根據(jù)權(quán)利要求49所述的方法,其中,所述發(fā)出包括從緩沖器發(fā)送所述load_ without_lock 微操作。
52.根據(jù)權(quán)利要求51所述的方法,其中所述loacLwithoutJock微操作作為load_ with_lock微操作存儲(chǔ)在所述緩沖器中。
53.根據(jù)權(quán)利要求49所述的方法,其中,所述發(fā)出包括從所述鎖定指令解碼所述load_ without_lock 微操作。
54.一種用于預(yù)測(cè)執(zhí)行無(wú)競(jìng)爭(zhēng)的鎖定指令的裝置,包括最初假定鎖定指令不會(huì)發(fā)生競(jìng)爭(zhēng)的單元;發(fā)出對(duì)應(yīng)于所述鎖定指令的l0ad_with0ut_l0Ck微操作的單元;以及監(jiān)視競(jìng)爭(zhēng)指示的單元,所述競(jìng)爭(zhēng)指示包括何時(shí)St0re_With_unl0Ck微操作在高速緩存 中未命中。
55.根據(jù)權(quán)利要求54所述的裝置,還包括在所述監(jiān)視檢測(cè)到所述競(jìng)爭(zhēng)指示時(shí)重啟對(duì)所 述鎖定指令的執(zhí)行的單元。
56.根據(jù)權(quán)利要求54所述的裝置,其中,所述發(fā)出單元包括從緩沖器發(fā)送所述load_ without_lock微操作的單元。
57.根據(jù)權(quán)利要求56所述的裝置,其中,所述loacLwithoutJock微操作作為load_ with_lock微操作存儲(chǔ)在所述緩沖器中。
58.根據(jù)權(quán)利要求54所述的裝置,其中,所述發(fā)出單元包括從所述鎖定指令解碼所述 load_without_lock微操作的單元。
全文摘要
本發(fā)明的名稱是“用于預(yù)測(cè)執(zhí)行無(wú)競(jìng)爭(zhēng)的鎖定指令的方法和裝置”。公開了一種用于在無(wú)序處理器中預(yù)測(cè)執(zhí)行鎖定指令的方法和裝置。在一個(gè)實(shí)施例中,預(yù)測(cè)給定鎖定指令是否會(huì)發(fā)生競(jìng)爭(zhēng)。如果不會(huì),則將該鎖定指令視為可預(yù)測(cè)執(zhí)行的具有正常加載微操作的指令。監(jiān)視器邏輯可查找有關(guān)該鎖定指令實(shí)際發(fā)生競(jìng)爭(zhēng)的指示。如果未找到這種指示,則引退該預(yù)測(cè)的加載微操作和與該鎖定指令對(duì)應(yīng)的其他微操作。然而,如果確實(shí)找到了這種指示,則可重啟鎖定指令,并更新預(yù)測(cè)機(jī)制。
文檔編號(hào)G06F9/38GK101847091SQ201010003959
公開日2010年9月29日 申請(qǐng)日期2005年6月17日 優(yōu)先權(quán)日2004年6月30日
發(fā)明者B·薩哈, M·C·默藤, P·哈馬隆德 申請(qǐng)人:英特爾公司