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