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