專利名稱:可以激活其他線程的可編程事件驅(qū)動的讓步機(jī)制的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于處理裝置和處理系統(tǒng)的領(lǐng)域,該處理裝置和處理系統(tǒng)處理指令等的序列,以及對這種裝置和/或系統(tǒng)進(jìn)行編程的特定指令序列。一些實(shí)施例涉及對這種處理裝置的執(zhí)行資源內(nèi)的狀況(condition)或事件進(jìn)行監(jiān)視和/或響應(yīng)。
背景技術(shù):
目前,有多種機(jī)制被用于改變處理系統(tǒng)中的控制流(即正被遵循的處理路徑或者指令序列)。例如,程序序列中的跳轉(zhuǎn)指令明確且精確地引起到新地址的跳轉(zhuǎn)。因?yàn)樘D(zhuǎn)指令指示處理器跳轉(zhuǎn)到一個位置并在那一點(diǎn)繼續(xù)執(zhí)行,所以跳轉(zhuǎn)指令是控制流發(fā)生明確改變的一個例子。因?yàn)樘D(zhuǎn)是作為執(zhí)行跳轉(zhuǎn)指令的直接結(jié)果而發(fā)生的,所以傳統(tǒng)的跳轉(zhuǎn)指令是“精確的”(或者同步的)。
中斷是另一個傳統(tǒng)的控制流改變的例子。中斷可以是提供給諸如處理器等裝置的外部信號。處理器可以通過跳轉(zhuǎn)到中斷處理程序(handler)來響應(yīng),所述中斷處理程序是處理由特定中斷用信號表示的事件的例程。因?yàn)樘幚砥髟谂c中斷的接收相關(guān)的特定時間窗口內(nèi)識別中斷并遵照這些中斷,所以一般來講,中斷也是比較精確的。具體地說,通常在內(nèi)部接收中斷之后的下一個指令的邊界處,這些中斷被服務(wù)。在一些情況下,只允許操作系統(tǒng)或其他在高特權(quán)級別下工作的軟件來屏蔽中斷,所以用戶程序可能就沒有機(jī)會來使能或禁止這些改變控制流的事件。
另一個傳統(tǒng)的控制流改變的例子響應(yīng)于例外而發(fā)生。例外一般反映預(yù)定義的體系結(jié)構(gòu)狀況,諸如滿足特定標(biāo)準(zhǔn)的數(shù)學(xué)指令結(jié)果(異常、下溢、上溢、不是數(shù)字等等)。一些例外可以被屏蔽,例如可以通過設(shè)置控制寄存器中的位來屏蔽例外。如果發(fā)生了例外并且未被屏蔽,那么將調(diào)用例外處理程序來處理該例外。
使用斷點(diǎn)是另一種改變處理器控制流的技術(shù)。一般在調(diào)試程序時使用斷點(diǎn)。可以將特定的指令地址編程到斷點(diǎn)寄存器中。當(dāng)斷點(diǎn)是活動的并且到達(dá)了目標(biāo)地址時,處理器(除了照常繼續(xù)程序以外)還可以完成各種動作。斷點(diǎn)還允許單步完成程序。
通過多線程技術(shù),多個不同的線程可以利用處理器硬件。多線程處理器可以因?yàn)槎喾N原因在線程之間切換。例如,處理器可以具有一種算法,該算法在可用的線程之間自動切換。其他處理器使用事件切換(switch-on-event)多線程(SoEMT),這樣諸如緩存缺失等的特定事件可以引起線程切換。因?yàn)樘幚砥髑袚Q它所執(zhí)行的序列或流,所以可以認(rèn)為線程切換是一種控制流改變。
在一篇現(xiàn)有技術(shù)文件中,詳細(xì)描述了停頓(quiesce)指令(參見專利號為6,493,741的美國專利)。在一個例子中,停頓指令停止一個線程中的處理,直到計時器超時或者發(fā)生了對存儲位置的存儲器寫入。因此,諸如停頓指令的指令,它們本身就可以觸發(fā)含有該停頓指令的線程中處理的暫時停止以及到另一個線程的切換。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一個方面,本發(fā)明提供了一種裝置,包括執(zhí)行資源,用于執(zhí)行多個指令;監(jiān)視器,用于檢測所述執(zhí)行資源的低進(jìn)度指示狀況,所述監(jiān)視器響應(yīng)于檢測到所述低進(jìn)度指示狀況,通過轉(zhuǎn)移到處理程序來有選擇地中止至少一個程序的處理。
根據(jù)本發(fā)明的另一個發(fā)明,還提供了一種裝置,包括用于執(zhí)行程序的執(zhí)行邏輯;和事件檢測邏輯,其響應(yīng)于執(zhí)行邏輯的可程序定義狀況,在該程序執(zhí)行期間來執(zhí)行事件處理程序。
根據(jù)本發(fā)明的另一個方面,提供了一種方法,包括對監(jiān)視器進(jìn)行編程以檢測處理器狀況;響應(yīng)于所述處理器狀況的發(fā)生,產(chǎn)生幫助線程。
根據(jù)本發(fā)明的另一個方面,還提供了一種方法,包括在執(zhí)行第一程序部分時監(jiān)視內(nèi)部處理狀況,以得到表示多個內(nèi)部硬件事件的可編程狀況;以及響應(yīng)于可編程狀況的發(fā)生,將執(zhí)行轉(zhuǎn)移到第二程序部分。
根據(jù)本發(fā)明的另一個方面,還提供了一種方法,包括將多個用戶可定義的幫助線程觸發(fā)設(shè)置為第一狀態(tài);第一次模擬程序的性能;調(diào)整所述多個用戶可定義的幫助線程觸發(fā);第二次模擬程序的性能;以及基于第一次和第二次的程序性能,選擇優(yōu)選的一組用戶可定義的幫助線程觸發(fā)。
根據(jù)本發(fā)明的另一個方面,提供了一種系統(tǒng),包括處理器,其包括用戶可編程的硬件監(jiān)視器,該監(jiān)視器用于檢測處理器狀況,并響應(yīng)于所述處理器狀況引起處理程序的執(zhí)行;和存儲所述處理程序的存儲介質(zhì),所述處理程序包括使得幫助線程將被產(chǎn)生的至少一個指令。
根據(jù)本發(fā)明的另一個方面,提供了一種處理器,包括執(zhí)行資源,用于執(zhí)行多個指令;和邏輯,用于響應(yīng)于所述執(zhí)行資源的多個事件的可編程組合來中止所述多個指令的執(zhí)行,所述多個事件在執(zhí)行第一指令后發(fā)生,所述第一指令使能對可編程狀況的檢測。
以舉例的方式對本發(fā)明進(jìn)行了說明,但是本發(fā)明不限于附圖。
圖1圖示了一個實(shí)施例中的系統(tǒng),該系統(tǒng)可以檢測并響應(yīng)執(zhí)行資源的處理狀況。
圖2圖示了圖1系統(tǒng)的一個實(shí)施例的操作流程圖。
圖3圖示了圖1系統(tǒng)的另一個實(shí)施例的操作流程圖。
圖4圖示了另一個實(shí)施例中的系統(tǒng),該系統(tǒng)可以響應(yīng)多個不同的性能事件和/或復(fù)合性能事件。
圖5A圖示了可以識別復(fù)合事件的監(jiān)視器的一個實(shí)施例。
圖5B圖示了監(jiān)視器的另一個實(shí)施例。
圖5C圖示了監(jiān)視器的另一個實(shí)施例。
圖6圖示了根據(jù)一個實(shí)施例執(zhí)行用戶程序的流程圖,該用戶程序響應(yīng)于可程序定義的觸發(fā)而激活幫助線程。
圖7圖示了根據(jù)一個實(shí)施例改進(jìn)監(jiān)視器設(shè)置的過程流程圖。
圖8圖示了根據(jù)一個實(shí)施例更新軟件的過程流程圖。
圖9A圖示了激活多個嵌套的幫助線程來輔助程序處理的流程圖。
圖9B圖示了一個實(shí)施例中支持虛擬線程的線程切換邏輯。
圖10A圖示了上下文敏感事件圖表向量和屏蔽實(shí)現(xiàn)的一個實(shí)施例。
圖10B圖示了上下文敏感事件圖表向量和屏蔽實(shí)現(xiàn)的一個實(shí)施例。
圖11圖示了多線程處理器的一個實(shí)施例,該處理器基于監(jiān)視器事件進(jìn)行線程切換。
具體實(shí)施例方式
下面的敘述描述了可以激活其他線程的可編程事件驅(qū)動的讓步(yield)機(jī)制的實(shí)施例。在下面的敘述中,所提出的諸如處理器類型、微體系結(jié)構(gòu)狀況、事件、使能機(jī)制等這些大量的特定細(xì)節(jié),都是為了提供對本發(fā)明更加透徹的理解。但是,本領(lǐng)域的技術(shù)人員應(yīng)該了解,本發(fā)明可以不用這些特定細(xì)節(jié)來實(shí)施。此外,沒有詳細(xì)示出一些已知的結(jié)構(gòu)、電路等,以免不必要地使本發(fā)明變得不清楚。
在一些實(shí)施例中,所公開的技術(shù)可以允許一個程序在執(zhí)行該程序的同時主動地監(jiān)視和響應(yīng)執(zhí)行該程序的執(zhí)行資源的狀況。實(shí)際上,這種實(shí)施例可以結(jié)合實(shí)時的執(zhí)行資源工作狀況反饋來提高性能。如果執(zhí)行資源遇到了執(zhí)行延遲狀況,那么可以中止(disrupt)程序執(zhí)行以做出調(diào)整。在一些實(shí)施例中,可以激活處理程序并且可以產(chǎn)生幫助線程,來改進(jìn)初始線程的執(zhí)行。在其他實(shí)施例中,可以通過切換到另一個可以不是幫助線程的程序線程來實(shí)現(xiàn)中止。在一些情況下,這些和其他實(shí)施例可以有利地提高處理吞吐率,和/或使最優(yōu)化適合于特定的硬件。
現(xiàn)在參看圖1,圖示了一個實(shí)施例中的系統(tǒng),該系統(tǒng)可以檢測并響應(yīng)執(zhí)行資源的處理狀況。在圖1的實(shí)施例中,執(zhí)行資源105、監(jiān)視器110和使能邏輯120構(gòu)成了能夠執(zhí)行指令的處理器100的一部分。在一些實(shí)施例中,執(zhí)行資源可以包括硬件資源,這些硬件資源可以被集成到一個元件或集成電路中。但是,執(zhí)行資源可以包括也可以在執(zhí)行程序指令中所使用的軟件或固件資源,或者硬件和軟件和/或固件的任意組合。例如,可以將固件當(dāng)作抽象層的一部分來使用,固件或者可以給處理硬件添加功能,軟件也可以有類似的作用。軟件還可以用來模擬部分或全部指令集,或者可以幫助處理。
處理器可以是執(zhí)行指令的多種不同類型處理器中的任何一種。例如,處理器可以是通用處理器,諸如Intel公司的Pentium處理器系列、Itanium處理器系列或其他處理器系列的處理器,或者諸如其他公司生產(chǎn)的其他處理器。因此,處理器可以是精簡指令集計算機(jī)(RISC)處理器、復(fù)雜指令集計算機(jī)(CISC)處理器、超長指令字(VLIW)處理器或者任何混合的或可選的處理器類型。此外,諸如網(wǎng)絡(luò)或通信處理器、協(xié)同處理器、嵌入式處理器、壓縮引擎、圖形處理器等的專用處理器可以使用所公開的技術(shù)。因?yàn)榧苫厔葸€在繼續(xù),并且處理器也變得更加復(fù)雜,所以將更加需要對內(nèi)部性能指標(biāo)進(jìn)行監(jiān)視并做出反應(yīng),因此將使得這里所公開的技術(shù)更加具有價值。但是,雖然所公開的技術(shù)可以廣泛應(yīng)用于執(zhí)行程序序列的復(fù)雜硬件,但是由于本技術(shù)領(lǐng)域中飛速的技術(shù)發(fā)展,我們很難預(yù)見所公開技術(shù)的所有應(yīng)用。
如圖1所示,處理器100被耦合到諸如內(nèi)存的存儲介質(zhì)150上。存儲介質(zhì)150可以是具有各種級別的層次結(jié)構(gòu)的存儲子系統(tǒng),這些各種級別的層次結(jié)構(gòu)可以包括但不限于各種級別的高速緩存、系統(tǒng)存儲器和非易失性存儲器,例如,系統(tǒng)存儲器為動態(tài)隨機(jī)訪問存儲器或類似存儲器,非易失性存儲器為閃存(例如存儲棒等)、磁盤或光盤等。如所示出的,存儲介質(zhì)存儲程序160以及處理程序和/或諸如幫助線程170的其他線程。
為了允許監(jiān)視器對期望事件進(jìn)行監(jiān)視,可以將監(jiān)視器110耦合到執(zhí)行資源的多個部分,以檢測特定狀況或者獲知特定的微體系結(jié)構(gòu)事件??梢詫⑿盘柧€連線到監(jiān)視器110上,或者可以將監(jiān)視器與相關(guān)資源策略性地放在一起或者集成在一起。監(jiān)視器可以包括各種可編程邏輯或軟件或固件元件,或者可以是專門設(shè)計用于檢測特定狀況的監(jiān)視器。監(jiān)視器跟蹤各種事件或狀況,如果編程所要檢測的事件或狀況發(fā)生了,則用信號通知執(zhí)行資源105中止正常的控制流,否則將繼續(xù)正常的控制流。如圖1所示出的,中止可能引起事件處理程序被調(diào)用或者發(fā)生線程切換。
一個具體的可檢測狀況的例子是數(shù)據(jù)可能從高速緩存中缺失,并導(dǎo)致緩存缺失事件的發(fā)生。實(shí)際上,程序可能產(chǎn)生這樣的存儲器訪問模式,該模式會導(dǎo)致反復(fù)的緩存缺失,從而降低了性能。在一段時間內(nèi)或者在執(zhí)行一部分代碼的過程中一定數(shù)量的這種緩存缺失的發(fā)生,是表示在執(zhí)行這部分代碼時進(jìn)行著相對較低水平進(jìn)度的事件的一個例子。
可以作為低進(jìn)度指示符的其他可檢測事件可能與執(zhí)行資源的多種其他微體系結(jié)構(gòu)細(xì)節(jié)或結(jié)構(gòu)性細(xì)節(jié)相關(guān)。監(jiān)視器可以檢測包括一個或多個下列項目的狀況,這些項目是資源停止(stall)、高速緩存事件、退休事件、分支或分支預(yù)測結(jié)果、例外、總線事件或其他各種通常被監(jiān)視的或者影響性能的事件或狀況。監(jiān)視器可以對這種事件或狀況進(jìn)行計數(shù)或者計時、量化或者表征,并且當(dāng)與一個或多個事件或狀況相關(guān)聯(lián)的特定量度(metric)發(fā)生時監(jiān)視器是可編程的。
圖2示出了圖1系統(tǒng)的一個實(shí)施例的操作流程圖。如圖2的方框200中所示的,程序160可以設(shè)置狀況以引起執(zhí)行控制流的改變。例如,使能邏輯120可以控制監(jiān)視器的激活以及要檢測哪個(些)事件?;蛘?,使能邏輯120可以使能和/或屏蔽事件;監(jiān)視器110本身也是可編程的,以在指定所跟蹤的執(zhí)行資源或系統(tǒng)內(nèi)的事件或狀況時具有更大的靈活性。在任何一種情況下,程序160本身都可以指定在其執(zhí)行過程中所要觀察的狀況。程序160還可以提供當(dāng)所監(jiān)視的狀況發(fā)生時被激活的處理程序或線程170。例如,所述程序可以包括主線程以及幫助線程或幫助例程,如果程序指定的狀況發(fā)生了,所述幫助線程或幫助例程將試圖改善主線程的執(zhí)行。
如在方框205中所示的,執(zhí)行程序指令。程序的執(zhí)行引起執(zhí)行資源狀態(tài)的改變。例如,可能會發(fā)生或存在各種在程序執(zhí)行中禁止向前進(jìn)度的狀況。如在方框210中所示,可以監(jiān)視各種處理量度和/或微體系結(jié)構(gòu)狀況,以確定在方框200中所編程的觸發(fā)事件是否發(fā)生。如果在方框210中觸發(fā)狀態(tài)沒有發(fā)生,則監(jiān)視器不被觸發(fā),則程序執(zhí)行返回到方框205繼續(xù)進(jìn)行。
在一些情況下,觸發(fā)狀態(tài)與任何一個單獨(dú)指令的執(zhí)行只具有間接的關(guān)系。例如,現(xiàn)有技術(shù)中的斷點(diǎn)檢測器在指令指針到達(dá)所設(shè)定的地址時一般會引起中斷(break)。因?yàn)樘囟ǖ闹噶?即,其地址)直接觸發(fā)該中斷,所以這種斷點(diǎn)是精確的。此外,現(xiàn)有技術(shù)中的停頓指令本身使線程至少暫時地停止。對比之下,利用本公開技術(shù)的一些實(shí)施例基于一組狀況觸發(fā)控制流的改變,這組狀況不一定是由單一指令引起的,而可能是由整個程序流和/或系統(tǒng)環(huán)境引起的。因此,雖然監(jiān)視器可以在單個系統(tǒng)中的同一指令執(zhí)行狀態(tài)下反復(fù)地觸發(fā),但是其他狀況、環(huán)境、系統(tǒng)等可能引起對同一程序的不同觸發(fā)點(diǎn)。從這個意義上說,在一些情況下,所公開的技術(shù)提供了一種產(chǎn)生不直接相關(guān)于指令執(zhí)行邊界的控制流改變的、非精確的或異步的機(jī)制。此外,在一些實(shí)施例中,因?yàn)轶w系結(jié)構(gòu)的正確性不依賴于在任一特定時間點(diǎn)上執(zhí)行的任何處理速率加快的(processor-rate-enhancing)幫助例程,所以上述非精確的機(jī)制可以以精度低于每條指令的粒度(granularity)對事件進(jìn)行測試,和/或?qū)κ录淖R別延遲一段時間。
在方框210中當(dāng)監(jiān)視器檢測到觸發(fā)狀態(tài)時,則如方框215中所示,中止程序的處理。一般地,因?yàn)槌绦虻奶幚碚跊]有效率地或者以程序員所不期望的方式進(jìn)行著,所以系統(tǒng)將相應(yīng)地做出調(diào)整。例如,可能調(diào)用諸如另一個程序部分的另一個軟件例程。其他的程序部分可以是與初始線程無關(guān)的另一個線程,或者可以是例如通過預(yù)取數(shù)據(jù)以減少緩存缺失來幫助執(zhí)行初始線程的幫助線程?;蛘?,對程序透明(例如硬件)的機(jī)制可以進(jìn)行一些最優(yōu)化、重配置(包括但不限于對監(jiān)視器結(jié)構(gòu)的重配置)、資源的再分配等,以期改善處理。
在圖3中圖示了調(diào)用幫助線程的一個例子。具體來說,圖3的流程圖詳細(xì)描述了圖1系統(tǒng)的一個實(shí)施例的操作,其中,執(zhí)行資源是多線程資源,并且當(dāng)特定的觸發(fā)狀況發(fā)生時,程序調(diào)用幫助線程。這樣,如在方框300中所示,第一線程(例如主程序)設(shè)置監(jiān)視狀況。狀況可以是這里所討論的多種狀況中的任何一個或多個。如在方框310中所示,第一線程執(zhí)行代碼部分。如果在方框320中測試到觸發(fā)狀況沒有發(fā)生,則代碼部分繼續(xù)執(zhí)行,如在方框310中所示。
如果觸發(fā)狀況發(fā)生了,那么如在方框330中所示,幫助線程被激活以幫助第一線程。幫助線程可以由諸如處理例程的例程激活,或者只是由線程切換激活。例如,在一個實(shí)施例中,由監(jiān)視器發(fā)信號通知給執(zhí)行資源的觸發(fā)狀況可以使執(zhí)行資源跳轉(zhuǎn)到產(chǎn)生幫助線程的事件處理程序。在另一個實(shí)施例中,幫助線程可能只是其他活動線程中的一個。在另一個實(shí)施例中,處理器可以提供一個或多個專用的幫助線程執(zhí)行槽(slot),并且監(jiān)視器可能引起到這些槽之一的一個幫助線程的切換。如在方框340中所示,然后兩個線程都繼續(xù)執(zhí)行。幫助線程很有希望地向前運(yùn)行,并清除會使第一線程停止或不能很好執(zhí)行的那些狀況。
圖4圖示了系統(tǒng)的另一個實(shí)施例,該系統(tǒng)可以響應(yīng)多個不同的性能事件和/或復(fù)合性能事件。在圖4的實(shí)施例中,所示的執(zhí)行資源-400包括從410-1到410-N的一組N個監(jiān)視器。此外,提供了事件圖表向量(eventschema vector,ESV)存儲位置420和事件圖表向量屏蔽(event schemavector mask,ESVM)存儲位置425。圖4的實(shí)施例示出了一定數(shù)量(N個)的監(jiān)視器,監(jiān)視器的數(shù)量對應(yīng)于事件圖表向量和事件圖表向量屏蔽的位數(shù)。在其他實(shí)施例中,可以有不同數(shù)量的監(jiān)視器和這些向量中的不同位數(shù),并且監(jiān)視器可以與位直接相關(guān),也可以不直接相關(guān)。例如,在一些實(shí)施例中,包含多個監(jiān)視器的狀況可以只與一個向量位相關(guān)。
執(zhí)行資源400被可選地耦合到事件描述符表430(EDT)上,該表可以在所述處理器上或者在協(xié)同處理器或系統(tǒng)存儲器中本地實(shí)現(xiàn)??刂屏鬟壿?35被耦合到監(jiān)視器410-1到410-N上,并從事件圖表向量和事件圖表向量屏蔽接收值。當(dāng)由一個或多個監(jiān)視器檢測到的狀況根據(jù)事件圖表向量和事件圖表向量屏蔽被使能時,控制流邏輯435改變處理邏輯的控制流。
圖4的實(shí)施例還圖示了解碼邏輯402和一組機(jī)器或模型(model)專用寄存器404(MSR)??梢允褂媒獯a邏輯402和模型專用寄存器之一或者兩者來編程和/或激活監(jiān)視器以及事件圖表向量和屏蔽。例如,MSR可以用來對觸發(fā)監(jiān)視器的事件的類型或數(shù)目進(jìn)行編程。MSR也可以用來編程事件圖表向量和屏蔽?;蛘?,也可以使用將由解碼器402解碼的一個或多個新的專用指令來對監(jiān)視器以及事件圖表向量和屏蔽之一或者兩者進(jìn)行編程。例如,在某組狀況發(fā)生時,可以使用讓步(yield)指令來使能對程序進(jìn)行處理的中止??梢杂梢粋€操作數(shù)將一些或者全部狀況指定給讓步指令,或者在讓步指令執(zhí)行之前編程一些或者全部狀況。這種讓步指令可以由解碼器402解碼,以觸發(fā)微代碼例程;產(chǎn)生相應(yīng)的微操作或微指令或者微操作序列,以直接發(fā)信號給合適的邏輯或者激活協(xié)同處理器,或者在其它情況下實(shí)現(xiàn)讓步功能。在一些實(shí)施例中,讓步的概念可以恰當(dāng)?shù)孛枋鲞@樣的指令,即允許一個線程在執(zhí)行讓步指令后繼續(xù)進(jìn)行,但是可能由于執(zhí)行另一個線程或處理程序而在某點(diǎn)上變慢。例如,主要為單線程的程序可以調(diào)用額外的幫助線程,并與這些額外的幫助線程共享處理器。
在圖4的實(shí)施例中,存儲器440包括事件處理程序450和主線程460。在一些實(shí)施例中,事件描述符表可以與主線程460和處理程序450存儲在同一存儲器或者同一存儲器層次結(jié)構(gòu)中。如前面所討論的,處理程序可以產(chǎn)生幫助線程以幫助主程序有效率地執(zhí)行。
存儲器440也可以存儲更新模塊442以經(jīng)由通信接口444進(jìn)行通信。更新模塊442可以是硬件模塊或軟件例程,所述軟件例程由執(zhí)行資源執(zhí)行以獲得將被編程到各種監(jiān)視器和/或使能邏輯中的新狀況。更新模塊442還可以獲得新的幫助線程或例程。例如,可以由從軟件程序賣主那里得到的軟件程序來下載這些線程或例程,以提供改善的性能。因此,網(wǎng)絡(luò)接口444可以是允許經(jīng)由通信信道進(jìn)行信息傳遞的任何網(wǎng)絡(luò)和/或通信接口。在一些情況下,網(wǎng)絡(luò)接口可以連接到互聯(lián)網(wǎng)上以下載新的狀況和/或幫助程序或線程。
在一個實(shí)施例中,事件圖表向量的每一位表示一個特定事件的發(fā)生或未發(fā)生,該特定事件可能是反映多種狀況或其他事件的復(fù)合事件(和/或以多種狀況或其它事件通過布爾運(yùn)算而表達(dá)的復(fù)合事件)。該特定事件的發(fā)生可以設(shè)置事件圖表向量中的位。事件圖表向量中的每一位可以在事件圖表屏蔽向量中具有相應(yīng)位。雖然事件圖表向量中的位可能由于事件的發(fā)生而保持在設(shè)置(set)狀態(tài),但是如果屏蔽位指示該特定事件被屏蔽了,那么控制流邏輯435可以忽略該事件。用戶在解除對事件的屏蔽時可以選擇是否清除事件圖表向量。這樣,事件可以被屏蔽一段時間并在以后被處理。在一些實(shí)施例中,用戶可以選擇將觸發(fā)指定為電平觸發(fā)或邊沿觸發(fā),這取決于多種因素,諸如事件更新、采樣和重置之間的關(guān)系(或者ESV中觸發(fā)事件的保持時間)。
在這個實(shí)施例中,如果屏蔽位指示事件沒有被屏蔽,那么控制流邏輯435為該特定事件調(diào)用事件處理程序??刂屏鬟壿?35可以基于事件圖表向量中位的位置而向量指向事件描述符表430,因此事件描述符表可能具有N個條目,這些條目對應(yīng)于事件圖表向量中的N個位。事件描述符表可以包含處理程序地址,該處理程序地址表示控制流邏輯435重新指引執(zhí)行時所指向的地址,還可以包括在特定實(shí)施例中可能有用的其他信息。例如,可以在事件描述符表中保存或更新特權(quán)級別、線程、進(jìn)程和/或其他信息。
在另一個實(shí)施例中,事件描述符表430不一定是但可以是單條目,該條目為單個事件處理程序指示地址以處理所有事件。在這種情況下,條目可以存儲在寄存器或者其他處理器存儲位置中。在一個實(shí)施例中,可以使用單個處理程序,并且該處理程序可以訪問事件圖表向量以確定哪個事件發(fā)生了并因此該怎樣響應(yīng)。在另一個實(shí)施例中,事件圖表向量可以總體定義一個使控制流邏輯435調(diào)用處理程序的事件。換句話說,事件圖表向量可以代表合起來發(fā)信號表示一個事件的多種狀況。例如,可以使用事件圖表屏蔽向量來指定由事件圖表向量所指示的某個事件,該事件為了觸發(fā)處理程序的執(zhí)行必須發(fā)生。每個位都可以代表達(dá)到可編程狀況的監(jiān)視器。當(dāng)所有未屏蔽的監(jiān)視器都達(dá)到了它們各自的指定狀況時,處理程序就會被調(diào)用。這樣,可以使用整個事件圖表向量來指定應(yīng)該觸發(fā)處理程序執(zhí)行的某個復(fù)雜的復(fù)合狀況。
在另一個實(shí)施例中,可以使用多個事件圖表向量和屏蔽來指定不同的狀況。不同的向量可以通過事件描述符表或者某種其他的機(jī)制來向量指向不同的處理程序。在另一個實(shí)施例中,可以將一個或多個事件圖表向量的一些位分組,以形成觸發(fā)處理程序調(diào)用的事件。對于本領(lǐng)域的技術(shù)人員來說,各種其他的不同置換也將是很明顯的。
圖5a圖示了監(jiān)視器500的一個實(shí)施例,該監(jiān)視器是可編程的,并且其能夠與各種性能監(jiān)視器接口連接以發(fā)信號通知復(fù)合事件。例如,這種性能監(jiān)視器可以記錄各種微體系結(jié)構(gòu)事件或狀況的發(fā)生,如在高速緩存層次結(jié)構(gòu)的給定級別上所發(fā)生的緩存缺失、分支退休;分支誤預(yù)測(misprediction)(或者被誤預(yù)測的分支的退休);追蹤緩存?zhèn)鬟f模式改變或事件;分支預(yù)測單元取請求;存儲請求的取消;高速緩存線分裂(1ine split)(完成分開的加載、存儲等的計數(shù));應(yīng)答事件;各種類型的總線事務(wù)(例如鎖、突發(fā)讀、寫回和無效);總線定序器的分配(或者僅僅是某些類型);數(shù)字輔助(下溢、異常等);特定類型的指令或微操作(uOP)的執(zhí)行/退休;機(jī)器清除(或者流水線清洗的計數(shù));資源停止(stall)(寄存器重命名資源、流水線等);對所標(biāo)簽的uOP的處理;退休的指令或u0P;高速緩存中所分配的(和/或諸如M的特定狀態(tài)下的)線;取指令被停止的周期數(shù);指令長度解碼器被停止的周期數(shù);取高速緩存的數(shù)量;高速緩存或類似器件中所分配的(或逐出的)線的數(shù)量。這些只是一些可以被監(jiān)視的微體系結(jié)構(gòu)事件或狀況的例子。對于本領(lǐng)域的技術(shù)人員來說,多種其他的可能性以及這些或其他狀況的組合都是很明顯的。此外,可以通過在所公開的任何一個實(shí)施例中公開的任何監(jiān)視器或類似監(jiān)視器來監(jiān)視這些和/或其他狀況或事件。
性能監(jiān)視器通常包含在處理器中,用于計數(shù)特定事件。程序員通過制造商定義的接口來讀這種性能監(jiān)視器的計數(shù),接口諸如為專用的處理器宏指令,象公知的Intel處理器所支持的RDPMC指令。例如,可以參見IntelPentium4處理器軟件開發(fā)人員手冊第三卷的附錄A。在一些實(shí)施例中,可以使用其他內(nèi)部指令或微指令或微操作來讀性能計數(shù)器。這樣,例如,性能監(jiān)視器就適合與所公開的技術(shù)一起使用了。在一些情況下,可以改變可編程性能監(jiān)視器,來提供事件通知(event signaling)的能力。在其他實(shí)施例中,可以通過其他監(jiān)視器讀性能監(jiān)視器以建立事件。
在圖5a的實(shí)施例中,監(jiān)視器500可以包括一組可編程條目。每一個條目可以包括條目號510、使能字段511、用于指定一組性能監(jiān)視器之一的性能監(jiān)視器號(EMON#)512以及觸發(fā)狀況514。觸發(fā)狀況可以是例如所達(dá)到的某個計數(shù)、在某時期內(nèi)所達(dá)到的計數(shù)以及計數(shù)差別等。監(jiān)視器500可以包括用于讀的邏輯,或者其被耦合以從指定的性能監(jiān)視器接收計數(shù)。當(dāng)各種N個狀況發(fā)生時,監(jiān)視器500用信號通知控制流邏輯。可以通過有選擇地編程每個條目的使能字段來使用N個條目的子集。
圖5b圖示了監(jiān)視器520的另一個實(shí)施例。監(jiān)視器520代表定制的復(fù)合事件監(jiān)視器。監(jiān)視器520通過信號線528-1到528-X從多種執(zhí)行資源或資源部分接收一組信號,并通過組合邏輯530組合這些信號。如果接收到了適當(dāng)?shù)男盘柦M合,那么監(jiān)視器520通過輸出信號線532用信號通知控制流邏輯。
圖5c圖示了監(jiān)視器540的另一個實(shí)施例。監(jiān)視器540包括具有N個條目的表。每個條目包括使能字段552、狀況字段554和觸發(fā)字段556??梢詫顩r字段進(jìn)行編程,來指定將監(jiān)視哪個輸入信號組合。狀況可以相關(guān)于也可以不相關(guān)于諸如性能監(jiān)視器的其他事件檢測結(jié)構(gòu),因此相對于圖5a所討論的狀況來說,這里的狀況可能更通用。觸發(fā)字段556可以指定用信號通知控制流邏輯所需的輸入信號的狀態(tài)。再次,每個條目可以通過使能字段552被使能/禁止。在一些實(shí)施例中,可以組合狀況和觸發(fā)字段??梢詫⑸鲜霰O(jiān)視器與其他公知類型進(jìn)行各種組合,或者可以與現(xiàn)有的更簡單或更復(fù)雜的監(jiān)視器進(jìn)行組合,對于本領(lǐng)域的技術(shù)人員來說,這些組合都是很明顯的。
圖6圖示了根據(jù)一個實(shí)施例來執(zhí)行用戶程序的流程圖,該用戶程序響應(yīng)于可程序定義的觸發(fā)來激活幫助線程。在方框600中,程序首先測試是否有讓步能力。這里,“讓步能力”是對基于狀況或事件的發(fā)生而中止處理流的能力的一種簡寫?;蛘咛娲鷮ψ尣郊嫒菪灾С值臏y試,讓步能力可以使用前面定義為無操作操作碼的操作碼和/或前面未使用過或未定義的MSR,使得使用讓步能力不會對沒有這種能力的處理器產(chǎn)生影響。還可以通過檢查專門的CPU-ID來查詢這種能力的存在,所述專門的CPU-ID對指示出在給定的處理器或平臺上是否存在這種能力的提示(hint)進(jìn)行編碼。類似地,可以使用諸如Itanium的PAL(處理器抽象層)調(diào)用或SALE(系統(tǒng)抽象層環(huán)境)的專用指令來查詢處理器特定的配置信息,包括是否有這種可程序定義的讓步能力。假設(shè)存在讓步能力,那么用戶程序可以讀和/或重置多種計數(shù)器,如在方框610中所示。例如,如果存在能力則可以讀性能監(jiān)視器計數(shù)器,這樣可以計算增量值(delta),或者可以重置這些值。
如在方框620中所示,用戶程序然后設(shè)置幫助線程觸發(fā)狀況。讓步能力可以在低特權(quán)級別下進(jìn)行訪問,使得任何程序或大部分程序都能夠利用這個特征。例如,讓步能力可用于環(huán)形連接(ring)Pentium處理器系列的處理器或其他類似處理器中的三個特權(quán)級別程序。因此,用戶程序本身能夠設(shè)置其自身的基于性能的觸發(fā)狀況。如果應(yīng)用程序要求或操作系統(tǒng)可以提供持久的監(jiān)視能力,那么知道存在這種上下文敏感的監(jiān)視器配置的用戶程序或操作系統(tǒng)就可以選擇在線程/進(jìn)程上下文切換中保存或恢復(fù)這種專用的監(jiān)視器配置/設(shè)置。
如在方框630中所示,在對讓步狀況進(jìn)行編程之后,用戶程序繼續(xù)執(zhí)行。在方框640中測試讓步狀況是否發(fā)生了。如果讓步狀況沒有發(fā)生,那么程序執(zhí)行繼續(xù)進(jìn)行,如在方框630中所示。如果讓步狀況發(fā)生了,那么幫助線程被激活,如在方框650中所示。圖6的流程圖形式是想要表示發(fā)生了事件的同步輪詢,可以在一些實(shí)施例中使用這個方法。但是,一些實(shí)施例在事件發(fā)生時,或者在事件發(fā)生的一定數(shù)量的時鐘周期內(nèi)異步地對事件做出反應(yīng),而不是以一定的間隔來輪詢事件。在一些實(shí)施例中,可以在循環(huán)或其他代碼部分的外部設(shè)置監(jiān)視狀況,以檢測特定的狀況。通過下面主線程和幫助線程的偽代碼例子說明了這個概念。
<pre listing-type="program-listing">main() {CreateThread(T)WaitForEvent()n=NodeArray
setup Helper Trigger//內(nèi)部的(Intrinsic)while(n and remaining) { work() n->i=n->next->j+n->next->k+n->next->1 n=n->next<!-- SIPO <DP n="13"> --><dp n="d13"/> remammg-- //每一次循環(huán)的時間(Every Stride Time) //global_n=n //global_r=remaining //SetEvent()}disable Helper Trigger//內(nèi)部的(Intrinsic) }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 //負(fù)責(zé)最有效的預(yù)取(Responsible for most effective prefetch) //由于在前運(yùn)行(due to run-ahead) n=n->next remaining-- WaitForEvent() if(remaining<global_r)//檢測在后運(yùn)行(Detect Run-Behind)remaining=global_r//通過向前跳轉(zhuǎn)而調(diào)整(Adjust byjump ahead)<!-- SIPO <DP n="14"> --><dp n="d14"/>n=global_r } }</pre>在循環(huán)外部設(shè)置觸發(fā)的一個好處是不會禁止循環(huán)內(nèi)的編譯器最優(yōu)化。例如,一些編譯器不使用那些可以被用于激活讓步能力的內(nèi)部函數(shù)來最優(yōu)化循環(huán)或代碼部分。通過將這種內(nèi)部函數(shù)放在循環(huán)之外,可以去除對編譯器最優(yōu)化的干擾。
圖7圖示了根據(jù)一個實(shí)施例對讓步設(shè)置進(jìn)行改進(jìn)的過程流程圖。使用具有讓步能力或者類似的處理器,程序員可以設(shè)計出將在多種情形下被調(diào)用的程序和幫助例程,如方框700中所示。這樣,可以為程序員預(yù)期的各種處理阻止的狀況提供幫助例程。在程序的執(zhí)行過程中,在需要的時候,處理器能夠調(diào)用這些例程。讓步設(shè)置可以包括事件圖表向量和屏蔽值和/或監(jiān)視器設(shè)置等。
在特定的處理器上,某種讓步設(shè)置可能帶來很好的執(zhí)行吞吐率。但是,這種確定用手動操作可能非常困難,所以最好按經(jīng)驗(yàn)獲得。因此編譯器或其他調(diào)試軟件(例如Intel VTune代碼分析器)可以反復(fù)地模擬具有不同讓步設(shè)置的代碼,從而得到最佳的或期望的設(shè)置,如在方框710中所示。因此,可以選擇對于運(yùn)行時間的讓步設(shè)置的期望值,如在方框720中所示??梢栽谝粋€處理器的多個不同版本上,或者在多個不同的處理器上,或者在多個不同的系統(tǒng)中模擬程序以獲得不同的讓步設(shè)置。如在方框730中所示,程序可以使用諸如CPU ID的系統(tǒng)或處理器標(biāo)識來選擇當(dāng)其運(yùn)行時所用的讓步設(shè)置。
此外,使用一小組設(shè)置來優(yōu)化性能可能有助于軟件更新。例如,可以下載新的讓步值來優(yōu)化給定處理器的性能,或者可以在發(fā)行新處理器時用新的讓步值來更新軟件。這種新值可以允許二進(jìn)制的或者模塊化的修改,而這種修改基本上不會擾亂或危及現(xiàn)有軟件的功能。
圖8圖示了根據(jù)一個實(shí)施例更新軟件的過程流程圖。如在方框800中所示,發(fā)行了新版本的微處理器。新版本可能具有與微體系結(jié)構(gòu)事件相關(guān)的不同等待時間,微體系結(jié)構(gòu)事件諸如為緩存缺失。因此,前面寫入的、用于在一定數(shù)量的緩存缺失之后激活幫助線程的例程可能會由于新的緩存缺失的等待時間而變得不那么有效。因此,如在方框810中所示,對讓步設(shè)置進(jìn)行重新優(yōu)化。
一旦獲得了新的設(shè)置,就可以(例如通過可能是程序的一部分的更新模塊)更新程序,如在方框820中所示。根據(jù)實(shí)現(xiàn)的具體細(xì)節(jié),可以對讓步值進(jìn)行修改或補(bǔ)充。此外,可以加入額外的或不同的幫助例程來幫助新處理器的實(shí)現(xiàn)。在任何一種情況下,讓步能力可以在最初交付軟件之后使交付性能增強(qiáng)版或?yàn)榭赡?。這種能力在非常多的情況下可能都是非常有利的,并且可以被用來僅僅提供新的最優(yōu)化而不會改變底層硬件。此外,在一些情況下可以保留底層軟件。例如,如果寫幫助例程來處理合成(synthetic)事件(例如嚴(yán)重的緩存缺失),那么在不同的硬件上可以改變觸發(fā)該例程的事件組成,而不改變實(shí)際的例程本身。例如,可以改變監(jiān)視器配置值和/或ESV/ESVM值,而例程則不做改變。
可以通過創(chuàng)建嵌套的幫助線程來進(jìn)一步加強(qiáng)所公開技術(shù)的效果,圖9a圖示了這種用法的一個例子。在圖9a的實(shí)施例中,在方框900中程序設(shè)置讓步事件。在方框910中,程序繼續(xù)執(zhí)行。在方框920中測試讓步事件(觸發(fā))是否發(fā)生。如果沒有讓步事件發(fā)生,那么程序繼續(xù)執(zhí)行,如在方框910中所示。如果讓步事件發(fā)生了,那么如在方框925中所示,幫助線程被激活。如在方框930中所示,該幫助線程設(shè)置另一個讓步事件。這樣,幫助線程有效地標(biāo)示了進(jìn)一步的狀況,該狀況指示進(jìn)一步的處理輔助(assistance)可能是有用的。這種進(jìn)一步的狀況可以表示第一幫助線程是否是有效的;和/或被設(shè)計成表示被認(rèn)為是作為第一幫助線程的激活結(jié)果而出現(xiàn)的、或者與第一幫助線程的激活無關(guān)而出現(xiàn)的進(jìn)一步的狀況。
如在方框940中所示,程序和幫助線程都是活動的正在執(zhí)行的線程。這些線程都是活動的并且都在多線程處理資源中執(zhí)行,從這個意義上來講,它們同時執(zhí)行。在方框950中測試通過程序和幫助線程的組合,是否已經(jīng)發(fā)生了新的觸發(fā)狀況。如果新觸發(fā)狀況沒有發(fā)生,那么兩個線程的執(zhí)行繼續(xù)進(jìn)行,如在方框940中所示。如果新觸發(fā)狀況發(fā)生了,則如在方框960中所示激活第二或嵌套幫助線程。然后,如在方框962中所示,程序和多個幫助線程可以是活動的并執(zhí)行。因此,在一些實(shí)施例中,可以使用多個嵌套幫助線程。
在一個實(shí)施例中,可以通過使用虛擬線程來激活多個幫助線程(嵌套的或者非嵌套的)。處理器可以有效地緩存上下文數(shù)據(jù)(在高速緩存位置、寄存器位置或其他存儲位置中),而不是將一整套資源全部用于以加處理器可以處理的線程數(shù)量。由此,可以在多個線程之間快速地切換一個物理線程槽。
例如,圖9b的實(shí)施例圖示了根據(jù)一個實(shí)施例的線程切換邏輯,該實(shí)施例使得虛擬線程被切換到有限數(shù)量的物理線程槽中,而這些物理線程槽已經(jīng)將硬件全部用于保留線程上下文。在圖9b的實(shí)施例中,可以將多個幫助線程965-1到965-k提供給虛擬線程切換器970。虛擬線程切換器970還可以包括其他邏輯和/或微碼(未示出),以在新的幫助線程和前面所選的幫助線程之間交換上下文信息。可以觸發(fā)該虛擬線程切換器970通過同步或異步的激勵來切換線程。例如,由讓步類型的指令定義的異步事件可以引起虛擬線程之間的線程切換。此外,幫助線程可以包括諸如掛起、停頓或其他類型的執(zhí)行停止指令的同步方式,以用信號通知到另一個線程的切換。虛擬線程切換邏輯970將虛擬線程的子集(例如,在圖9b的實(shí)施例中有一個)提供給處理器線程切換邏輯980。然后,處理器線程切換邏輯980在作為第一線程967-1的一個幫助線程與其他N-1個線程之間切換,一直進(jìn)行到線程967-N。
在一些實(shí)施例中,將讓步能力限制在特定的程序或線程可能是有利的。因此,可以使讓步能力是上下文敏感的或者是有所選擇的(non-promiscuous)的。例如,圖10a圖示了上下文敏感事件圖表向量和屏蔽實(shí)現(xiàn)的一個實(shí)施例。在圖10a的實(shí)施例中,存儲區(qū)1000包括上下文指示符字段1010以及與之相關(guān)的每一個事件圖表向量和屏蔽存儲位置1020。上下文指示符字段標(biāo)識每個事件圖表向量和屏蔽對所應(yīng)用的上下文。例如,可以使用諸如控制寄存器(例如表示處理系統(tǒng)進(jìn)程ID的×86處理器中的CR3)值的上下文值?;蛘呖梢愿郊拥鼗蛄硗獾厥褂镁€程數(shù)信息來定義上下文。因此,在一些實(shí)施例中,當(dāng)特定的上下文是活動的時,可以使能某些上下文特定的事件來中止處理。這樣,因?yàn)樽尣綑C(jī)制的事件只影響特定的上下文,所以該機(jī)制可以是有所選擇的。
圖10b圖示了上下文敏感事件圖表向量和屏蔽實(shí)現(xiàn)的另一個實(shí)施例。在圖10b的實(shí)施例中,可以通過為k個上下文中的每一個提供從1050-1到1050-k的一組事件圖表向量和屏蔽位置,來處理整數(shù)k個上下文。例如,在多線程處理器中可以有k個線程,并且每個線程可以具有事件圖表向量和屏蔽或者類似的讓步使能機(jī)制。但要注意,在其他實(shí)施例中,可能希望不僅僅跟蹤某些上下文中的事件。例如,事件可以反映所有的處理活動,和/或事件可能屬于多個相關(guān)的線程或者由多個相關(guān)的線程引起。
圖11圖示了多線程處理器的一個實(shí)施例,該處理器基于監(jiān)視器或讓步類型的事件來進(jìn)行線程的切換。雖然已經(jīng)討論了通過執(zhí)行處理程序來中止處理流的很多實(shí)施例,但是其他實(shí)施例可以定義引起多線程處理器中線程切換的事件。例如,在圖11的實(shí)施例中,線程切換邏輯被耦合到從1110-1到1110-N的一組N個監(jiān)視器上,并從這些監(jiān)視器接收信號。線程切換邏輯1105還可以被耦合到從1130-1到1130-p(p是正整數(shù))的一組或多組事件圖解和屏蔽對上。在確定何時切換線程時,事件圖解和屏蔽對可以使得線程切換進(jìn)行組合和/或忽略某些監(jiān)視事件。
執(zhí)行資源1120可以支持p個線程的執(zhí)行,但是其并不關(guān)心指令是否屬于特定的線程。執(zhí)行資源可以是指令執(zhí)行時所使用的執(zhí)行單元、取邏輯、解碼器或任何其他資源。復(fù)用器1115或其他選擇資源在多種線程之間對執(zhí)行資源1120進(jìn)行訪問做出仲裁。本領(lǐng)域的技術(shù)人員應(yīng)該知道,在多線程處理器中可以共享或復(fù)制各種資源,并且各種資源可以具有切換線程的訪問,該訪問允許有限數(shù)量的線程(例如一個線程)同時訪問資源。
如果由一個或多個監(jiān)視器和/或事件圖表向量和屏蔽對之一所指示的一組狀況發(fā)生了,那么線程切換邏輯1105切換執(zhí)行中的線程。這樣,在處理器狀況匹配那些被編程的狀況時,可以激活另一個線程取代那個活動的線程。例如,用戶程序可以控制觸發(fā)線程切換的事件。
在一些多線程處理器中,每一個線程可以具有一組相關(guān)的事件圖表向量和屏蔽對。因此,如圖11所示,復(fù)用器1115可以在p個線程之間仲裁,并且可能有對應(yīng)的p個事件圖解和屏蔽對。但是,這僅僅是因?yàn)樘幚砥魇嵌嗑€程的,而不意味著所有的實(shí)現(xiàn)都使用多個事件圖表向量和屏蔽。一些實(shí)施例可以只使用一對,或者使用其他使能指示符。例如,可以用一位作為使能指示符來打開或關(guān)閉特定的讓步類型的能力。
在開發(fā)過程中,設(shè)計會經(jīng)過從創(chuàng)建、模擬到制造的多個階段。表示設(shè)計的數(shù)據(jù)可以以多種方式表示設(shè)計。首先,可以使用硬件描述語言或另一種功能描述語言來表示硬件,這在模擬中是很有用的。此外,在設(shè)計過程的一些階段,可以生產(chǎn)具有邏輯和/或晶體管柵極的電路級模型。而且,在某個階段,大多數(shù)設(shè)計達(dá)到了表示多種器件在硬件模型中的物理布局的數(shù)據(jù)級別。在使用傳統(tǒng)半導(dǎo)體制造技術(shù)的情況下,表示硬件模型的數(shù)據(jù)可以是指定生產(chǎn)集成電路所用掩膜的不同掩膜層上多種特征存在或不存在的數(shù)據(jù)。在設(shè)計的任何一種表示方法下,數(shù)據(jù)都可以存儲在任何形式的機(jī)器可讀介質(zhì)中。所述機(jī)器可讀介質(zhì)可以是所調(diào)制的或所產(chǎn)生的用以傳輸這種信息的光波或電波、存儲器或者諸如磁盤的磁存儲器或光存儲器。這些介質(zhì)中的任何一種都可以“攜帶”或“表示”設(shè)計或軟件信息。當(dāng)表示或攜帶了代碼或設(shè)計的電載波被傳輸時,直到對電信號進(jìn)行了拷貝、緩沖或重傳輸,這樣就完成了新的拷貝。因此,通信供應(yīng)商或網(wǎng)絡(luò)供應(yīng)商可以制作具有本發(fā)明技術(shù)的物件(載波)的備份。
這樣就公開了可以激活其他線程的可編程事件驅(qū)動讓步機(jī)制的技術(shù)。雖然已經(jīng)描述并在附圖中示出了示例性的特定實(shí)施例,但是應(yīng)該理解,本領(lǐng)域的技術(shù)人員在研究本發(fā)明時可以想到多種其他的修改,所以文中的實(shí)施例只是對本發(fā)明的說明而不是限制,并且本發(fā)明不限于所示出和描述的特定結(jié)構(gòu)和設(shè)置。在這種發(fā)展快且很難預(yù)見下一步發(fā)展的技術(shù)領(lǐng)域中,在不脫離本發(fā)明的原則或所附權(quán)利要求的范圍的情況下,通過技術(shù)進(jìn)步可以很容易地在設(shè)置和細(xì)節(jié)方面對所公開的實(shí)施例做出修改。
權(quán)利要求
1.一種裝置,包括執(zhí)行資源,用于執(zhí)行多個指令;和監(jiān)視器,用于檢測所述執(zhí)行資源的低進(jìn)度指示狀況,所述監(jiān)視器響應(yīng)于檢測到所述低進(jìn)度指示狀況,通過轉(zhuǎn)移到一個處理程序來有選擇地中止至少一個程序的處理。
2.根據(jù)權(quán)利要求1所述的裝置,其中,所述監(jiān)視器被一個指令使能以檢測低進(jìn)度指示狀況,其中所述低進(jìn)度指示狀況在所述指令執(zhí)行完成后將被檢測。
3.根據(jù)權(quán)利要求1所述的裝置,其中,所述低進(jìn)度指示狀況是微體系結(jié)構(gòu)事件的計數(shù)。
4.根據(jù)權(quán)利要求1所述的裝置,其中,所述監(jiān)視器是多個監(jiān)視器中的一個,并且其中,所述低進(jìn)度指示狀況包括所述多個監(jiān)視器中的一個或所達(dá)到的一個或多個可編程計數(shù)。
5.根據(jù)權(quán)利要求4所述的裝置,其中,所述多個監(jiān)視器是處理器指令也可讀的處理器性能監(jiān)視器。
6.根據(jù)權(quán)利要求1所述的裝置,其中所述裝置是處理器,并且其中,所述低進(jìn)度指示狀況包括處理器內(nèi)部事件的可編程組合。
7.根據(jù)權(quán)利要求1所述的裝置,其中,所述監(jiān)視器將引起與一個或多個處理器事件相關(guān)而與指令執(zhí)行的邊界無關(guān)的、非精確的控制流改變。
8.根據(jù)權(quán)利要求4所述的裝置,其中,所述多個監(jiān)視器中的一個或多個將引起與一個或多個處理器事件相關(guān)而與單指令的執(zhí)行無關(guān)的異步的控制流改變。
9.根據(jù)權(quán)利要求1所述的裝置,其中所述監(jiān)視器是多個監(jiān)視器中的一個,所述裝置還包括事件圖表向量存儲位置,用于存儲包含多個位的事件圖表向量,每個位對應(yīng)于與所述多個監(jiān)視器有關(guān)聯(lián)的一個或多個狀況;事件圖表向量屏蔽存儲位置,用于存儲包含另一多個位的事件圖表向量屏蔽,以指示事件圖表向量的相應(yīng)位是否被屏蔽。
10.根據(jù)權(quán)利要求9所述的裝置,其中,事件圖表向量的多個位中的每一位都代表事件,所有事件都發(fā)生將表示一個復(fù)合事件,并且如果不被屏蔽則中止處理。
11.根據(jù)權(quán)利要求9所述的裝置,其中事件圖表向量的多個位中的每一位都代表一個或多個事件,該事件如果不被屏蔽則中止處理。
12.根據(jù)權(quán)利要求11所述的裝置,還包括用于存儲事件描述符表的存儲器。
13.根據(jù)權(quán)利要求1所述的裝置,其中,所述處理程序是存儲在計算機(jī)可讀介質(zhì)中的事件處理程序例程。
14.根據(jù)權(quán)利要求13所述的裝置,其中,所述執(zhí)行資源包括能夠執(zhí)行多個線程的多線程執(zhí)行邏輯,并且其中,所述事件處理程序例程如果被執(zhí)行則將啟動幫助線程。
15.根據(jù)權(quán)利要求14所述的裝置,其中,在檢測到所述低進(jìn)度指示狀況時執(zhí)行的第一線程和所述幫助線程將被同時執(zhí)行。
16.根據(jù)權(quán)利要求15所述的裝置,其中,所述幫助線程設(shè)置新的低進(jìn)度指示狀況以觸發(fā)另一個幫助線程。
17.根據(jù)權(quán)利要求1所述的裝置,其中,所述監(jiān)視器是上下文敏感的。
18.根據(jù)權(quán)利要求1所述的裝置,其中,所述監(jiān)視器可以由低特權(quán)級別的用戶程序編程,以響應(yīng)于至少部分地由所述用戶程序引起的狀況來激活所述處理程序。
19.一種裝置,包括執(zhí)行邏輯,用于執(zhí)行程序;和事件檢測邏輯,其響應(yīng)于執(zhí)行邏輯的可程序定義狀況,在該程序執(zhí)行期間來執(zhí)行事件處理程序。
20.根據(jù)權(quán)利要求19所述的裝置,還包括事件使能指示符,所述事件使能指示符是可編程的,以指示是否現(xiàn)在識別事件。
21.根據(jù)權(quán)利要求19所述的裝置,其中,所述事件檢測邏輯可以由在用戶特權(quán)級別下工作的程序來編程。
22.根據(jù)權(quán)利要求21所述的裝置,其中,所述事件檢測邏輯是上下文敏感的。
23.根據(jù)權(quán)利要求19所述的裝置,還包括多個監(jiān)視器;事件圖表向量存儲位置,用于存儲具有多個事件發(fā)生指示符位的事件圖表向量,所述的每個指示符位與所述多個監(jiān)視器中的一個相關(guān)聯(lián);事件圖表向量屏蔽存儲位置,用于存儲具有多個事件圖解屏蔽位的事件圖表向量屏蔽,每一個事件圖解屏蔽位與所述多個事件發(fā)生指示符位中的一個相關(guān)聯(lián)。
24.根據(jù)權(quán)利要求19所述的裝置,其中,所述可程序定義的狀況包括發(fā)生了一個或多個微體系結(jié)構(gòu)事件的程序定義的組合。
25.根據(jù)權(quán)利要求24所述的裝置,還包括用于計數(shù)微體系結(jié)構(gòu)事件的多個監(jiān)視器,其中,所述一個或多個微體系結(jié)構(gòu)事件的所述程序定義的組合包括所述多個監(jiān)視器中的每一個達(dá)到可編程計數(shù)。
26.一種裝置,包括多線程執(zhí)行邏輯,其能夠同時執(zhí)行多個線程;多個監(jiān)視器,用于監(jiān)視所述多線程執(zhí)行邏輯中的事件;耦合到所述多個監(jiān)視器上的線程切換邏輯,所述線程切換邏輯用于至少部分地基于所述多個監(jiān)視器中的一個或多個的可編程狀況來切換線程。
27.根據(jù)權(quán)利要求26所述的裝置,其中,所述多個監(jiān)視器是監(jiān)視多個微體系結(jié)構(gòu)狀況的多個性能監(jiān)視器,其中所述多個性能監(jiān)視器也是通過指令可讀的。
28.根據(jù)權(quán)利要求26所述的裝置,其中,所述可編程狀況包括多于一個的緩存缺失。
29.根據(jù)權(quán)利要求26所述的裝置,其中,所述可編程狀況在用戶特權(quán)級別下是可編程的。
30.一種方法,包括對監(jiān)視器進(jìn)行編程以檢測處理器狀況;響應(yīng)于所述處理器狀況的發(fā)生,產(chǎn)生幫助線程。
31.根據(jù)權(quán)利要求30所述的方法,其中對監(jiān)視器進(jìn)行編程包括定義微體系結(jié)構(gòu)狀況。
32.根據(jù)權(quán)利要求31所述的方法,其中,定義微體系結(jié)構(gòu)狀況包括為一個或多個監(jiān)視器設(shè)置一個或多個可編程計數(shù)值。
33.根據(jù)權(quán)利要求30所述的方法,其中,對監(jiān)視器進(jìn)行編程包括寫入模型專用寄存器。
34.一種方法,包括在執(zhí)行第一程序部分時監(jiān)視內(nèi)部處理狀況,以得到表示多個內(nèi)部硬件事件的可編程狀況;以及響應(yīng)于可編程狀況的發(fā)生,將執(zhí)行轉(zhuǎn)移到第二程序部分。
35.根據(jù)權(quán)利要求34所述的方法,其中,所述多個內(nèi)部硬件事件是一種類型事件的多次發(fā)生。
36.根據(jù)權(quán)利要求34所述的方法,其中,所述多個內(nèi)部硬件事件包括多個不同的微體系結(jié)構(gòu)事件中的一個或多個。
37.根據(jù)權(quán)利要求34所述的方法,其中,所述可編程狀況包括達(dá)到用戶可定義的量度的多個監(jiān)視器。
38.根據(jù)權(quán)利要求34所述的方法,還包括寫入模型專用寄存器以設(shè)置所述可編程狀況。
39.一種方法,包括將多個用戶可定義的幫助線程觸發(fā)設(shè)置為第一狀態(tài);第一次模擬程序的性能;調(diào)整所述多個用戶可定義的幫助線程觸發(fā);第二次模擬程序的性能;以及基于第一次和第二次的程序性能,選擇優(yōu)選的一組用戶可定義的幫助線程觸發(fā)。
40.根據(jù)權(quán)利要求39所述的方法,還包括將所述優(yōu)選的那組用戶可定義的幫助線程觸發(fā)包括在所述程序中。
41.根據(jù)權(quán)利要求39所述的方法,還包括包括多組用戶可定義的幫助線程觸發(fā);基于處理器標(biāo)識符,選擇所述多組用戶可定義的幫助線程觸發(fā)中的一個。
42.一種系統(tǒng),包括處理器,其包括用戶可編程的硬件監(jiān)視器,該監(jiān)視器用于檢測處理器狀況并響應(yīng)于所述處理器狀況引起處理程序的執(zhí)行;和存儲所述處理程序的存儲介質(zhì),所述處理程序包括使得產(chǎn)生幫助線程的至少一個指令。
43.根據(jù)權(quán)利要求42所述的系統(tǒng),其中,所述處理器狀況包括對多個處理器事件的指示。
44.根據(jù)權(quán)利要求42所述的系統(tǒng),其中,所述處理器狀況包括達(dá)到一種類型事件的計數(shù)的用戶可編程硬件監(jiān)視器。
45.根據(jù)權(quán)利要求42所述的系統(tǒng),其中,所述處理器狀況包括達(dá)到多個處理器內(nèi)部事件的多個計數(shù)的多個用戶可編程硬件監(jiān)視器。
46.根據(jù)權(quán)利要求45所述的系統(tǒng),還包括可編程使能控制,用于響應(yīng)于達(dá)到所述多個計數(shù)的所述多個用戶可編程硬件監(jiān)視器來使能或禁止處理程序的執(zhí)行。
47.根據(jù)權(quán)利要求42所述的系統(tǒng),還包括通信接口。
48.根據(jù)權(quán)利要求47所述的系統(tǒng),還包括更新模塊,用于使系統(tǒng)通過通信接口接收新的處理器狀況以將該狀況編程到所述可編程硬件監(jiān)視器中。
49.根據(jù)權(quán)利要求48所述的系統(tǒng),其中所述更新模塊還使系統(tǒng)通過通信接口接收與所述新的處理器狀況有關(guān)聯(lián)的新的幫助線程。
50.一種處理器,包括執(zhí)行資源,用于執(zhí)行多個指令;和邏輯,用于響應(yīng)于所述執(zhí)行資源的多個事件的可編程組合來中止所述多個指令的執(zhí)行,所述多個事件在執(zhí)行第一指令后發(fā)生,所述第一指令使能對可編程狀況的檢測。
51.根據(jù)權(quán)利要求50所述的處理器,其中,所述中止包括線程切換。
52.根據(jù)權(quán)利要求50所述的處理器,其中,所述中止包括調(diào)用處理程序例程。
53.根據(jù)權(quán)利要求50所述的處理器,其中,所述指令包括寫入寄存器。
54.根據(jù)權(quán)利要求50所述的處理器,其中,所述指令包括事件設(shè)置的指令。
全文摘要
本發(fā)明提供了用于可激活其他線程的可編程事件驅(qū)動的讓步機(jī)制的方法、裝置和程序。在一個實(shí)施例中,一種裝置包括執(zhí)行資源,用于執(zhí)行多個指令;和監(jiān)視器,用于檢測表示低級別進(jìn)度的狀況。監(jiān)視器可以通過響應(yīng)于檢測到表示低級別進(jìn)度的狀況來轉(zhuǎn)移到處理程序,以中止程序的處理。在另一個實(shí)施例中,線程切換邏輯可以被耦合到多個事件監(jiān)視器上,所述監(jiān)視器監(jiān)視多線程執(zhí)行邏輯中的事件。線程切換邏輯至少部分地基于一個或多個性能監(jiān)視器的可編程狀況來切換線程。
文檔編號G06F9/30GK1523500SQ20031011308
公開日2004年8月25日 申請日期2003年12月25日 優(yōu)先權(quán)日2003年2月19日
發(fā)明者紅·王, 紅 王, 佩爾·哈馬隆德, 哈馬隆德, 湘·鄒, 申, 田 , 約翰·申, 吉克卡爾, 新民·田, 王, 米林蒂·吉克卡爾, 德賽, 佩里·王, 皮尤什·德賽 申請人:英特爾公司