一種在處理器中掛起和釋放執行過程中計算線程的整體機制的製作方法
2023-05-11 16:22:11
專利名稱:一種在處理器中掛起和釋放執行過程中計算線程的整體機制的製作方法
技術領域:
本發明屬於數字處理器的領域(例如,微處理器、數位訊號處理器、微控制器等等),特別是有關於,涉及在單個處理器中管理多個線程的執行的裝置與方法。
背景技術:
在數字計算的領域,計算能力的發展歷史顯示了在各方面都有持續的進步。持續的進步一直在發生,例如處理器的裝置密度與線路互連的技術,可用於改善運算速度、容錯能力、使用更高速的時脈信號或者更多其它改進。另一個可改善整體計算能力的研究領域為並行處理,其不僅包括使用多個分開的處理器執行並行操作。
並行處理的概念包括將任務分散至多個分開的處理器,但是也包括多個程序同時在一個處理器上執行的方案。此方案一般被稱為多線程。
接下來將介紹多線程的概念隨著處理器操作頻率逐漸加快,要隱藏在計算機系統的操作中固有的延遲(latency)也變的越來越困難。一個高級處理器在一個特定應用中其高速數據緩存中丟失了百分之一的指令,如果它對於片外RAM有50個周期的延遲的話,則可能導致大概百分之五十的時間停頓。如果當該處理器因為丟失的高速緩存指令而停頓時,屬於另一個不同應用程式的指令可以被執行的話,該處理器的性能可以因此而改善,並且一部份或者全部的跟內存有關的延遲也可有效的被消除。舉例來說,圖1A顯示了因為高速緩存丟失而停頓的單個指令流101。支持該指令運作的機器僅可在一個時間內執行單個線程或任務。相反的,圖1B顯示了在指令流101停頓時指令流102可被執行。在這種情況當中,該支持機器可以同時支持兩個線程,也因此更有效的使用該機器所擁有的資源。
更一般的說,各個單獨的計算機指令都具有特定的語法,使得不同種類的指令需要不同的資源去執行期望的運算。整數負載沒有充分使用到整個浮點運算單元的邏輯或寄存器,任何除了寄存器移位之外的運算皆需要使用加載/儲存單元的資源。沒有一個單一指令使用到全部處理器的資源,而且當為了追求更高性能的設計而因此加入了更多的管線級與並行功能單元後,會進而降低平均被所有指令使用而全部消耗的處理器資源的比例。
多線程的發展一大部分源自於,如果一個順序程序基本上不能有效率地完全使用處理器的全部資源,該處理器就應該能夠將這些資源中的一部分在屬於程序執行的多個線程當中進行分配。這種方式並不一定導致任何特定程序可被更快速的執行,事實上,一些多線程方案實質上降低了單一線程程序執行的性能,然而卻可使一個並行指令流的集合在更短的時間內和/或使用更少的處理器數目來運行。這個概念可用圖2A與圖2B來說明,其中各自顯示了單一線程處理器210與雙線程處理器250。處理器210支持單一線程212,表示為使用加載/儲存單元214。如果當存取高速緩存216時發生一個丟失,那麼處理器210便會停頓(根據圖1A所描述)直到重新獲得該丟失數據。在這個過程當中,乘法器/除法器單元218始終處於閒置狀態而且沒有被有效使用。然而,處理器250支持兩個線程;即212與262。因此,若是線程212發生停頓,處理器250仍然可以同時執行線程262與乘法器/除法器單元218,因而更有效地利用了所有的資源(根據圖1B所描述)。
在單一處理器上具有多線程可獲得更佳的多任務處理能力的好處。然而,捆綁多個程序線程在關鍵事件上可以降低事件反應時間,而且線程級的並行處理在原理上可在單一應用程式中被充分利用。
已經提出了各種多線程處理方式。其中之一為指令交錯多線程(interleaved multithreading),也就是分時復用(TDM)方案,對於每個發出的指令從一個線程切換至另一個線程。該方案在調度上有一定程度的「公平性」,但是為了靜態分配多個發起槽(issue slot)至多個線程,通常會限制單一程序線程的性能。動態交錯的方式可以改良這個問題,但是實現這個方式比較複雜。
另一個多線程的方案是塊交錯多線程(blocked multithreading),其從一個單一程序線程持續地發出連續多個指令,直到某個特定的阻塞事件發生,例如高速緩存丟失或者重新設定,舉例來說,導致該線程被掛起而另一個線程被激活。因為塊交錯多線程變換線程的頻率較小,所以其實現方式可以是比較簡單的。另一方面,阻塞的動作在調度線程的過程中是比較不具有「公平性」。單個線程可以獨佔整個處理器很長一段時間,如果它非常地幸運能在高速緩存中找到它需要的所有數據。一種混合調度方案結合了塊交錯多線程與指令交錯多線程的特定,也常被使用與研究。
仍然有另一種多線程的形式為同時多線程(simultaneousmultithreading),是一種在超標量處理器上實現的方案。在同步多線程中,來自不同線程的多個指令可以被同時發出。例如,一個超標量精簡指令集計算機(RISC),每周期發出總共兩個指令,以及一個同步多線程的超標量管線,每周期從兩個線程中任一個發出總計兩個指令。那些單一程序線程所依附或停頓的周期會導致該處理器不被充分利用,因此在同步多線程中這些周期可被另一線程的發出指令所填補。
同步多線程也因此成為一個非常有用的技術,用以解決並恢復在超標量管線中所浪費的效率。但也有爭議地被認為是最複雜的多線程系統所使用的方法,因為在一周期內激活多於一個線程,會使得內存存取保護裝置的實現更加地複雜等等。另外一個值得注意的一點,對於一定的工作量,中央處理器(CPU)操作的管線化越完善,越會降低其多線程實現的潛在獲得的效率。
多線程與多重處理實質上是非常相關的。事實上,一般可認為其中的差異只有一點不同也就是多重處理器只共享內存和/或線路連線,而多線程處理器除了共享內存和/或線路連線之外,還共享指令提取與發出邏輯,和其它可能的處理器資源。在單個多線程處理器當中,各個線程互相競爭發起槽與其它資源,從而限制了並行處理能力。某些多線程程序與架構模型假設了新線程會被分配到不同的處理器,使得該程序可被有效的並行處理。
在本申請案提出申請時,應該已有許多的多線程解決方案,用以解決當前領域許多不同的問題。其中之一即為實時線程的改善方案。一般來說,實時多媒體算法通常被執行於專用處理器/數位訊號處理器(DSP),用以保證服務質量(QoS)與響應時間,且並不包括將線程混合併共享於多線程方案當中,因為實時軟體並無法容易地獲得保證該軟體可被適時地執行。
在這方面,非常清楚的必須要有一個方案與機制,允許一個或多個實時線程或虛擬處理器能夠在特定的指令間的間隔保證獲得在多線程處理器中特定比例的指令發起槽,因而計算帶寬與響應時間能被清楚的定義。如果這樣的機制能被使用,則具有嚴格QoS要求的線程即可被包含在此多線程的混用中。另外,這種系統中的實時線程(如DSP相關的線程),可以或多或少地被避免於遇到中斷而因搬動重要資源而變化執行的時間。這種技術可以在特殊的情況下使用具有DSP加強功能的RISC處理器與內核,以取代一般在消費性多媒體應用上使用分離的RISC與DSP內核。
在本申請案提出申請時,當前技術中多線程方案的另一個問題為在處理器中產出與消滅激活的線程。為了支持相對細粒度多線程(fine-grained multithreading),期望以可能的最小系統開銷產生和消滅程序執行過程的並行線程,並且至少在一般的情況下不會干擾到必須的作業系統功能。在這個方面,清楚需要的是一些指令如FORK(線程產生)與JOIN(線程終止)。另一個存在於多線程處理器中的問題為,調度原則使得一個線程持續運行直到被另一些資源阻塞,然而一個沒有被任何資源阻塞的線程仍然需要使得該處理器切換至其它的線程。所以在這個方面可以清楚的知道,還有需要PAUSE或YIELD指令。
發明內容
本發明的一個基本目的是提供一種適用於細粒度多線程的健壯系統,其中可以利用最小的系統開銷來產生和消滅線程。根據這個目的,在根據本發明的一個較佳實施例中,在一個能夠支持並執行多程序線程的處理器中,提供了一種處理機制,其包括一個參數,用於調度一個程序線程;和一個設置於該程序線程中並且能存取該參數的指令。當該參數等於第一數值時,該指令即根據編碼在該參數中的一個或多個條件來重新調度該程序線程。在一個有關該機制的較佳實施例中,該參數被保存在一個數據儲存裝置中。並且在另一個較佳實施例中,當該參數等於第二數值時,其中該第二數值不等於該第一數值,該指令即釋放該程序線程。在某些實施例中,該第二數值為零。
在某些實施例中,當該參數等於該第二數值時,其中該第二數值不等於該第一數值,該指令即無條件的重新調度該程序線程。另外在一些實施例中,該第二數值為一奇數值。在一些其它的較佳實施例中,該第二數值為負1。
在一些較佳實施例中,該一個或多個條件中的一個條件與將執行機會讓與其他線程直到一個條件被滿足的程序線程相關。另外,在一些實施例中,該一個條件被編碼於該參數中的一個位向量或位欄位中。還有,在一些實施例中,在該程序線程被重新調度的情形下,該程序線程的執行在該線程當中該指令之後繼續。還有,在其他一些較佳實施例中,當該參數等於第三數值時,其中該第三數值不等於該第一數值與第二數值,該指令無條件地重新調度該程序線程。
某一些有關於該機制的較佳實施例中,該一個或多個條件中的一個條件為一個硬體中斷。還有,在一些實施例中,該一個或多個條件中的一個條件為一個軟體中斷。還有,在許多實施例中,當該程序線程被重新調度的情形下,該程序線程的執行在該線程中該指令之後的位置繼續。
根據本發明的另一方面,在一個能夠支持並執行多程序線程的處理器中,提供了一種由一個線程重新調度執行或釋放該線程本身的方法,其包括(a)發出一個指令,其能存取一個數據儲存裝置中的一部分記錄,該部分記錄編碼了與決定該線程是否會被重新調度的一個或多個條件相關的一個或多個參數;和(b)遵循該條件,根據在該部分記錄中的一個或多個參數重新調度或釋放該線程。在一個較佳實施例中,該記錄被置於一個通用寄存器(GPR)中。另外,在一個較佳實施例中,這些參數中的一個參數與該被釋放的而不是被重新調度的線程相關。在一些較佳實施例中,與該被釋放的線程相關的該一個參數的值為零。
在一些實施該方法的實施例當中,這些參數中的一個參數與被重新排隊等待調度的線程相關。在一些實施例當中,該參數為任意的奇數值。在一些實施例當中,該參數為負1的二進位補碼值。在一些實施例中,這些參數中的一個參數與將執行機會讓與其他線程直到一個特定條件被滿足的實施例相關。另外,在另一些實施例中,該一個條件被編碼於該記錄中的一個位向量或是一個或多個位欄位中。
在許多實施該方法的實施例當中,在該線程發出該指令並且被重新調度的情形下,當該一個或多個條件被滿足時,該線程的執行在線程指令流中該線程發出的該指令之後的位置繼續。在一些實施例當中,這些參數中的一個參數與被釋放而不是被重新調度的線程相關,並且這些參數中的另一個參數與被重新排隊等待調度的線程相關。在其它的一些實施例當中,這些參數中的一個參數與該被釋放而不是被重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足的線程相關。在其它的一些實施例當中,這些參數中的一個參數與被重新排隊等待重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定的條件被滿足的線程相關。另外,在其它的一些實施例當中,這些參數中的一個參數與該被釋放而不是被重新調度的線程相關,而這些參數中的另一個參數與被重新排隊等待調度的線程相關,並且這些參數中的再另一個參數與將執行機會讓與其它線程直到一個特定的條件被滿足的線程相關。
根據本發明的另一個方面,提供了一種能支持與執行多個軟體實體的數字處理器,包括一個數據儲存裝置中的一部分記錄,該部分記錄編碼了與一個或多個條件相關的一個或多個參數,該一個或多個條件決定了當一個線程將執行機會讓與其它線程時該線程是否會被重新調度。
在該處理器的一些實施例當中,該部分記錄被置於一個通用寄存器(GPR)中。在一些其它較佳實施例,這些參數中的一個參數與被釋放而不是被重新調度的線程相關。在另一些較佳實施例中,該與被釋放的線程相關的參數的值為零。
在該處理器的其他一些實施例當中,這些參數中的一個參數與被重新排隊等待調度的線程相關。在一些實施例當中,該一個參數為任意的奇數值。在另一些實施例當中,該參數為負1的二進位補碼值。在另一些實施例中,這些參數中的一個參數與將執行機會讓與其它線程直到一個特定條件被滿足的線程相關。另外,在一些情況下,該一個參數可以被編碼於該記錄中的一個位向量或是一個或多個位欄位中。
在該處理器的其他一些實施例當中,這些參數中的一個參數與該被釋放而不是被重新調度的線程相關,並且這些參數中的另一個參數與被重新排隊等待調度的線程相關。在其它的一些實施例當中,這些參數中的一個參數與被釋放而不是被重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足的線程相關。在其它的一些實施例當中,該參數當中的一個參數與被重新排隊等待重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足的線程相關。
在其它的一些實施例當中,這些參數中的一個參數與被釋放而不是被重新調度的線程相關,而該參數當中的另一個參數與被重新排隊等待調度的線程相關,並且這些參數中的再另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足的線程相關。
根據本發明的另一方面,提供一種能支持與執行多個程序線程的處理系統,包括一個數字處理器;一個數據儲存裝置中的一部分記錄,該部分記錄編碼了與決定一個線程是否會被重新調度的一個或多個條件相關的一個或多個參數;和一個指令集,其包含一個指令用以重新調度和釋放該線程。當該線程發出該指令時,該指令存取該記錄中的該一個或多個參數,並且該系統遵循該一個或多個條件,根據該部分記錄中的該一個或多個參數,重新調度和釋放發出該指令的線程。
在該處理系統的一些較佳實施例當中,該記錄被置於一個通用寄存器(GPR)中。在一些其它的較佳實施例,這些參數中的一個參數與被釋放而不是被重新調度的線程相關。在一些實施例中,與被釋放的線程相關的該一個參數的值為零。在一些其它的實施例當中,這些參數中的一個參數與被重新排隊等待調度的線程相關。在一些實施例當中,該用來重新調度的參數為任意的奇數值。在其它的一些實施例當中,該用來重新調度的參數為負1的二進位補碼值。
在該系統的一些實施例當中,這些參數中的一個參數與將執行機會讓與其它線程直到一個特定條件被滿足的線程相關。另外,在一些實施例中,該一個參數被編碼於該記錄中的一個位向量或是一個或多個位欄位中。在該系統的許多實施例當中,在一個線程發出該指令並且被有條件地重新調度的情形下,當該一個或多個條件被滿足時,該線程的執行在該線程指令流中該指令之後的位置繼續。
在該處理系統的一些實施例當中,該參數當中的一個參數與被釋放而不是被重新調度的線程相關,並且這些參數中的另一個參數與被重新排隊等待調度的線程相關。在其它的一些實施例當中,該參數當中的一個參數與被釋放而不是被重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足的線程相關。
在其它的一些實施例當中,該參數當中的一個參數與被重新排隊等待重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足相關。另外,在其它的一些實施例當中,該參數當中的一個參數與被釋放而不是被重新調度的線程相關,而該參數當中的另一個參數與被重新排隊等待調度的線程相關,並且這些參數中的再另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足的線程相關。
另外,根據本發明的又一個方面,提供了一種數字儲存介質,其上寫入了來自一個指令集的指令,用於在一個數字處理器上執行多個軟體線程中的各個軟體線程,該指令集包含了一個指令,該指令使發出該指令的線程放棄執行,並且存取一個數據儲存裝置中的一部份記錄中的一個參數,其中,關於釋放或重新調度的條件與該參數相關,並且遵循該條件,根據該部份記錄中的該參數執行釋放或重新調度。
在該介質的一些實施例當中,該記錄被置於一個通用寄存器(GPR)中。在該介質的一些其它實施例中,這些參數中的一個參數與被釋放而不是被重新調度的線程相關。在一些實施例中,該與被釋放的線程相關的參數的值為零。在該介質的一些其它實施例當中,這些參數中的一個參數與被重新排隊等待調度的線程相關。在一些實施例當中,該一個參數為任意的奇數值。在另一些實施例當中,該一個參數為負1的二進位補碼值。
在該介質的另一些實施例當中,這些參數中的一個參數與將執行機會讓與其它線程直到一個特定條件被滿足的線程相關。在另一些實施例中,該參數被編碼於該記錄中的一個位向量或是一個或多個位欄位中。在另外一些實施例當中,該參數當中的一個參數與被釋放而不是被重新調度的線程相關,並且這些參數中的另一個參數與被重新排隊等待調度的線程相關。在其它的一些實施例當中,該參數當中的一個參數與被釋放而不是被重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足的線程相關。
在該機制的一些實施例當中,該參數當中的一個參數與被重新排隊等待重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足的線程相關。另外,在該數字儲存介質的一些實施例當中,該參數當中的一個參數與被釋放而不是被重新調度的線程相關,而該參數當中的另一個參數與被重新排隊等待調度的線程相關,並且這些參數中的再另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足的線程相關。
在該機制的一些實施例當中,該指令為一個YIELD指令。還有,在該機制的一些實施例當中,該部分記錄包括一個位向量。另外,在該機制的其他一些實施例當中,該部分記錄包括一個或多個多位欄位。
在該方法的一些實施例當中,該指令為一個YIELD指令。還有,在該處理系統的一些實施例當中,該指令為一個YIELD指令。
在該數字儲存介質的實施例當中,該指令為一個YIELD指令。
根據本發明的另一個方面,提供了一種包含在傳輸介質中的計算機數據信號,包括計算機可讀的程序代碼,該程序代碼描述了一個能夠支持並執行多程序線程的處理器,並且包括用於釋放與重新調度一個線程的機制,該程序編碼包括第一程序代碼段,用於描述一個數據儲存裝置中的一部份記錄,該部分記錄編碼了與決定一個線程是否會被重新調度的一個或多個條件相關的一個或多個參數;和第二程序代碼段,用於描述能夠存取該記錄中的該一個或多個參數的一條指令,其中,當該線程發出該指令時,該指令存取該記錄中的該一個或多個值,並且遵循該一個或多個條件,根據該一個或多個值重新調度或釋放該線程。
根據本發明的另一方面,在一個能夠支持多程序線程的處理器當中,提供了一種方法,包括執行一個指令,該指令存取與線程調度相關的一個參數,其中該指令包含在一個程序線程中;當該參數等於第一數值時,則根據該指令釋放該程序線程。在該方法的一些實施例當中,該第一數值為零。在該方法的另一些實施例當中,該方法還包括一個步驟當該參數等於第二數值時,根據該指令掛起該程序線程的執行,其中該第二數值不等於該第一數值。在該方法的一些實施例當中,該第二數值表示,執行該程序線程所需要具備的條件並不滿足。
在該方法的一些其它實施例當中,該條件以一個位向量或值欄位的形式被編碼在該參數之中。在一些其它的實施例當中,當該參數等於第三數值時,根據該指令而重新調度該程序線程,其中該第三數值不等於該第一數值與第二數值。在其他一些實施例當中,該第三數值為負1。在另外一些實施例當中,該第三數值為奇數值。
根據本發明的另一個方面,在一個能夠支持多程序線程的處理器當中,提供了一個方法,包括執行一條指令,該指令存取與線程調度相關的一個參數,其中該指令包含於一個程序線程中;當該參數等於第一數值時,則根據該指令掛起該程序線程的執行。在該方法的一些其它實施例當中,該方法還包含一個步驟當該參數等於第二數值時,根據該指令而重新調度該程序線程,其中該第二數值不等於該第一數值。
根據本發明的另一方面,在一個能夠支持多程序線程的處理器當中,提供了一個方法,包括執行一個指令,該指令存取與線程調度相關的一個參數,其中該指令包含於一個程序線程中;當該參數等於第一數值時,則根據該指令重新調度該程序線程。在該方法的一些實施例當中,該方法還包括一個步驟當該參數等於第二數值時,根據該指令釋放該程序線程,其中該第二數值不等於該第一數值。
本發明的實施例將在下文中更加詳細的描述,在這些實施例中將第一次提供一種用於細粒度多線程的真正強壯的系統,使得產生與消滅線程所用的系統開銷最小化。
圖1A是一個示意圖,顯示單一指令流由於高速緩存丟失而停頓的情況;圖1B是一個示意圖,顯示當如圖1A的指令流被停頓時一個指令流仍然能被執行;圖2A是一個示意圖,顯示單一線程處理器;圖2B是一個示意圖,顯示雙線程處理器250;圖3是一個示意圖,描述了根據本發明的一個實施例中,一個處理器支持第一與第二VPE;圖4是一個示意圖,描述了根據本發明的一個實施例中,一個處理器能夠支持單一VPE,該VPE能進一步支持三個線程;圖5顯示了根據本發明的一個實施例中,一個FORK指令的格式;圖6顯示了根據本發明的一個實施例中,一個YIELD指令的格式;圖7是一個表格,顯示了一個用於GPR rs的十六位的限定掩碼;圖8顯示了根據本發明的一個實施例中,一個MFTR指令的格式;圖9是一個表格,說明了根據本發明的一個實施例中,一個MFTR指令的欄位;圖10顯示了根據本發明的一個實施例中,一個MTTR指令的格式;圖11是一個表格,說明了根據本發明的一個實施例中,一個MTTR指令u和sel位;圖12顯示了根據本發明的一個實施例中,一個EMT指令的格式;圖13顯示了根據本發明的一個實施例中,一個DMT指令的格式;圖14顯示了根據本發明的一個實施例中,一個ECONF指令的格式;圖15是根據本發明的一個實施例中,一個系統協處理器特權資源的說明表格;圖16是根據本發明的一個實施例中,一個ThreadControl寄存器的架構;圖17是根據本發明的一個實施例中,一個ThreadControl寄存器架構中各欄位的說明表格;圖18是根據本發明的一個實施例中,一個ThreadStatus寄存器的架構;圖19是根據本發明的一個實施例中,一個ThreadStatus寄存器架構中各欄位的說明表格;圖20是根據本發明的一個實施例中,一個ThreadContext寄存器的架構;圖21是根據本發明的一個實施例中,一個ThreadConfig寄存器的架構;圖22是根據本發明的一個實施例中,一個ThreadConfig寄存器架構中各欄位的說明表格;圖23是根據本發明的一個實施例中,一個ThreadSchedule寄存器的架構;圖24是根據本發明的一個實施例中,一個VPESchedule寄存器的架構;圖25是根據本發明的一個實施例中,一個Config4寄存器的架構;
圖26是根據本發明的一個實施例中,一個Config4寄存器架構中各欄位的說明表格;圖27是一個表格,定義了線程異常所需的Cause寄存器的異常代碼值;圖28是一個表格,定義了ITC指示符;圖29是一個表格,定義了Config3寄存器架構中的各欄位;圖30是一個表格,描述了每個VPE上下文的VPE禁止位;圖31是一個表格,描述了ITC儲存的運作方式;圖32是一個示意圖,描述了根據本發明的一個實施例中的YIELD功能的操作;圖33是一個示意圖,描述了根據本發明的一個實施例的一個計算機作業系統;圖34是一個示意圖,描述了根據本發明的一個實施例中,在一個處理器中使用VPE和在一個VPE中使用線程來實施調度。
具體實施例方式
根據本發明的一個較佳實施例,一處理器架構包括一指令集,而該指令集包含多個特徵、多個功能與多個指令,而能夠在一兼容處理器上產生多線程的運算。本發明並不止限於任何特定的處理器架構與指令集,而是可以大致歸類為眾所皆知而參照的MIPS架構,指令集與處理器技術(總言之,為MIPS技術)。並且加上本發明所詳細描述的實施例也可歸類為MIPS技術。更多有關MIPS技術的信息(包括以下所參照到的文件)可以從MIPS科技公司(MIPS ttechnology,Inc.)(位於Mountain View,California)和其網站www.mips.com(該公司網站)獲得。
所提到的「處理器」與「數字處理器」其意義包含任何可程序化的裝置(舉例來說,微處理器、微控制器、數位訊號處理器、中央處理單元、處理器內核等等),包含在硬體方面(例如,專用矽晶片、現場可程序門陣列(FPGA)等等),在軟體方面(例如,硬體描述語言、C語言、C+語言等等)或任何其組成(或其組合)。
術語「線程」與「程序線程」在本文中代表相同的意義。
概要描述在本發明的實施例中,「線程上下文」是一處理器狀態的集合,用於描述在一處理器上的一指令流執行的狀態。所說的狀態通常反映在處理器寄存器的內容中。舉例來說,在一個與工業規格MIPS32和/或MIPS64指令集架構兼容的處理器(MIPS處理器)中,線程上下文為由通用寄存器(GPRs),高低(Hi/Lo)乘法結果寄存器,有程序計數器(PC)功能和一些相關的特權系統控制狀態的寄存器組成。系統控制狀態在MIPS處理器中通常稱作第零協處理器(CP0)的部分保留,並且一大部分是被系統控制寄存器與翻譯後援緩存器(Translation Lookaside Buffer,TLB)所保存(如果使用了TLB)。相反的,「處理器上下文」是一個更大的處理器狀態集合,包含至少一個線程上下文。再參照之前提到的MIPS處理器為例,一個處理器上下文包含至少一個線程上下文(如前述),也就是CP0和必須的系統狀態,用以描述已知的MIPS32與MIPS64專屬資源或特權資源架構(PRA)。(簡單的說,PRA是一組有關一個指令集架構操作時所依據的環境與能力參數的集合。該PRA提供了作業系統所必須的機制用以管理處理器的資源,例如,虛擬內存、高速緩存、異常運算與使用者上下文)。
根據本發明的一個實施例,關於一指令集架構與PRA的一個特殊應用擴充的多線程(multithreading application-specific extensions,Multithreading ASE)允許在一處理器中包含兩個不同,但並不互相排斥的多線程性能。首先,一個單一處理器可以有一定數目的處理器上下文,而其中每一個都透過共享某些處理器的資源且支持一個指令集架構而作為獨立的處理單元操作。這些獨立的處理單元在這裡被稱為虛擬處理單元(VPE)。對軟體而言,具有N個VPE的處理器被看成是有N個路徑且對稱的多處理器(SMP)。這允許已有的具SMP功能的作業系統可以管理VPE集合,也就是透明地共享處理器的執行單元。
圖3用一個單一處理器301描述了相關的性能,其支持了一個第一VPE(VPE0),VPE0包含第零寄存器狀態302與第零系統協處理器狀態304。處理器301也支持第二VPE(VPE1),其包含第一寄存器狀態306與第一系統協處理器狀態308。VPE0與VPE1共享處理器301的這些部分,包括取指、解碼、管線化執行和高速緩存310。與SMP兼容的作業系統320被執行在該處理器301上,並支持VPE0與VPE1。如圖所示,軟體進程A 322與進程C 326分別被執行於VPE0與VPE1上,如同他們被執行於兩個不同的處理器上。進程B 324處於隊列狀態,而可以在VPE0或VPE1的任一個上執行。
多線程ASE所允許的第二個能力為,每個處理器或VPE皆可以在基本架構中所需的單一線程上下文之外,再含有某些數目的線程上下文。多線程VPEs需要特別的作業系統支持,並且在其支持下提供一個簡易、細粒度多線程程序模型,其中線程可以被產生與消滅,使得在一般的情況下不會干擾作業系統,並且系統服務線程可以響應外部條件(例如,事件等等)安排調度,而沒有中斷的延遲。
圖4描述了這第二個能力且使用了處理器401來支持單一VPE,其包含寄存器狀態402,404與406(支持三個線程422)以及系統協處理器狀態408。與圖3不同的是,在這個例子中三個線程是在單一應用地址空間中,且在單一VPE上共享CP0資源(以及硬體資源)。另外也描述了一個專門多線程作業系統420。在此範例中,多線程VPE正在處理來自一個寬帶網絡450的數據包,而此數據包的下載分布於整組的先進先出緩衝器(FIFO)452(在多線程VPE的輸入/輸出內存空間中每個FIFO皆有不同的地址)。控制應用程式產生了足夠多的線程,與使用的FIFO數目相同,且將每一線程應用於在讀取FIFO的緊湊循環中。
一個線程上下文可以是四種狀態之一。其可以是空閒(free),激活(activated),停止(halted)或連線(wired)。一個空閒的線程上下文不具有有效的內容,且不能被調度為可發出指令。一個激活的線程上下文可以根據實施的規則來調度,而從程序計數器提取與發出指令。一個停止的線程上下文可以具有有效的內容,但是不能夠提取與發出指令。一個連線的線程上下文可以被指定作為映像寄存器使用,也就是說其被保留成專用於異常處理程序,以避免在該異常處理程序中儲存與恢復存儲器上下文所產生的開銷。一個空閒的線程上下文不可以是激活,停止或連線的。只有激活的線程上下文可以被調度。只有空閒的線程上下文可以被分配而產生新的線程。
為了允許協同線程的細粒度同步,一個供線程內部之間溝通(ITC)的記憶空間在虛擬內存中被產生,並且有空(empty)/滿(full)位語法用來允許線程在加載或儲存時被阻塞,直到數據被其它線程產生或消耗。
線程產生/消滅與同步特性在一般情況下不會幹預作業系統,但是他們所操控的資源可通過作業系統將之虛擬化。這允許了多線程程序可以利用更多的虛擬線程執行,其數目多於在一個VPE上的線程上下文數目,而使得線程的遷移能平衡多處理器系統的負荷。
再仔細的從執行過程的某個點來看,一個線程與一個特定VPE上的一個特定線程上下文捆綁在一起。VPE的線程上下文組合的索引在該點的發生時間提供了一個唯一的標識符。但是上下文的切換與遷移能夠使單一相繼的線程的執行具有一連串不同的線程索引,例如是在一連串不同的VPE上。
在一個特定的處理器重置調整狀態中執行線程上下文、TLB項目和其它資源與同一處理器上多個VPE的動態綁定。每一個VPE輸入其重置向量,如同它就是一個獨立的處理器。
多線程的執行和異常模型多線程ASE並沒有強加任何特殊的實現方式或調度模型用於並行線程與VPE的執行。調度方式可以是循環式的,任意粒度的時間切割或同時的。然而沒有一個實現方式允許一個阻塞的線程獨佔任何共享的處理器資源,然後使得硬體運行陷入死鎖。
在一MIPS處理器中,多個線程執行在一個單一VPE上,並皆共享一樣的系統協處理器(CP0),一樣的TLB和一樣的虛擬地址空間。每一個線程有一個獨立的內核/監督者/使用者狀態,用於內存訪問與指令解碼。當一個異常發生時,除了執行該異常的線程之外,所有的線程都被停止或掛起,直到狀態字符串的EXL與ERL位被清除。或者,在EJTAG調試異常的情形下,退出該調試狀態。該狀態字符串被置於CP0中的狀態寄存器中。有關該EXL與ERL位還有EJTAG調試異常的詳細資料可以從下列的兩個出版物獲得,可以從MIPS科技公司取得該出版物,並且其全部內容在各種情形下可列為本文的參考文件MIPS32TMArchitecture for Programmers Volumn IIITheMIPS32TMPrivileged Resource Architecture,Rev.2.00,MIPS科技公司(2003)和MIPS64TMArchitecture for Programmers Volumn IIITheMIPS64TMPrivileged Resource Architecture,Rev.2.00,MIPS科技公司(2003)。
因為執行一個指令流而引起的同步異常的異常處理程序,例如TLB的丟失與浮點的異常,都由用於執行該指令流的該線程來執行。當一個未被屏蔽的異步異常,例如一個中斷,被提升至一個VPE時,它的實現與執行了該異常處理程序的那個線程相關。
甚至當使用影像寄存器組來執行例外處理程序時,每一個異常都與一個線程上下文有關。這個相關的線程上下文是被異常處理程序執行的RDPGPR與WRPGPR指令所要處理的目標。有關RDPGPR與WRPGPR指令(用來訪問影像寄存器)的詳細描述可以從以下兩個出版物中獲得,可以從MIPS科技公司取得該出版物,並且其全部內容在各種情形下可列為本文的參考文件MIPS32TMArchitecture forProgrammers Volumn IIIThe MIPS32TMInstruction Set,Rev.2.00,MIPS科技公司(2003)和MIPS64TMArchitecture for ProgrammersVolumn IIIThe MIPS64TMInstruction Set,Rev.2.00,MIPS科技公司(2003)。
該多線程ASE包含了兩個異常狀況。第一個是線程未取得的狀況,其中一個線程分配要求不能被滿足。第二個為線程下溢狀況,其中一個線程的終止與釋放使得沒有線程被分配於一個VPE上。這兩種異常狀況都被映射至一個新的單一線程異常。當該異常發生時,他們可以根據CP0寄存器的位設置而被區分。
指令在一個較佳的實施例中,多線程ASE包含七個指令。FORK與YIELD指令控制線程分配,釋放和調度,並且可以在被執行和使能的全部執行模式中取得。MFTR與MTTR指令是系統協處理器(Cop0)指令,可用於特權系統軟體來管理線程狀態。一個新的EMT指令與一個新的DMT指令是特權的Cop0指令,其用來激活與禁能一個VPE的多線程操作。最後,一個新的ECONF指令是特權的Cop0指令,用於退出一個特殊處理器配置狀態並重新初始化該處理器。
FORK-分配與調度一個新的線程FORK指令可以驅使一個空閒線程上下文被分配與激活。它的格式500如圖5所示。FORK指令從由欄位502(rs)與504(rt)標識的GPR(通用寄存器)取得兩個操作數值。GPR rs的內容是用來對新線程開始提取與執行的地址。GPR rt的內容是一個值,用來傳送至新線程的GPR。目的GPR由CP0的ThreadConfig寄存器的ForkTarget欄位的值確定,其說明位於圖21中,並於稍後會加以描述。新線程的內核/監督者/使用者狀態被設定於FORK處理的線程中。如果沒有空閒線程上下文給該FORK指令使用,產生關於該FORK指令的一個線程異常。
YIELD-重調度與有條件的釋放一個線程YIELD指令使得當前的線程被重新調度。它的格式600如圖6所示,並且圖32中的流程圖3200描述了根據本發明的一個實施例的系統操作,來說明YIELD指令的功能。
YIELD指令例如從欄位602(rs)中指定的GPR得到一個單一操作數值。在一較佳實施例中使用了一個GPR,但是在其它的實施例中,該操作數值可以在實質上任何可由系統訪問的數據儲存裝置(例如,非GPR寄存器,內存等等)中被儲存或取得。在一實施例中,GPR rs的內容可以被視為是一個描述符,描述了一個發出的線程應該被重新調度的情況。如果該GPR rs的內容是零(即該操作數的值為零),如圖32的步驟3202所示,則該線程並不會被重調度,而是會如同步驟3204所示被釋放(即,終止或永久的停止更進一步的執行),並且與其相關的線程上下文的儲存器(即上述提到的用於保存狀態的寄存器)變成空閒,從而可以被其它線程發出的接下來的FORK指令進行分配。如果該GPR rs的最低有效位被設定(即,rs0=1),則如圖32的步驟3206所示該線程馬上被重新調度,並且如果沒有其它可執行的線程搶先的話,就繼續執行該線程。在該實施例中,該GPR rs的內容被視為15位的限定符掩碼,如圖7中表格700的描述(即,用於編碼各種條件的位向量)。
請參照表格700,寄存器rs的位15至位10表示提供給處理器的硬體中斷信號,位9至位8表示處理器中產生的軟體中斷信號,位7至位6表示MIPS架構中最基本地關聯加載(Load Linked)和條件存儲(Store Conditional)同步原語的操作,還有位5至位2表示提供給處理器的外部非中斷信號。
如果GPR rs的內容值是一偶數(即,位0未被設定),並且GPRrs的限定符掩碼中的任何其他位皆被設定(步驟3208),則該線程被掛起,直到滿足至少一個對應條件。如果當此情形發生,該線程就被重新調度(步驟3210),並且從YIELD之後的指令重新開始執行。這個過程的使能並不會受CP0.Status.iMn中斷屏蔽位的影響,因此總共有被位15至10和位5至2(如圖7所示)編碼的十個外部條件(例如,事件等等)以及被位9至6(如圖7所示)編碼的四個軟體條件,在目前的實施例中被用來響應外部信號以使能獨立的線程,而不需要處理器執行異常處理。在這個特定例子中,有六個硬體中斷和四個非中斷信號,再加上兩個軟體中斷和兩個非中斷信號,最後再加上一個專用於重調度功能的信號(即rs0),總共對應於十五個條件。(該CP0.Status.iMn中斷屏蔽位是在CP0 Status寄存器中的一個八位的集合,其可選擇性地屏蔽MIPS處理器的八個基本的中斷輸入。如果一個IM位被設定,則其它相關的中斷輸入就不會引起處理器的異常事件。)在EIC的中斷模式中,位IP2至IP7對有最高優先權的中斷進行編碼,而不只是表示了一個有正交指示的向量。當處理器使用EIC的中斷模式時,在一個YIELD指令中與位IP2至IP7相關聯的GPR rs的位因此不再能夠被用於針對一個特定外部事件去重新使能一個線程。在EIC的中斷模式中,只有與系統相關連的外部事件指示符(例如,在本實施例中,是GPR rs的位5至2)可以被用作YIELD的限定符。EIC的中斷模式與位IP2至IP7已被更進一步地描述於下列的出版物,上文中已經指出並引用了該出版物的整個內容MIPS32TMArchitecture for Programmers Volumn IIIThe MIPS32TMPrivilegedResource Architecture,與MIPS64TMArchitecture for ProgrammersVolumn IIIThe MIPS64TMPrivileged Resource Architecture。
如果執行YIELD的結果是對於處理器或VPE上最近分配的線程的釋放,則關於該YIELD指令產生一個線程異常,具有在CP0的ThreadStatus寄存器中的下溢指示(如圖18所示且在稍後會加以說明)。
上述實施例使用了YIELD指令的GPR rs中所包含的操作數作為線程調度的參數。在該例子中,這個參數被看作一個15位的正交指示的向量(參照圖7,位1與15被保留,所以在此較佳實施例中只有十五個條件被編碼)。此實施例也將此參數當成是一個指定的值(即,用於決定是否一個給定的線程應該被釋放,參考圖32的步驟3202)。然而,這樣一個參數的特性可以被改變,以適合各種不同指令的實施例。例如,不是依靠最低有效位(即rs0)來決定是否一個線程可被立即重新調度,而是使用該參數本身的值(例如,二進位補碼形式的負一{-1})來決定一個線程是不是應該被立即重新調度(即,用於調度的重新排隊)。
在該指令的其他實施例中,可以將這樣的線程調度參數看作包含一個或多個多位值的欄位,以使得一個線程可以確定,它將關於一個大的時間名空間(例如,32位或更大)中的一個單一事件而產生。在這樣的實施例中,至少與該目標事件有關的位可以被當前YIELD指令訪問。當然,如一特定實施例所期望的,更多的位欄位可被傳送至該指令(與更多的事件相關聯)。
該YIELD指令的其他實施例,在由該指令訪問的一個線程調度參數中可以包含前述位向量與值欄位的組合,或其它具體應用的改進和提高,(例如)以滿足特定實現的需要。YIELD指令的可選實施例可以用任何已知方法訪問如前所述的一個線程調度的參數,例如,從一個GPR(如圖6所示),從任意其它的數據存儲裝置(包含內存)以及作為該指令本身中的立即值。
MFTR-從線程寄存器移動MFTR指令是一個特權(Cop0)指令,可允許一個作業系統執行一個線程來訪問另一個不同的線程上下文。其格式800被描述於圖8。
要被訪問的線程上下文由CP0的ThreadControl寄存器的AlternateThread欄位的值確定,該欄位如圖16所示並且會在稍後描述。在選定的線程上下文中,要被讀取的寄存器由欄位802標定的rt操作數寄存器的值,和分別位於該MFTR指令的欄位804與806中的u與sel位來確定,並且依據圖9所示的表格900進行說明。產生的值被寫入由欄位808標定的目的寄存器rd。
MTTR-向線程寄存器移動MTTR指令與MFTR指令相反。它是一個特權Cop0指令,其將當前線程的線程上下文中的寄存器值複製到另一個線程上下文的寄存器中。其格式1000如圖10所示。
要被訪問的線程上下文由CP0的ThreadControl寄存器的AlternateThread欄位的值確定,該欄位如圖16所示並且會在稍後描述。在選定的線程上下文中,要被寫入的寄存器由欄位1002標定的rd操作數寄存器中的值,結合分別在該MTTR指令的欄位1004與1006中提供的u與sel位來確定,並且依據在圖11中所顯示的表格1100進行解釋(其編碼相似於MFTR)。由欄位1008標定的寄存器rt中的值被複製到選定的寄存器。
EMT-使能多線程EMT指令為特權Cop0指令,其通過設定CP0的ThreadControl寄存器的TE位來使能多個線程的並行執行,該寄存器如圖16所示並且會在稍後描述。該指令的格式1200顯示於圖12。包含在該EMT執行之前的TE(Thread Enabled)位值的該ThreadControl寄存器的值會被傳回寄存器rt。
DMT-禁能多線程DMT指令為特權Cop0指令,其通過清除CP0的ThreadControl寄存器的TE位來禁止多線程的並行執行,該寄存器如圖16所示並且會在稍後描述。該指令的格式1300顯示於圖13。
除了發出該DMT指令的線程之外,所有的線程都被禁止進一步的指令提取與執行。這與所有線程暫停狀態是無關的。包含該DMT執行之前的TE(Thread Enabled)位值的該ThreadControl寄存器的值會被傳回寄存器rt。
ECONF-結束處理器的配置ECONF指令為一特權Cop0指令,其通知VPE配置的結束,並使能多VPE的執行。該指令的格式1400顯示於圖14。
當一個ECONF指令被執行時,Config3寄存器的VPC位(稍後描述)即被清除,而該寄存器的MVP位的當前值也變成只讀,並且處理器的所有VPE,包含正在執行ECNOF的這個VPE,都產生一個Reset異常。
特權資源(Privileged Resource)圖15的表格1500列出了系統協處理器的與多線程ASE相關的特權資源。除了特別的說明之外,不管是新的還是修改過的第零協處理器(CP0)的如下所述的寄存器都是可訪問的(即,寫入和讀出),就像傳統的第零協處理器(即,MIPS處理器)的系統控制寄存器一樣。
新的特權資源(A)ThreadControl寄存器(CP0寄存器號碼7,選擇號碼1)該ThreadControl寄存器是在每個VPE中作為系統協處理器的一個部分。其結構1600顯示於圖16。該ThreadControl寄存器的欄位可根據圖17的表格1700來設定。
(B)ThreadStatus寄存器(CP0寄存器號碼12,選擇號碼4)該ThreadStatus寄存器存在於每個線程上下文中。每一個線程皆有其ThreadStatus的拷貝,並且特權程序代碼可以通過MFTR與MTTR指令訪問其它線程的ThreadStatus。其結構1800顯示於圖18。該ThreadStatus寄存器的欄位可根據圖19的表格1900來設定。
在一個激活線程的Halted位寫入一個1,會使得該激活線程停止提取指令,並且將內部重啟動程序計數器(PC)設定到下一個發出的指令。在一個激活線程的Halted位寫入一個0,使得被調度的該線程從內部重啟動程序計數器(PC)地址提取和執行指令。只要在未被激活的線程的Activated位或是Halted位中有任一為1,則該線程就可避免被一個FORK指令分配和激活。
(C)ThreadContext寄存器(CP0寄存器號碼4,選擇號碼1)該ThreadContext寄存器2000存在於每個線程上下文中,並且如圖20所示其長度與處理器的GPR是相同的。這純粹是一個軟體可讀/寫的寄存器,可被作業系統用作特定線程儲存的指針,例如一個線程上下文保存的區域。
(D)ThreadConfig寄存器(CP0寄存器號碼6,選擇號碼1)該ThreadConfig寄存器存在於每個處理器或VPE中。其結構2100顯示於圖21中。該ThreadConfig寄存器的欄位被定義在圖22的表格2200中。
ThreadConfig寄存器的WiredThread欄位允許在一個VPE上可獲得的線程上下文的集合在影像寄存器集合與並行執行線程之間被分割。線程上下文的索引若是小於該WireThread的值,則可從影像寄存器獲得該線程上下文。
(E)ThreadSchedule寄存器(CP0寄存器號碼6,選擇號碼2)ThreadSchedule寄存器是選擇性的,但是當被實現時,最好被實現於每個線程中。其結構2300顯示於圖23中。
調度向量(Schedule Vector)(如圖所示,在一較佳實施例中其寬度為32位)為對於相關線程進行調度所要求的發出帶寬的描述。在此實施例中,每一位皆代表該處理器或VPE的發出帶寬的1/32,並且每一位的位置代表了在有32個時段的調度循環中的一個明確的時段。
如果在一個線程的ThreadSchedule寄存器中設定了一位,那麼該線程即被保證了在相關的處理器或VPE上每32個可能的連續發出中,可獲得一個對應的發出時段。在ThreadSchedule寄存器的一位上寫入一個1,當相同處理器或VPE上的其它線程已經具有一樣的ThreadSchedule位設定時,則將產生線程異常。雖然在這裡,ThreadSchedule寄存器的優選寬度是32位,但是可以預料的到,在其它的實施例中該寬度可以改變(即,增加或減少)。
(F)VPESchedule寄存器(CP0寄存器號碼6,選擇號碼3)VPESchedule寄存器是可選擇的,並且優選的存在於每個VPE中。它只有當Config3寄存器的MVP位被設定時才能被寫入(請參考圖29)。其格式2400顯示於圖24。
調度向量(如圖所示,在一較佳實施例中其寬度為32位)為對於相關VPE進行調度所要求的發出帶寬的描述。在此實施例中,每一位皆代表一個多VPE處理器的發出總帶寬的1/32,並且每一位的位置代表了在有32個時段的調度循環中的一個明確的時段。
如果VPE的VPESchedule寄存器中的一個位被設定,那麼該線程即被保證了在相關處理器上每32個可能的連續發出中,可獲得一個對應的發出時段。在VPE的VPESchedule寄存器的一位上寫入一個1,當其它VPE已經具有一樣的VPESchedule位設定時,則將產生線程異常。
依據處理器目前默認的線程調度原則(例如,循環法等等),只要發出時段未被任何線程特別的排定,其仍然可被自由的分配給任何可執行的VPE/線程。
VPESchedule寄存器與ThreadSchedule寄存器創造了一個發出帶寬分配的結構。VPESchedule寄存器的設定指定了對於VPE的帶寬,其為在一個處理器或內核上全部可取得帶寬的一定比例,而ThreadSchedule寄存器指定了對於線程的帶寬,其為在一個包含線程的VPE中可取得全部帶寬的一定比例。
雖然在這裡,VPESchedule寄存器的優選寬度是32位,但是可以預期,在其它的實施例中該寬度可以改變(即,增加或減小)。
(G)Config4寄存器(CP0寄存器號碼16,選擇號碼4)寄存器Config4存在於每一個處理器中。其包含了對於動態多VPE處理器配置所必須配置信息。如果處理器並不處於VPE配置狀態(即,Config3寄存器的VMC位被設定),則除了M(連續)欄位之外的所有欄位的值都會成為與實施方式有關且是不可預測其結果的。其結構2500描述於圖25。Config4寄存器的欄位的定義如圖26的表格2600中所示。在某些實現方式或實施例中,Config3寄存器的VMC位可以是一個被事先保留/不指定的位。
對於目前存在的特權資源架構的修改該多線程ASE對於當前MIPS32與MIPS64PRA的一些單元做了變更。
(A)Status寄存器Status寄存器中的CU位對於多線程配置具有一些額外的意義。設定CU位的動作也就是要求將一個協處理器上下文與和該CU位關聯的線程綁定。如果一個協處理器上下文是可用的,則將它與該線程綁定在一起,以使該線程所發出的指令能傳送到該協處理器,並且該CU位會保留寫入該位的1。如果沒有一個協處理器上下文是可用的,則該CU位便會讀回0。寫入一個0去設定該CU位,會使得任何相關聯的協處理器被釋放。
(B)Cause寄存器如圖27所示,線程異常需要有一個新的Cause寄存器的異常代碼值。
(C)EntryLo寄存器如圖28所示,一個事先被保留的高速緩存標誌變成ITC指示符。
(D)Config3寄存器如圖29的表格2900中所示,定義了新的Config3寄存器的欄位,用來表示多線程ASE與多個線程上下文是否可用。
(E)Ebase如圖30所示,Ebase寄存器的一個事先被保留的位30變成每個VPE上下文中的一個VPE的禁止位。
(F)SRSCtl先前預設定的HSS欄位現在變成了ThreadConfig寄存器的WiredThread欄位的一個功能。
未使用FORK指令的線程分配與初始化在一較佳實施例中,一個作業系統「手動」產生一個線程的過程如下1.執行一個DMT,用以停止其它線程的執行或是可能的FORK指令執行。
2.通過將連續的值設定在ThreadControl寄存器的AlternateThread欄位,並用MFTR指令來讀取ThreadStatus寄存器,來識別一個可獲得的線程上下文。一個空閒的線程在其ThreadStatus寄存器中不會有Halted或Activated位被設定。
3.設定選定線程的ThreadStatus寄存器的Halted位,用以避免其被其它線程配置。
4.執行一個EMT指令去重新使能多線程。
5.使用MTTR指令並使其u欄位設定為1,來複製任何需要的GPR至選定的線程上下文。
6.使用MTTR指令並使其u和sel欄位設定為0且rt欄位設定為14(EPC),從而寫入所需的開始執行地址至該線程的內部重啟動地址寄存器中。
7.使用MTTR指令將0和1分別寫入選定的ThreadStatus寄存器的Halted位和Activated位。
然後該新分配的線程可以被調度。如果在該過程中設定了EXL或ERL,由於他們隱含了禁止多線程的執行,則執行DMT,設定新線程的Halted位和執行EMT的這些步驟可以被省略。
未使用YIELD指令的線程的終止和釋放在本發明的一較佳實施例中,一個作業系統用來終止當前線程的過程如下1.如果作業系統不支持關於線程下溢狀態的線程異常,則使用MFTR指令來掃描ThreadStatus寄存器的設定,以檢驗在處理器上有另一個可運行的線程,相反的如果沒有,就向程序發出錯誤信號。
2.寫入任何重要的GPR寄存器的值至內存。
3.在Status/ThreadStatus寄存器中,設定內核模式(Kernel mode)。
4.當目前的線程維持在一個特權狀態時,清除EXL/ERL來允許其他線程被調度。
5.使用一個標準的MTC0指令來寫入0值至ThreadStatus寄存器的Halted與Activated位。
正常的過程是一個線程按照這種方式終止自己。在一個特權模式當中,一個線程也可以使用MTTR指令來終止另一個線程,只不過會有額外的問題產生,這時作業系統需要決定應該釋放哪個線程上下文,以及在哪點上該線程的運算狀態是穩定的。
線程間通訊的儲存(Inter-Thread Communication Storage)線程間通訊(ITC)的儲存是一個可選擇的功能,其可以替代用於細粒度多線程的關聯載入/條件存儲同步方法。因為通過載入與儲存的動作來操作,所以這個ITC存儲在指令集架構中是不可見的,但是在特權資源架構中,它是可見的,並且需要有效的微架構的支持。
參照虛擬內存頁面,其包含有被標示為ITC儲存的TLB項目,可以被歸為是一個有特定屬性的儲存。每一個頁面映射至一組1-128個64位的存儲位置,其中每一個存儲位置都有一個與其相關的Empty/Full位,並且可以使用標準的載入和儲存指令,以四個方法之一來訪問該存儲位置。該訪問模式被編碼在所產生的虛擬地址的最低有效(和未翻譯)位,如圖31的表格3100所示。
因此每一個儲存位置可以用C語言的結構來描述struct{unit64 ef_sync_location;unit64 force_ef_location;unit64 bypass_location;unit64 ef_state;}ITC_location;其中,全部四個位置都參考潛在存儲空間的相同64位。當每次訪問實施同樣的Empty/Full協議時,該儲存的參考可以具有小於64位的訪問類型(例如,LW,LH,LB)。
Empty與Full位不相同,因此不相互耦合的多項目數據緩衝器,如FIFO,可以被映射至ITC儲存空間。
可以通過向和從通用儲存器複製{bypass_location,ef_state}對的方式來保存和恢復ITC的存儲。嚴格的說,當64位的bypass_location必須被保留時,只有ef_state的最低有效位需要被操控。在多項目的數據緩衝器中,每一個位置必須被讀取直到Empty位,從而通過拷貝讀出該緩衝器的內容。
每4K頁面的位置數目與每一個VPE的ITC頁面的數目都是VPE或處理器可以設定的參數。
ITC儲存的「物理地址空間」可以是全局的,跨越一個多處理器系統中的所有VPE和處理器,這樣一個線程便可以從正在執行該線程的一個VPE同步到另一個不同VPE的一個位置上。全局的ITC儲存地址可以從每一個VPE的EBase寄存器的CPUNum欄位上取得。該CPUNum的10個位對應於ITC儲存地址的10個有效位。一般為了單處理器的應用所設計的處理器或內核不需要輸出一個物理接口至ITC儲存,並且可以將其作為一個處理器內部的資源。
多VPE處理器一個內核或處理器可以實現多個共享資源的VPE,如共享功能單元。每一個VPE都可以看到自己的在MIPS32或MIPS64指令中的具體實施和特權資源架構。每一個都可以看到自己的寄存器堆或線程上下文陣列,並且也可看到自己的CP0系統協處理器和自己的TLB狀態。對於在具有2-CPU高速緩存相干的SMP多處理器的軟體而言,在同一個處理器上的兩個VPE是無法區分的。
一個處理器上的每個VPE都可以在CP0在Ebase寄存器的CPUNum欄位中看到一個不同的值。
處理器架構上的資源,如線程上下文,TLB儲存和協處理器,可以在硬體式的配置下與VPE綁定,或者可以在一個支持必須的配置能力的處理器中被動態地配置。
重置與虛擬處理器配置為了能夠反向兼容MIPS32與MIPS64PRA,在重置時,一個可配置的多線程/多VPE處理器必須具有完全的默認線程/VPE配置。一般的情形下都是如此,但是對於一個有單一線程上下文的單一VPE卻不一定必須如此。Config3寄存器的MVP位可以在重置時被取得,用來決定動態的VPE配置是否是可能的。如果這項能力被忽略,例如在傳統的軟體中,該處理器就會按照默認配置中的每個具體設定來操作。
如果該MVP位被設定,則寄存器Config3的VPC(虛擬處理器配置)位就可以通過軟體設定。這可以使得處理器進入一個設定狀態,該設定狀態下,Config4寄存器的內容可以被讀出,用以決定可使用的VPE上下文,線程上下文,TLB項目和協處理器的數目,並且可使某些正常情況下只讀的Config寄存器的「預設」欄位變成可寫入。可以將一些限制施加在配置狀態指令流上,例如它們可以被禁止使用高速緩存的或是TLB映射的內存地址。
在配置狀態中,可配置的VPE的全部數目被編碼於Config4寄存器的PVPE欄位中。通過將每個VPE的索引寫入EBase寄存器的CPUNum欄位中,可以選擇每一個VPE。對於被選擇的VPE,下列的寄存器欄位都可通過寫入而被設定。
·Config1.MMU_Size·Config1.FP·Config1.MX·Config1.C2·Config3.NThreads·Config3.NITC_Pages·Config3.NITC_PLocs·Config3.MVP·VPESchedule
並不是所有上述所提到的設定參數都需要是可配置的。舉例來說,即使每一個VPE的ITC頁面是可配置的,每一個頁面的ITC位置的數目可以是固定的,或者兩個參數都可以被固定,對於每個VPE,FPU可以被預先分配或是硬連線的,等等。
協處理器作為分離的不同單元被分配給VPE。協處理器可被多線程化的程度應該經由協處理器特定的控制和狀態寄存器被表示和控制。
通過清除EBase寄存器的VPI禁止位,使能一個VPE,用於配置之後的執行。
通過發出一個ECONF指令可以退出該配置狀態。這個指令使得所有未被禁止的VPE取得一個重置異常,並且開始同時執行。如果Config3寄存器的MVP位在配置期間被清除,而且被一個ECONF指令保持為零,則該VPC位就不能再被設定,而且該處理器配置就會被有效的凍結,直到下一個處理器重置。如果MVP仍然被設定,則再次設定該VPC位可以使一個作業系統再次進入配置模式。可是,如果該處理器的一個運行中的VPE重新進入配置模式,可能會有不可預測的結果。
對於多線程處理器的服務質量調度到目前為止該說明書描述了一種MIPS兼容系統的具體應用擴展,用於實現多線程。如前面所述,所描述的MIPS實現只是用於列舉描述,而並不用於限制本發明所包含的範圍。如同之前所描述的功能與機制可以應用於MIPS之外的系統。
在實時和近乎實時線程的多線程中的特殊服務的問題在背景段落被提出,該問題在之前有關於ThreadSchedule寄存器(圖23)和VPESchedule寄存器(圖24)的說明中已經簡單地涉及。本說明書的以下部分將更詳細地處理該問題;也更清楚地說明用於具體處理線程級服務質量(QoS)的特定擴充。
背景一般用於傳輸多媒體數據的網絡設計都會牽涉到服務質量(QoS)的概念,用來描述需要使用不同策略來處理在網絡中不同的數據流。以語音的傳輸為例,相對的對於帶寬的要求不高,但是卻不能忍受幾十毫秒的延遲。在寬帶的多媒體網絡中,QoS協議可以保證在時間為關鍵要素的傳輸中,能取得任何特別的處理與優先權,這是在時間上能適時傳輸的必須保證。
影響在單一晶片上RISC與DSP相組合的程序執行的其中一個主要問題是,在一個組合的多任務的環境中,要去保證DSP程序代碼的嚴格實時執行是非常困難的。從而該DSP應用可被視為,在處理器帶寬中需要一個QoS條件。
多線程與QoS有許多種方式可以對來自多線程的指令發出進行調度。交錯式的調度器可以在每個周期改變線程,而塊交錯式的調度器可以在當一個高速緩存丟失或其它嚴重的停頓發生時改變線程。以上詳細描述的多線程ASE,提供了一個架構給多線程處理器,用於避免對於一個特定線程調度的機制或策略任何依賴。然而,調度策略可能對於Qos為各種線程的執行所提供保證的內容有重大的影響。
一個具有DSP擴充功能的RISC在Qos能夠保證實時DSP程序代碼能夠被執行的情形下會變的更有用處。在該處理器上實現多線程,使得在一個獨立的線程上執行DSP程序代碼,甚至也有可能是在一個獨立的虛擬處理器上執行DSP程序代碼,使得DSP線程的硬體調度能夠被可編程地確定來保證QoS,從而理所當然的消除了具有DSP加強功能的RISC的一個主要障礙。
QoS線程調度算法服務質量線程的調度可以寬鬆的被定義為一組調度機制和策略,其允許程式設計師或系統設計者對於一段特定的程序代碼的執行時間可以作出確信的和可預測的陳述。一般來說,這些陳述的形式為「這段程序代碼將執行不多於Nmax且不少於Nmin個周期」。在許多的情形下,只有Nmax數字在實際的執行中被考慮,但是在某些應用中,程序代碼的運行超前於調度也會造成問題,所以Nmin也應該被考量。如果Nmax數字與Nmin數字的差距能更小的話,整個系統的行為也更能精確的被預測。
簡單的優先權方案一種簡單的模型被提出來,用於在多線程發出調度時提供一定程度的QoS,其為簡單地將最高優先權分配給一個指定實時線程,因此當該線程可執行時,總是選擇它來發出指令。這種方式可以提供一個Nmin的最小值,似乎也可提供該指定線程的Nmax的可能的最小值,但是仍然會有一些不太好的後果。
首先,在該方案中只有一個線程可以有QoS的保證。該算法暗含了在一個不同於該指定實時線程的線程中,任意程序代碼的Nmax會變成實質上不受約束。其次,當該特定線程內的一段程序代碼的Nmin數被最小化的時候,則異常就必須被包含在模型當中。如果該指定線程產生該異常,則該Nmax的值就會變的更複雜,並且在某種情形下是不可能確定的。如果該異常是被該指定線程以外的線程所產生的,則該指定線程中的程序代碼的Nmax就會受到嚴格約束,但是該處理器的中斷響應時間變得不受約束。
這種簡單的優先權方案也許在某些情形下是有用的,並且在硬體的實現上也有實際的優點,但是它們仍然沒有提供一個通用的QoS調度的解決方案。
基於保留的方案另一個功能更強大且獨特的線程調度模型是基於保留髮出時段。在這種方案中,硬體調度機制允許一個或多個線程可被分配得到M個連續發出時段中的N個。在一個沒有中斷的環境中,對於一個實時代碼段,該方案並沒有提供向優先權方案所提供的低Nmin值,可是卻擁有了其它的優點。
·多於一個的線程可以被保證有QoS。
·即使當中斷是與具有最高優先權的線程之外的其他線程綁定的,該中斷延遲也可以是受約束的。這樣可以使實時程序代碼區段有較低的Nmax。
基於保留方案的調度的一種簡單形式是,將每第N個發出時段分配給一個實時線程。在1與2之間並沒有N的中間值,這說明在一個多線程環境中的實時線程可以取得最多50%的處理器的發出時段。當一個實時任務需要使用多於50%的嵌入式處理器的帶寬時,十分需要一種方案,其允許更靈活地分配發出帶寬。
具有QoS的混合線程調度上述的多線程系統是側重中立的調度策略,但是還可以被擴充,以允許形成一種混合的線程調度模型。在這種模型中,實時線程可以被給予一定比例的線程發出時段的固定調度,並且用與實現方式相關的默認調度方案來分配剩餘的時段。
綁定線程至發出時段處理器中的指令是被快速地順序發出。在一個多線程的環境當中,在多數的線程當中,一個線程可以通過在一個給定的時段數目中所佔用的時段數目的比例來計算出所使用的帶寬。相反的,本發明認識到,可以任意的聲明一確定數目的時段,並限制該處理器為某特定的線程保留該固定數目中的一定數目的時段。從而可以指定帶寬中的一個固定部分來保證一個實時線程。
很清楚地,可以將時段按比例地分配給多於一個實時線程,並且該方案進行操作的粒度受到發出時段的該固定數目的約束,所述比例就是以該固定數目為基礎得到的。舉例來說,如果選擇32個時段,則任意一個特定的線程可以被保證具有帶寬的1/32至32/32。
也許用於將固定發出帶寬分配給線程的最具一般性的模型是將每個線程與一對整數{N,D}關聯,這對整數表示分配給該線程的發出時段比例的分子與分母,例如是1/2或4/5。如果所允許的整數範圍足夠大的話,這樣可以允許對於線程優先權分配的幾乎任意細粒度的調整,但是如此做的話還是會有一些實質上的缺點。其中一個問題是,要使用一個硬體邏輯將一個很大的配對集合{N0,D0},{N1,D1},…{Nn,Dn}}轉換成一個發出調度並不是一件簡單的事,並且多於100%的時段被分配這種錯誤情況無法非常容易的被檢測出來。另一個問題就是,這種方案允許在相當長的一段時間上,一個線程被分配N/D比例的發出時段,但是它並不一定允許任意聲明關於哪個發出時段被分配給一個較短子程序代碼片段的線程。
因此,在本發明的一較佳實施例中,不使用整數對,而是用一個位向量與每一個需要有實時帶寬QoS的線程相關聯,該位向量表示要被分配給該線程的調度時段。在該較佳實施例中,該向量也就是前述ThreadSchedule寄存器(圖23)的內容,可以被系統軟體所看到。雖然該ThreadSchedule寄存器具有32位寬的調度「掩碼」,但是在其他實施例中該屏蔽當中可以具有更長或更短的位寬度。一個具有32位寬度的線程調度掩碼可以允許一個線程被分配從1/32至32/32的該處理器的發出帶寬,並且也可進一步對於特定的發出線程給予特定的發出帶寬模式。對於一個32位的掩碼,值0xaaaaaaaa將每第二個時段分配給該線程。值0x0000ffff也可以將50%的發出帶寬分配給該線程,但是以16個連續時段的塊方式進行分配。將值0xeeeeeeee分配給線程X並且將值0x01010101分配給線程Y,從而給予線程X每四個周期中的三個(32個中的24個)和給予線程Y每八個周期中的一個(32個中的4個),並且將剩下的每一組32個周期中的4個,被其它可能確定性較低的硬體算法分配給其它線程。更進一步的說,線程X將具有每四個周期中的三個,並且該線程Y在兩組連續指令之間具有不超過八個周期。
在該實施例中的調度衝突可以被很簡單地檢測出,因為沒有一位將被設置在多於一個線程的ThreadSchedule寄存器中。也就是說,如果為一個線程設定了一個特定的位,那麼對於被分配了發出掩碼的所有其他線程,該位必須是零值。因此,如果有任何的衝突,都可以被輕易的檢測出。
實時線程的發出邏輯相對的簡單直接每一個發出機會皆關聯至一個32模數的索引,該索引會被傳送給所有就緒的線程,這些就緒線程中的至多一個會被分配該關聯的發出時段。如果得到該時段,則該相關聯的線程就會發出它的下一個指令。如果沒有任何線程擁有該時段,則該處理器會選擇一個可執行的非實時線程。
ThreadSchedule寄存器的硬體實現如果使用少於32位的話,可以減少每個線程的儲存與邏輯的大小,但卻會同時降低調度的靈活性。原則上,該寄存器可以擴充至64位,或甚至被實現(在MIPS處理器的情況下)為一連串的寄存器,增加了在MIPS32 CP0寄存器空間中的選擇值,從而提供更長的調度向量。
使線程免除中斷服務如前所述,中斷服務可以使得執行該異常程序的線程在執行時間上具有很大的可變性。因此,期望使需要嚴格QoS保證的線程能夠免除中斷服務。這裡提出了一個較佳的實施例,對於每一個線程利用一個單一位,該位對於作業系統是可以看見的,用來使任何異步異常延遲,直到一個非免除的線程被調度(即,ThreadStatus寄存器的IXMT位,請參考圖18與圖19)。這樣會增加中斷的延遲,但是通過ThreadSchedule寄存器的值的選擇,可以將該中斷延遲限制在受約束和可控的程度下。如果中斷處理程序只是執行在那些沒有被分配給可免除的實時QoS線程的發出時段中,自然地該中斷服務對於該實時程序代碼的執行時間就沒有任何優先的影響。
線程與虛擬處理單元的發出時段分配以上詳細描述的多線程ASE描述了一種線程資源的有層次的分配,其中一些數目的VPE(虛擬處理單元)各自具有一些數目的線程。每一個VPE具有CP0的硬體實現和特權資源架構(當配置在一MIPS處理器上時),所以運行在其中一個VPE上的作業系統軟體(OS)不可能直接知道和控制被其它VPE所要求的發出時段。因此每一VPE的發出時段名稱空間被關聯到該VPE,這就形成了一個發出時段分配的層次結構。
圖34為調度電路3400的方框示意圖,其描述了這種線程資源的層次分配。處理器調度器3402(即,主處理器的全部調度邏輯)經由「時段選擇」信號3403傳遞一個發出時段號碼至該主處理器內的全部VPE中的全部VPESchedule寄存器。信號3403對應於VPESchedule寄存器內一個位的位置(在本較佳實施例中,即為三十二個位置中的一個)。通過使該位的位置在每個發出時段出現時移至一個增加的位置,並且當到達了最高有效位位置時(即,在此較佳實施例中是第31位)再重置到最低有效位位置(即,第0位),調度器3402重複地循環信號3403。
再參照圖34,以此圖為例,位位置1(即,時段1)經由信號3403傳遞至該主處理器的全部VPESchedule寄存器,即寄存器3414與3416。在任一個VPESchedule寄存器中,如果其對應位為「設定」(即,該位為邏輯1),該寄存器就用一個「VPE發出要求」信號來通知處理器調度器。作為響應,調度器就會用一個「VPE發出允許」信號來允許該VPE使用目前的發出時段。再參照圖34,(VPE0中的)VPESchedule寄存器3414的位位置1被設定,因此發出了一個VPE發出要求信號3415至處理器調度器3402,然後該處理器調度器3402也會響應一個VPE發出允許信號3405。
當一個VPE被授予一個發出時,他在VPE層次上採用相類似的邏輯。再參照圖34,VPE調度器3412(即VPE0 3406的調度邏輯)響應於信號3405,而經由時段選擇信號3413傳遞一個發出時段號碼給該VPE內的全部ThreadSchedule寄存器。這些ThreadSchedule寄存器每一個都關聯至由該相關VPE所支持的線程。信號3413對應於ThreadSchedule寄存器中的一個位位置(在本實施例中,可以是三十二個位中的一個)。通過使位位置在每個發出時段出現時移至一個增加的位置,並且當到達了最高有效位位置時(即,在此較佳實施例中是第31位)再重置到最低有效位位置(即,第0位),調度器3412重複地循環信號3403。該時段號碼獨立於在VPESchedule層次所使用的時段號碼。
請參照圖34並以其為例,位位置0(即,「時段0」)經由信號3413傳遞至在該目標VPE內的全部ThreadSchedule寄存器,也就是寄存器3418與3420。任一個線程的ThreadSchedule寄存器的該選定位置的位已被設定的話,該線程通知VPE調度器,從而被允許使用目前的發出時段。參照圖34,(線程0的)ThreadSchedule寄存器3418的位位置0被設定,因此將線程發出要求信號3419發送至該VPE調度器3412,而該VPE調度器也響應了一個線程發出允許信號3417(從而允許線程0可以使用目前的發出時段)。在一些周期當中,如果VPESchedule寄存器中沒有設定與指定的時段對應的位,或是ThreadSchedule寄存器中沒有設定與指定的時段對應的位,則該處理器或VPE調度器就會根據某種其它默認調度算法來分配下一個發出時段。
根據之前所述,在一個較佳實施例當中,每一個VPE,例如圖34的VPE0(3406)和VPE1(3404),都具有一個VPESchedule寄存器(其格式顯示於圖24),用來允許以該寄存器內容的長度為模的特定時段,可以被確定地分配給該VPE。圖34的VPESchedule寄存器為VPE0的寄存器3414和VPE1的寄存器3416。那些沒有被分配給任何VPE的發出時段,通過特定實現方式的分配策略進行分配。
另外根據上文的描述,被分配給在一個VPE之內的線程的時段是從給予該VPE的時段中分配的。舉一個具體例子,如果一個處理器有兩個VPE,如圖34所示,其中一個VPE的VPESchedule寄存器具有0xaaaaaaaa值,而另一個VPE的VPESchedule寄存器具有0x55555555值,則發出時段就會被交替分配給這兩個VPE。如果這兩個VPE之一中的一個線程的ThreadSchedule寄存器包含0x55555555值,則該線程會取得包含該線程的VPE的每兩個發出時段中的一個,或者是說整個處理器的每四個發出時段中的一個。
因此,該每一個VPE相關的VPESchedule寄存器的值決定了每個VPE會得到哪些處理時段。特定線程被分配給每一個VPE,例如是VPE0中所示的線程0與線程1。其它沒有顯示的線程也類似地被分配給VPE1。每個線程都有一個關聯的ThreadSchedule寄存器,例如線程0的寄存器3418,線程1的寄存器3420。ThreadSchedule寄存器的值決定了一個VPE中每個線程的處理時段的分配。
調度器3402與3412可以用簡單的組合邏輯來實現,以執行上述的功能,根據本發明的公開內容,建構這些調度器並不需要複雜的實驗就能夠由本領域技術人員來實現。例如,調度器的構成也可以使用傳統的方法,如通過組合邏輯,可程序邏輯,軟體等等,用以得到所描述的功能。
圖33描述了一個通用形式的計算機系統3300,根據本發明的各種實施例可以在該計算機系統上實施。該系統包含了具有必須的解碼和執行邏輯的一個處理器3302(本領域一般技術人員對此應該很清楚),用以支持一個或多個上述指令(即,FORK,YIELD,MFTR,MTTR,EMT,DMT和ECONF)。在一個較佳實施例當中,內核3302還包含如圖34所示的調度電路3400,並且代表上述的「主處理器」。系統3300還包含系統接口控制器3304,可以與該處理器雙向通信;RAM3316和ROM3314,可被系統接口控制器進行存取;三個I/O裝置3306,3308和3310,通過總線3312與系統接口控制器通信。通過這裡對裝置和程序代碼應用的詳細描述,系統3300可以作為一個多線程系統進行操作。本領域技術人員應該很清楚,圖33中所示的一般形式可以有很多替代形式。舉例來說,總線3312可以有許多的形式來實現,並且在某些實施例當中可以是一種晶片上的總線。同樣的,I/O裝置的數目也只是為了描述方便,實質上是可以在不同的系統上做任意的變更。另外,雖然在圖中只有裝置3306發出了一個中斷要求,很明顯地其它的裝置也可以發出中斷要求。
更進一步的改善到目前為止,所描述的實施例中,32位的ThreadSchedule寄存器和VPESchedule寄存器並不允許精確地分配奇數比例的發出帶寬。如果一個程式設計師期望精確地分配所有發出時段的三分之一給一個指定的線程,他只能近似到10/32或11/32。在一個實施例中,一個具有可程序的掩碼或長度的寄存器,允許程式設計師去指定ThreadSchedule寄存器和/或VPESchedule寄存器中的位的子集,在重新開始這次序列之前被發出邏輯使用。在所提出的例子當中,該程式設計師設定了只有30個位是有效的,並且將VPESchedule寄存器和/或ThreadSchedule寄存器適當地編程為具有值0x24924924。
本文所描述的多線程ASE當然可以實現在硬體中,例如,在中央處理單元(CPU),微處理器,數位訊號處理器,處理器內核,系統整合晶片(SOC)或其它任何可編程器件內,或與上述各個器件連接。另外,該多線程ASE也可以實現在軟體之中(例如,計算機可讀程序代碼,程序代碼,任何形式的指令和/或數據,如源語言,目標語言或機器語言),該軟體設置在計算機可使用的(例如,可讀的)的介質中,該介質用來儲存該軟體。該軟體實現了這裡描述的裝置和過程的功能,製造,建模,仿真,描述和/或測試。舉例來說,這些可以通過使用以下工具實現通用程式語言(比如C語言,C++語言),GDSII資料庫,硬體描述語言(HDL),其包含Verilog HDL、VHDL、AHDL(Altera HDL)等等,或者其它可利用的程序,資料庫和/或電路(即原理圖)設計工具。這些軟體可以被置於任何已知的計算機可使用的介質,包含半導體,磁碟,光碟(例如CD-ROM,DVD-ROM等等),或是作為任何計算機可使用(例如,可讀取)的傳輸介質(例如,載波,包括數字、光學的任何其它介質,或基於模擬的介質)中所容納的計算機數據信號。因此,該軟體可以在包括網際網路與內聯網絡的通信網絡中傳輸。
一個由軟體實施的多線程ASE可以被包含在一個半導體的智慧財產權內核內,如一個處理器內核(例如,以HDL實現),並且可以在集成電路的生產過程中被轉變成硬體。另外,這裡描述的一個多線程ASE也可以作為硬體與軟體的組合實現。
對於本領域技術人員來說,很明顯地可以在不超出本發明所揭示的精神與範圍的情況下,對本發明所揭示的實施例加以潤飾與修改。舉例來說,之前所描述的實施例大多是使用MIPS處理器,架構和技術,作為具體例子。本發明具有各種實施例,可以被用於更廣的範圍,而不限於這些具體例子。更進一步而言,一個本領域技術人員可以找到方法對本發明所描述的功能性做些微的改變,而這仍然是在本發明的精神與範圍內。在描述QoS時,ThreadSchedule寄存器與VPESchedule寄存器的內容不限於所描述的長度,而且可以在本發明的精神和範圍內作出修改。
因此,實質上只能依照所附權利要求的範圍來限定本發明的範圍。
權利要求
1.在一個能夠支持和執行多程序線程的處理器中,一種處理的機制,包括一個參數,用於調度一個程序線程;以及一個指令,置於該程序線程中,並且能夠存取該參數;其中,當該參數等於第一數值時,該指令根據一個或多個編碼於該參數中的條件,重新調度該程序線程。
2.如權利要求1所述的機制,其中該參數保存在一個數據儲存裝置中。
3.如權利要求1所述的機制,其中當該參數等於第二數值,且該第二數值不等於該第一數值時,該指令釋放該程序線程。
4.如權利要求3所述的機制,其中該第二數值為零。
5.如權利要求1所述的機制,其中當該參數等於第二數值,且該第二數值不等於該第一數值時,該指令無條件地重新調度該程序線程。
6.如權利要求5所述的機制,其中該第二數值為一奇數。
7.如權利要求5所述的機制,其中該第二數值為負1。
8.如權利要求1所述的機制,其中該一個或多個條件中的一個條件與將執行機會讓與其它線程直到該一個條件被滿足為止的該程序線程相關。
9.如權利要求8所述的機制,其中該一個條件被編碼於該參數中的位向量或位欄位之一中。
10.如權利要求5所述的機制,其中,在該程序線程被重新調度的情形下,該程序線程的執行會在該線程中該指令之後的位置繼續。
11.如權利要求3所述的機制,其中當該參數等於第三數值,且該第三數值不等於該第一數值與該第二數值時,該指令無條件地重新調度該程序線程。
12.如權利要求1所述的機制,其中該一個或多個條件中的一個條件為一個硬體中斷。
13.如權利要求1所述的機制,其中該一個或多個條件中的一個條件為一個軟體中斷。
14.如權利要求1所述的機制,其中,在該程序線程被重新調度的情形下,該程序線程的執行會在該線程中該指令之後的位置繼續。
15.在一個能夠支持與執行多程序線程的處理器中,一種由一個線程重新調度執行或釋放該線程本身的方法,包括(a)發出一個指令,該指令存取一個數據存儲裝置中的一部分記錄,該部份記錄編碼了與決定該線程是否被重新調度的一個或多個條件相關的一個或多個參數;以及(b)根據在該部分記錄中的該一個或多個參數來依照該條件重新調度該線程或釋放該線程。
16.如權利要求15所述的方法,其中該記錄被置於一個通用寄存器(GPR)中。
17.如權利要求15所述的方法,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關。
18.如權利要求17所述的方法,其中與該被釋放的線程相關的該一個參數為一零值。
19.如權利要求15所述的方法,其中這些參數中的一個參數與被重新排隊等待調度的線程相關。
20.如權利要求19所述的方法,其中該一個參數為一任意奇數值。
21.如權利要求19所述的方法,其中該一個參數為負1的二進位補碼值。
22.如權利要求15所述的方法,其中這些參數中的一個參數與將執行機會讓與其它線程直到一個特定條件被滿足為止的該線程相關。
23.如權利要求22所述的方法,其中該一個參數被編碼於該記錄中的位向量或者一個或多個值欄位之一中。
24.如權利要求15所述的方法,其中,在該線程發出該指令並被重新調度的情形下,當該一個或多個條件被滿足時,該線程的執行會在該線程指令流中該線程所發出的該指令之後的位置繼續。
25.如權利要求15所述的方法,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關,並且這些參數中的另一個參數與被重新排隊等待調度的線程相關。
26.如權利要求15所述的方法,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足相關。
27.如權利要求15所述的方法,其中這些參數中的一個參數與被重新排隊等待重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足相關。
28.如權利要求15所述的方法,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關,這些參數中的另一個參數與被重新排隊等待調度的線程相關,並且這些參數中的再另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足相關。
29.一種支持與執行多個軟體實體的數字處理器,包括一個數據儲存裝置中的一部分記錄,該部分記錄編碼了與一個或多個條件相關的一個或多個參數,該一個或多個條件決定了當一個線程將執行機會讓與其它線程時該線程是否被重新調度。
30.如權利要求29所述的數字處理器,其中該部分記錄被置於一個通用寄存器(GPR)中。
31.如權利要求29所述的數字處理器,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關。
32.如權利要求31所述的數字處理器,其中與該被釋放的線程相關的該一個參數為一零值。
33.如權利要求29所述的數字處理器,其中這些參數中的一個參數與被重新排隊等待調度的線程相關。
34.如權利要求33所述的數字處理器,其中該一個參數的值為一任意奇數值。
35.如權利要求33所述的數字處理器,其中該一個參數的值為負1的二進位補碼值。
36.如權利要求29所述的數字處理器,其中這些參數中的一個參數與將執行機會讓與其它線程直到一個特定條件被滿足的線程相關。
37.如權利要求36所述的數字處理器,其中該一個參數被編碼於該記錄中的位向量或是一個或多個值欄位之一中。
38.如權利要求29所述的數字處理器,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關,並且這些參數中的另一個參數與一個被重新排隊等待調度的線程相關。
39.如權利要求29所述的數字處理器,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足相關。
40.如權利要求29所述的數字處理器,其中這些參數中的一個參數與被重新排隊等待重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足相關。
41.如權利要求29所述的數字處理器,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關,這些參數中的另一個參數與被重新排隊等待調度的線程相關,並且這些參數中的再另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足相關。
42.一種能夠支持與執行多個程序線程的處理系統,包括一個數字處理器;一個數據儲存裝置中的一部分記錄,該部分記錄編碼了與一個或多個條件相關的一個或多個參數,該一個或多個條件決定了一個線程是否被重新調度;以及一個指令集,包含用於重新調度和釋放該線程的一個指令;其中當該線程發出該指令時,該指令存取該記錄中的該一個或多個參數,並且該系統根據該部分記錄中的該一個或多個參數來依照該一個或多個條件重新調度或釋放該發出指令的線程。
43.如權利要求42所述的處理系統,其中該部分記錄被置於一個通用寄存器(GPR)中。
44.如權利要求41所述的處理系統,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關。
45.如權利要求44所述的處理系統,其中與該被釋放的線程相關的該一個參數為一零值。
46.如權利要求44所述的處理系統,其中這些參數中的一個參數與被重新排隊等待調度的線程相關。
47.如權利要求46所述的處理系統,其中該一個參數的值為一任意奇數值。
48.如權利要求46所述的處理系統,其中該一個參數的值為負1的二進位補碼值。
49.如權利要求41所述的處理系統,其中這些參數中的一個參數與將執行機會讓與其它線程直到一個特定條件被滿足的線程相關。
50.如權利要求49所述的處理系統,其中該一個參數被編碼於該記錄中的位向量或是一個或多個值欄位之一中。
51.如權利要求44所述的處理系統,其中,在一個線程發出該指令並且被有條件地重新調度的情形下,當該一個或多個條件被滿足時,該線程的執行會在該線程指令流中該指令之後的位置繼續。
52.如權利要求42所述的處理系統,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關,並且這些參數中的另一個參數與被重新排隊等待調度的線程相關。
53.如權利要求42所述的處理系統,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足相關。
54.如權利要求42所述的處理系統,其中這些參數中的一個參數與被重新排隊等待重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足相關。
55.如權利要求42所述的處理系統,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關,這些參數中的另一個參數與被重新排隊等待調度的線程相關,並且這些參數中的再另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足相關。
56.一種數字儲存介質,其上被寫入來自一個指令集的指令,用於在一個數字處理器上執行多個軟體線程中的各個軟體線程,該指令集包含了一個指令,用於使發出指令的線程放棄執行,並且存取一個數據儲存裝置中的一部份記錄中的一個參數,其中,釋放或重新調度的條件與該參數相關,並且根據該部分記錄中的該參數來依照該條件進行釋放或重新調度。
57.如權利要求56所述的數字儲存介質,其中該記錄被置於一個通用寄存器(GPR)中。
58.如權利要求57所述的數字儲存介質,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關。
59.如權利要求58所述的數字儲存介質,其中該與被釋放的線程相關的參數為一零值。
60.如權利要求56所述的數字儲存介質,其中這些參數當中的一個參數與被重新排隊等待調度的線程相關。
61.如權利要求60所述的數字儲存介質,其中該一個參數的值為一任意奇數值。
62.如權利要求60所述的數字儲存介質,其中該一個參數的值為負1的二進位補碼值。
63.如權利要求16所述的數字儲存介質,其中這些參數中的一個參數與將執行機會讓與其它線程直到一個特定條件被滿足的線程相關。
64.如權利要求63所述的數字儲存介質,其中該一個參數被編碼於該記錄中的位向量或是一個或多個位欄位之一中。
65.如權利要求56所述的數字儲存介質,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關,並且這些參數中的另一個參數與被重新排隊等待調度的線程相關。
66.如權利要求56所述的數字儲存介質,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足相關。
67.如權利要求56所述的數字儲存介質,其中這些參數中的一個參數與被重新排隊等待重新調度的線程相關,並且這些參數中的另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足相關。
68.如權利要求56所述的數字儲存介質,其中這些參數中的一個參數與被釋放的而不是被重新調度的線程相關,這些參數中的另一個參數與被重新排隊等待調度的線程相關,並且這些參數中的再另一個參數與將執行機會讓與其它線程直到一個特定條件被滿足相關。
69.如權利要求1所述的機制,其中該指令為一個YIELD指令。
70.如權利要求1所述的機制,其中該部分記錄包括位向量。
71.如權利要求1所述的機制,其中該部分記錄包括一個或多個多位欄位。
72.如權利要求15所述的方法,其中該指令為一個YIELD指令。
73.如權利要求42所述的處理系統,其中該指令為一個YIELD指令。
74.如權利要求56所述的數字儲存介質,其中該指令為一個YIELD指令。
75.一種包含在傳輸介質中的計算機數據信號,包括計算機可讀的程序代碼,其用於描述一個能夠支持並執行多個程序線程的處理器,並且其包括一種用以釋放和重新調度一個線程的機制,該程序代碼包括第一程序代碼段,用於描述一個數據存儲裝置中的一部分記錄,該部分記錄編碼了與決定一個線程是否被重新調度的一個或多個條件相關的一個或多個參數;以及第二程序代碼段,用於描述能夠存取該記錄中的該一個或多個參數的一個指令,其中當該線程發出該指令時,該指令存取該記錄中的一個或多個值,並根據該一個或多個值來依照該一個或多個條件重新調度或釋放該線程。
76.在一個能夠支持多個程序線程的處理器中,一種方法,包含執行一個指令,該指令可以存取與線程調度相關的一個參數,其中該指令包含在一個程序線程中;以及當該參數等於第一數值時,響應於該指令而釋放該程序線程。
77.如權利要求76所述的方法,其中該第一數值為零。
78.如權利要求76所述的方法,還包括當該參數等於第二數值時,響應於該指令而掛起該程序線程的執行,其中該第二數值不等於該第一數值。
79.如權利要求78所述的方法,其中該第二數值表示,執行該程序線程所需具備的條件並不滿足。
80.如權利要求79所述的方法,其中該條件被編碼於該參數中作為位向量或值欄位。
81.如權利要求78所述的方法,還包括當該參數等於第三數值時,響應於該指令而重新調度該程序線程,其中該第三數值不相等於該第一數值和第二數值。
82.如權利要求81所述的方法,其中該第三數值為負1。
83.如權利要求81所述的方法,其中該第三數值為一個奇數值。
84.在一個能夠支持多個程序線程的處理器中,一種方法,包括執行一個指令,該指令存取一個與線程調度相關的參數,其中該指令包含於一個程序線程中;當該參數等於第一數值時,響應於該指令而掛起該程序線程的執行。
85.如權利要求84所述的方法,還包括當該參數等於第二數值時,響應於該指令而重新調度該程序線程,其中該第二數值不等於該第一數值。
86.在一個能夠支持多個程序線程的處理器中,一種方法,包括執行一個指令,該指令存取與線程調度相關的一個參數,其中該指令包含於一個程序線程當中;以及當該參數等於第一數值時,響應於該指令而重新調度該程序線程。
87.如權利要求86所述的方法,還包括當該參數等於第二數值時,響應於該指令而釋放該程序線程,其中該第二數值不等於該第一數值。
全文摘要
一種在能支持和執行多個程序線程的處理器中的處理機制,包括用於調度一個程序線程的參數和該程序線程中的一個指令,該指令能夠存取該參數。當該參數等於第一數值時,且當一個程序線程發出該指令時,該指令根據編碼在該參數中的一個或多個條件而重新調度該程序線程。
文檔編號G06F9/30GK1842770SQ200480024800
公開日2006年10月4日 申請日期2004年8月26日 優先權日2003年8月28日
發明者凱文·基塞爾 申請人:美普思科技有限公司