国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      利用同步開銷以改善多線程性能的機(jī)制的制作方法

      文檔序號:6555116閱讀:238來源:國知局
      專利名稱:利用同步開銷以改善多線程性能的機(jī)制的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及處理指令序列等的處理設(shè)備和系統(tǒng)的領(lǐng)域以及編程該設(shè)備和/或系統(tǒng)的特定指令序列。一些實施例涉及監(jiān)視和/或響應(yīng)這種處理設(shè)備中執(zhí)行資源內(nèi)的條件或事件。
      背景技術(shù)
      目前使用各種機(jī)制改變處理系統(tǒng)內(nèi)的控制流(即所遵循的處理路徑或指令序列)。例如,程序序列內(nèi)的跳轉(zhuǎn)指令清楚明確地導(dǎo)致跳轉(zhuǎn)到新地址。該跳轉(zhuǎn)指令為控制流的明確變化的一個示例,因為該指令引導(dǎo)處理器跳轉(zhuǎn)到一個位置并在該點繼續(xù)執(zhí)行。傳統(tǒng)的跳轉(zhuǎn)指令是“精確的”(或同步),這是因為發(fā)生該跳轉(zhuǎn)是執(zhí)行跳轉(zhuǎn)指令的直接結(jié)果。
      控制流改變的另一個傳統(tǒng)示例為中斷。中斷可以是向諸如處理器的設(shè)備提供的外部信號。處理器的響應(yīng)為跳轉(zhuǎn)到中斷處理程序(handler),該處理程序為處理特殊中斷發(fā)送的事件的程序。中斷通常也是相對精確的,這是因為是由處理器在接收到該中斷后在特定的時間窗口內(nèi)對其進(jìn)行識別并產(chǎn)生響應(yīng)。特別地,在內(nèi)部接收到中斷之后,該中斷通常在下一個指令邊界才起作用。在一些情形中,只允許操作系統(tǒng)或工作于高優(yōu)先級別的其它軟件屏蔽中斷,因此用戶程序沒有機(jī)會啟動或者禁止這些控制流改變事件。
      控制流改變的另一個傳統(tǒng)示例出現(xiàn)于對異常的響應(yīng)。異常通常反應(yīng)預(yù)定義的架構(gòu)條件,該條件為例如數(shù)學(xué)指令滿足特定標(biāo)準(zhǔn)(非正規(guī)、下溢、溢出、非數(shù)字等)的結(jié)果。例如通過設(shè)置控制寄存器中的位,可以屏蔽一些異常。如果出現(xiàn)異常且未被屏蔽,則調(diào)用異常處理程序以處理該異常。
      改變處理器的控制流的另一個技術(shù)為使用斷點。通常在調(diào)試時使用斷點。可將特定的指令地址編程到斷點寄存器。在斷點啟動且到達(dá)目標(biāo)地址時,該處理器采取各種措施(而不是照常繼續(xù)該程序)。斷點允許單步執(zhí)行程序等。
      多線程是一種通過多個不同的線程使用處理器硬件的技術(shù)。多線程處理器可由于各種原因而在各線程之間切換。例如,處理器具有在可用線程之間自動切換的算法。其它處理器使用基于事件切換的多線程(SoEMT),由此諸如緩存缺失的特定事件會引起線程切換。線程切換可以被看作是一種控制流改變,這是因為處理器切換其所執(zhí)行的指令序列或指令流。
      在一個現(xiàn)有技術(shù)參考中,詳細(xì)描述了一種靜止指令(見美國專利號No.6,493,741)。在一個示例中,靜止指令停止一個線程內(nèi)的進(jìn)程,直到計時器到期或者出現(xiàn)向存儲器位置進(jìn)行存儲器寫入為止。因此,諸如靜止指令的指令本身可觸發(fā)包括該靜止指令的線程的進(jìn)程暫時停止并切換到另一個線程。


      在所附各圖中以示例的方式而非限制的方式闡述本發(fā)明。
      圖1闡述了可以檢測和響應(yīng)執(zhí)行資源(execution resource)的處理條件的系統(tǒng)的實施例。
      圖2闡述了圖1的系統(tǒng)的一個實施例的工作流程圖。
      圖3闡述了圖1的系統(tǒng)的另一個實施例的工作流程圖。
      圖4闡述了能夠響應(yīng)多個不同性能事件(performance event)和/或復(fù)合性能事件的系統(tǒng)的另一個實施例。
      圖5a闡述了可識別復(fù)合事件的監(jiān)視器的一個實施例。
      圖5b闡述了監(jiān)視器的另一個實施例。
      圖5c闡述了監(jiān)視器的另一個實施例。
      圖6闡述了根據(jù)一個實施例的,響應(yīng)程序可定義的觸發(fā)器而啟動輔助線程(helper thread)的用于用戶程序執(zhí)行的流程圖。
      圖7闡述了根據(jù)一個實施例的細(xì)化監(jiān)視器設(shè)置的過程的流程圖。
      圖8闡述了根據(jù)一個實施例的更新軟件的過程的流程圖。
      圖9a闡述了啟動多個嵌套的輔助線程以輔助處理程序的流程圖。
      圖9b闡述了支持虛擬線程的一個實施例的線程切換邏輯。
      圖10a闡述了上下文相關(guān)的事件圖解矢量和屏蔽(mask)實現(xiàn)的一個實施例。
      圖10b闡述了上下文相關(guān)的事件圖解矢量和屏蔽實現(xiàn)的一個實施例。
      圖11闡述了基于監(jiān)視器事件而執(zhí)行線程切換的多線程處理器的一個實施例。
      圖12闡述了對同步對象具有事件檢測和處理能力的系統(tǒng)的一個實施例。
      圖13闡述了根據(jù)多個實施例的同步事件處理的流程圖。
      圖14闡述了基于事件處理程序線程的鎖剖析(lock profiling)的線程調(diào)度改進(jìn)的流程圖。
      具體實施例方式
      下述闡述了可啟動其它線程的可編程事件驅(qū)動的放棄(yield)機(jī)制的實施例。在下述描述中,列出了諸如處理器類型、微架構(gòu)條件、事件、啟動機(jī)制等的許多具體細(xì)節(jié),其目的是提供對本發(fā)明的更徹底的了解。然而,本領(lǐng)域技術(shù)人員將會了解到,不使用這些具體細(xì)節(jié)也可以實施本發(fā)明。此外,并未詳細(xì)示出一些眾所周知的結(jié)構(gòu),電路等,目的是避免不必要地使本發(fā)明變得不明確。
      在一些實施例中,所公開的技術(shù)允許在執(zhí)行程序時,該程序能夠積極地監(jiān)視并響應(yīng)執(zhí)行該程序的執(zhí)行資源的條件。事實上,這些實施例可包括實時的執(zhí)行資源工作條件反饋以改善性能。如果執(zhí)行資源遇到指令延遲條件,可中斷該程序指令以做調(diào)整。在一些實施例中,可啟動一處理程序,該處理程序可產(chǎn)生輔助線程以試圖改善原始線程的指令。在其它實施例中,可通過切換到非輔助線程的另一個程序線程而實現(xiàn)中斷。這些及其它實施例在某些情況下可有利地改善處理能力和/或優(yōu)化以適于特殊硬件。
      參考圖1,描述可以檢測并響應(yīng)執(zhí)行資源的處理條件的系統(tǒng)的一個實施例。在圖1的實施例中,執(zhí)行資源105、監(jiān)視器110、和啟動邏輯120形成能夠執(zhí)行指令的處理器100的一部分。在某些實施例中該執(zhí)行資源包括可集成到單個元件或集成電路的硬件資源。然而,執(zhí)行資源可包括軟件或固件資源或者硬件及軟件和/或可用于執(zhí)行程序指令的固件的任意組合。例如,固件可用作提取層的一部分或者可為處理硬件增加功能,軟件亦可如此。軟件還可以用于仿真指令集的一部分或全部,或者以其它方式輔助處理。
      該處理器為可執(zhí)行指令的任何不同類型的處理器。例如,該處理器可以是通用處理器,例如Pentium處理器家族或Itanium處理器家族或來自Intel公司的其它處理器家族中的一種處理器,或者是來自其它公司的處理器。因此,該處理器可以是精簡指令集計算(RISC)處理器、復(fù)雜指令集計算(CISC)處理器、超長指令字(VLIW)處理器、或者任何混合或備選處理器類型。此外,例如網(wǎng)絡(luò)或通信處理器、協(xié)同處理器、嵌入處理器、壓縮引擎、圖像處理器等的專用處理器可以使用這里公開的技術(shù)。由于集成的趨勢仍在繼續(xù)且處理器變得更加復(fù)雜,對內(nèi)部性能指示器進(jìn)行監(jiān)視并作出反應(yīng)的必要性進(jìn)一步增大,因此使得更加需要目前所公開的技術(shù)。然而,由于該技術(shù)領(lǐng)域內(nèi)的技術(shù)進(jìn)展快速,難以預(yù)見所公開的技術(shù)的所有應(yīng)用,盡管其可以廣泛應(yīng)用于可執(zhí)行程序序列的復(fù)雜硬件。
      如圖1所示,處理器100耦合到諸如存儲器的存儲介質(zhì)150。存儲介質(zhì)150可以為具有各種層次水平的存儲器子系統(tǒng),其包括但不限于各種水平的緩沖存儲器、諸如動態(tài)隨機(jī)訪問存儲器等的系統(tǒng)存儲器、以及諸如閃存(例如存儲棒等)、磁盤或光盤的非易失性存儲器。如圖所示,該存儲介質(zhì)存儲程序160以及處理程序和/或諸如輔助線程170的其它線程。
      為了允許監(jiān)視器監(jiān)視預(yù)期事件,監(jiān)視器110可耦合到執(zhí)行資源的各個部分以檢測具體條件或者被告知特定的微架構(gòu)事件。信號線可連接到監(jiān)視器110,或者該監(jiān)視器可以策略性地和相關(guān)資源放置或集成在一起。該監(jiān)視器可包括各種可編程邏輯或軟件或固件元件或者可以定制設(shè)計成檢測具體條件。該監(jiān)視器追蹤各種事件或條件,且如果出現(xiàn)該監(jiān)視器應(yīng)檢測的事件或條件,則向執(zhí)行資源105發(fā)出信號以中斷正常的控制流,否則程序?qū)丛撜?刂屏鲌?zhí)行。如圖1所示,該中斷會導(dǎo)致調(diào)用事件處理程序或出現(xiàn)線程切換。
      特殊可檢測條件的一個示例為緩沖存儲器中的數(shù)據(jù)缺失,該數(shù)據(jù)缺失會導(dǎo)致出現(xiàn)緩存缺失。實際上,程序可以產(chǎn)生一種存儲器訪問方式,該方式會導(dǎo)致重復(fù)的緩存缺失,由此降低性能。在某一時間段內(nèi)或者在某部分代碼執(zhí)行期間出現(xiàn)特定數(shù)目的緩存缺失,這就是表示執(zhí)行該部分代碼時進(jìn)展相對較慢的事件的一個示例。
      可能為進(jìn)展緩慢指示器的其它可檢測事件涉及執(zhí)行資源的各種其它微架構(gòu)或結(jié)構(gòu)細(xì)節(jié)。監(jiān)視器可檢測涉及下述一種或多種的條件資源停止、緩存事件、報廢事件、分支或分支預(yù)計結(jié)果、異常、總線事件、或者通常受到監(jiān)視的或影響性能的各種其它事件或條件。該監(jiān)視器會計算這些事件或條件,或者對這些事件或條件計時、定量、或表征,且當(dāng)出現(xiàn)和一個或多個事件或條件相關(guān)的特殊公制(metric)時可對該監(jiān)視器編程。
      圖2闡述了圖1的系統(tǒng)的一個實施例的工作流程圖。如圖2的區(qū)塊200所示,程序160可設(shè)置條件從而引發(fā)執(zhí)行控制流的變化。例如,啟動邏輯120可同時控制監(jiān)視器的啟動以及監(jiān)視器將要檢測的(多個)事件。備選地,啟動邏輯120可啟動和/或屏蔽各事件,監(jiān)視器110本身也是可編程的,從而在規(guī)定被追蹤的執(zhí)行資源或系統(tǒng)內(nèi)的事件或條件方面具有更大的靈活動。在任一情況下,程序160本身會規(guī)定在其自身執(zhí)行時待觀察的條件。程序160還提供在受監(jiān)視的條件出現(xiàn)時被啟動的處理程序或線程170。例如,該程序可以是這樣的程序,即,包括主線程和輔助線程或者在程序所指定的條件出現(xiàn)時試圖改善主線程的執(zhí)行的輔助例行程序(helper routine)。
      如區(qū)塊205所示,執(zhí)行該程序指令。該程序的執(zhí)行導(dǎo)致執(zhí)行資源的狀態(tài)改變。例如,在執(zhí)行該程序時會發(fā)生或者出現(xiàn)抑制向前進(jìn)展的各種條件。如區(qū)塊210所示,監(jiān)視各種處理公制和/或微架構(gòu)條件以確定是否出現(xiàn)區(qū)塊200中編程的觸發(fā)事件。如果在區(qū)塊210內(nèi)不出現(xiàn)觸發(fā)狀態(tài),則不觸發(fā)該監(jiān)視器且通過返回到區(qū)塊205而繼續(xù)程序的執(zhí)行。
      在一些情況中,該觸發(fā)狀態(tài)只表示和任一單個指令的執(zhí)行的間接關(guān)系。例如,在現(xiàn)有技術(shù)中,當(dāng)指令指針到達(dá)設(shè)計地址時,斷點檢測器通常產(chǎn)生暫停。該斷點是精確的,這是因為特殊指令(例如其地址)直接觸發(fā)該暫停。同樣地,現(xiàn)有技術(shù)靜止指令本身導(dǎo)致線程至少暫時停止。相反,使用這里所公開的技術(shù)的一些實施例觸發(fā)一系列條件的控制流改變,不一定要由單個指令引發(fā)該改變,而是可由整個程序流和/或系統(tǒng)環(huán)境引發(fā)該改變。因此,盡管可在單個系統(tǒng)內(nèi)的同一個指令執(zhí)行狀態(tài)重復(fù)地觸發(fā)該監(jiān)視器,但其它條件、環(huán)境、系統(tǒng)等可引發(fā)相同程序的不同觸發(fā)點。就此而言,這里所公開的技術(shù)在某些情形下提供了產(chǎn)生控制流改變的不精確或不同步的機(jī)制,該機(jī)制并未和指令執(zhí)行邊界直接相關(guān)。此外,在某些實施例中,該不精確的機(jī)制會以小于各個指令的小顆粒狀(fine granularity)測試各個事件,和/或?qū)κ录淖R別會延遲一段時間,這是因為架構(gòu)正確性并不取決于在任何具體時間點執(zhí)行的任何提高處理速率的輔助例行程序。
      當(dāng)在區(qū)塊210中監(jiān)視器檢測到觸發(fā)狀態(tài)時,程序的處理被中斷,如區(qū)塊215所示。通常,該系統(tǒng)會相應(yīng)地調(diào)整,這是因為該程序的處理效率比較低或者處理的方式不同于編程人員所預(yù)期的方式。例如,可以調(diào)用諸如另一個程序部分的另一個軟件例行程序。該其它的程序部分可以是和原始線程無關(guān)的另一個線程,或者可以是來自原始線程的輔助處理指令的輔助線程,例如通過預(yù)取出數(shù)據(jù)以減小緩存缺失。備選地,程序透明(例如硬件)機(jī)制可執(zhí)行一些優(yōu)化、重新配置(包括但不限于監(jiān)視器設(shè)置的重新配置)、資源的重新分配等,從而有希望改善處理。
      圖3闡述了調(diào)用輔助線程的一個示例。特別地,圖3的流程圖詳細(xì)描述了圖1系統(tǒng)的一個實施例的工作,其中執(zhí)行資源為多線程資源,且當(dāng)出現(xiàn)特定觸發(fā)條件時該程序調(diào)用輔助線程。因此,如區(qū)塊300所示,第一線程(例如主程序)設(shè)置監(jiān)視器條件。該條件可以是這里所討論的各種條件中的一種或多種。第一線程執(zhí)行一代碼部分,如區(qū)塊310所示。如果在區(qū)塊320中測試確定未出現(xiàn)觸發(fā)條件,則繼續(xù)執(zhí)行該代碼部分,如區(qū)塊310所示。
      如果該觸發(fā)條件確實發(fā)生,則啟動輔助線程以輔助第一線程,如區(qū)塊330所示??捎芍T如處理程序的例行程序啟動該輔助線程,或者只由線程開關(guān)啟動該輔助線程。例如,在一個實施例中,監(jiān)視器發(fā)送給執(zhí)行資源的觸發(fā)條件會導(dǎo)致執(zhí)行資源跳到產(chǎn)生輔助線程的事件處理程序。在另一個實施例中,該輔助線程只是其它活動線程之一。在又一個實施例中,可由處理器提供一個或者多個特殊的輔助線程執(zhí)行存儲槽(slot),該監(jiān)視器會導(dǎo)致切換到來自這些存儲槽之一的輔助線程。如區(qū)塊340所示,兩個線程均繼續(xù)執(zhí)行。如果順利的話,該輔助線程向前運行并清除會導(dǎo)致第一線程停止或低效運行的條件。
      圖4闡述了能夠響應(yīng)多個不同性能事件和/或復(fù)合性能事件的系統(tǒng)的另一個實施例。在圖4的實施例中,執(zhí)行資源400被示成包括一組N個監(jiān)視器410-1至410-N。此外,提供了事件圖解矢量(ESV)存儲位置420和事件圖解矢量屏蔽(ESVM)存儲位置425。圖4的實施例示出了多個監(jiān)視器,其數(shù)目(N)對應(yīng)于事件圖解矢量和事件圖解屏蔽矢量中的位數(shù)。在其它實施例中,監(jiān)視器的數(shù)目可能不同于這些矢量的數(shù)目,監(jiān)視器可以和該位數(shù)直接關(guān)聯(lián)或者沒有直接關(guān)聯(lián)。例如,在一些實施例中,涉及多個監(jiān)視器的條件和單個矢量位相關(guān)聯(lián)。
      執(zhí)行資源400可選地耦合到事件描述符表430(EDT),可在該處理器上或者在協(xié)同處理器或系統(tǒng)存儲器內(nèi)局部地實現(xiàn)該事件描述符表??刂屏鬟壿?35耦合到監(jiān)視器410-1至410-N,并接收來自事件圖解矢量和事件圖解矢量屏蔽的值。當(dāng)根據(jù)該事件圖解矢量和事件圖解矢量來屏蔽啟動一個或多個監(jiān)視器檢測到的條件時,控制流邏輯435改變處理邏輯的控制流。
      圖4的實施例還闡述了解碼邏輯402和一組機(jī)器或模式特用寄存器404(MSR)。解碼邏輯402和模式專用寄存器之一或者兩者可同時用于編程和/或啟動該監(jiān)視器和事件圖解矢量和屏蔽。例如,MSR可用于編程觸發(fā)監(jiān)視器的事件的類型或數(shù)目。MSR還可用于編程事件圖解矢量和屏蔽。備選地,將被解碼器402解碼的一個或多個新的專用指令可用于編程該監(jiān)視器和事件圖解矢量及屏蔽之一或兩者。例如,當(dāng)出現(xiàn)特定條件組時,可使用放棄(yield)指令啟動程序處理的中斷??捎蛇\算數(shù)向該放棄指令指定部分或所有這些條件,或者可以在其執(zhí)行之前編程??捎山獯a器402解碼該放棄指令以觸發(fā)微碼例行程序,從而直接向信號專用邏輯產(chǎn)生相應(yīng)的微操作或微指令或者微操作序列,或者啟動協(xié)同處理器或?qū)嵤┰摲艞壒δ?。在一些實施例中,放棄的概念可以恰?dāng)?shù)孛枋鲞@樣的指令,即在執(zhí)行該放棄指令之后可繼續(xù)執(zhí)行某一線程,但由于另一個線程或處理程序的執(zhí)行而在某一點減緩該線程的執(zhí)行。例如大量單線程的程序可以調(diào)用額外的輔助線程并和處理器分享這些額外的輔助線程。
      在圖4的實施例中,存儲器440包括事件處理程序450和主線程460。在一些實施例中,事件描述符表可存儲在和主線程460及處理程序450相同的存儲器內(nèi)或相同的存儲器層次內(nèi)。如前所述,該處理程序可產(chǎn)生輔助線程以幫助有效地執(zhí)行主程序。
      存儲器440還可存儲更新模塊442以通過通信接口444進(jìn)行通信。更新模塊442可以是硬件模塊或者軟件例行程序,由執(zhí)行資源執(zhí)行該軟件例行程序以獲得將被編程到各個監(jiān)視器和/或啟動邏輯的新條件。更新模塊442還可獲得新的輔助線程或例行程序。例如,可使用軟件程序從軟件程序廠家下載這些模塊以提供更佳的性能。因此,網(wǎng)絡(luò)接口444可以是允許通過通信通道傳輸信息的任何網(wǎng)絡(luò)和/或通信接口。在一些情形中,該網(wǎng)絡(luò)接口可接到因特網(wǎng)以下載新的條件和/或輔助例行程序或線程。
      在一個實施例中,事件圖解矢量的各位表示出現(xiàn)或不出現(xiàn)特定的事件,該特定事件可能是反應(yīng)(和/或通過布爾運算進(jìn)行表述的)各種條件或其它事件的復(fù)合事件。特定事件的出現(xiàn)會設(shè)置事件圖解矢量中的位。事件圖解矢量中的各位在事件圖解屏蔽矢量中具有相對應(yīng)的位。如果該屏蔽位表示該特定事件被屏蔽,則控制流邏輯435忽略該事件,盡管由于該事件的出現(xiàn)使事件圖解矢量中的該位保持設(shè)定。用戶在不屏蔽事件時可以選擇是否清除該事件圖解矢量。因此,可將某一事件屏蔽一段時間而稍后處理。在一些實施例中,根據(jù)諸如事件更新、采樣、和復(fù)位(或ESV內(nèi)觸發(fā)器事件的保持事件)之間關(guān)系的各種問題,用戶可以選擇規(guī)定該觸發(fā)器為電平觸發(fā)器或邊沿觸發(fā)器。
      如果屏蔽位表示某一事件未被屏蔽,則在本實施例中控制流邏輯435調(diào)用該特定事件的事件處理程序??刂屏鬟壿?35可基于事件圖解矢量中位的位置而指向事件描述符表430,因此該事件描述符表具有和事件圖解矢量中的N位相對應(yīng)的N個條目。該事件描述符表可以包括一處理程序地址,該地址指示控制流邏輯435應(yīng)將執(zhí)行重新定向的地址,該事件描述符表還包括在特定實施例中有用的其它信息。例如,可在該事件描述符表中保持或更新優(yōu)先水平、線程、處理、和/或其它信息。
      在另一個實施例中,可能不需要事件描述符表430或者其為單個條目,該條目指示單個事件處理程序處理所有事件的地址。在這種情況下,該條目可以存儲在寄存器中或者其它處理器存儲位置中。在一個實施例中,可以使用單個處理程序,且該處理程序可訪問該事件圖解矢量以確定所出現(xiàn)的事件以及該如何響應(yīng)。在另一個實施例中,該事件圖解矢量可共同地定義引發(fā)控制流邏輯435調(diào)用處理程序的事件。換而言之,該事件圖解矢量可代表一起表達(dá)一個事件的各種條件。例如,該事件圖解屏蔽矢量可用于指定事件圖解矢量所指示的哪個事件必須發(fā)生以觸發(fā)處理程序的執(zhí)行。各位可代表達(dá)到可編程條件的監(jiān)視器。當(dāng)所有的未屏蔽監(jiān)視器達(dá)到其各自的指定條件時,則調(diào)用處理程序。因此,整個事件圖解處理器可用于指定將觸發(fā)處理程序執(zhí)行的某些復(fù)雜的復(fù)合條件。
      在另一個實施例中,可以使用多個事件圖解矢量和屏蔽來指定不同的條件。這些不同的矢量可通過該事件描述符表或某些其它機(jī)制而指向不同的處理程序。在另一個實施例中,可將一個或多個事件圖解矢量的某些位分組,從而形成觸發(fā)處理程序的調(diào)用的事件。各種其它不同的改變對本領(lǐng)域技術(shù)人員而言是顯而易見的。
      圖5a闡述了監(jiān)視器500的一個實施例,該監(jiān)視器是可編程的并能夠和各種性能監(jiān)視器連接以產(chǎn)生復(fù)合事件的信號。例如,該性能監(jiān)視器可記錄各種微架構(gòu)事件或條件的出現(xiàn),例如,在緩存層次的特定水平引起的緩存缺失、分支報廢、分支預(yù)計錯誤(或錯誤預(yù)計的分支的報廢)、追蹤緩存輸送模式變化或事件、分支預(yù)計單元取出請求、存儲器請求的取消、緩存線分裂(完成分裂負(fù)載、存儲等的計數(shù))、重放事件、各種類型的總線交換(例如鎖定、瞬時讀寫、回寫、無效)、總線定序器內(nèi)的分配(或僅特定類型)、數(shù)字輔助(下溢、非正規(guī)等)、特定類型的指令或微操作(uOP)的執(zhí)行/報廢、機(jī)器清零(或清理流水線)、資源停止(寄存器重命名資源、流水線等)、處理標(biāo)記的uOP、指令或uOP報廢、緩存內(nèi)線的分配(和/或為特定的狀態(tài)(例如M))、停止取出大量的周期指令、停止大量周期指令長度解碼器、取大量的緩存、分配在緩存內(nèi)(或收回)的大量的線等。只監(jiān)視微架構(gòu)事件或條件的一些示例。各種其它可能性以及這些或其它條件的組合對本領(lǐng)域技術(shù)人員而言是顯而易見的。此外,可以使用在任一公開實施例內(nèi)所公開的任一監(jiān)視器監(jiān)視這些和/或其它條件或者事件。
      通常在處理器內(nèi)包括性能監(jiān)視器以對特定事件進(jìn)行計數(shù)。通過制造商定義的接口,例如由知名的Intel處理器支持的RDPMC指令的專用處理器宏指令,編程人員可以讀取該性能監(jiān)視器的讀數(shù)。見Intel SoftwareDevelopers Guide for the Pentium 4Processor的卷III的附錄A。在一些實施例中,可以使用其它內(nèi)部或微指令或者微操作讀取性能計數(shù)器。因此,可以將例如性能監(jiān)視器和所公開的技術(shù)結(jié)合使用。在一些情形中,調(diào)整可編程的性能監(jiān)視器以提供產(chǎn)生事件信號的能力。在其它實施例中,可通過其它監(jiān)視器讀取性能監(jiān)視器以建立事件。
      在圖5a的實施例中,監(jiān)視器500可包括一組可編程條目。各個條目可包括條目號510、啟動域511、用于指定一組性能監(jiān)視器之一的性能監(jiān)視器號(EMON#)、以及觸發(fā)條件514。該觸發(fā)條件可以為例如到達(dá)特定的計數(shù)、落在特定范圍內(nèi)的計數(shù)、計數(shù)之差等。監(jiān)視器500可包括待讀取的邏輯或者被耦合以接收來自指定的性能監(jiān)視器的計數(shù)。當(dāng)出現(xiàn)各種M條件時,監(jiān)視器500向控制流邏輯發(fā)出信號。通過選擇性地編程各個條目的啟動域,可以使用該M個條目的子集。
      圖5b闡述了監(jiān)視器520的另一個實施例。監(jiān)視器520代表定制的復(fù)合事件監(jiān)視器。監(jiān)視器520通過信號線528-1至528-X接收來自各種執(zhí)行資源或資源部分的一組信號,并通過組合邏輯530將其組合。如果監(jiān)視器520接收到信號的恰當(dāng)組合,則該監(jiān)視器通過輸出信號線532向控制流邏輯發(fā)出信號。
      圖5c闡述了監(jiān)視器540的另一個實施例。監(jiān)視器540包括具有M個條目的表。各個條目包括啟動域552、條件域554、以及觸發(fā)域556。該條件域可被編程為規(guī)定待監(jiān)視的輸入信號的組合。這些條件與諸如性能監(jiān)視器的其它事件檢測結(jié)構(gòu)可以相連或者不相連,因此這些條件比圖5a中討論的那些條件相比更為一般。觸發(fā)域556可規(guī)定需要向控制流邏輯發(fā)送信號的那些輸入信號的狀態(tài)。此外,可以通過啟動域552啟動或禁止各個條目。在一些實施例中,該條件和觸發(fā)域可以組合。這些或其它類型的,已知或者可獲得的,更簡單或者更復(fù)雜的監(jiān)視器的各種組合對于本領(lǐng)域技術(shù)人員而言是顯而易見的。
      圖6闡述了根據(jù)一個實施例的,響應(yīng)程序可定義的觸發(fā)器而啟動輔助線程的用戶程序執(zhí)行的流程圖。在區(qū)塊600中,程序首先測試是否具備放棄能力。“放棄能力”在此被用作基于條件或事件發(fā)生而中斷處理的能力的簡寫。備選地,對于放棄能力支撐的測試,該放棄能力可以使用之前定義為不工作的工作碼和/或之前未使用或未定義的MSR,故放棄能力將不會影響沒有該能力的處理器。也可以通過檢查特殊的CPU-ID而查詢是否存在該能力,其中該CPU-ID編碼產(chǎn)生表明特定處理器或者平臺上是否存在該能力的提示。類似地,諸如Itanium的PAL(處理器提取層)調(diào)用或SALE(系統(tǒng)提取層環(huán)境)的特殊指令可以用于查詢處理器具體配置信息,該處理器具體配置信息包括這種程序可定義的放棄能力的可用性。假設(shè)存在該放棄能力,則用戶程序可以讀取和/或復(fù)位各種計數(shù)器,如區(qū)塊610所示。例如,可以讀取性能監(jiān)視器計數(shù)器,使得可計算出增量(delta),或者如果存在該能力則將該值復(fù)位。
      如區(qū)塊620所示,用戶程序隨后設(shè)置輔助線程觸發(fā)條件。在低的優(yōu)先級別(例如用戶級別)下可以獲得該放棄能力,使得任何程序或絕大部例行程序可以使用該特征。例如,在Pentium處理器家族等中,第三環(huán)的優(yōu)先水平可以獲得該放棄能力。因此,用戶程序自身能夠設(shè)置其自己的基于性能的觸發(fā)條件。如果應(yīng)用命令或操作系統(tǒng)可以提供持久的監(jiān)視能力,則了解存在這種上下文相關(guān)的監(jiān)視器配置的用戶程序或操作系統(tǒng)會選擇越過線程/處理上下文開關(guān)而存儲或恢復(fù)該應(yīng)用特定的監(jiān)視器配置/設(shè)置。
      如區(qū)塊630所示,用戶程序在編程該放棄條件之后繼續(xù)執(zhí)行。在區(qū)塊640中測試是否出現(xiàn)放棄條件。如果并未出現(xiàn)放棄條件,則該程序繼續(xù)執(zhí)行,如區(qū)塊630所示。如果出現(xiàn)該放棄條件,則輔助線程被啟動,如區(qū)塊650所示。圖6的流程表趨于暗示出現(xiàn)對各事件的同步輪詢,在一些實施例中可以使用該方法。然而,一些實施例在事件發(fā)生時對事件的響應(yīng)不同步,或者在事件發(fā)生時的大量時鐘周期內(nèi)對其產(chǎn)生響應(yīng),而不是按特定間隔對事件進(jìn)行輪詢。在一些實施例中,可以在一個循環(huán)或者其它代碼部分之外設(shè)置監(jiān)視器條件以檢測特殊條件。通過下述主線程和輔助線程的偽代碼示例演示這個概念。
      <pre listing-type="program-listing"><![CDATA[main()  {   CreateThread(T)   WaitForEvent()   n=NodeArray
         setup Helper Trigger//Intrinsic   while(n and remaining)   {   work()   n->i=n->next->j+n->next->k+n->next->1   n=n->next   remaining--   //Every Stride Time   // global_n=n   // global_r=remaining   // SetEvent()   }   disable Helper Trigger//Instrinsic  }T()  {   Do Stride times   n->i=n->next->j+n->next->k+n->next->1   n=n->next   remaining--SetEvent()  while(remaining)   {   Do Stride times   n->i=n->next->j+n->next->k+n->next->1   //Responsible for most effective prefetch   //due to run-ahead   n=n->next   remaining--   WaitForEvent()   if(remaining<global_r)//Detect Run-Behind   remaining=global_r//Adjust by jump ahead   n=global_n   } }]]></pre>在循環(huán)之外設(shè)置觸發(fā)器的一個優(yōu)點為在循環(huán)之內(nèi)的編譯器優(yōu)化將不受約束。例如,對于包括諸如可以用于啟動放棄能力的固有參數(shù)(intrinsic)的循環(huán)或代碼段,某些編譯器就不會對其進(jìn)行優(yōu)化。通過將這些固有參數(shù)置于循環(huán)之外,可以除去編譯器優(yōu)化的干擾。
      圖7闡述了根據(jù)一個實施例的細(xì)化放棄設(shè)置的過程的流程圖。使用具有放棄能力的處理器等,編程人員可以設(shè)計各種情形下都可被調(diào)用的程序以及輔助例行程序,如區(qū)塊700所示。因此,可以為編程人員所預(yù)期的阻礙執(zhí)行的各種條件提供輔助例行程序。如果在執(zhí)行程序時需要這些例行程序且在需要這些例行程序的時候,處理器可以調(diào)用這些例行程序。該放棄設(shè)置可包括事件圖解矢量和屏蔽矢量和/或監(jiān)視器設(shè)置等。
      在具體處理器上,特定的放棄設(shè)置會導(dǎo)致有利的執(zhí)行結(jié)果。然而,手動地作出該確定是非常困難的,因此更好的是根據(jù)經(jīng)驗推導(dǎo)。因此,編譯器或其它調(diào)整軟件(例如Intel VTune代碼分析器)使用不同放棄配置來重復(fù)模擬該代碼,由此導(dǎo)出最佳或者預(yù)期的設(shè)置,如區(qū)塊710所示。因此,可以選擇運行時間的放棄設(shè)置的預(yù)期值,如區(qū)塊720所示。可以在一個處理器的多個不同版本或者多個不同的處理器上或者在多個不同的系統(tǒng)上模擬程序,從而導(dǎo)出不同的放棄設(shè)置。程序可以使用諸如CPU-ID的系統(tǒng)或處理器標(biāo)記來選擇運行時采用哪個放棄設(shè)置,如區(qū)塊730所示。
      此外,使用緊湊的設(shè)置組來優(yōu)化性能便于軟件更新。例如,當(dāng)新的處理器發(fā)布時,可以下載新的放棄值以優(yōu)化特定處理器的性能,或者用新的放棄值更新軟件。這些新的值允許二進(jìn)制或者模數(shù)調(diào)整,這基本上不會干擾或者危害現(xiàn)有軟件的功能。
      圖8闡述了根據(jù)一個實施例的更新軟件過程的流程圖。如區(qū)塊800所示,發(fā)布了一個新版本的微處理器。新的版本具有和諸如緩存缺失的微架構(gòu)事件相關(guān)的不同的延遲時間。因此由于新的緩存缺失潛伏,之前被寫入以啟動輔助線程的例行程序在特定數(shù)目的緩存缺失之后有效性減弱。因此,重新優(yōu)化該放棄設(shè)置,如區(qū)塊810所示。
      一旦導(dǎo)出新的設(shè)置,則可以更新該程序(例如通過可能為該程序一部分的升級模塊),如區(qū)塊820所示??梢詫Ψ艞壷颠M(jìn)行調(diào)整或者添加,這取決于實施的細(xì)節(jié)。此外,可以添加附加的或不同的輔助例行程序,從而幫助新處理器的實施。在任一情形中,在軟件的初始傳送后,放棄能力可以啟動性能增強(qiáng)的傳送。在許多場合中,這種能力是非常有利的,并可以只用于提供新的優(yōu)化而不對基礎(chǔ)硬件進(jìn)行任何改動。此外,在某些情況下可以維持基礎(chǔ)軟件。例如,如果寫入輔助例行程序以處理綜合事件(例如嚴(yán)重的緩存缺失),則可以改變不同硬件上觸發(fā)該例行程序的事件的組成,而不改變真正的例行程序本身。例如,可以改變監(jiān)視器配置值和/或ESV/ESVM值,而該程序保持不變。
      通過創(chuàng)建嵌套的輔助線程,可以進(jìn)一步增強(qiáng)所公開的技術(shù)的有效性,圖9a示出了這種用法的一個示例。在圖9a的實施例中,在區(qū)塊900程序內(nèi),程序設(shè)置放棄事件。在區(qū)塊910中,程序繼續(xù)執(zhí)行。在區(qū)塊920中,測試是否出現(xiàn)放棄事件(觸發(fā)器)。如果沒有出現(xiàn)放棄事件,該程序繼續(xù)執(zhí)行,如區(qū)塊910所示。如果出現(xiàn)放棄事件,則啟動輔助線程,如區(qū)塊925所示。輔助線程設(shè)置另一個放棄事件,如區(qū)塊930所示。因此,該輔助線程有效地識別表示進(jìn)一步的處理幫助是有用的另一個條件。該另外的條件表示第一個輔助線程是否是有效的,和/或可設(shè)計成表示另一個條件(其中通過啟動第一個輔助線程或者盡管啟動了第一個輔助線程也懷疑該條件)。
      如區(qū)塊940所示,該程序和輔助線程都被啟動并且執(zhí)行線程。從多線程處理資源中這些線程均被啟動且執(zhí)行的意義來講,這些線程同時執(zhí)行。在區(qū)塊950中,測試程序和輔助線程的組合是否發(fā)生新的觸發(fā)條件。如果不發(fā)生新的觸發(fā)條件,則繼續(xù)執(zhí)行這兩個線程,如區(qū)塊940所示。如果確實出現(xiàn)新的觸發(fā)條件,則啟動第二或嵌套的輔助線程,如區(qū)塊960所示。之后,該程序和多個輔助線程被啟動并執(zhí)行,如區(qū)塊962所示。因此在某些實施例中可以采用多個嵌套的輔助線程。
      在一個實施例中,可借助虛擬線程啟動多個輔助線程(可以是嵌套的或者非嵌套的)。處理器不是將其全部資源組用于擴(kuò)展其能處理的線程的數(shù)目,處理器可有效地緩存(在緩存位置、寄存器位置、或其它存儲位置)上下文數(shù)據(jù)。因此,一個物理線程存儲槽可以在多個線程之間快速切換。
      例如,圖9b的實施例闡述了根據(jù)一個實施例的線程開關(guān)邏輯,該線程開關(guān)邏輯允許將虛擬線程切換到數(shù)目有限的物理線程存儲槽,這些存儲槽使硬件專門用于維持線程上下文。在圖9b的實施例中,多個輔助線程965-1至965-k被呈現(xiàn)給虛擬線程開關(guān)970。該虛擬線程開關(guān)970還可包括其它邏輯和/或微碼(未示出),從而交換新選擇的輔助線程和先前選擇的輔助線程之間的上下文信息??梢酝ㄟ^同步或不同步刺激觸發(fā)該虛擬線程開關(guān)970以切換線程。例如,由放棄類型的指令定義的不同步事件可導(dǎo)致虛擬線程之間的線程交換。此外,輔助線程可包括諸如終止、靜止、或其它類型停止執(zhí)行的指令的同步工具,從而向另一個線程發(fā)送切換信號。該虛擬線程開關(guān)邏輯970向處理器線程開關(guān)邏輯980呈現(xiàn)了虛擬線程的一個子集(例如在圖9b的實施例中,虛擬線程之一)。處理器線程開關(guān)邏輯980隨后在輔助線程之一例如第一線程967-1和其它N-1個線程(直至線程967-N)之間切換。
      在一些實施例中,優(yōu)選地將該放棄能力限制到特定的程序或線程。因此,可以使該放棄能力變成上下文相關(guān)的或非雜亂的。例如,圖10a闡述了上下文相關(guān)的事件圖解矢量和屏蔽實現(xiàn)的一個實施例。在圖10a的實施例中,存儲區(qū)1000包括和各個事件圖解矢量相關(guān)的上下文指示器域1010以及屏蔽存儲位置1020。該上下文指示器域識別各個事件圖解矢量和屏蔽對所應(yīng)用的上下文。例如,可以使用諸如控制寄存器(例如x86處理器中指示操作系統(tǒng)進(jìn)程ID的CR3)的值的上下文值。附加或備選地,可以使用線程數(shù)目信息定義上下文。因此,在一些實施例中,當(dāng)特定的上下文啟動時,則可啟動特定的上下文相關(guān)事件以中斷進(jìn)程。因此,該放棄機(jī)制明確之處在于其事件只影響特定的上下文。
      圖10b闡述了上下文相關(guān)的圖解矢量和屏蔽實現(xiàn)的另一個實施例。在圖10b的實施例中,通過為該k個上下文的每一個上下文提供一組事件圖解矢量和屏蔽位置1050-1至1050-k,則可處理該上下文的整數(shù)k。例如,在多線程處理器中存在k個線程,每個線程具有一個事件圖解矢量和屏蔽或類似的啟動放棄機(jī)制。注意,在其它實施例中,只追蹤特定上下文中的事件是不可取的。例如,事件可以反應(yīng)整體的進(jìn)程活動,和/或事件可與多個相關(guān)線程有關(guān)或者由多個相關(guān)線程所致。
      圖11闡述了基于監(jiān)視器或放棄類型事件而執(zhí)行線程切換的多線程處理器的一個實施例。盡管已經(jīng)討論的許多實施例通過引發(fā)處理程序執(zhí)行而中斷進(jìn)程流,其它實施例可定義多線程處理器中引發(fā)線程切換的事件。例如,在圖11的實施例中,線程切換邏輯被耦合以接收來自一組N個監(jiān)視器1110-1至1110-N的信號。線程切換邏輯1105還可耦合到一組或多組事件圖解和屏蔽對1130-1至1130-p(p為正整數(shù))。該事件圖解和屏蔽對允許線程開關(guān)在確定何時切換線程時組合和/或忽略特定的監(jiān)視器事件。
      執(zhí)行資源1120支持p個線程的執(zhí)行,但不關(guān)心是否指令屬于特定的線程。該執(zhí)行資源可以是執(zhí)行單元、取出邏輯、解碼器、或者執(zhí)行指令中使用的任何其它資源。多路復(fù)用器1115或其它選擇資源在各種線程之間作出判斷以確定哪個線程訪問執(zhí)行資源1120。本領(lǐng)域技術(shù)人員將會意識到,在多線程處理器中可以分享或復(fù)制各種資源,且各種資源具有每次允許有限數(shù)目的線程(例如一個)訪問該資源的線程切換訪問。
      如果出現(xiàn)一個或多個監(jiān)視器和/或一個事件圖解矢量和屏蔽對所指示的條件組,線程開關(guān)邏輯1105切換線程的執(zhí)行。因此,可以啟動另一個線程,而不是啟動當(dāng)處理器條件和編程的條件相匹配時活動的線程。例如用戶程序可以控制觸發(fā)線程切換的事件。
      在一些多線程處理器中,各個線程可具有相關(guān)的一組事件圖解矢量和屏蔽對等。因此,如圖11所示,多路復(fù)用器1115在p個線程之間作出判斷,且存在相應(yīng)的p個事件圖解和屏蔽對。然而,正是由于處理器是多線程的,并不意味著所有的實現(xiàn)都使用多個事件圖解矢量和屏蔽。一些實施例只使用一對啟動指示器,或者使用其它的啟動指示器。例如,可使用單個位作為開啟或關(guān)閉特定放棄類型能力的啟動指示器。
      圖12闡述了對同步對象具有事件檢測和處理能力的系統(tǒng)的一個實施例。同步對象可以為鎖或鎖變量、屏障、或其它硬件、軟件、和/或可用于線程或進(jìn)程之間的同步的存儲器資源。就多核心和/或各種類型的多線程而言,多進(jìn)程獲得流行,因此為了提高性能,這些線程或進(jìn)程之間的同步變得更加重要。因此,具有增強(qiáng)的同步效率的系統(tǒng)在通用和/或使用并行進(jìn)程的專用處理(例如圖形、自然介質(zhì)類型、數(shù)字信號處理、通信等)的各種領(lǐng)域中具有廣泛的適用性。
      圖12所示系統(tǒng)闡述了一處理器1200,其中該處理器耦合到存儲器1250,還耦合到通信接口1292以及一個或多個外圍設(shè)備1294(例如可以為音頻接口、顯示器、鍵盤、鼠標(biāo)、或其它輸入裝置、I/O裝置等)。可以通過總線、橋、和/或點對點連接而直接或間接地耦合這些裝置。處理器1200包括執(zhí)行資源1210以及事件檢測器1220,以監(jiān)視執(zhí)行資源1210的各個方面。處理器1200和事件檢測器1220可具有各種特性,如參考先前實施例進(jìn)行的描述。因此,事件檢測器1220是可編程的從而基于定義的事件而啟動一線程(例如觸發(fā)線程切換或分叉新線程)。該事件可以是硬線事件,或者由軟件程序以及類似事件圖解矢量等如前所述的機(jī)制定義。
      處理器1200還可具有鎖和/或旋轉(zhuǎn)檢測器1222。在一些實施例中,該鎖/旋轉(zhuǎn)檢測器可以是單獨的檢測器,如圖12所示。該單獨的檢測器可以是檢測指示鎖的特定預(yù)定義或甚至可編程條件的硬件部分。該檢測器因此可以部分是硬件部分為軟件。在其它實施例中,可通過將各種條件編程到普通事件檢測器中就可實現(xiàn)鎖或旋轉(zhuǎn)-鎖檢測。因此,可將普通事件檢測器編程以檢測這種條件,在恰當(dāng)?shù)鼐幊虝r可有效地形成旋轉(zhuǎn)/鎖檢測器。例如,應(yīng)用1254可包括事件檢測器編程模塊(EDPM)1256用于編程事件檢測器1220以觸發(fā)預(yù)期事件。
      和可被檢測的鎖相關(guān)的一個事件為鎖變量的長延遲取出。通過編程事件檢測器1220以觸發(fā)程序內(nèi)某一點(將在存儲器內(nèi)訪問該鎖變量)的緩存缺失,可以檢測引發(fā)取出長延遲的鎖變量。該緩存缺失表示處理器并未將鎖變量緩存。隨后則可響應(yīng)被觸發(fā)的該特殊事件,啟動一處理程序以解決長延遲的鎖取出情形。
      第二,該鎖/旋轉(zhuǎn)檢測器1222還可檢測旋轉(zhuǎn)條件或者程序正等待一個爭奪激烈的鎖和循環(huán)以核查是否該變量可用的條件。例如,可通過感測對已知鎖變量位置的重復(fù)訪問而檢測旋轉(zhuǎn)條件。在檢測到該旋轉(zhuǎn)條件時,第二線程將被啟動,這將在下文中討論。一些實施例會使用輔助線程處理該爭奪激烈的鎖的情形,而不管是否首先出現(xiàn)長延遲的鎖取出(觸發(fā)第一輔助線程)。
      圖12的實施例包括輕質(zhì)線程上下文存儲器1230。該上下文存儲器允許保存狀態(tài)的小子集以實現(xiàn)“輕量級”或“蠅量級”的上下文切換。例如,在一些情形只保存父進(jìn)程的指令指針,而讓編程器負(fù)責(zé)任何附加的上下文的保存。上下文或多或少地被保存,但是通常存儲在子集內(nèi)的上下文少于全部的上下文。使用專門指令將這些輕量級線程公開于用戶級別(例如程序的應(yīng)用層,諸如x86架構(gòu)中優(yōu)先級別3的程序),使得用戶可在多線程執(zhí)行資源結(jié)合特定應(yīng)用而啟動線程。這種情況下,被激發(fā)為輕量級線程的事件處理程序應(yīng)保存其所擾亂的任何未保存的上下文(正常執(zhí)行父應(yīng)用可能需要)。在其它實施例中,被觸發(fā)的輔助線程可以是具有完全獨立的上下文的線程。
      圖12的實施例還包括被耦合到處理器的存儲器1250。在該實施例中,示出了各種鎖開銷使用模塊和應(yīng)用1254。在本實施例中,該模塊為軟件程序。在一個實施例中,各個模塊為出現(xiàn)某一事件時被觸發(fā)的單個線程。一個或多個所示模塊可組合成單個輔助線程,該輔助線程可以為全部或輕量級上下文線程。在其它實施例中,可以用硬件或者硬件和/或軟件和/或固件的組合實現(xiàn)這些模塊。
      應(yīng)用1254為用戶級別的應(yīng)用,可具有鎖或者其它同步對象或技術(shù)。取出臨界部分?jǐn)?shù)據(jù)模塊1258可用于投機(jī)地將受鎖保護(hù)的臨界部分之內(nèi)的鎖和取出數(shù)據(jù)移出。獲得未來鎖模塊1260向前運行,獲得其它鎖保護(hù)部分的鎖。簡單地通過將數(shù)據(jù)位置取到緩存內(nèi)就可獲得鎖,或者在其它實施例中通過改變鎖變量而獲得鎖,使得擁有該鎖。未來鎖模塊1260還包括節(jié)流模塊1262,從而通過限制其它線程而確保該投機(jī)的鎖活動不降低整體的生產(chǎn)率。向前運行的執(zhí)行模塊1280可向前執(zhí)行,從而完成受鎖保護(hù)的部分之外的一些工作。
      鎖剖析模塊1270收集特定線程相對于鎖變量和/或其它線程的進(jìn)展的數(shù)據(jù)。用戶線程調(diào)度模塊1290可接收來自鎖剖析模塊的提示并允許對線程更加高效的調(diào)度。例如,剖析模塊1270可檢測第一線程(例如初始消費者),獲得一個鎖,并引發(fā)第二線程(例如初始生產(chǎn)者)中顯著的旋轉(zhuǎn)。在這個示例中,向調(diào)度器通報,首先調(diào)度第二線程(初始生產(chǎn)者)會導(dǎo)致更高效的處理。在一些實施例中,該調(diào)度器為用戶級別的線程調(diào)度器,該調(diào)度器暴露給編程器以允許對用戶級別(例如輕量級)線程的調(diào)度。在一些實施例中,用戶線程調(diào)度器1290可以是應(yīng)用1254的一部分。
      參考圖13可以進(jìn)一步了解這些模塊相互作用的一個示例。在圖13的實施例中,在區(qū)塊1310中,檢測到鎖取出延遲。通過對事件檢測器1220編程使其感測一條件可實現(xiàn)該檢測。例如,應(yīng)用1254可調(diào)用事件檢測器編程模塊1256以編程事件檢測器1220,從而就在訪問鎖變量之前觸發(fā)緩存缺失。備選地,可以使用前述專用的鎖/旋轉(zhuǎn)檢測器1222檢測該鎖。
      在區(qū)塊1315中,可以響應(yīng)于檢測到鎖變量的取出延遲而執(zhí)行線程切換(例如蠅量級線程切換)。該線程切換啟動第一輔助線程,該線程可執(zhí)行在各實施例中的下述區(qū)塊中闡述的各種功能。因此,盡管區(qū)塊1315后跟隨了各種區(qū)塊,但在任意特定實施例中并非需要所有這些區(qū)塊,而且其順序并不關(guān)鍵。
      在區(qū)塊1320中,可取出獲得該鎖的代碼之外但落在受該鎖保護(hù)的代碼部分之內(nèi)的數(shù)據(jù)。例如,可在圖12的實施例中執(zhí)行取出臨界部分?jǐn)?shù)據(jù)模塊1258。當(dāng)鎖的所有權(quán)最后獲得時,在鎖保護(hù)代碼部分內(nèi)的這種數(shù)據(jù)預(yù)取出可降低緩存缺失或普通數(shù)據(jù)檢索延遲。
      此外(作為單獨的線程或者相同線程的一部分),可以如區(qū)塊1330-1365中所示地取出未來鎖。特別地,可以獲得N個附加的鎖,其中N為正整數(shù)。待獲得的鎖的數(shù)目是可編程的或者是硬代碼,且在執(zhí)行期間是可變化的(例如通過重新編程或節(jié)流模塊1262)。在區(qū)塊1330中,循環(huán)變量i設(shè)為1。如區(qū)塊1340所示,取出一個未來鎖(例如在各種實施例中可以預(yù)取出或者實際上被鎖住)。統(tǒng)計計算未來鎖地址以產(chǎn)生輔助線程,或者通過鎖剖析確定未來鎖地址,這將在下文中描述。如區(qū)塊1350所示,測試該鎖是否受到爭奪。如果該未來鎖受到爭奪(例如可由鎖變量的緩存狀態(tài)、鎖變量的值、或者由程序的旋轉(zhuǎn)行為指示),則可中斷該鎖和/或其它未來鎖的取出,如區(qū)塊1355所示。
      對于在區(qū)塊1350中未發(fā)現(xiàn)該鎖受到爭奪的情形,則在區(qū)塊1360中繼續(xù)操作。在區(qū)塊1360中測試如果取出的鎖計數(shù)不等于目標(biāo)數(shù)N,則在區(qū)塊1365中將變量i遞增且進(jìn)程回到區(qū)塊1340。如果在區(qū)塊1360中計數(shù)到達(dá)N,則在一個實施例中進(jìn)程繼續(xù)到區(qū)塊1370。通過在圖12實施例中獲得未來鎖模塊1260來執(zhí)行這些鎖取出操作1330-1365。取出或者獲得未來鎖的所有權(quán)可以有利地加速程序執(zhí)行,這是因為在遇到鎖時容易獲得該鎖的可能性更大。許多程序遇到相對少數(shù)的高度競爭的鎖。因此,預(yù)取出鎖的促進(jìn)作用超過了對其它進(jìn)程的進(jìn)展的任意負(fù)面影響。
      在一些實施例中,將由在區(qū)塊1315中觸發(fā)的線程執(zhí)行的工作可能終止于區(qū)塊1365,因此可以(通過中止或結(jié)合類型的操作)將該線程關(guān)閉,且控制可返回到主線程,如區(qū)塊1370所示。在其它實施例中,輔助線程繼續(xù),并執(zhí)行區(qū)塊1372-1375的操作和/或其它操作。此外,其它實施例可以觸發(fā)其它數(shù)目的輔助線程或者所述操作的其它組合。
      在圖13的實施例中,如區(qū)塊1372所示,所述應(yīng)用未能保護(hù)該鎖。換而言之,鎖變量表明其它進(jìn)程擁有該鎖。在一些實施例中,檢測到重復(fù)的這種失敗。可以編程或者設(shè)置一個旋轉(zhuǎn)閾值,從而提供在采取措施之前為獲得鎖變量所有權(quán)而嘗試失敗的閾值次數(shù)。在區(qū)塊1374中,觸發(fā)第二輔助線程以完成獲得鎖變量所有權(quán)所需要的在開銷影響下的另外的工作。一個示例為,可以執(zhí)行臨界部分之外的代碼,如區(qū)塊1375所示。例如,在圖12的實施例中,可以執(zhí)行向前運行的執(zhí)行模塊1280。在一些實施例中,可以執(zhí)行該代碼,從而僅僅預(yù)取出指令或數(shù)據(jù)而不實際計算結(jié)果和/或?qū)⒔Y(jié)果提交給機(jī)器狀態(tài)。在其它實施例中,如果執(zhí)行相關(guān)性檢查以確保正確的結(jié)果,則計算結(jié)果和/或?qū)⒔Y(jié)果提交作為向前運行的執(zhí)行的一部分。
      備選地,和區(qū)塊1330-1365的進(jìn)程相似,第二輔助線程響應(yīng)該第二事件可獲得附加的鎖。另一個備選為可以執(zhí)行鎖剖析。又一個備選為,先前保持的鎖至少被清出最高級別的緩存(可能甚至到外部接口)以減小另一個處理器獲得鎖的傳輸延遲。在各種實施例中,可以以各種變形組合在鎖開銷的影響下可完成其它工作的各種示例。
      圖14闡述了包括鎖剖析的一個實施例。在圖14的實施例中,各種線程在區(qū)塊1410內(nèi)被調(diào)度。在一個實施例中,這些線程可以是在用戶或者應(yīng)用級別受到調(diào)度和控制的輕量級線程。例如,應(yīng)用1254可包括圖12中的用戶線程調(diào)度器1290。在另一個實施例中,這些線程可以是具有全部上下文的操作系統(tǒng)可見的線程。在區(qū)塊1420中,檢測到受到爭奪的鎖。這個受到爭奪的鎖導(dǎo)致使能或啟動剖析線程。如區(qū)塊1430所示,該線程剖析鎖的行為。在一個實施例中,該剖析要求捕捉諸如來自性能計數(shù)器或其它類似結(jié)構(gòu)的事件計數(shù)器數(shù)據(jù)。當(dāng)在區(qū)塊1410內(nèi)再次完成線程調(diào)度時,剖析信息隨后用于幫助確定線程的優(yōu)先權(quán)和/或排序。因此,鎖開銷時間再次被用于改善整體的程序性能。如前所述,該調(diào)度信息可以輔助線程調(diào)度器更高效地調(diào)度生產(chǎn)者/消費者線程對。
      在發(fā)展期間,一個設(shè)計會經(jīng)過各種階段,從創(chuàng)作到模擬到制造。代表設(shè)計的數(shù)據(jù)可以以許多方式表示該設(shè)計。首先,在模擬中有用的是,使用硬件描述語言或另一種功能描述語言表示硬件。此外,在設(shè)計過程的一些階段可以生產(chǎn)具有邏輯和/或晶體管柵極的電路水平模型。此外,在某一階段,大部分設(shè)計到達(dá)表示各種裝置在硬件模型中的物理布置的數(shù)據(jù)水平。對于使用傳統(tǒng)半導(dǎo)體制作技術(shù)的情形,代表硬件模型的數(shù)據(jù)可以是對制造集成電路的掩模規(guī)定不同掩模層上存在或不存在各種特征的數(shù)據(jù)。在設(shè)計的任何表述上,數(shù)據(jù)可以存儲在任何形式的機(jī)器可讀取介質(zhì)中。被調(diào)制的光或者電波或其它方式產(chǎn)生的光或者電波用于傳輸信息,該機(jī)器可讀取介質(zhì)可以為存儲器、或者諸如光盤的磁學(xué)或光學(xué)存儲器。任一這些介質(zhì)可以“承載”或“指示”設(shè)計或軟件信息。當(dāng)傳輸指示或承載代碼或設(shè)計的電學(xué)載波以執(zhí)行電信號的拷貝、緩存、或重新傳輸時,就制成了新的拷貝。因此,通信提供商或者網(wǎng)絡(luò)提供商可以制作實施本發(fā)明技術(shù)的物品(一種載波)的拷貝。
      因此,公開了可啟動其它線程的可編程事件驅(qū)動放棄機(jī)制的技術(shù)。盡管已經(jīng)在附圖中描述和示出了特定的示例實施例,應(yīng)了解到,這些實施例純粹地闡述而非限制該發(fā)明,本發(fā)明不限于所示和所述的具體結(jié)構(gòu)和布置,因為本領(lǐng)域技術(shù)人員在閱讀本公開內(nèi)容之后可以想到各種其它修改。在諸如本領(lǐng)域的技術(shù)領(lǐng)域內(nèi),技術(shù)發(fā)展迅速且不容易預(yù)見進(jìn)一步的進(jìn)展,在不離開本發(fā)明的原理以及所附權(quán)利要求書范圍的情況下可借助技術(shù)進(jìn)展而容易對所公開的實施例進(jìn)行排列和細(xì)節(jié)上的修改。
      權(quán)利要求
      1.一種設(shè)備,包括執(zhí)行多個指令的執(zhí)行資源;檢測和同步對象相關(guān)聯(lián)的長延遲事件的事件檢測器,所述事件檢測器引發(fā)第一個線程切換;檢測同步對象為受爭奪的同步對象的旋轉(zhuǎn)檢測器,所述旋轉(zhuǎn)檢測器引發(fā)第二線程切換以啟動旋轉(zhuǎn)檢測響應(yīng)。
      2.權(quán)利要求1的設(shè)備,其中所述旋轉(zhuǎn)檢測器包括存儲在機(jī)器可讀取介質(zhì)內(nèi)的事件檢測器編程程序,該事件檢測器編程程序?qū)υ撌录z測器進(jìn)行編程以檢測該同步對象是否受爭奪。
      3.權(quán)利要求1的設(shè)備,進(jìn)一步包括一存儲器,所述存儲器存儲利用所述同步對象的應(yīng)用以及將被第一線程切換啟動的未來鎖模塊,其中所述未來鎖模塊將獲得所述應(yīng)用的未來鎖。
      4.權(quán)利要求3的設(shè)備,其中所述未來鎖模塊將獲得多個未來鎖,所述設(shè)備進(jìn)一步包括節(jié)流模塊以防止過量的鎖預(yù)取出。
      5.權(quán)利要求3的設(shè)備,其中所述未來鎖模塊將通過預(yù)取出數(shù)據(jù)而獲得未來鎖。
      6.權(quán)利要求3的設(shè)備,進(jìn)一步包括剖析模塊,以收集關(guān)于同步爭奪的剖析數(shù)據(jù)。
      7.權(quán)利要求6的設(shè)備,其中用戶線程調(diào)度模塊將所述剖析數(shù)據(jù)用于用戶線程調(diào)度。
      8.權(quán)利要求1的設(shè)備,其中所述受爭奪的同步對象是受激烈爭奪的鎖,所述旋轉(zhuǎn)檢測器將檢測受激烈爭奪的鎖。
      9.權(quán)利要求8的設(shè)備,進(jìn)一步包括一存儲器,所述存儲器將存儲一應(yīng)用,所述應(yīng)用包括含有受激烈爭奪的鎖的鎖部分以及一個模塊,以使用由于在所述鎖部分外部有效的受激烈爭奪的鎖所致的開銷延遲。
      10.權(quán)利要求1的設(shè)備,進(jìn)一步包括一存儲器,所述存儲器將存儲一同步改進(jìn)模塊而向調(diào)度器提供調(diào)度提示,其中所述同步改進(jìn)模塊將在生產(chǎn)者線程之前檢測消費者線程被調(diào)度的線程調(diào)度低效率,并提供提示以在消費者線程之前調(diào)度該生產(chǎn)者線程。
      11.權(quán)利要求1的設(shè)備,其中所述事件檢測器被編程,響應(yīng)于鎖部分中遇到的緩存缺失而分叉未來鎖輔助線程。
      12.一種方法,包括在第一線程內(nèi)遇到涉及鎖變量的鎖部分;響應(yīng)于嘗試取出所述鎖變量時出現(xiàn)的緩存缺失而啟動第一輔助線程以為第一線程取出未來鎖。
      13.權(quán)利要求12的方法,進(jìn)一步包括檢測該鎖變量是否受爭奪;啟動第二輔助線程以利用鎖同步開銷。
      14.權(quán)利要求12的方法,其中利用鎖同步開銷包括,響應(yīng)于正受爭奪的鎖變量而執(zhí)行分別同步循環(huán)的疊代。
      15.權(quán)利要求13的方法,其中啟動該第一輔助線程包括分叉該第一線程并切換到第一輔助線程,且其中啟動該第二輔助線程包括分叉該第二線程并切換到第二輔助線程。
      16.權(quán)利要求12的方法,其中利用鎖同步開銷包括收集同步剖析信息;基于該同步剖析信息而提供線程調(diào)度提示。
      17.一種系統(tǒng),包括處理器,該處理器包括可編程事件檢測器以響應(yīng)于一個事件而引發(fā)一個線程切換;存儲器;存儲在所述存儲器中并可由所述處理器執(zhí)行的程序,所述程序包括受鎖變量保護(hù)的同步部分,所述程序?qū)铀隹删幊淌录z測器以檢測該鎖變量是否受爭奪并響應(yīng)地切換到鎖優(yōu)化模塊。
      18.權(quán)利要求17的系統(tǒng),其中所述程序進(jìn)一步包括編程可編程事件檢測器以檢測鎖變量的存儲器地址的緩存缺失的一部分,該系統(tǒng)進(jìn)一步包括存儲在該存儲器中并響應(yīng)于該緩存缺失而被可編程事件檢測器啟動的鎖預(yù)取出模塊,所述鎖預(yù)取出模塊將獲得未來鎖。
      19.權(quán)利要求17的系統(tǒng),其中所述鎖優(yōu)化模塊將獲得鎖剖析信息并提供調(diào)度提示。
      20.權(quán)利要求17的系統(tǒng),其中所述鎖優(yōu)化模塊將執(zhí)行位于和所述鎖變量相關(guān)的鎖部分之外的未來代碼部分。
      21.一種包括存儲機(jī)器指令的機(jī)器可讀取介質(zhì)的物品,包括具有使用同步對象的部分的應(yīng)用;在鎖相關(guān)延遲期間為該應(yīng)用執(zhí)行有用的任務(wù)的同步對象開銷使用模塊;編程模塊,被應(yīng)用啟動以編程監(jiān)視器,從而監(jiān)視長延遲鎖事件并相應(yīng)地啟動該鎖開銷使用模塊。
      22.權(quán)利要求21的物品,其中該鎖開銷使用模塊包括下述的一個或多個組合鎖剖析模塊;獲得未來鎖模塊;將先前保持的鎖的鎖變量清出緩存的模塊。
      全文摘要
      可啟動其它線程的、用于可編程事件驅(qū)動放棄機(jī)制的方法、設(shè)備、及程序工具。在一個實施例中,設(shè)備包括執(zhí)行多個指令的執(zhí)行資源以及檢測和同步對象相關(guān)的長延遲事件的事件檢測器。該事件檢測器可以響應(yīng)于和該同步對象相關(guān)的長延遲事件而引發(fā)第一線程切換。該設(shè)備還包括一旋轉(zhuǎn)檢測器,該檢測器檢測該同步對象是否為受爭奪的同步對象。該旋轉(zhuǎn)檢測器可響應(yīng)于檢測到受爭奪的同步對象而引發(fā)第二線程切換,從而啟動旋轉(zhuǎn)檢測響應(yīng)。
      文檔編號G06F9/38GK1828544SQ200610019818
      公開日2006年9月6日 申請日期2006年3月1日 優(yōu)先權(quán)日2005年3月2日
      發(fā)明者N·英賴特, J·科林斯, P·王, H·王, X·田, J·沈, G·肖弗, P·哈馬倫德 申請人:英特爾公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1