專利名稱:一種在處理器中執(zhí)行的計算線程的暫停與解除分配的整合機制的制作方法
相關(guān)專利申請的交叉參考本專利申請是下列共有的非暫時美國專利申請的部分繼續(xù)申請(CIP),這些美國臨時專利申請包含在此供參考美國專利申請?zhí)?0/684,350(MIPS.0188-01-US),申請日2003年10月10日,其標(biāo)題為“確保在一多線程處理器上的程序執(zhí)行的服務(wù)品質(zhì)的機制”;以及美國專利申請?zhí)?0/684,348(MIPS.0189-00-US),申請日2003年10月10日,其標(biāo)題為“在一處理器中計算線程的暫停和解除分配的整合機制”。
上述共有的非臨時美國專利申請,是主張以下美國臨時專利申請的權(quán)利,這些美國臨時專利申請包含在此供參考美國臨時專利申請No.60/499,180(MIPS.0188-00-US),申請日2003年8月28日,其標(biāo)題為“多線程應(yīng)用的特別擴充”;美國臨時專利申請No.60/502,358(MIPS.0188-02-US),申請日2003年9月12日,其標(biāo)題為“對在一處理器架構(gòu)的多線程應(yīng)用的特別擴充”;以及美國臨時專利申請No.60/502,359(MIPS.0188-03-US),申請日2003年9月12日,其標(biāo)題為“對在一處理器架構(gòu)的多線程應(yīng)用的特別擴充”。
本專利申請亦是與下列非臨時美國專利專利申請相關(guān)并同時遞交,這些美國臨時專利申請包含在此供參考(MIPS.0192-00-US),申請日2004年8月27日,其標(biāo)題為“在一多線程的微處理器中同時指令串流的初始化的裝置、方法及指令”;(MIPS.0193-00-US),申請日2004年8月27日,其標(biāo)題為“虛擬處理器資源的動態(tài)組態(tài)機制”;以及(MIPS.0194-00-US),申請日2004年8月27日,其標(biāo)題為“在一多線程的微處理器中多計算上下文的軟件管理的裝置、方法及指令”。
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)字處理器的領(lǐng)域(例如,微處理器、數(shù)字信號處理器、微控制器等等),其中,特別是有關(guān)于涉及在一處理器當(dāng)中管理數(shù)個線程(thread)的執(zhí)行的裝置與方法。
背景技術(shù):
在數(shù)字計算的領(lǐng)域,計算能力的發(fā)展歷史包括在各方面都有持續(xù)的進步。持續(xù)的進步表現(xiàn)在處理器的裝置密度、影響運算速度的線路互連的技術(shù)、容錯能力、使用更高速的時鐘信號或者更多其它改進。另一個影響整體計算能力的研究領(lǐng)域為平行處理,包括多個不同的處理器的平行的運算。
平行處理的概念包括在多個不同的處理器中共享任務(wù)的能力,但是也包括數(shù)個程序同時在一個處理器上執(zhí)行的方案。此方案一般被稱為多線程(multithreading)。
接下來將介紹多線程的概念當(dāng)一個處理器操作頻率逐漸加快,要隱藏在計算機系統(tǒng)運算當(dāng)中固有的等待時間(latency)也變得愈困難。一個高端處理器如果在一個應(yīng)用中在其數(shù)據(jù)高速緩存中錯失了百分之一的指令,可能導(dǎo)致大概百分的五十的時間停頓,如果它對于芯片外部RAM有五十個周期的等待時間的話。如果當(dāng)該處理器在高速緩存錯失期間被停頓時,指向一個不同應(yīng)用程序的指令可以被執(zhí)行的話,該處理器的性能可以因此被改善并且一部份或者全部存儲器的等待時間可被有效地隱藏。舉例來說,圖1A顯示了遇到高速緩存錯失而停頓的單一個指令串流(stream)101。支持機器僅可一次執(zhí)行單一個線程(thread)或任務(wù)(task)。相反的,圖1B顯示了當(dāng)指令串流101停頓時可被執(zhí)行的指令串流102。在這種情況當(dāng)中,該支持機器可以同時支持兩個線程,也因此更有效地利用其資源。
更一般的說,各個單獨的計算機指令都具有特定的語法,使得不同種類的指令可以要求不同的資源去執(zhí)行期望的運算。整數(shù)的加載并沒有完全使用到浮點單元的邏輯或寄存器,任何除了寄存器移位的外的運算,皆需要使用到加載與儲存單元的資源。沒有一個單一指令耗費全部處理器的資源,而且當(dāng)為了追求更高性能的設(shè)計,而因此加入了更多的流水線化階段與并行計算功能單元后,會進而降低平均指令使用全部處理器資源的比例。
多線程的發(fā)展有一大部分,是源自于當(dāng)一單一序列的程序基本上不能有效率地完全使用到處理器的全部資源時,該處理器就應(yīng)該能夠共享程序執(zhí)行的多個線程當(dāng)中的資源的一部分。這種結(jié)果并不一定導(dǎo)致任何特殊的程序可被較快速地執(zhí)行,事實上,某些多線程的方案,實質(zhì)上會使降低單一線程程序執(zhí)行的性能。然而,這卻可使一群且同時的指令串流,在更短的時間和(或)使用更少的處理器中運行。這個概念可用圖2A與圖2B來說明,其中,各自顯示了單一線程處理器210與雙線程處理器250。該處理器210支持單一線程212,其被示出利用一加載/儲存單元214。假設(shè)當(dāng)訪問高速緩存216時,發(fā)生一個錯失,那么該處理器210便會進入停頓(根據(jù)圖1A所描述),直到該錯失數(shù)據(jù)被修正。在這個過程當(dāng)中,乘法器/除法器單元218始終處于閑置狀態(tài),而且沒有被有效使用。然而,該處理器250支持兩個線程即212與262。因此,若是該線程212停頓了,處理器250仍然可同時地利用線程262且乘法器/除法器單元218因而更有效地利用了其資源(根據(jù)圖1B所描述)。
然而,在單一處理器上的多線程可提供超出提高的多任務(wù)通量的好處。捆綁多個程序線程在關(guān)鍵性的事件上,可以減低事件響應(yīng)時間,而且在原則上可在單一應(yīng)用程序中利用線程級的平行處理。
目前已經(jīng)提出多種多線程處理。其中之一為交錯多線程,也就是時分多路復(fù)用(TDM)方案,該方案在每個發(fā)出的指令上自一線程切換至另一個線程。該方案在調(diào)度中有一定程度的“公平原則”,但是為了靜態(tài)分配多個發(fā)出位置至多個線程,一般會限制單一程序線程的性能。動態(tài)交錯的方式可以改良這個問題,但是實現(xiàn)起來更加復(fù)雜。
另一個多線程的方案是阻擋式(block)多線程,其從一個單一程序線程持續(xù)地發(fā)出連續(xù)的多個指令,直到某些規(guī)定的阻擋事件,例如一個高速緩存數(shù)據(jù)錯失或者一個重放抑制,導(dǎo)致該線程被暫停而另一個線程被激活。因為阻擋式多線程變換線程的頻率較低,所以其實現(xiàn)方式可以被簡化。在另一方面,阻擋的動作在調(diào)度線程上比較不具有“公平原則”。如果單一個線程非常幸運地在高速緩存中發(fā)現(xiàn)其所有的數(shù)據(jù),則其可很長一段時間地壟斷整個處理器。一種結(jié)合了阻擋式與交錯式的多線程的混合調(diào)度方案,也常被使用與研究。
仍然有另一種多線程的形式是一在超級標(biāo)量處理器上實現(xiàn)的同時(simultaneous)多線程。在同步多線程中,可同時發(fā)出來自不同線程的多個指令。以一例子來說明,一個超級標(biāo)量精簡指令集計算機(RISC),每周期發(fā)出兩個指令,和一個同時多線程超級標(biāo)量流水線,從該兩個中的任一線程每周期發(fā)出至多兩個指令。那些依賴或停頓防止處理器被單個程序線程完全占用的周期可被另一線程的發(fā)出指令所填補。
同時多線程也因此成為一個非常有用的技術(shù),用以恢復(fù)在超級標(biāo)量流水線中的低效率。但這也不可諱言地被認為是最復(fù)雜的多線程系統(tǒng),因為在一給定周期上多于一個以上的線程可以是有效的,會使得存儲器存取的保護的實現(xiàn)更加地復(fù)雜等等。另外一個值得注意的一點,在一給定工作負載上的中央處理器(CPU)上流水線化越好,越會降低其多線程實現(xiàn)的效率的潛在效益。
多線程與多處理是非常相關(guān)的。事實上,一般認為其中的差異只有一點不同也就是多處理器僅共享存儲器與/或線路連接性,而多線程處理器除了共享存儲器與/或線路連接性,還共享指令提取與發(fā)出邏輯,及其它可能有關(guān)的處理器資源。在單一多線程處理器當(dāng)中,各種的線程互相競爭發(fā)出區(qū)間與其它資源,也會限定了平行處理。某些多執(zhí)行線程編程與架構(gòu)模型假定新的線程會被分配到不同的處理器,以完全平行執(zhí)行。
在本專利申請遞交時,現(xiàn)有技術(shù)中可用的多線程解決方案有幾種不同的問題。其中之一即為實時線程的處理。典型地,實時多媒體算法在特定的處理器/數(shù)字信號處理器(DSP)上運行,以保證服務(wù)品質(zhì)(QoS)與響應(yīng)時間,且并不包括在多線程方案中待被共享的線程的混合中,因為無法容易地保證實時軟件可被及時地執(zhí)行。
非常清楚的是,在該方面需要一個方案與機制,其允許一個或多個實時線程或虛擬處理器被保證在多線程處理器上指令發(fā)出區(qū)間的一特定部分,具有一特定的指令間的間隔,使得計算帶寬與響應(yīng)時間能被良好地定義。如果可用這樣的機制,則具有嚴(yán)格的服務(wù)品質(zhì)(QoS)要求的線程可被包括于此多線程混合中。另外,在此系統(tǒng)中的實時線程(例如與DSP相關(guān)的線程),可以或多或少地避免中斷,去除執(zhí)行時間變化的重要源。這種技術(shù)在接受DSP加強的RISC處理器與核心作為一般在消費性多媒體應(yīng)用上使用分離的RISC與DSP核心的替代方案是關(guān)鍵的。
另一個在本專利申請遞交時,現(xiàn)有技術(shù)的多線程方案的;另一個問題是在處理器中產(chǎn)出與消滅有效線程。為了支持相對性細質(zhì)構(gòu)造的多線程,會期望以最小的可能開銷產(chǎn)生與消滅程序執(zhí)行的平行線程,并且至少在一般的情況下不會有需要的操作系統(tǒng)的干涉。在此方面,清楚地需要的是一些種類的如FORK(派生)與JOIN(線程終止)指令。另一個存在于多線程處理器中的問題,是調(diào)度策略使一個線程持續(xù)運行直到被另一些資源阻擋為止,以及一個沒有被任何資源阻擋的線程仍然放棄該處理器至其它的線程。在此方面清楚地需要的是有區(qū)別的PAUSE(暫停)或YIELD(產(chǎn)出)指令。再者,微處理器指令組的操作碼空間是一有價值的架構(gòu)資源,其尤其在RISC指令組中可能被限定;因此,需要的是一種結(jié)合FORK JOIN以及YIELD類型的指令的其中兩者或更多為一單一指令解碼,以節(jié)省操作碼空間的方法。
發(fā)明內(nèi)容在一方面,本發(fā)明提供一種在被配置成執(zhí)行同時多個程序線程的一微處理器上執(zhí)行的一產(chǎn)出指令。此指令包含一操作碼,指示該處理器暫停一線程的執(zhí)行。此產(chǎn)出指令是在此線程中的一指令。此指令還包含一指定一寄存器的操作數(shù)。若此寄存器包含一第一預(yù)定值,則微處理器終止此線程的執(zhí)行。若此寄存器包含一第二預(yù)定值,則微處理器無條件地重新調(diào)度此線程的執(zhí)行。若此寄存器包含在一組預(yù)定值內(nèi)的一數(shù)值,則微處理器有條件地重新調(diào)度此線程的執(zhí)行。此組預(yù)定值不包含第一及第二預(yù)定值。
在另一方面,本發(fā)明提供一微處理器,用于執(zhí)行指示該微處理器選擇性調(diào)度或終止一程序線程的執(zhí)行的一指令,該程序線程包含其指令。此微處理器包含一寄存器,用于儲存此指令的一操作數(shù),以及一調(diào)度器,其被連接至該寄存器。若此操作數(shù)為一第一預(yù)定值,則此調(diào)度器終止此線程的執(zhí)行,而若此操作數(shù)為一第二預(yù)定值,則此調(diào)度器調(diào)度此線程的執(zhí)行。
在又一方面,本發(fā)明提供一種接收事件信號的微處理器中選擇性暫?;蚪K止一程序線程的執(zhí)行的方法。此方法包含發(fā)布在此程序線程中的一指令。此指令規(guī)定一操作數(shù),該操作數(shù)規(guī)定一第一預(yù)定值、一第二預(yù)定值或一組預(yù)定值中的一數(shù)值,其組預(yù)定值不包含第一及第二預(yù)定值。若此操作數(shù)是在此組預(yù)定值內(nèi),則該操作數(shù)規(guī)定一或多個事件信號。本方法還包括,若此操作數(shù)是第一預(yù)定值,則終止此線程的執(zhí)行。本方法還包括,若此操作數(shù)是第二預(yù)定值,則無條件地重新調(diào)度此線程的執(zhí)行。本方法還包括,若此操作數(shù)是在該組預(yù)定值中,則暫停此線程的執(zhí)行,直到操作數(shù)所指定的事件信號中的一或多個事件信號中的至少一信號為真。
在另一方面,本發(fā)明提供一種處理系統(tǒng)。此處理系統(tǒng)包含多個信號源以及一微處理器,其被連接以接收多個信號源所產(chǎn)生的多個信號。微處理器執(zhí)行一程序線程中的一指令。若此指令的一操作數(shù)是一第一預(yù)定值,則微處理器終止此線程的執(zhí)行。否則,根據(jù)此操作數(shù)所規(guī)定的多個信號中一或多個信號的狀況,重排調(diào)度此線程的執(zhí)行。
在另一方面,本發(fā)明提供一種計算機程序產(chǎn)品,與一計算裝置一同使用。計算機程序產(chǎn)品包含一計算機可使用媒體,其具有包含在該媒體中的計算機可讀取程序代碼,用于使執(zhí)行指示一微處理器的指令的該微處理器選擇性調(diào)度或終止一程序線程的執(zhí)行,該程序線程包含此指令。計算機可讀取程序代碼包含用于提供一寄存器的第一程序代碼,此寄存器儲存此指令的一操作數(shù)。計算機可讀取程序代碼亦包含提供一調(diào)度器的第二程序代碼,其被連接該寄存器,若操作數(shù)是一第一預(yù)定值,則終止線程的執(zhí)行,而若操作數(shù)是一第二預(yù)定值,則調(diào)度線程的執(zhí)行。
在又一方面,本發(fā)明提供一種包含在一傳輸媒體中的一計算機數(shù)據(jù)信號,其包含一計算機可讀取程序代碼,用于使執(zhí)行指令一微處理器的一指令的該微處理器選擇性調(diào)度或終止一程序線程的執(zhí)行,該程序線程包含此指令。該程序代碼包含第一程序代碼,用于提供儲存此指令的一操作數(shù)的一寄存器。此程序代碼還包含第二程序代碼,用于提供一調(diào)度器,該調(diào)度器與寄存器連接,若操作數(shù)是一第一預(yù)定值,則終止線程的執(zhí)行,而若操作數(shù)是一第二預(yù)定值,則調(diào)度線程的執(zhí)行。
YIELD指令的一優(yōu)勢,是提供一種使一程序以非常小的開銷將該處理器的執(zhí)行讓給另一程序線程的方法,典型地以RISC方式的一單一時鐘周期,且在一般情況無需操作系統(tǒng)的介入。因此,舉例而言,一嵌入式系統(tǒng)可將中斷服務(wù)例程轉(zhuǎn)變?yōu)榘籝IELD指令的不同線程,以暫停線程,直到中斷源表明一事件,此時此線程已被重新調(diào)度,從而實現(xiàn)近乎零開銷的中斷服務(wù)。優(yōu)勢地,YIELD指令將有效暫停程序線程執(zhí)行及一程序線程的終止整合為一單一指令,從而節(jié)省了在指令組內(nèi)的珍貴的操作碼空間。最后,本YIELD指令根據(jù)一輸入操作數(shù)的值,提供一條件地中止線程的手段給其指令,使多線程碼得以更精簡,且更有效地執(zhí)行于一微處理器流水線中。
圖1A是一示意圖,顯示被一高速緩存數(shù)據(jù)錯失的事件停頓的單一指令串流;圖1B是一示意圖,顯示當(dāng)該如圖1A的串流被停頓時可被執(zhí)行的一指令串流;圖2A是一示意圖,顯示一單一線程處理器;圖2B是一示意圖,顯示一雙線程處理器250;圖3是一示意圖,描述了根據(jù)本發(fā)明的一實施例中,支持一第一與第二VPE的處理器;圖4是一示意圖,描述了根據(jù)本發(fā)明的一實施例中,支持一單一VPE的處理器,該VPE進而支持三個線程;圖5顯示了根據(jù)本發(fā)明的一實施例中,一個FORK指令的格式;圖6顯示了根據(jù)本發(fā)明的一第一實施例中,一個YIELD指令的格式;
圖7是一表格顯示了一個用于GPRrs的十六位的限定(qualifier)屏蔽;圖8顯示了根據(jù)本發(fā)明的一實施例中,一個MFTR指令的格式;圖9是一表格,說明了根據(jù)本發(fā)明的一實施例中,一個MFTR指令的字段;圖10顯示了根據(jù)本發(fā)明的一實施例中,一個MTTR指令的格式;圖11是一表格,說明了根據(jù)本發(fā)明的一實施例中,該MTTR指令的u及sel位;圖12顯示了根據(jù)本發(fā)明的一實施例中,一個EMT指令的格式;圖13顯示了根據(jù)本發(fā)明的一實施例中,一個DMT指令的格式;圖14顯示了根據(jù)本發(fā)明的一實施例中,一個ECONF指令的格式;圖15是根據(jù)本發(fā)明的一實施例中,一系統(tǒng)共處理器專屬資源的表格;圖16是根據(jù)本發(fā)明的一實施例中,一個ThreadControl寄存器的布局;圖17是根據(jù)本發(fā)明的一實施例中,定義一個ThreadControl寄存器各字段的表格;圖18是根據(jù)本發(fā)明的一實施例中,一個ThreadStatus寄存器的布局;圖19是根據(jù)本發(fā)明的一實施例中,定義一個ThreadStatus寄存器的各字段的表格;圖20是根據(jù)本發(fā)明的一實施例中,一個ThreadContext寄存器的布局;圖21是根據(jù)本發(fā)明的一實施例中,一個ThreadConfig寄存器的布局;圖22是根據(jù)本發(fā)明的一實施例中,定義該ThreadConfig寄存器段的表格;圖23是根據(jù)本發(fā)明的一實施例中,一個ThreadSchedule寄存器的布局;圖24是根據(jù)本發(fā)明的一實施例中,一個VPESchedule寄存器的布局;圖25是根據(jù)本發(fā)明的一實施例中,一個Cnfig4寄存器的布局;圖26是根據(jù)本發(fā)明的一實施例中,定義該Cnfig4寄存器的各字段的表格;圖27是一表格,定義了線程異常所需的Cause寄存器的ExcCode值圖28是一表格,定義了ITC指示符;圖29是一表格,定義了Config3寄存器的各字段;圖30是一表格,描述了在每個VPE上下文的VPE禁止位;圖31是一表格,描述了ITC儲存行為圖32是一示意圖,描述了根據(jù)本發(fā)明的一實施例中的YIELD功能的操作;圖33是一示意圖,描述了根據(jù)本發(fā)明的一實施例的一個運算系統(tǒng);圖34是一示意圖,描述了根據(jù)本發(fā)明的一實施例中,在一處理器中使用VPE和在一VPE中使用線程來實施調(diào)度;圖35是一方框圖,描述根據(jù)本發(fā)明的另一實施例,YIELD指令的格式;圖36是描述根據(jù)本發(fā)明圖35的另一實施例,執(zhí)行圖35的YIELD指令的一處理器核心的方框圖;圖37是一方框圖,描述圖36的YQMask寄存器的格式;圖38是一流程圖,描述根據(jù)本發(fā)明圖35的另一實施例中,圖36的處理器核心執(zhí)行圖35的YIELD指令的操作;圖39是一方框圖,描述根據(jù)本發(fā)明圖35的另一實施例的如圖33的處理系統(tǒng)的一處理系統(tǒng),其包含執(zhí)行一YIELD指令的圖36的處理器核心;以及圖40是一方框圖,描述根據(jù)本發(fā)明的另一實施例中,圖35的YIELD指令的rs寄存器的語義。
具體實施方式在本發(fā)明的一實施例中,一處理器架構(gòu)包括一指令集,而該指令集包含多個特征、多個功能與多個指令,能夠?qū)崿F(xiàn)在一處理器上的多線程操作。本發(fā)明并不止限于任何特定的處理器架構(gòu)與指令集,而為了例示的目的,公知的MIPS技術(shù)、指令集和處理器技術(shù)(總言之,為“MIPS技術(shù)”)被參考。并且加上本發(fā)明所詳細描述的實施例也可歸類為MIPS技術(shù)。更多有關(guān)MIPS技術(shù)的信息(包括以下所參照到的文件)可以從MIPS科技公司(MIPS ttechnology,Inc.)(位于Mountain View,California)取得,而其網(wǎng)站位于www.mips.com(公司網(wǎng)站)。
在此所示用的術(shù)語“處理器”與“數(shù)字處理器”其意義包含任何可程序化的裝置(舉例來說,微處理器、微控制器、數(shù)字信號處理器、中央處理單元、處理器核心等等),包含在硬件方面(例如,特殊應(yīng)用硅芯片、可程序編輯門陣列(FPGA)等等),在軟件方面(例如,硬件描述語言、C語言、C+語言等等)或任何其組成(或其組合)。
在此所示用的術(shù)語“線程”與“程序線程”在本文中代表相同的意義。一線程是一序列的計算機指令以及與這些指令的執(zhí)行相關(guān)聯(lián)的處理器狀態(tài)改變的相關(guān)序列。該指令的序列通常但非必要包含一或多個程序控制指令(如一分支指令)。因此,這些指令可能具有或可能不具有連續(xù)性的存儲器地址。該指令的序列是出自一單一程序。
概要描述在本發(fā)明的實施例中,為了描述的目的,“線程上下文”基本上是指為了描述在一處理器中的一指令串流執(zhí)行的狀態(tài)所需的一處理器狀態(tài)的集合。所謂的狀態(tài)基本上反映了處理器寄存器的內(nèi)容。舉例來說,在一個與工業(yè)規(guī)格MIPS32且/或MIPS64指令集架構(gòu)兼容的處理器(一“MIPS處理器”),線程上下文是由通用寄存器(GPRs)、高低(Hi/Lo)乘法器結(jié)果寄存器、一程序計數(shù)器(PC)的一些表示與一些相關(guān)的專屬系統(tǒng)控制狀態(tài)的寄存器組成。系統(tǒng)控制狀態(tài)被保存于MIPS處理器中通常稱為共處理器零(“CP0”)的部份,并且大部分是被系統(tǒng)控制寄存器與(當(dāng)被使用時)轉(zhuǎn)換后備緩沖器(Translation Lookaside Buffer,“TLB”)所維護。相反的,“處理器上下文”是一個更大的處理器狀態(tài)集合,其包含至少一個線程上下文。再參照之前提到的MIPS處理器,此情況下的一個處理器上下文包含至少一個線程上下文(如前述)、以及CP0和描述公知的MIPS32或MIPS64專屬資源架構(gòu)(“PRA”)所需的系統(tǒng)狀態(tài)。(簡單的說,PRA是一有關(guān)環(huán)境與能力的集合,而一個指令集架構(gòu)而根據(jù)此集合進行工作。該PRA提供操作系統(tǒng)管理處理器的各資源所需要的機制,例如,虛擬存儲器、高速緩存、異常與使用者上下文)。
根據(jù)本發(fā)明的一實施例,到一指令集架構(gòu)與PRA的一多線程特殊應(yīng)用擴充(“Multithreading ASE”)允許在一給定處理器中具有兩個不同,但并不一定互相排斥的多線程能力。首先,一個單一處理器可以包含一定數(shù)目的處理器上下文,而每個皆可通過共享處理器中的某些資源以及支持一指令集架構(gòu),而作為一獨立的處理元件進行工作。這些獨立的處理元件在此是指虛擬處理元件(“VPEs”)。對軟件而言,一個N VPE處理器看起來很像N個路徑對稱的多處理器(“SMP”)。這允許了現(xiàn)存的具SMP功能的操作系統(tǒng)可以管理VPE集合,該VPE集合顯然共享處理器的執(zhí)行單元。
圖3用一單一處理器301描述了該能力,該處理器301支持一第一VPE(“VPE0”),其包含寄存器狀態(tài)零302與系統(tǒng)共處理器狀態(tài)零304。處理器301也支持一第二VPE(“VPE1),而其包含寄存器狀態(tài)一306與系統(tǒng)共處理器狀態(tài)一308。被VPE0與VPE1所共享的處理器301的那些部份包括提取、解碼與執(zhí)行流水線,及高速緩存310??膳cSMP兼容的操作系統(tǒng)320被示出在該處理器301上運行,并支持VPE0與VPE1。軟件進程A 322與進程C 326被示出分別運行于VPE0與VPE1上,如同它們在兩個不同的處理器上運行。進程B 324被排隊,而可以在VPE0或VPE1上運行。
第二個被多線程ASE所允許的能力為每個處理器或VPE可以在基本的架構(gòu)所需的單一線程上下文外,再含有某些數(shù)目的線程上下文。多線程VPEs需要明確的操作系統(tǒng)支持,并且通過該支持,它們提供一個簡易、細質(zhì)多線程程序化模型,其中在典型情況下線程被產(chǎn)生與消滅,而沒有操作系統(tǒng)干預(yù),并且其中響應(yīng)外部的狀況(例如,事件等等),系統(tǒng)服務(wù)線程可被排定,具有零中斷等待時間。
圖4使用處理器401描述這第二個能力,該處理器401支持單一VPE,該VPE包含寄存器狀態(tài)402、404與406(支持三個線程422)與系統(tǒng)共處理器狀態(tài)408。與圖3不同的是,在這個例子中三個線程是在位于單一VPE上的單一應(yīng)用地址空間,該地址空間共享CP0資源(以及硬件資源)。另外,圖4也描述了一專用多線程操作系統(tǒng)420。在此例中,多線程VPE正在處理來自一個寬頻網(wǎng)絡(luò)450的數(shù)據(jù)包,而此數(shù)據(jù)包負載分布于整組的先進先出緩沖器(FIFO)452(在多線程VPE的輸入/輸出存儲器空間中,各FIFO有不同的地址)??刂茟?yīng)用程序產(chǎn)生了足夠多的線程,當(dāng)上FIFO進行服務(wù)時,且放置每一線程在讀取FIFO的緊密循環(huán)中。
一個線程上下文可以是四種狀態(tài)之一。其可以是空閑(free)、激活(activated)、停止(halted)或線連(wired)。一個空閑的線程上下文不具有有效的上下文,且不能被調(diào)度為發(fā)出指令。一個激活的線程上下文可以根據(jù)實施的策略來調(diào)度,而從程序計數(shù)器提取與發(fā)出指令。一個停止的線程上下文可以具有有效的上下文,但被禁止提取與發(fā)出的指令。一個線連的線程上下文已被指定用作為陰影寄存器(ShadowRegister)儲存器,也就是說是被保留用于一異常處理程序的互斥使用,以避免儲存與恢復(fù)處理程序中的寄存器上下文的開銷。一個空閑的線程上下文不可以是激活、停止或線連的。只有激活的線程上下文可以被調(diào)度。只有空閑的線程上下文可以被分配以產(chǎn)生新的線程。
為了允許協(xié)同線程的細質(zhì)同步,一個線程間通信(“ITC”)的存儲空間會產(chǎn)生于虛擬存儲器中,并且有空的(empty)/滿的(full)位語義,允許線程在加載或儲存時被阻擋,直到其它線程產(chǎn)生或消耗數(shù)據(jù)。
在一般情況下,線程產(chǎn)生/消滅,與同步能力功能沒有操作系統(tǒng)干預(yù),但是他們所操控的資源可經(jīng)操作系統(tǒng)是全部虛擬化。這允許具有比在一VPE上的線程上下文有更多的虛擬線程的多線程程序的執(zhí)行,并允許線程的移動以平衡多處理器系統(tǒng)中的負載。
以其執(zhí)行中的任何特定點,一個線程是附著在一個特定VPE上的特定線程上下文。VPE的線程上下文集的標(biāo)記在該點的發(fā)生時間提供了一個唯一的標(biāo)識符。但是上下文的切換與移動能夠使單一序列的線程的執(zhí)行以有一系列的不同的線程標(biāo)記,例如是在一系列不同的VPE。
在一特殊處理器的重置配置狀態(tài)中,線程上下文、TLB項目及其它資源動態(tài)地與在同一處理器上的數(shù)個VPE結(jié)合。每一個VPE項目如同其在一個不相同的處理器般準(zhǔn)確地輸入其重置向量。
多線程的執(zhí)行與導(dǎo)常模型多線程ASE并沒有對平行線程與VPE的執(zhí)行強加任何特殊的實現(xiàn)方式或調(diào)度的模型。調(diào)度可以是循環(huán)式的、時間分隔至任一粒度、或同時的。然而,實現(xiàn)方式必須不允許一個阻擋線程去獨占任何共享的處理器資源,而使得硬件運行陷入僵局。
在一MIPS處理器中,在一單一VPE上的多個線程執(zhí)行皆共享同一系統(tǒng)共處理器(CP0),同一TLB與同一虛擬地址空間。每一個線程有一個獨立的核心/管理者/使用者狀態(tài),用于指令解碼和存儲器存取。當(dāng)一個異常發(fā)生時,除了執(zhí)行該異常之外,所有的線程都被停止或暫停,直到狀態(tài)字的EXL與ERL位被清除?;蛘撸贓JTAG Debug(除錯)異常的情形下,該Debug狀態(tài)被退出。該狀態(tài)字置于位于CP0中的狀態(tài)寄存器中。有關(guān)該EXL與ERL位還有EJTAG除錯異常的細節(jié)可以從下列的兩個出版物獲得,該兩出版物可以從MIPS科技公司取得,并被結(jié)合在此作為參考MIPS32TMArchitecture for Programmers Volumn IIIThe MIPS32TMPrivileged Resource Architecture,Rev.2.00,MIPS科技公司(2003)與MIPS64TMArchitecture for Programmers Volume IIIThe MIPS64TMPrivileged Resource Architecture,Rev.2.00,MIPS科技公司(2003)。因為執(zhí)行一個指令串流而引起的同步異常的異常處理程序,例如TLB遺失與浮點異常,都是由討論中的執(zhí)行該指令串流的該線程所執(zhí)行。當(dāng)一個未被屏蔽的異步異常,例如一個中斷,被提升至一個VPE時,它的實行即與哪個線程執(zhí)行了該異常處理程序相關(guān)。
每一個異常都與一個線程上下文有關(guān),即使陰影寄存器集合被使用來運行異常處理程序。這個相關(guān)的線程上下文是被異常處理程序執(zhí)行的RDPGPR與WRPGPR指令的目標(biāo)。有關(guān)RDPGPR與WRPGPR指令(用來獲取陰影寄存器)的細節(jié),皆可以從MIPS科技公司取得的兩出版物中獲得,該兩出版物被結(jié)合在此作為參考MIPS32TMArchitecture forProgrammers Volume IIThe MIPS32TMInstruction Set,Rev.2.00,MIPS科技公司(2003)與MIPS64TMArchitecture for Programmers VolumnIIIThe MIPS64TMInstruction Set,Rev.2.00,MIPS科技公司(2003)。
該多線程ASE包含了兩個異常狀況。第一個即是一線程未取得狀況,其中一個線程分配要求不能被滿足的。第二個為線程下溢狀況,其中一個線程的終止與解除分配沒有留下在一VPE上分配的線索。這兩種異常狀況都被映像至一單個新的線程異常。當(dāng)該異常發(fā)生時,他們可以根據(jù)CPO寄存器位而被區(qū)分。
指令在一實施例中,多線程ASE包含七個指令。FORK與YIELD指令控制線程分配、解除分配與調(diào)度,如果被實現(xiàn)與啟動的話,在全部的執(zhí)行模式中可獲得。MFTR與MTTR指令是系統(tǒng)共處理器(Cop0)指令,可用于管理線程狀態(tài)的特許系統(tǒng)軟件。一個新的EMT指令與一個新的DMT指令是特許Cop0指令,用來啟動與禁止一個VPE的多線程操作。最后,一個ECONF指令是特許的Cop0指令,以退出一個特殊處理器配置狀態(tài)與重新初始化該處理器。
FORK(派生)-分配與調(diào)度一個新的線程FORK指令可以使一個空閑線程上下文被分配與啟動。它的格式500如圖5所示。FORK指令從字段中標(biāo)識的GPRs取兩個操作值502(rs)與504(rt)。GPR rs的內(nèi)容被用作為新線程的開始提取與執(zhí)行地址。GPRrt的內(nèi)容是一個待被傳送至該新線程的GPR中的值。通過CPO的ThreadConfig寄存器的FORKTarget字段的值確定目的地GPR,其被示于圖21中,并于稍后會加以描述。新線程的核心/管理者/使用者狀態(tài)是被設(shè)定于FORK處理的線程中的狀態(tài)如果沒有空閑線程上下文可供該FORK指令使用,則會為此FORK指令產(chǎn)生一個線程異常。
YIELD(產(chǎn)出)-取消調(diào)度與有條件的解除分配(deallocation )一線程(第一實施例)YIELD指令使得當(dāng)前的線程被選擇性地取消調(diào)度。在一第一實施例中,一YIELD指令600的格式如圖6所示,而圖32中的流程圖3200描述了根據(jù)本發(fā)明的一個實施例的系統(tǒng)操作,使用圖6的YIELD指令的功能。YIELD指令3500的一第二實施例以下參照圖35至圖40進行描述。
舉例而言,YIELD指令600在字段602(rs)中標(biāo)識的GPR中取一單個操作值。在一實施例中使用了一個GPR,但是在替換性實施例中,其操作值可以從實質(zhì)上任何可由系統(tǒng)訪問的數(shù)據(jù)儲存裝置(例如,非GPR寄存器、存儲器等等)被儲存或取得。在一實施例中,GPR rs的內(nèi)容可以被認為是發(fā)出線程應(yīng)被重新調(diào)度的情況的描述符。如果該GPR rs的內(nèi)容是零(即該操作數(shù)的值為零),如圖32的步驟3202所示,則該線程并不會被重新調(diào)度,而是會被解除分配(即終止或永久地停止更進一步的執(zhí)行),如同步驟3204所示,還有與其相關(guān)的線程上下文儲存(即上述標(biāo)識出保存狀態(tài)的寄存器)通過一些其它線程所發(fā)布的隨后的FORK指令被空閑出來用于分配。如果該GPR rs的最低有效位被設(shè)定(即,rs0=1),則該線程馬上會被重新調(diào)度,如圖32的步驟3206所示,并且如果沒有其它可被執(zhí)行的線程被優(yōu)先取得,則即刻繼續(xù)執(zhí)行。在此一實施例中,該GPR rs的內(nèi)容是被視為十五位限定屏蔽,其描述在圖7的表格700中(即編碼許多狀況的一位向量)。
請參照表格700,GPR rs的位15至位10指示了呈現(xiàn)給處理器的硬件中斷信號,位9至位8指示了處理器所產(chǎn)生的軟件中斷信號,位7至位6指示了MIPS架構(gòu)中Load Linked(負載連接)與Store Conditional(存儲狀況)同步運算基元,還有位5至位2指示了呈現(xiàn)給處理器的非中斷外部信號。
假設(shè)GPR rs的內(nèi)容是偶數(shù)的(even)(即位0未被設(shè)定),且GPR rs的限定屏蔽中任何其他位被設(shè)定(步驟3208),則該線程即會被暫停,直到滿足至少一對應(yīng)的狀態(tài)。如果且當(dāng)此情形發(fā)生時,該線程即會被重新調(diào)度(步驟3210),并且重新開始執(zhí)行YIELD指令600之后的指令。這個啟動并不會受CP0.Status.IMn中斷屏蔽位的影響,因此至多有被位15至10與位5至2(如圖7所示)編碼的十種外部狀況(例如,事件等等)與四個被位9至6編碼的軟件狀況(如圖7所示),在目前的實施例當(dāng)中被用來啟動獨立的線程以響應(yīng)外部信號,而在處理器不需去引起一個異常。在這個特別的例子中,有六個硬件中斷與四個非中斷信號,再加上兩個軟件中斷與兩個非中斷信號,及專用于總共十五種的狀況的單個專用重新調(diào)度功能(即rs0)。(該CP0.Status.iMn中斷屏蔽位是在CP0狀態(tài)寄存器中的一個八位的集合,其可被選擇性地屏蔽八個到MIPS處理器的中斷輸入。如果一個IM位被設(shè)定,則相關(guān)聯(lián)的中斷輸入就不會引起斷言時的處理器的異常事件。)在EIC的中斷模式中,IP2至IP7位編碼最高優(yōu)先權(quán)啟動的中斷,而不是表示了一個正交指示的向量。當(dāng)處理器正在使用EIC中斷模式時,在一個YIELD指令600中,與位IP2至IP7相關(guān)的GPR rs的位因此不再被使用以在一個特殊的外部事件上去重新啟動線程調(diào)度。在EIC模式中,只有與系統(tǒng)相關(guān)連的外部事件指示(即,在本實施例中的GPR rs的位5至2)可以被使用為YIELD的限定器。EIC的中斷模式與IP2至IP7位已被更進一步的描述于下列的出版物,它們再上文中已被指出并結(jié)合進來MIPS32TMArchitecture for Programmers Volume IIITheMIPS32TMPrivileged Resource Architecture,與MIPS64TMArchitecturefor Programmers Volume IIIThe MIPS64TMPrivileged ResourceArchitecture。
如果YIELD 600d1執(zhí)行導(dǎo)致處理器或VPE上最后分配的線程的解除分配,具有一個在CP0的ThreadStatus寄存器中的下溢指示的線程異常(示出在圖18中且在稍后會加以說明)就會在YIELD指令600上產(chǎn)生。
上述的實施例使用了YIELD指令600中GPR rs所包含的操作數(shù)作為線程調(diào)度的參數(shù)。在該情況中,這個參數(shù)被視作為正交指示的15位向量(參照圖7,位1與15被保留因此在此實施例中只有15個編碼的狀況)。此實施例也將此參數(shù)視為一個規(guī)定的值(即,去決定是否一個給定的線程應(yīng)該被解除分配,參閱圖32的步驟3202)。然而,此參數(shù)的特性可以被改變,以適合該指令的各種不同實施例。例如,不同于只依賴最小有效位(即rs0)去決定是否一個線程可立即地重調(diào)度,該參數(shù)本身的值(例如,兩個補碼格式中的負1{-1}的值)可以被使用來決定一個線程是不是應(yīng)該被重調(diào)度,而無須附加的等待時間(即重新排隊用于調(diào)度)。
在該指令其他的實施例中可以視該線程調(diào)度參數(shù)為包含一個或多個多位值的字段,使得一個線程可以指定它將在出自一個大的(例如32位或更大)事件名稱空間的單個事件上產(chǎn)生。在這樣的實施例中,至少與一目標(biāo)事件有關(guān)的位可以通過對象YIELD指令600所訪問。當(dāng)然,更多的位字段都可被傳送至該指令(與更多的事件相關(guān))而成為另一期望的特定實施例。
還有更多的YIELD指令600的實施例可包括有該指令訪問的線程調(diào)度參數(shù)內(nèi)的值字段與前述位量的組合值字段的組合或其他應(yīng)用特定的變更與加強,以(例如)滿足特定的實現(xiàn)需求。YIELD指令600的替換性實施例可以用任何已知的方法訪問如前述的一個線程調(diào)度參數(shù),例如從一個GPR(如圖6所示)或從任意其它的數(shù)據(jù)儲存裝置(包含存儲器)且作為該指令本身中的立即值。
MFTR-自線程寄存器移動MFTR指令是一個特許的(Cop0)指令,可允許一個執(zhí)行一線程的操作系統(tǒng)訪問一個不同的線程上下文。其格式800被示于圖8。
待被訪問的線程的上下文是通過CPO的ThreadControl寄存器的AlternateThread字段的值被確定的,其顯示于圖16并且會在稍后描述。在選定的線程上下文中待被讀取的寄存器是通過字段802中標(biāo)識的rt操作數(shù)寄存器的值,還有各自位于字段804與806中的MFTR指令的u與sel位被確定,并且依據(jù)在圖9所顯示的表格900被解釋。結(jié)果值被寫入于目標(biāo)寄存器rd中,在字段808中被標(biāo)識。
MTTR-移動到線程寄存器MTTR指令與MFTR指令相反。其為一特許Cop0指令,其將一寄存器的值從目前線程的線程上下文復(fù)制至另一線程上下文中的一個寄存器。其格式1000顯示于圖10。
待被訪問的線程的上下文是通過CP0的ThreadControl寄存器的AlternateThread字段的值被確定的,其顯示于圖16并且會在稍后描述。在選定的線程上下文中待被寫的該寄存器通過字段1002標(biāo)識的rd操作數(shù)寄存器中的值,還有各自字段1004與1006中的MTTR指令的u與sel位被確定,并且依據(jù)在圖11所顯示的表格1100被解釋(其編碼與MFTR相同)。字段1008中標(biāo)識的的寄存器rt中的值被復(fù)制于選定寄存器。
EMT-啟動多線程EMT指令為一特許的Cop0指令,其通過設(shè)定CPO的ThreadControl(線程控制)寄存器的TE位來啟動多線程的同時執(zhí)行,其顯示于圖16并且會在稍后描述。其格式1200顯示于圖12。包含在該EMT執(zhí)行之前的該被啟動的線程(TE)位值的該ThreadControl寄存器的值會被傳回寄存器rt。
DMT-禁止多線程DMT指令為一特許的Cop0指令,其通過清除CPO的ThreadControl寄存器的TE位來禁止多線程的同時執(zhí)行,其顯示于圖16并且會在稍后描述。其格式1300顯示于圖13。
除了發(fā)出該DMT指令的線程之外的所有的線程都被禁止進一步指令獲取與執(zhí)行。這與每線程(per-thread)暫停狀態(tài)無關(guān)。包含該DMT執(zhí)行的該被啟動的線程(TE)位值的該ThreadControl寄存器的值會被傳回寄存器rt。
ECONF-結(jié)束處理器配置ECONF指令為一特許的Cop0指令,其傳送VPE配置結(jié)束的信號并啟動多VPE的執(zhí)行。其格式1400顯示于圖14。
當(dāng)執(zhí)行一個ECONF指令時,該Config3寄存器的VPC位(稍后描述)即被清除,同一寄存器的MVP位在其當(dāng)前值變成只讀,且處理器的所有VPE,包含一個正在執(zhí)行ECNOF的VPE,皆獲得一個Reset(重置)的異常。ECONF指令并不包含在Multithreading ASE(多線程ASE)的圖35-40的替換性實施例中。
特許的資源圖15的表格1500列出了與多線程ASE相關(guān)的系統(tǒng)共處理器特許的資源。除了指示的外,以下標(biāo)識的新的或是變更過的共處理器零(Coprocessor0,CP0)象常規(guī)的共處理器零(即在MIPS處理器)的系統(tǒng)控制寄存器一樣是可存取的(即寫入與讀出)。
新的特許的資源(A)ThreadControl(線程控制)寄存器(Coprocessor0 Register7,Select1)該ThreadControl寄存器是在每個VPE中被例示為系統(tǒng)共處理器的一個部分。其布局1600顯示于圖16。該ThreadControl寄存器字段可根據(jù)圖17的表格1700來定義。
(B)ThreadStatus(線程狀態(tài))寄存器(Coprocessor0 Register12,Select4)該ThreadStatus寄存器在每個線程上下文被例示。每一個線程皆有ThreadStatus其自己的備份,并且特許的代碼可以經(jīng)過MFTR與MTTR的指令來訪問其它線程的ThreadStatus。其布局1800顯示于圖18。該ThreadStatus寄存器字段在圖19的表格1900中被定義。
將一個1寫至一個激活的線程的Halted(停止)位,會使得該激活的線程停止提取指令,并且設(shè)定其內(nèi)部的重新開始PC到下一個發(fā)出的指令。將一個0寫至一個激活的線程的Halted(停止)位,會使得該線程被調(diào)度從內(nèi)部重新開始PC地址讀取并執(zhí)行。在未被激活的線程的激活位或是停止位任一中的1防止該線程通過一個FORK指令被分配和激活。
(C)ThreadContext(線程上下文)寄存器(Coprocessor0 Register4,Select1)該ThreadContext寄存器2000在每個線程上下文被例示,并且如圖20所示,具有與處理器GPR是相同的寬度。這純粹是一個軟件讀/寫寄存器,可被操作系統(tǒng)用作為線程特定的存儲器,例如一個線程上下文保存區(qū)域的指針。
(D)ThreadConfig(線程配置)寄存器(Coprocessor0 Register6,Select1)該ThreadConfig寄存器在每個處理器或VPE被例示。其布局2100顯示于圖21。該寄存器ThreadConfig的字段在圖22的表格2200中被定義。
寄存器ThreadConfig的字段WiredThread允許在一個VPE上可用的線程上下文集合在陰影寄存器集合與平行執(zhí)行線程之間被劃分。線程帶有少于該WireThread寄存器值的索引的線程上下文可利用作為陰影寄存器集合。
(E)ThreadSchedule(線程線程)寄存器(Coprocessor0 Register6,Select2)寄存器ThreadSchedule是任選的,但是當(dāng)被實現(xiàn)時,是在每個線程被實現(xiàn)的。其布局2300顯示于圖23。調(diào)度向量(如圖示,在一實施例中為32位寬)為一個為相關(guān)線程的所要求的發(fā)布帶寬調(diào)度的描述。在此實施例中,每一個位代表了該處理器或VPE的發(fā)布帶寬的1/32,并且每一個位位置代表了在一32區(qū)間調(diào)度周期中的一相異區(qū)間。
如果在一線程的ThreadSchedule寄存器中的一位被設(shè)定,那么該線程即被保證在相關(guān)的處理器或VPE上可能的,每32個可能連續(xù)發(fā)出的一相對應(yīng)發(fā)出區(qū)間的可用性。當(dāng)在相同處理器或VPE上的其它某些線程具有一樣的ThreadSchedule位集合時,在線程的ThreadSchedule寄存器的一位寫入一個1,會產(chǎn)生一個線程異常。雖然在一實施例中,寄存器ThreadSchedule的寬為32位,在用于其它的實施例中,仍然有其它的寬度可以取代(例如增大寬度或是減少寬度)。
(F)VPESchedule(VPE調(diào)度)寄存器(Coprocessor0 Register6,Select3)寄存器VPESchedule是任選的,且在每個VPE被例示。它只有當(dāng)寄存器Config3的MVP位被設(shè)定時,才是可寫的(請參見圖29)。其格式2400顯示于圖24。
調(diào)度向量(如圖示,在一實施例中其寬度為32位)為一個用于相關(guān)VPE的所要求的發(fā)出帶寬調(diào)度的描述。在此實施例中,每一個位代表了一多VPE處理器的發(fā)出總帶寬的1/32,并且每一個位位置代表了一個32個區(qū)間調(diào)度周期中的一相異區(qū)間。
如果VPE的VPESchedule寄存器中的一位被設(shè)定,那么該線程即保證了在該處理器上可能每32個可能連續(xù)發(fā)出的一對應(yīng)發(fā)出區(qū)間的可用性。當(dāng)某些其它的VPE具有一樣的VPESchedule寄存器位集合時,在VPE的VPESchedule寄存器中的一位寫入一個1,會產(chǎn)生一個線程異常。
依據(jù)處理器目前缺省線程調(diào)度策略(例如循環(huán)式等),未被任何的線程特別排定的發(fā)出區(qū)間可自由地被分配給任何可運行的VPE/線程。
寄存器VPESchedule與ThreadSchedule創(chuàng)建了一個發(fā)布帶寬分配的架構(gòu)。寄存器VPESchedule寄存器的集合指定了對于VPE的帶寬為在一個處理器或核心的全部可取得的一部份,同時寄存器ThreadSchedule指定對于線程的帶寬為一個包含這些線程的VPE可取得的一部份。
雖然在一實施例中,寄存器VPESchedule的寬為32位,但在其它的實施例中被使用時,可嘗試改變該寬度(例如增大或是減小)。
(G)Config4寄存器(Coprocessor0 Register16,Select4)寄存器Config4是對于每一個處理器被例示的。其包含了對于動態(tài)多VPE處理器配置所需的配置信息。如果處理器并不處于一個VPE配置狀態(tài)(即該寄存器Config3的VMC位被設(shè)定),則除了M(連續(xù))字段的所有字段值與實施有關(guān),且可能不可預(yù)測的。其布局2500描述于圖25。寄存器Config4字段被定義為如圖26的表格2600中所示。在某些實施例中,有用于Config3寄存器的位VMC,其可以是一個被事先保留/未指定的位。
現(xiàn)有特許資源架構(gòu)的變更該多線程ASE修改了當(dāng)前MIPS32與MIPS64 PRA的某些元件。
(A)狀態(tài)寄存器(Status Register)狀態(tài)寄存器的CU位在多線程配置中具有一些額外的意義。設(shè)定CU位的動作將一個共處理器上下文與和該CU位有關(guān)的線程結(jié)合的請求。如果一個共處理器上下文可用,則它就會與該線程結(jié)合,使該線程所發(fā)出的指令能傳向共處理器,并且該CU位會保留寫入該位的1值。如果沒有一個共處理器上下文可用,該CU位讀回為0。寫入一個0至一設(shè)定的CU位,會導(dǎo)致任何相關(guān)的共處理器被解除分配。
(B)原因寄存器(Cause Register)有一個被要求用于線程異常的新的原因寄存器ExcCode值,如圖27所示。
(C)低進入寄存器(EntryLo Register)一個先前被保留的高速緩存屬性變成該ITC指示符,如圖28所示。
(D)配置3寄存器(Config3 Register)有新的Config3寄存器的字段被定義表示多線程ASE與多個線程上下文的可用性,如圖29的表格2900所示。
(E)E基準(zhǔn)(Ebase)Ebase寄存器的先前保留的位30變成在每個VPE上下文的一個VPE的禁止位,如圖30所示。
(F)SRSCtl先前預(yù)設(shè)的HSS字段現(xiàn)在生成為該ThreadConfig WiredThread字段的一個功能(function)。
沒有FORK的線程分配與初始化在一實施例中,一個操作系統(tǒng)產(chǎn)生一個線程“by hand(用手)”的程序如下1、執(zhí)行一個DMT,以停止其它線程的執(zhí)行或是可能的FORK指令執(zhí)行。
2、通過設(shè)定ThreadControl(線程控制)寄存器的AlternateThread(替換線程)字段至連續(xù)值,,并且用MFTR指令來讀取寄存器ThreadStatus來標(biāo)識一可用的Thread Context(線程上下文)。一個空閑韻線程沒有其ThreadStatus(線程狀態(tài))寄存器的Halted(停止)或Activated(激活)位。
3、設(shè)定該選定線程的ThreadStatus(線程狀態(tài))寄存器的Halted(停止)位,以避免其被其它線程配置。
4、執(zhí)行一個EMT指令去重新啟動多線程。
5、使用MTTR指令并使其字段u設(shè)至1,以復(fù)制任何期望的GPR進入選定的線程上下文。
6、使用MTTR指令并使其字段u與字段sel設(shè)為0及rt字段設(shè)為14(EPC),以將期望的開始執(zhí)行地址寫入線程內(nèi)部重開始地址寄存器中。
7、使用MTTR指令而將Halted位為零和Activated位為1的值寫至選定的寄存器ThreadStatus寄存器。
該新分配的線程然后可被調(diào)度。如果EXL或ERL在程序期間被設(shè)定,可以跳過那些執(zhí)行DMT、設(shè)定新線程的Halted位與執(zhí)行EMT的步驟,如同他們隱含地禁止多線程的執(zhí)行。
沒有YIELD的線程終止與解除分配在本發(fā)明的一實施例中,一個操作系統(tǒng)用來終止當(dāng)前的線程的程序為1、如果操作系統(tǒng)不支持一個線程下溢狀態(tài)下的一個線程異常,則使用指令MFTR來掃描該組ThreadStatus寄存器,以驗證在處理器上有另一個可運行的線程,相反,如果沒有,就對該程序發(fā)出錯誤的信號。
2、寫入任何重要的GPR寄存器值至存儲器。
3、設(shè)定寄存器Status/ThreadStatus(狀態(tài)/線程狀態(tài))中的核心模式。
4、當(dāng)目前的線程維持在一個特許狀態(tài)時,清除EXL/ERL以允許其它線程被調(diào)度。
5、使用一個標(biāo)準(zhǔn)的MTC0指令來將Halted與Activated位為零的值寫入ThreadStatus寄存器。
該正常的程序用于一線索以這種方式終止其自己。在一個特許模式中運行的一個線程也可以使用MTTR指令來終止另一個線程,只不過,會有一個額外的問題產(chǎn)生,操作系統(tǒng)需要決定那個線程上下文應(yīng)被解除分配和在那個時間點該線程的計算的狀態(tài)是穩(wěn)定的。
線程間的通訊儲存(Ihter-Thread Communication Storage)線程間的通訊(ITC)儲存是一個任選的能力,其可以提供用于細質(zhì)多線程的Load-Linked/Storage-Conditional(加載-連接/存儲-狀況)。這個ITC對于指令集架構(gòu)是不可見的,因其通過加載與儲存而被操作,但是對于特許資源架構(gòu)是可見的,且它需要明顯微架構(gòu)支持。
參照虛擬存儲器頁,其TLB項目被標(biāo)記為對一個有特殊屬性的儲存的ITC儲存解決。每一個頁面映像一組1-128的64位存儲位置,其中每一個位置都有一個與其相關(guān)的狀態(tài)Empty/Full(空/滿)位,并且可以使用標(biāo)準(zhǔn)加載與儲存指令,以四種方法之一比訪問。該訪問模式是被編碼在該產(chǎn)生的虛擬地址的最小有效(且未被轉(zhuǎn)換)位種,如圖31的表格3100所示。
每一個儲存位置可以用C語言的結(jié)構(gòu)來描述struct{unit64 ef_sync_location;unit64 force_ef_location;unit64 bypass_location;unit64 ef_state;}ITC_location;其中,全部四個位置都參照下面存儲的同樣64位。同樣的Empty/Full協(xié)議在每一訪問的基礎(chǔ)上被強加,對該儲存的參考可有少于64位的訪問類型(例如,LW,LH,LB)。
Empty(空)與Full(滿)位是不相同的,因此去耦合的多項目數(shù)據(jù)緩沖器,例如FIFO,可以被映像至ITC存儲器中。
ITC存儲器可通過從/至通用存儲器復(fù)制{bypass_location,ef_state}而被,或者可以用復(fù)保留和恢復(fù)。嚴(yán)格地說,當(dāng)64位的bypass_location必須被保留時,只有ef_state的最小有效位需被操作。在多項數(shù)據(jù)緩沖器的情況下,必須讀取每一個位置,直到Empty基于備份把所有的緩沖器都讀出。
每4K頁的位置數(shù)目與每一個VPE的ITC頁的數(shù)目都是VPE或處理器的配置參數(shù)。
ITC儲存的“物理地址空間”可全局跨越多處理器系統(tǒng)中的所有的VPE與處理器,以使一個線程便可以自一個其在上執(zhí)行的VPE同步到另一個不同的VPE的位置上。全局ITC儲存地址可以從每一個VPE的EBase寄存器的CPUNum字段導(dǎo)出。該CPUNum的10個位對應(yīng)到另外ITC儲存地址的10個有效位。為單處理器的應(yīng)用所設(shè)計的處理器或核心不需要輸出一個物理接口至ITC儲存,并且可以將其視為一個處理器內(nèi)部的資源。
VPE處理器一個核心或處理器可以實現(xiàn)多個共享資源的VPE,如同是功能性單元。每一個VPE都可以看到自己的MIPS32與MIPS64的例示和特許資源架構(gòu)。每一個都可以看到自己的寄存器文件或線程上下文陣列,并且也可看到自己的CP0系統(tǒng)共處理器和自己的TLB狀態(tài)。對于來自2-CPU高速緩存相干SMP多處理器的軟件而言,在同一個處理器上的兩個VPE是無法分辨的。
在處理器上的每一個VPE都可以看到CPO的寄存器Ebase的CPUNum字段中的一個不同值。
處理器架構(gòu)性資源,例如線程上下文和TLB儲存及共處理器,可以在硬件配置中與VPE結(jié)合,或者在一個支持所需配置能力的處理器中被動態(tài)地配置。
重置與虛擬處理器配置為了能夠反向與MIPS32與MIPS64 PRA兼容,一個可配置的多線程/多VPE處理器具有在重置時相同的缺省線程/VPE設(shè)定一樣。一般的情形下都是如此,但是對于一個有單一線程上下文的單一VPE卻不一定必須是要如此做。該寄存器Config3的位MVP可以在重置時被取樣,以決定動態(tài)的VPE配置是否是可能的。如果這項能力被忽略,如通過傳統(tǒng)軟件,該處理器將表現(xiàn)為用于缺省配置的每個說明書。
如果該MVP位被設(shè)定,則寄存器Config3的虛擬處理器配置VPC(虛擬處理器配置)位就可以被軟件設(shè)定。這可以使得處理器進入一個配置狀態(tài),也就是寄存器Config4的內(nèi)容可以被讀出,以決定可用的VPE上下文、線程上下文、TLB項目和共處理器的數(shù)目,和變?yōu)榭蓪懙呐渲眉拇嫫鞯闹蛔x“預(yù)設(shè)”字段。有一些限定可以被強加于配置狀態(tài)指令串流,例如它們可以被禁止使用高速緩存或是TLB映射的存儲器地址。
在配置狀態(tài)中,可配置的VPE的全部數(shù)目都被編碼于該寄存器Config4的字段PVPE中。通過將其索引寫入寄存器EBase的CPUNum字段,每一個VPE都可被選擇。對于被選擇的VPE,下列的寄存器字段都可通過寫至它們而可能地被設(shè)定。
·Config1.MMU_Size·Config1.FP·Config1.MX·Config1.C2·Config3.Nthreads
·Config3.NITC_Pages·Config3.NITC_Plocs·Config3.MVP·VPESchedule并不是所有上述所提到的配置參數(shù)都需要是可配置的。舉例來說,每一個頁的ITC位置的數(shù)目可以是固定的,即使該每一個VPE的ITC頁是可配置的,或是它們兩個參數(shù)都可以被固定,浮點運算單元(FPU)皆可以對于每個VPE被預(yù)先分配及硬連線。
共處理器作為離散單元被分配至VPE。該共處理器可被多線程化的程度應(yīng)經(jīng)由共處理器特定的控制與狀態(tài)寄存器被指示或被控制。
通過清除該寄存器EBase的VPI禁止位,一個VPE可以被啟動而用于配置后的執(zhí)行。
通過發(fā)出一個ECONF指令,該配置狀態(tài)被退出。這個指令可以使得所有不被禁止的VPE取得一個重置異常,并且開始同時執(zhí)行。如果寄存器Config3的MVP位在配置期間被清除,而且通過一個ECONF指令被鎖存至零,則該VPC位就不再被設(shè)定,而且該處理器配置就會被有效的凍結(jié),直到下一個處理器重置。如果MVP保持設(shè)定,通過再次設(shè)定該VPC位,可以使一個操作系統(tǒng)再次進入該配置模式。對于重新進入配置模式的一運行VPE的結(jié)果可能是不可預(yù)測的。
多線程處理器的服務(wù)品質(zhì)調(diào)度到目前為止的說明,是描述一個MIPS兼容系統(tǒng)的應(yīng)用特定擴充,以實現(xiàn)多線程。如前面所述,所述的MIPS實現(xiàn)是示例性的,并不是限制性的。所描述的功能與機制可以應(yīng)用于除MIPS系統(tǒng)之外的其他方面。
有關(guān)寄存器ThreadSchedule(圖23)與寄存器VPESchedule(圖24)的上述討論中提出了一個問題,即用于實時和近乎實時線程的多線程中的特殊服務(wù)遇到的問題。本說明已經(jīng)盡力將此部分說明的更清楚;也更清楚的說明了以線程級服務(wù)品質(zhì)(“QoS”)解決的特殊擴充。
背景被設(shè)計用于傳輸多媒體數(shù)據(jù)的網(wǎng)絡(luò)都會牽涉到服務(wù)品質(zhì)(“QoS”)的概念,來描述使用不同策略來處理在網(wǎng)絡(luò)中不同的數(shù)據(jù)串流的需要。以語音連接為例,其是相對的不對于帶寬有一定的要求,但是卻不能忍受幾十毫秒的等待時間。在寬帶的多媒體網(wǎng)絡(luò)中,QoS協(xié)議可以保證在時間為關(guān)鍵要素的傳輸中,能取得特別的處理且優(yōu)先權(quán)是需要的以確保及時傳輸。
產(chǎn)生以在單一芯片上結(jié)合“RISC”與“DSP”的程序執(zhí)行的主要反對理由之一,是在組合的一個多任務(wù)的環(huán)境中,要去保證DSP程序代碼的嚴(yán)格實時執(zhí)行是非常困難的。該DSP應(yīng)用可被視為具有對處理器帶寬中的“QoS”要求。
多線程與QoS有許多方式可以調(diào)度來自多線程的指令的發(fā)出。當(dāng)阻擋式的調(diào)度器在每當(dāng)一個高速緩存錯失或其它重大停頓發(fā)生時改變線程時,交錯式的調(diào)度器可以在每個周期改變線程。以上詳細描述的多線程ASE提供了一個框架用于試圖避免對一個特殊線程調(diào)度機制或策略有任何依賴的顯然多線程化的處理器。然而,該調(diào)度策略可能有重大的影響,基于該影響,對于線程的執(zhí)行,QoS保證是可能的。
如果對于實時DSP程序代碼能夠作出QoS保證,一個DSP擴充的RISC會變得明顯地更加有用。在該處理器上實現(xiàn)多線程,以使DSP程序代碼在不同的線程中運行,也有可能是在不同的虛擬處理器上,并且該DSP線程的硬件調(diào)度能可被程序化地決定以提供確保得QoS,邏輯地去除對接受DSP-加強得RISC領(lǐng)域得關(guān)鍵障礙。
QoS線程調(diào)度算法服務(wù)品質(zhì)線程調(diào)度可以寬松地被定義為一組調(diào)度機制和策略,它們允許一編程器或系統(tǒng)體系對于一特定區(qū)間代碼的執(zhí)行時間作出置信的、預(yù)測性的陳述。一般來說,這些陳述都有“此程序代碼將在不多于Nmax且不少于Nmin周期中執(zhí)行”的形式。在許多情況下,只有Nmax數(shù)字是實際結(jié)論的數(shù)字,但是在某些應(yīng)用中,在調(diào)度之前運行也會造成問題,所以Nmin也應(yīng)該被仔細的考慮。Nmax數(shù)字與Nmin數(shù)字之間的范圍越小則整個系統(tǒng)的行為就更能精確地被預(yù)測。
簡單的優(yōu)先權(quán)方案已被建議用于提供一些水平的QoS給多線程發(fā)出調(diào)度的一個簡單的模型是簡單地將最大優(yōu)先權(quán)指定給單個被指定的實時線程,因此當(dāng)該線程為可運行的,則它總被選定來發(fā)出指令。這種方式可以提供一個Nmin的最小的值,或許也可提供一個Nmax的可能的最小值用于該指定的線程,但是仍然會有一些不太好的后果。
首先,在該方案中只有單一個線程可以有任何QoS保證。該算法表示了用于在一個不同于指定的實時線程的線程中的任意程序代碼的Nmax會有效地變?yōu)榉窍拗啤F浯?,?dāng)用于指定的線程內(nèi)的程序代碼塊的Nmin數(shù)目被最小化的時候,則異常就必須被因子分解入該模型。如果通過該指定的線程取得這些異常,則該Nmax值就會變得更復(fù)雜,并且在某種情形下,是不可能去進行確定。如果通過除該指定的線程之外的線程取得這些異常,則該Nmax的值就會被嚴(yán)格地用于該被指定的線程中的代碼,但是該處理器的中斷響應(yīng)時間變成非限制的。
該優(yōu)先權(quán)方案也許在某些情形下是有用的,并且在硬件的實現(xiàn)中也有實際的優(yōu)點,但是它們?nèi)匀粵]有提供一個通用的QoS調(diào)度的解決方法。
基于保留的方案另一個更強大的且獨特的線程調(diào)度模型是基于保留發(fā)布區(qū)間(issueslot)。在該方案中,其硬件調(diào)度機制允許了一個或多個線程可被指定各M個連續(xù)發(fā)布區(qū)間中的N個發(fā)布區(qū)間。此方案并沒有提供用于在一個不具中斷的環(huán)境中的一段實時程序代碼片段的優(yōu)先權(quán)方案一般低的Nmin值,可是卻擁有了其它的優(yōu)點。
多于一個的線程可以具有保證的QoS。
即使中斷被限制于其它除了具有最高優(yōu)先權(quán)之外的線程,但中斷等待時間可被限定。這樣可以允許用于實時程序代碼區(qū)塊的Nmax中的減少。
一個保留調(diào)度的簡單形式指定每第N個發(fā)布區(qū)間到一個實時線程。由于在1與2之間并沒有N的中間值,因此表示了在一個多線程環(huán)境中的實時線程可以取得最多50%的處理器的發(fā)布區(qū)間。當(dāng)一個實時任務(wù)消耗了多于50%的嵌入式處理器的帶寬時,這種可以允許更有彈性的發(fā)布帶寬的指定方案是非常期望的。
具有QoS的混合式線程調(diào)度之前所述的多線程系統(tǒng)采用仔細的中性調(diào)度策略,但是還可以被擴充以允許一個混合式調(diào)度模型。在此模型中,實時線程可以被給予線程發(fā)布區(qū)間某部份的固定的調(diào)度,并且具有由與實現(xiàn)方式相關(guān)的缺省調(diào)度方案所指定的剩余的區(qū)間。
結(jié)合線程至發(fā)布區(qū)間在一處理器中,各指令是被快速地順序地發(fā)出。在一個多線程的環(huán)境當(dāng)中,通過陳述在一個給定的固定的發(fā)布區(qū)間數(shù)目中每個線程發(fā)出的區(qū)間數(shù)目的比例,可以計算出每個線程消耗的帶寬。相反的,本發(fā)明人認識到可以任意地聲明一固定數(shù)目的區(qū)間,并斷言一種限定該處理器以保留用于特定的線程的該固定數(shù)目中的某些數(shù)目的區(qū)間。然后可指定對于一實時線程被保證的一固定部分的帶寬。
很清楚地,對于多于一個的實時線程,可以指定成比例的區(qū)間,并且在此方案將操作的粒性通過該比例被作出的發(fā)布區(qū)間的固定數(shù)目而被限定。舉例來說,如果32個區(qū)間被選定了,則任意一個特定的線程可以被保證具有從1/32至32/32的帶寬。
可能地,用于將固定的發(fā)出帶寬指定給線程的最普通的模型是將每一個線程與一對整數(shù){N,D}相關(guān)連,該對整數(shù)形成了指定給該線索的發(fā)出時間段的一分?jǐn)?shù)的分子與分母,例如是1/2、4/5。如果該該允許的整數(shù)的范圍夠大的話,則允許對線程優(yōu)先權(quán)指定的幾乎任意地作細質(zhì)性的調(diào)變,但是如此做的話還是會有一些實質(zhì)上的缺點。其中一個問題,是將一個很大的配對集合,{{N0,D0},{N1,D1},…{Nn,Dn}}轉(zhuǎn)換為一發(fā)布調(diào)度的硬件邏輯并非是普通的,且導(dǎo)致多于100%的區(qū)間被指定的錯誤情況無法非常容易的被偵測到。另一個就是,雖然此方案長遠的來說指定一線程被規(guī)定有N/D部分的發(fā)布區(qū)間,其不一定允許對哪些發(fā)出區(qū)間將被指定給在一較短子集碼片斷,作出任何聲明。
因此,在本發(fā)明的一實施例中,替代一整數(shù)對,將一個表示有這些調(diào)度區(qū)間將被分配給該線程的位向量與每一個需要實時帶寬的QoS的各線程相關(guān)聯(lián)。在該實施例,該向量被系統(tǒng)軟件可視為前述寄存器ThreadSchedule(圖23)的內(nèi)容。雖然該ThreadSchedule寄存器包含32位寬的調(diào)度“屏蔽”,但是該屏蔽的位數(shù)在別的實施例當(dāng)中可以更大或更小。一個具有32位寬度的線程調(diào)度屏蔽允許一個線程被指定是從1/32至32/32的該處理器的帶寬,也可進一步的對于特定的發(fā)出線程給予特定發(fā)出帶寬。假定一個32位屏蔽,一個值0xaaaaaaaa將每隔一個的區(qū)間指定給該線程。一個0x0000ffff的值也可將50%的的發(fā)布帶寬指定給該線程,但有從16個連續(xù)區(qū)間的部分的方式。指定一個0xeeeeeeee的值到線程X,并且指定一個0x01010101的值至線程Y,將每四個周期中的三個(32個中的24個)給予線索X并將每八個周期中的一個(32個中的4個)給予線索Y,并且留下一32周期的組中剩下的4個周期通過其它者,可能較少確定性的硬件算法被指定給其他線程。更進一步的說,可知一個線程X可以有每四個周期中的三個周期,且該線程Y在連續(xù)指令之間不會具有超過八個周期的間隙。
在此實施例中的調(diào)度沖突可以很簡單地偵測到,其中位不會被設(shè)定給多于一個線程的該寄存器ThreadSchedule中。也就是說,如果一個特定的位設(shè)定用于一個線程,那該位對于該發(fā)出屏蔽被指定給的所有其他線程就必須是零值。因此,如果有任何的沖突,都可以被輕易地偵測到。
該用于實時線程的發(fā)出邏輯是相對的簡單直接每一個發(fā)布機會被相關(guān)連至一個模32索引,其會被傳送給所有已經(jīng)準(zhǔn)備的線程,并且該線程至多有一個會被指定到該相關(guān)連的發(fā)布區(qū)間。如果有一個事件觸發(fā)該區(qū)間,則該相關(guān)的線程就會發(fā)布下一個指令。如果沒有任何線程擁有該區(qū)間,則該處理器會選擇一個可運行的非實時線程。
寄存器ThreadSchedule的實現(xiàn)如果是少于32位的話,可以減少每個線程的儲存與邏輯的大小,但卻會同時地減少調(diào)度的彈性。原則上,該寄存器可以擴充至64位,或甚至被實現(xiàn)(例如在一個MIPS處理器的情形)為在MIPS3 CPO寄存器空間中以選擇值遞增的一系列寄存器,以提供更長的調(diào)度向量。
免除線程的中斷服務(wù)如前所述,中斷服務(wù)可以在取得異常的線程的執(zhí)行時間中引入巨大的可變性。因此,期望使要求嚴(yán)格的QoS保證的線程能夠免除該中斷服務(wù)。這在每一個線程給予一個單一位的實施例中被實現(xiàn),其對于操作系統(tǒng)是可以看見的,用來使任何產(chǎn)生的異步異常被延遲,直到調(diào)度一個非免除的線程(例如寄存器ThreadStatus的位IXMT,請參考圖18與圖19)。這樣會增加中斷的等待時間,仍然到通過該寄存器ThreadSchedule的值的選擇而可限制和控制的程度。如果中斷處理程序執(zhí)行只發(fā)生在那些沒有被指定到免除實時QoS線程的發(fā)布區(qū)間期間,則該中斷服務(wù)對于該實時程序代碼的執(zhí)行時間就沒有任何第一級的影響。
對線程與虛擬處理元件的在發(fā)布區(qū)間分配之前所描述的多線程ASE描述了一個線程資源的架構(gòu)分配,其中某些數(shù)目的虛擬處理元件各自具有一些數(shù)目的線程當(dāng)每一個VPE具有CPO的實現(xiàn)與特許資源架構(gòu)(當(dāng)在一MIPS處理器上被配置)時,在一VPE上運行的操作系統(tǒng)軟件(“OS”)就不可能可以直接知道和控制在另一VPE上所要求的發(fā)布區(qū)間。因此每一VPE的發(fā)布區(qū)間的命名空間即關(guān)連到該VPE,也就是形成了一個發(fā)布區(qū)間分配的架構(gòu)。
圖34為一調(diào)度電路3400的方框圖,其描述了此線程資源的架構(gòu)分配。處理器調(diào)度器3402(即該主處理器的全部調(diào)度邏輯)經(jīng)一“區(qū)間選擇”信號3403,傳遞一個發(fā)布區(qū)間號碼至位于該主處理器中全部VPE中的全部VPESchedule(VPE調(diào)度)寄存器。信號3403對應(yīng)于該寄存器VPESchedule中的一位的位置(在本實施例中即為該三十二個位置中的一個)。調(diào)度器3402重復(fù)地循環(huán)該信號3403通過這樣的位的位置,在每個發(fā)生的發(fā)布區(qū)間時移至一個增加的位置,并且當(dāng)?shù)竭_了最大有效位位置時(即在此實施例中是第三十一位)再重置到最小有效位位置(即零)。
參照圖34,以此圖為例,位的位置1(即“區(qū)間1”)是經(jīng)由信號3403傳遞至該主處理器內(nèi)全部的寄存器VPESchedule,即寄存器3414和3416。任何具有對應(yīng)位“設(shè)置”(即保持一邏輯1)的寄存器VPESchedule將此情況通知給具有“VPE發(fā)布請求”信號的該處理器調(diào)度器。作出響應(yīng),該調(diào)度器就會用一個“VPE發(fā)布允許”的信號來允許該VPE使用目前的發(fā)布區(qū)間。再參照圖34,(VPE0中的)寄存器VPESchedule 3414有一個設(shè)定的位的位置1,而因此發(fā)出了一個VPE發(fā)布要求信號3415至該處理器調(diào)度器3402,該處理器調(diào)度器3402以VPE發(fā)布允許信號3405表示回應(yīng)。
當(dāng)一個VPE被允許一發(fā)布時,在VPE級上采用相類似的邏輯。再參照圖34,VPE調(diào)度器3412(即VPE0的調(diào)度邏輯)響應(yīng)于該信號3405,經(jīng)由區(qū)間選擇信號3405提供了一個發(fā)布區(qū)間號碼給在該VPE內(nèi)的全部ThreadSchedule寄存器。這些寄存器ThreadSchedule每一個都關(guān)連至一個被該相關(guān)的VPE所支持的線程。信號3413對應(yīng)于該寄存器ThreadSchedule中的一個位位置(在本實施例中可以是三十二個位置中的一個)。調(diào)度器3412重復(fù)地循環(huán)該信號3413通過這些位置,在每個發(fā)布區(qū)間發(fā)生是提高該位置,并且當(dāng)?shù)竭_了最大有效位位置后(在此較佳實施例中是第三十一位),再重置到最小有效位位置(即零)。該區(qū)間號碼與在該VPESchedule級所使用的區(qū)間號碼無關(guān)。
請參照圖34并以其為例,位位置0(即“區(qū)間0”)是經(jīng)由信號3413傳輸至在該目標(biāo)VPE內(nèi)的全部寄存器ThreadSchedule,也就是寄存器3418與3420。任何在其寄存器ThreadSchedule的選定位置有一設(shè)定位的線程向該VPE調(diào)度器指出該情況,且表示該線程被允許使用目前的區(qū)間。參照圖34,(線程0的)寄存器ThreadSchedule3418具有設(shè)定的位位置0,并且也因此傳送線程發(fā)布要求信號3419至該VPE調(diào)度器3412,而該VPE調(diào)度器3412以一個線程發(fā)布允許信號3417作為回應(yīng)(所以允許線程0可以使用目前的發(fā)布區(qū)間)。在沒有VPE調(diào)度器位被設(shè)定用于被指示的區(qū)間,或是沒有ThreadSchedule位被設(shè)定用于被指示的區(qū)間的周期上,則該處理器或是VPE調(diào)度器就會根據(jù)一些其它缺省調(diào)度算法來允許下一個發(fā)布。
根據(jù)上述,在一實施例當(dāng)中,每一個VPE,以圖34的VPE0(3406)與VPE1(3404)為例,都被指定一個寄存器VPESchedule(其格式顯示于圖24中),其允許某些區(qū)間,這些空間以其寄存器內(nèi)容的長度的模數(shù)來計算,可以被確定地指定到該VPE。圖34的寄存器VPESchedule為VPE0的寄存器3414與VPE1的寄存器3416。其它沒有被指定到任何VPE的發(fā)布區(qū)間通過實現(xiàn)特定分配策略被指定。
另外根據(jù)前面所描述,被指定給一個VPE中的線程的區(qū)間是從給予該VPE的分配被指定的。例如,如果一個處理器有兩個配置的VPE,如圖34所示,一個VPE具有包含0xaaaaaaaa的值的寄存器VPESchedule,且另一個VPE具有包含0x55555555的寄存器VPESchedule,則該發(fā)布區(qū)間就會在這兩個VPE之間被交替。如果在這些VPE其中之一的一線程有一個包含0x55555555的寄存器ThreadSchedule,則其會取得包含它的VPE的每隔一個的發(fā)布區(qū)間,或者是說在整個處理器的每隔三個的發(fā)布區(qū)間。
因此,該與每一個VPE相關(guān)的寄存器VPESchedule的值決定了哪些正在處理的區(qū)間會分配給各VPE。特定的線程會被指定到每一個VPE,例如是顯示在VPE0中的線程0與線程1。其它沒有顯示的線程也類似地被指定給VPE1。有與每個線程相關(guān)連的寄存器ThreadSchedule,例如用于線程0的寄存器3418與用于線程1的寄存器3420。該寄存器ThreadSchedule的值決定了被指定到一個VPE的每個線程的正在處理的區(qū)間的分配。
調(diào)度器3402與3412可以用簡單的組合邏輯來構(gòu)成,以實現(xiàn)上述功能,并且建構(gòu)這些調(diào)度器,通過之前的描述當(dāng)中并不需要復(fù)雜的實驗就能夠由本領(lǐng)域的熟練技術(shù)人員來實現(xiàn)。例如可使用一些已知方法,例如是用組合邏輯、可編程邏輯、軟件等等來構(gòu)成以實現(xiàn)所需要的功能。圖33描述了用一個通用形式的計算機系統(tǒng)3300,本發(fā)明的許多實施例可以通過該計算機系統(tǒng)來實施。該系統(tǒng)包含了一個處理器3302,其配置有所需的解碼與執(zhí)行邏輯(這對本領(lǐng)域的熟練技術(shù)人員而言是顯見的),以支持一個或多個上述所提過的指令(即FORK、YIELD、MFTR、MTTR、EMT、DMT與ECONF)。在一實施例當(dāng)中,核心3302還包括了如圖34所顯示的調(diào)度電路3400,并且也代表了如上述的“主處理器”。系統(tǒng)3300還包括了一個系統(tǒng)接口控制器3304,其可以雙向地與該處理器溝通;還有可被該系統(tǒng)接口控制器所訪問的隨機存取存儲器(RAM)3316與只讀存儲器(ROM)3314;更有三個輸入/輸出裝置3306、3308與3310,其由一個總線3312與該系統(tǒng)接口控制器通信。雖然該裝置的應(yīng)用與程序代碼都已經(jīng)在這里被詳細描述,該系統(tǒng)3300仍可以作為一個多線程系統(tǒng)進行工作。顯然本領(lǐng)域的熟練技術(shù)人員可以對圖33的普通形式作出許多修改。舉例來說,該總線3312可以有許多的形式來實現(xiàn),并且在某些實施例當(dāng)中可以是單片總線。同樣的該輸入/輸出裝置的數(shù)目也只是示例性的,實質(zhì)上是可以在不同的系統(tǒng)上有不同的數(shù)目。更進一步言,雖然在圖中只有元件3306發(fā)出了一個中斷要求,很明顯地其它的裝置也可以發(fā)出中斷要求。
更進一步的改善到目前為止,所描述的實施例用于32位的寄存器ThreadSchedule與VPESchedule,并不允許完全奇數(shù)分?jǐn)?shù)的帶寬的分配。期望只分配三分的一的所有發(fā)布區(qū)間至一個給定的線程的編程器不得不接近10/32或11/32。在一個實施例中,一個更進一步的可程序屏蔽或長度寄存器允許編程器去規(guī)定位于寄存器ThreadSchedule和(或)寄存器VPESchedule中的位的一個子集重新開始該序列前由該發(fā)布邏輯所使用。在所提出的例子當(dāng)中,該編程器僅規(guī)定了30個位是有效的,并且以0x24924924來編程適當(dāng)?shù)募拇嫫鱒PESchedule及/或寄存器ThreadSchedule。YIELD(產(chǎn)出)—取消調(diào)度以及有條件地解除分配一線程(第二實施例)參考圖35,一方框圖顯示本發(fā)明另一實施例中YIELD指令3500的格式。圖35的YIELD指令3500類似于圖6的指令600;然而,圖35的YIELD指令3500有兩個不同之處。第一,rs字段3502所規(guī)定的在寄存器中所儲存的值的含義有些不同,如下述。第二,圖35的YIELD指令3500亦包含一第二操作數(shù)字段rd 3504。在圖35的實施例中,rd操作數(shù)字段3504包含YIELD指令3500的位11到15。rd操作數(shù)字段3504規(guī)定了一目的地寄存器(如6PR),其接收YIELD指令3500完成時的一結(jié)果值,如下述。
參考圖36,顯示本發(fā)明圖35的另一實施例中,執(zhí)行YIELD指令3500的一處理器核心3302的方框圖。圖36的處理器核心3302類似于圖33的系統(tǒng)3300的處理器核心3302。處理器核心3302包含圖34的一調(diào)度器3400。處理器核心3302亦包含由圖35的rs字段3502所規(guī)定的一寄存器rs 3602、由圖35的rd字段3504所規(guī)定的一寄存器rd 3604、一寄存器YQMask 3606、一三十一個二輸入與門單元3608以及控制邏輯3612。
處理器核心3302接收三十一個YIELD限定(qualifier)(YQ)輸入3614,以YQ0到Y(jié)Q30表示。YQ輸入3614可接收處理器核心3302以外的電路所產(chǎn)生的信號,其包含但不限于I/O裝置(例如圖33的I/O裝置3306)所產(chǎn)生的中斷信號。YQ輸入3614亦接收處理器核心3302內(nèi)部所產(chǎn)生的信號,其包含但不限于軟件中斷信號以及高速緩存遺失信號。再者,YQ輸入3614可接收處理器核心3302外部及內(nèi)部所產(chǎn)生的信號的結(jié)合。在一實施例中,一信號源可與一YQ輸入3614及處理器核心3302的一中斷輸入兩者連接。在另一實施例中,一或多個YQ輸入3614可能不與一信號源連接,而是與適當(dāng)?shù)囊贿壿?或0值連接。
參考圖37,一方框圖顯示圖36的寄存器YQMask 3606的格式。寄存器YQMask 3606是一三十二位寄存器。位31為零。位0至30包含一屏蔽字段3702。屏蔽字段3702是可由軟件(例如操作系統(tǒng))編程的一位向量,其規(guī)定哪一個YQ輸入3614可用作為重新調(diào)度發(fā)布YIELD指令3500的線程的狀況。具體而言,若一YIELD指令3500規(guī)定在寄存器YQMask 3606中沒有規(guī)定的一YQ輸入3614,則處理器核心3302產(chǎn)生一異常,如下述。在一實施例中,寄存器YQMask 3606是逐VPE被定義的。
參考圖36,每一與門3608在其一輸入上接收一相對應(yīng)的YQ輸入3614。每一與門3608在其的其它輸入上接收儲存于寄存器YQMask 3606中三十一位向量中的一對應(yīng)的位。與門3608的三十一個輸出位被提供作為一位向量以在YIELD指令3500完成時,儲存于rd寄存器3604中。寄存器rd 3604結(jié)果值在體系上被定義具有與YQ輸入3614相同的字節(jié)組織及位置,如圖37所示。
寄存器rs 3602儲存應(yīng)重新調(diào)度發(fā)布YIELD指令3500的線程的情況的描述符,已如前述。更具體而言,若其包含一正值,則寄存器rs 3602會規(guī)定YQ輸入3614的一位向量。當(dāng)在rs 3602位向量中規(guī)定的YQ輸入3614之一為真時,處理器核心3302會重新調(diào)度該線程。
控制邏輯3612接收YQ輸入3614、寄存器YQMask 3606的內(nèi)容以及寄存器rs 3602的內(nèi)容??刂七壿?612可包含但不限于結(jié)合型或序列型邏輯、可編程邏輯、軟件及其類似者,被配置以執(zhí)行在此所描述的功能。控制邏輯3612產(chǎn)生一異常信號3622、一終止線程信號3624、一暫停線程信號3626以及一重調(diào)度線程信號3628,所有這些信號被提供給調(diào)度器3400。在一實施例中,控制邏輯3612及調(diào)度器3400可被整合為一。
異常信號3622表示YIELD指令3500已產(chǎn)生一異常。在一實施例中,若寄存器rs 3602位向量值規(guī)定一YQ輸入3614,其在寄存器YQMask 3606中的對應(yīng)位是空白(clear),則YIELD指令3500產(chǎn)生一異常。在一實施例中,若YIELD指令3500規(guī)定線程將被終止(即通過一零寄存器rs3602值),但發(fā)布YIELD指令3500的線程不是一動態(tài)可分配的線程(即線程是一線連的線程),則YIELD指令3500產(chǎn)生一異常。在一實施例中,若YIELD指令3500規(guī)定該線程將被終止(即經(jīng)過一零寄存器rs 3602值),但沒有其它線程可供重新調(diào)度,則YIELD指令3500產(chǎn)生一異常。
終止信號3624表示發(fā)布YIELD指令3500的線程應(yīng)被終止或解除分配。處理器核心3302是通過停止從線程獲取及發(fā)布指令,以終止或解除分配一線程。再者,處理器核心3302會釋放先前分配用于該線程執(zhí)行的硬件狀態(tài)或資源,即線程上下文,其中該線程被釋放的硬件狀態(tài)可供另一線索分配。在一實施例中,硬件資源可包含但不限于一程序計數(shù)器寄存器、一組通用寄存器、乘法結(jié)果寄存器及/或一或多個特許系統(tǒng)共處理器資源,包含但不限于圖15中所示的寄存器的某些部分。
暫停信號3626表示發(fā)布YIELD指令3500的線程將被暫?;蜃钃酢L幚砥骱诵?302通過停止獲取及發(fā)布來自該線程的指令,來暫停或阻擋一線程。
重新調(diào)度信號3628表示發(fā)布YIELD指令的線程將被重新調(diào)度。處理器核心3302根據(jù)線程調(diào)度策略,通過指定可供執(zhí)行的線程,來重新調(diào)度一線程。意即,處理器核心3302將該線程加入目前準(zhǔn)備用于執(zhí)行的線程清單中,使得當(dāng)調(diào)度器3400如此規(guī)定時,處理器核心3302將開始從線程的程序計數(shù)器獲取并發(fā)布指令。
參考圖38,一流程圖顯示根據(jù)本發(fā)明的圖36的處理器核心3302的操作,以執(zhí)行圖35的另一實施例的YIELD指令3500。流程開始于決定方塊3802。
在決定方塊3802,圖36的控制邏輯3612檢查寄存器rs 3602,以決定其數(shù)值是否為零。若是,則流程進行到方塊3804;否則,流程進行到?jīng)Q定方塊3806。
在方塊3804,控制邏輯3612在圖36的終止信號3624產(chǎn)生一真值,導(dǎo)致該線程被終止。意即,不重調(diào)度此線程,該線程的上下文被解除分配。并釋放用于由隨后FORK指令300進行分配。在一實施例中,若YIELD指令3500導(dǎo)致該線程被終止,且沒有其它的線程可供調(diào)度,則處理器核心3302會產(chǎn)生一異常。在一實施例中,若處理器核心3302終止該線程,則無數(shù)值返回到寄存器rd 3604。流程在方塊3804結(jié)束。
在決定方塊3806,控制邏輯3612檢查寄存器rs 3602,以決定其數(shù)值是否為負一(-1)。若是,則流程進行至方塊3818;否則,流程進行到方塊3808。
在方塊3808,控制邏輯3612將儲存于寄存器rs 3602的位向量與儲存于寄存器YQMask 3606的位向量作比較。在一實施例中,除了寄存器rs-1以外的rs寄存器3602的負值會被保留;因此,在方塊3808,已知儲存于寄存器rs 3602的數(shù)值是正值。流程進行到?jīng)Q定方塊3812。
在決定方塊3812,控制邏輯3612決定設(shè)定于寄存器rs 3602的位0到30的任何一位,是否在寄存器YQMask 3606中具有一對應(yīng)位是空值。若是,則流程進行至方塊3814;否則,流程進行至決定方塊3816。
在方塊3814,控制邏輯3612在異常信號3622上產(chǎn)生一真值,以表示線程規(guī)定一無效YQ輸入3614。流程在方塊3814結(jié)束。
在決定方塊3816,控制邏輯3612檢查YQ輸入3614,以決定寄存器rs 3602上的一組位所規(guī)定的所有YQ輸入3614是否為假。若是,則流程回到?jīng)Q定方塊3816,控制邏輯3612繼續(xù)在暫停信號3626上產(chǎn)生一真值,以使線程維持暫停狀態(tài),直到寄存器rs 3602中的一組位所規(guī)定的YQ輸入3614之一為真。否則,流程進行到方塊3818。
在方塊3818,控制邏輯3612在圖36的重新調(diào)度信號3628上產(chǎn)生一真值,導(dǎo)致調(diào)度器3400重新調(diào)度該線程。意即,該線程在下一個機會有資格進行調(diào)度,但會要求調(diào)度器3400并放棄用于其他線程的處理器核心3302,根據(jù)調(diào)度器3400的調(diào)度策略,該其它線程應(yīng)首先執(zhí)行。流程進行至方塊3822。
在方塊3822,處理器核心3302將由寄存器YQMask 3606值屏蔽的YQ輸入3614的信號值(即圖36的與門的輸出),儲存在寄存器rd 3604。在一實施例中,在處理器核心3302重新試YIELD指令3500的時候,YQ輸入3614信號值被取樣。流程在方塊3822結(jié)束。
在一實施例中,處理器核心3302不在包含YIELD指令3500的線程中發(fā)布指令,直到在方塊3818重新調(diào)度線程后,調(diào)度器3400開始執(zhí)行其線程為止。
雖然圖35-40描述一實施例,其中對YIELD指令3500的輸入操作數(shù)是提供于一通用寄存器(即寄存器rs 3602),但在其它實施例中,可通過其它方式提供輸入操作數(shù),例如通過一存儲器或通過一非通用寄存器。舉例而言,雖然實施例已描述處理器3302是一基于寄存器的處理器,但其它實施例亦可使用一基于堆棧的處理器,例如被配置以有效地執(zhí)行Java虛擬機器碼的處理器。在這樣的實施例中,YIELD指令3500的輸入操作數(shù)可規(guī)定于存儲器中的操作數(shù)棧,以取代在寄存器中。舉例而言,每一線程上下文可包含一棧指針寄存器,YIELD指令3500的一字段可將與堆棧指針寄存器相關(guān)聯(lián)的YIELD輸入操作數(shù)的一偏移規(guī)定在堆棧存儲器中,以取代規(guī)定處理器的暫存空間中的一寄存器。類似地YIELD指令3500返回值可返回給一操作數(shù)棧,以取代返回給一寄存器。
如前述,本發(fā)明的YIELD指令3500有利地提供用于根據(jù)rs 3602輸入操作數(shù)的數(shù)值,有條件地終止線程的方法。在一平行或多線程的計算中,執(zhí)行一線程的終止條件可在運行時間被計算。舉例而言,一回路(loop)可測試欲滿足的一組條件,并根據(jù)此測試,選擇性地終止此回路。目前YIELD指令3500允許線程執(zhí)行在寄存器rs 3602中產(chǎn)生零或負一的值的計算接著線程執(zhí)行一YIELD指令3500在寄存器rs 3602值上,以終止(數(shù)值為零)或繼續(xù)(數(shù)值為負一),并分支回到回路的頂部。雖然以附加的比較及分支指令亦可達到相類似效果,但基于當(dāng)前狀況值的YIELD指令3500使多線程碼更為精簡,并更為有效地在微處理器100的流水線中執(zhí)行。
如前述,通過程序化寄存器YQMask 3606,并以一特定方式使用寄存器rd 3604返回值,一程序可執(zhí)行一阻擋YIELD指令3500的操作兩個潛在有用的仿真。
首先,即使待連接到Y(jié)Q輸入3614的信號的硬件來源并不存在,但是一操作系統(tǒng)仍可仿真在一特定YQ輸入3614上阻擋的YIELD指令3500的操作,而不用改變應(yīng)用程序。在開發(fā)硬件信號源或在原型開發(fā)期間,此仿真對測試應(yīng)用程序是有用的。操作系統(tǒng)可編程寄存器YQMask 3606,以清除對應(yīng)不存在的YQ輸入3614的位使得在寄存器3602中具有對應(yīng)位的一YIELD rd,rs 3500導(dǎo)致一異常。響應(yīng)此異常,操作系統(tǒng)會暫停此線程,直到適合仿真「虛擬」YQ輸入3614為真。在此時刻,操作系統(tǒng)會將YIELD指令3500的rd字段3504解碼,以決定哪一寄存器被選為寄存器rd 3604、寫入一適當(dāng)?shù)闹抵良拇嫫鱮d 3604、推進線程的程序計數(shù)器至緊接在YIELD指令3500之后的指令、并重新開始線程的執(zhí)行。對應(yīng)用程序而言,看起來YIELD指令3500好象被阻擋、等待、并重新調(diào)度,以響應(yīng)規(guī)定的YQ輸入6314上的一真值。再者,當(dāng)從一處理器核心3302將線程移到另一個處理器核心(例如在多個處理器核心3302之間執(zhí)行負載平衡)時,操作系統(tǒng)可使用寄存器YQMask 3606以確保程序作業(yè)。
第二,通過阻擋一YIELD指令3500的執(zhí)行,直到寄存器rs 3602所規(guī)定的一組YQ輸入3614為真值,一應(yīng)用程序可清楚地在軟件中仿真處理器核心3302在硬件中執(zhí)行的作業(yè)。軟件仿真是類似對于一中斷的程序輪詢(polling),而非以允許硬件移轉(zhuǎn)執(zhí)行至中斷服務(wù)例程來響應(yīng)一中斷請求。在正常情況下(即非仿真的情況),假設(shè)寄存器YQMask 3606具有一或多個位及一YIELD rd,rs 3500會在rs寄存器3602中的對應(yīng)位被設(shè)定時被執(zhí)行。處理器核心3302將會暫停發(fā)布YIELD指令3500的線程,直到所規(guī)定的YQ輸入3614之一是真。為了仿真此作業(yè),一程序儲存一位向量在寄存器YQMask 3606,規(guī)定所討論的YQ輸入3614組。此程序發(fā)布一YIELD rd,其中寄存器rs 3602的數(shù)值是-1的rs3500導(dǎo)致線程被重新調(diào)度而不被阻擋。當(dāng)完成YIELD指令3500時,寄存器rd 3604中的返回值將會包含規(guī)定于寄存器YQMask 3606中的YQ輸入3614信號值。應(yīng)用程序接著測試返回值,若為零,則環(huán)路回到Y(jié)IELD指令3500,直到返回值不為零。因此,規(guī)定一寄存器rs 3602值為-1的YIELD指令3500,會成為輪詢或取樣原本處理器核心3302硬件會使用的YQ輸入3614,以阻擋發(fā)布YIELD指令3500的線程的執(zhí)行的方法。需要知道的是程序線程的執(zhí)行仍會根據(jù)所規(guī)定的實際YQ輸入3614而受到控制;然而,線程的硬件阻擋會由程序本身,而非處理器核心3302進行仿真。
參考圖39,一方框圖顯示一處理系統(tǒng)3300(例如圖33的處理系統(tǒng)3300),其包含圖36的處理器核心3302,用于根據(jù)本發(fā)明的圖35的另一實施例執(zhí)行一YIELD指令3500。系統(tǒng)3300包含信號源3908,其產(chǎn)生信號3912,例如但不限于圖33的I/O裝置3306所產(chǎn)生的中斷請求信號。
系統(tǒng)3300還包含一YQ輸入管理單元3902。YQ輸入管理單元3902包含31個YQ映像寄存器3906,控制對應(yīng)的多路復(fù)用器3904。圖39的實施例顯示三個YQ映像寄存器3906,標(biāo)示為YQ映像寄存器03906、YQ映像寄存器1 3906以及YQ映像寄存器30 3906,其對應(yīng)的多路復(fù)用器3904輸出被分別與YQ輸入0 3614、YQ輸入1 3614以及YQ輸入30 3614連接。每一多路復(fù)用器3904接收來自信號源3908的所有信號3912,并根據(jù)其對應(yīng)的YQ映像寄存器3906所提供的一選擇輸入,選擇信號3912之一提供給其對應(yīng)的YQ輸入3614。在一實施例中,YQ映像寄存器3906通過在處理器核心3302上執(zhí)行的一程序是可編程的。在一實施例中,YQ輸入管理單元3902被包含在處理器核心3302中,而非在處理器核心3302的外部。在另一實施例中,YQ輸入管理單元3902被包含在處理器核心3302的一共處理器中。
參考圖40,一方框圖顯示根據(jù)本發(fā)明的圖35的另一實施例的一替換實施例中,圖35的YIELD指令3500的rs字段3502中所規(guī)定的寄存器rs 3602的語義。圖40的實施例是適用于一處理器核心3302中,該處理器核心3302僅接收四個圖36的YQ輸入3614,而非31個。此四個YQ輸入3614是根據(jù)被編程到類似圖39的YQ輸入管理單元之一YQ輸入管理單元3902中的數(shù)值而被選擇。在一實施例中,YQ輸入管理單元3902被包含在處理器核心3302的一共處理器中。在一實施例中,每一線程上下文包含一YQ輸入管理單元3902。
寄存器rs 3602是分為八個四位的字段。其中四個字段是反屏蔽字段,標(biāo)示為INV3、INV2、INV1以及INV0。四個字段是與啟動(AND-enabling)項字段,標(biāo)示為AND3、AND2、AND1以及AND0。圖40中所顯示的表格描述每一個字段。
控制邏輯3612包含根據(jù)寄存器rs 3602值,執(zhí)行以下YQ輸入3614操控的電路。四個YQ輸入3614值會被帶到四組獨立的XOR門組,該四個YQ輸入3614值對信號3912的映像由YQ輸入管理單元3902所控制,而位于對應(yīng)INVx字段的位被反轉(zhuǎn)以建立一調(diào)節(jié)的(conditioned)高有效值組。一獨立的n路AND(與)單元提供給四個調(diào)節(jié)的限定中的每一者,其中由相關(guān)的ANDx字段所選擇的該組位是與一隱式1與在一起(即若僅設(shè)定有一ANDx位,則輸出追蹤對應(yīng)的輸入)以產(chǎn)生四個選通的限定中的一個。四個選通的限定然后被OR(或)在一起。若結(jié)果不為零,則控制邏輯3612在重調(diào)度信號3628上產(chǎn)生一真值,以重新調(diào)度此線程。
在一實施例中,儲存于寄存器rd 3604中的返回值,是四個選通的限定值的一向量。在一實施例中,返回值會儲存于寄存器rd 3604的最低有效位中。在另一實施例中,返回值會向左移兩個位,以產(chǎn)生一地址偏移,根據(jù)重新調(diào)度的原因,實現(xiàn)一軟件切換。
如同在圖35的實施例中,一零寄存器rs 3602值會導(dǎo)致線程被終止。然而,為了以-1達到圖35中所規(guī)定的線程的無條件式重調(diào)度,寄存器rs 3602是以利用INV及AND屏蔽值被編程以產(chǎn)生用于4個YQ輸入3614的任何“A”輸出的(A)|(-A)。
雖然各實施例已描述31個YQ輸入3614被提供以及一32位的架構(gòu)被說明,但在此所描述的YIELD指令3500并不限于這些實施例,而是可增加或減少輸入的數(shù)目及寄存器的大小。
在此所描述的多線程ASE自然可以硬件實施(例如在一中央處理單元“CPU”、微處理器、微控制器、數(shù)字信號處理器、處理器核心、單片系統(tǒng)“SOC”、或其它可編程裝置中或與其連接)。再者,多線程ASE可以配置于存儲該軟件的例如一計算機可使用(例如可讀取)媒體中的軟件(例如計算機可讀取程序代碼、程序代碼、或以任何形式存在的指令及/或數(shù)據(jù),如來源、對象或機器語言)來實現(xiàn)。此軟件實現(xiàn)在此所描述的裝置及過程的功能、制造、模塊化、仿真、描述及/或測試。舉例而言,此可通過一般編程語言(如C、C++)、GDSII數(shù)據(jù)庫、包含Verilog HDL、VHDL、AHDL(Altera HDL)的硬件描述語言(HDL)等等、或其它可使用的程序、數(shù)據(jù)庫及/或電路(即圖型)捕獲工具的使用而實現(xiàn)。此軟件可配置于任何已知計算機可使用的媒體,例如半導(dǎo)體、磁盤、光盤(例如CD-ROM、DVD-ROM等)且作為包含于一計算機可使用(例如可讀取)的傳輸媒體(例如載波或任何其它媒體,包括基于數(shù)字、光學(xué)或模擬的媒體)中的計算機數(shù)據(jù)信號。這樣,軟件可通過通訊網(wǎng)絡(luò)(包含網(wǎng)際網(wǎng)絡(luò)及內(nèi)部網(wǎng)絡(luò))被傳輸。
以軟件體現(xiàn)的一多線程ASE可被包含于一半導(dǎo)體知識產(chǎn)權(quán)核心,例如一處理器核心(例如以HDL體現(xiàn)的),并在集成電路的制做中被轉(zhuǎn)換為硬件。再者,在此所描述的多線程ASE亦可以一硬件及軟件的結(jié)合實施。
本領(lǐng)域的熟練技術(shù)人員顯然了解在此所描述的實施例可做許多的變化,而不偏離本發(fā)明的精神及范圍。舉例而言,使用MIPS處理器、架構(gòu)及技術(shù)描述的實施例被說明為特定實施例。在許多實施例中本發(fā)明可更廣泛地應(yīng)用,且并不限定在這些范例。再者,本領(lǐng)域的熟練技術(shù)人員可找到不同的方法,將上述的功能已不同的方式編程實現(xiàn),這些方法皆應(yīng)包含于本發(fā)明的范圍內(nèi)。在相對QoS的教示中,寄存器ThreadSchedule及VPESchedul3的內(nèi)容并不受長度的限定,且許多改變可包含于本發(fā)明的精神及范圍。
因此,本發(fā)明僅限定于以下的權(quán)利要求書的范圍。
最后,本領(lǐng)域的熟練技術(shù)人員當(dāng)知其可以容易地使用所述的概念及具體實施例作為設(shè)計或修改其它結(jié)構(gòu)以實施相同發(fā)明目的的基礎(chǔ),而不偏離下述權(quán)利要求所界定本發(fā)明的范圍及精神。
權(quán)利要求
1.一種在被配置成執(zhí)行并行程序線程的一微處理器上執(zhí)行的產(chǎn)出指令,所述指令包含一操作碼,用于指令所述微處理器暫停一線程的執(zhí)行,其中所述產(chǎn)出指令是所述線程中的一指令;以及一操作數(shù),其中若所述操作數(shù)是一第一預(yù)定值,則所述微處理器終止所述線程的執(zhí)行,其中若所述操作數(shù)是一第二預(yù)定值,則所述微處理器無條件地重新調(diào)度所述線程的執(zhí)行。
2.根據(jù)權(quán)利要求1所述的指令,其中所述操作數(shù)是儲存于所述微處理器的一寄存器中。
3.根據(jù)權(quán)利要求1所述的指令,其中所述寄存器是所述指令所規(guī)定的多個通用寄存器中的一個。
4.根據(jù)權(quán)利要求1所述的指令,其中所述操作數(shù)是儲存于一堆棧存儲器中。
5.根據(jù)權(quán)利要求1所述的指令,其中所述微處理器重新調(diào)度所述線程的執(zhí)行,包含按照一線程調(diào)度策略,所述處理器指定適合執(zhí)行的所述線程。
6.根據(jù)權(quán)利要求1所述的指令,其中如果所述操作數(shù)是在一組預(yù)定值內(nèi)的一個值,則所述處理器有條件地重新調(diào)度所述線程的執(zhí)行,其中所述組預(yù)定值排除所述第一及第二預(yù)定值。
7.根據(jù)權(quán)利要求6所述的指令,其中所述微處理器有條件地重新調(diào)度所述線程的執(zhí)行,包含所述微處理器僅在所述操作數(shù)所規(guī)定的一條件被滿足后,按照一線程調(diào)度策略,指定適合執(zhí)行的所述線程。
8.根據(jù)權(quán)利要求7所述的指令,其中所述操作數(shù)規(guī)定多個限定輸入中的一或多個限定輸入,其中如果所述多個限定輸入中的所述一或多個限定輸入中的至少一個為真,則所述條件被滿足。
9.根據(jù)權(quán)利要求8所述的指令,還包括一第二操作數(shù),用于接收所述指令的一結(jié)果值,所述結(jié)果值規(guī)定響應(yīng)所述指令而取樣的所述多個限定輸入的一狀態(tài)。
10.根據(jù)權(quán)利要求9所述的指令,其中所述結(jié)果值包含一位向量。
11.根據(jù)權(quán)利要求8所述的指令,其中如果所述操作數(shù)規(guī)定了所述微處理器所接收的在該微處理器的可編程屏蔽寄存器中未被規(guī)定的所述多個限定輸入中的一或多個限定輸入,則所述微處理器產(chǎn)生所述產(chǎn)出指令的一異常。
12.根據(jù)權(quán)利要求6所述的指令,其中所述組預(yù)定值包含正整數(shù)。
13.根據(jù)權(quán)利要求1所述的指令,還包括一第二操作數(shù),用于接收所述指令的一結(jié)果值。
14.根據(jù)權(quán)利要求13所述的指令,其中所述第二操作數(shù)儲存于所述微處理器的一寄存器中。
15.根據(jù)權(quán)利要求14所述的指令,其中所述寄存器是所述指令所規(guī)定的多個通用寄存器中的一個。
16.根據(jù)權(quán)利要求1所述的指令,其中所述第二操作數(shù)儲存于一堆棧存儲器中。
17.根據(jù)權(quán)利要求1所述的指令,其中所述微處理器暫停所述線程的執(zhí)行,包含所述微處理器停止獲取以及發(fā)出所述線程中的指令。
18.根據(jù)權(quán)利要求1所述的指令,其中所述微處理器終止所述線程的執(zhí)行,包含所述微處理器終止獲取以及發(fā)出所述線程中的指令。
19.根據(jù)權(quán)利要求1所述的指令,其中所述微處理器終止所述線程的執(zhí)行,包含所述微處理器將先前為所述線程的執(zhí)行所分配的硬件資源釋放,使得所述被釋放的硬件資源可用于另一線程的分配。
20.根據(jù)權(quán)利要求19所述的指令,其中所述硬件資源包含一程序計數(shù)寄存器。
21.根據(jù)權(quán)利要求19所述的指令,其中所述硬件資源包含一組通用寄存器。
22.根據(jù)權(quán)利要求1所述的指令,其中所述第一預(yù)定值是零(0)。
23.根據(jù)權(quán)利要求1所述的指令,其中所述第二預(yù)定值是負1(-1)。
24.根據(jù)權(quán)利要求1所述的指令,其中所述線程包含一序列程序指令。
25.根據(jù)權(quán)利要求24所述的指令,其中所述線程還包括所述微處理器的一序態(tài)改變序列,該狀態(tài)改變序列與所述程序指令序列的執(zhí)行相關(guān)聯(lián)。
26.一種用于執(zhí)行一指令的微處理器,所述指令指示所述微處理器選擇性地調(diào)度或終止包含所述指令的一程序線程的執(zhí)行,所述微處理器包含一操作數(shù);以及一調(diào)度器,被連接以接收所述操作數(shù),用于如果所述操作數(shù)是一第一預(yù)定值,則終止所述線程的執(zhí)行,以及用于如果所述操作數(shù)是一第二預(yù)定值,則調(diào)度所述線程的執(zhí)行。
27.根據(jù)權(quán)利要求26所述的微處理器,還包括一寄存器,用于儲存所述指令的所述操作數(shù)。
28.根據(jù)權(quán)利要求27所述的微處理器,其中所述寄存器包含所述指令所規(guī)定的一通用寄存器。
29.根據(jù)權(quán)利要求26所述的微處理器,還包括多個輸入,與所述調(diào)度器連接,用于指示對應(yīng)的多個事件;其中如果所述操作數(shù)是在排除所述第一及所述第二預(yù)定值的一組預(yù)定值中,則所述操作數(shù)是規(guī)定所述多個輸入中的一或多個輸入的一位向量。
30.根據(jù)權(quán)利要求29所述的微處理器,其中如果所述操作數(shù)是在所述一組預(yù)定值中,則所述調(diào)度器暫停所述線程的執(zhí)行,直到所述位向量所規(guī)定的所述多個輸入中的所述一或多個輸入中的至少一輸入為真。
31.根據(jù)權(quán)利要求29所述的微處理器,其中所述多個輸入中的至少一個輸入接收在所述微處理器的外部產(chǎn)生的一信號。
32.根據(jù)權(quán)利要求29所述的微處理器,其中所述多個輸入中的至少一個輸入接收在所述微處理器的內(nèi)部產(chǎn)生的一信號。
33.根據(jù)權(quán)利要求29所述的微處理器,還包括一屏蔽寄存器,與所述調(diào)度器連接,用于儲存規(guī)定所述多個輸入中的一或多個輸入的一值。
34.根據(jù)權(quán)利要求33所述的微處理器,其中如果所述操作數(shù)是在所述一組預(yù)定值中,則如果所述操作數(shù)規(guī)定了所述屏蔽寄存器值未規(guī)定的所述多個輸入的一或多個輸入,則所述微處理器產(chǎn)生所述指令的一異常。
35.根據(jù)權(quán)利要求33所述的微處理器,還包括一第二寄存器,與所述多個輸入及所述屏蔽寄存器連接,用于儲存所述指令的一結(jié)果值,所述結(jié)果值規(guī)定響應(yīng)所述指令被取樣并由所述屏蔽寄存器值所限定的所述多個輸入的狀態(tài)。
36.根據(jù)權(quán)利要求29所述的微處理器,還包括一第二寄存器,與所述多個輸入連接,用于儲存所述指令的一結(jié)果值,所述結(jié)果值規(guī)定響應(yīng)于所述指令被取樣的所述多個輸入的一狀態(tài)。
37.根據(jù)權(quán)利要求26所述的微處理器,其中所述第一預(yù)定值是零(0)以及所述第二預(yù)定值是負一(-1)。
38.一種在一微處理器中選擇性暫停或終止一線程的執(zhí)行的方法,包含發(fā)出所述線程中的一指令,所述指令規(guī)定了一操作數(shù);如果所述操作數(shù)是一第一預(yù)定值,則終止所述線程的執(zhí)行;以及如果所述操作數(shù)是一第二預(yù)定值,則無條件地重調(diào)度所述線程的執(zhí)行,其中所述第一預(yù)定值不同于所述第二預(yù)定值。
39.根據(jù)權(quán)利要求38所述的方法,其中所述微處理器被配置成監(jiān)視事件信號,其中如果所述操作數(shù)是在一組預(yù)定值內(nèi),則所述操作數(shù)規(guī)定這些事件信號中的一或多個信號,所述方法還包括如果所述操作數(shù)在該組預(yù)定值內(nèi),則暫停所述線程的執(zhí)行,直到所述操作數(shù)所規(guī)定的這些事件信號中的一或多個信號中的至少一信號為真。
40.根據(jù)權(quán)利要求39所述的方法,還包括在所述發(fā)出之后,取樣所述一或多個事件信號的一值;以及儲存所述取樣的值作為所述指令的一結(jié)果值。
41.根據(jù)權(quán)利要求40所述的方法,其中所述儲存所述取樣的值包含儲存所述取樣值在所述指令所規(guī)定的一結(jié)果寄存器中。
42.根據(jù)權(quán)利要求39所述的方法,還包括決定是否由所述操作數(shù)所規(guī)定的所述一或多個事件信號的全部也在所述微處理器的一屏蔽寄存器中被規(guī)定;若在所述屏蔽寄存器中,并非所有所述操作數(shù)所規(guī)定的所述事件信號的所述一或多個事件信號的全部皆被激活,則產(chǎn)生所述指令的一異常。
43.根據(jù)權(quán)利要求39所述的方法,還包括一旦所述操作數(shù)所規(guī)定的所述一或多個事件信號中的至少一個事件信號為真,則重新調(diào)度所述線程的執(zhí)行。
44.根據(jù)權(quán)利要求39所述的方法,其中所述第一預(yù)定值是零(0),其中所述第二預(yù)定值是負1(-1),以及其中所述一組預(yù)定值包括正整數(shù)。
45.根據(jù)權(quán)利要求38所述的方法,還包括如果所述操作數(shù)是所述第一預(yù)定值,則釋放先前分配給該線程的該線程上下文,用于由一新線程隨后使用。
46.根據(jù)權(quán)利要求38所述的方法,其中所述第一預(yù)定值是零(0),其中所述第二預(yù)定值是負1(-1)。
47.一種處理系統(tǒng),包含多個信號源;以及一微處理器,連接以接收由所述多個信號源所產(chǎn)生的多個信號,所述微處理器被配置成執(zhí)行一程序線程內(nèi)的一指令,以及若所述指令的一操作數(shù)是一第一預(yù)定值,則終止所述線程的執(zhí)行,否則根據(jù)由所述操作數(shù)所規(guī)定的所述多個信號中的一或多個信號的條件,重調(diào)度所述線程的執(zhí)行。
48.根據(jù)權(quán)利要求47所述的處理系統(tǒng),其中如果所述操作數(shù)是一第二預(yù)定值,則所述微處理器被配置成無條件地重調(diào)度所述線程的執(zhí)行。
49.根據(jù)權(quán)利要求48所述的處理系統(tǒng),其中如果所述操作數(shù)是在排除所述第一及所述第二預(yù)定值的所述組預(yù)定值內(nèi),則所述微處理器被配置成根據(jù)所述操作數(shù)所規(guī)定的所述多個信號中的一或多個信號的條件,有條件地重新調(diào)度所述線程的執(zhí)行。
50.根據(jù)權(quán)利要求47所述的處理系統(tǒng),其中所述多個信號源的至少一信號源包含一輸入/輸出裝置。
51.根據(jù)權(quán)利要求47所述的處理系統(tǒng),其中所述指令返回指示所述多個信號的一值的一操作數(shù),。
52.根據(jù)權(quán)利要求47所述的處理系統(tǒng),還包括多個寄存器,連接于所述多個信號源及所述微處理器之間,用于將所述多個信號源映射至所述微處理器的多個輸入。
53.根據(jù)權(quán)利要求47所述的處理系統(tǒng),其中所述微處理器還包括多個寄存器,被連接以接收所述多個信號,用于將所述多個信號映射至多個限定輸入,其中所述操作數(shù)規(guī)定由所述微處理器在所述限定輸入上所執(zhí)行的一布爾函數(shù),以確定用于有條件地重新調(diào)度所述線程的執(zhí)行的條件。
54.根據(jù)權(quán)利要求47所述的處理系統(tǒng),其中所述微處理器還包括一寄存器,被連接以儲存所述操作數(shù)。
55.根據(jù)權(quán)利要求47所述的處理系統(tǒng),還包括一存儲器,與所述微處理器連接,用于將所述操作數(shù)儲存于所述微處理器所包括的一操作數(shù)棧中。
56.一種計算機程序產(chǎn)品,與一計算裝置一同使用,所述計算機程序產(chǎn)品包含一計算機可使用媒體,所述媒體包含有計算機可讀取程序代碼,用于導(dǎo)致一微處理器執(zhí)行一指令,所述指令指示所述微處理器選擇性地調(diào)度或終止包含所述指令的一程序線程的執(zhí)行,所述計算機可讀取程序代碼包含提供所述指令的一操作數(shù)的第一程序代碼;以及提供一調(diào)度器的第二程序代碼,被連接以接收所述操作數(shù),用于如果所述操作數(shù)是一第一預(yù)定值,則終止所述線程的執(zhí)行,以及若所述操作數(shù)是一第二預(yù)定值,則調(diào)度所述線程的執(zhí)行。
57.根據(jù)權(quán)利要求56所述的計算機程序產(chǎn)品,其中所述計算機可讀取程序代碼還包括用于提供多個輸入的第三程序代碼,被連接至所述調(diào)度器,用于指示對應(yīng)的多個事件,其中如果所述操作數(shù)是在排除所述第一及所述第二預(yù)定值的一組預(yù)定值內(nèi),則所述操作數(shù)是規(guī)定所述多個輸入中的一或多個輸入的位向量。
58.根據(jù)權(quán)利要求57所述的計算機程序產(chǎn)品,其中所述計算機可讀取程序代碼還包括提供一屏蔽寄存器的第四程序代碼,被連接至所述調(diào)度器,用于儲存規(guī)定所述多個輸入中的一或多個輸入的一值。
59.根據(jù)權(quán)利要求58所述的計算機程序產(chǎn)品,其中所述計算機可讀取程序代碼還包括用于提供一第二寄存器的第五程序代碼,被連接至所述多個輸入及所述屏蔽寄存器,用于儲存所述指令的一結(jié)果值,所述結(jié)果值規(guī)定響應(yīng)所述指令所取樣且由所述屏蔽寄存器所限定的所述多個輸入的一狀態(tài)。
60.一種包含于一傳輸媒體內(nèi)的計算機數(shù)據(jù)信號,包括計算機可讀取程序代碼,用于提供一微處理器執(zhí)行一指令,所述指令指示所述微處理器選擇性地調(diào)度或終止包含所述指令的一程序線程的執(zhí)行,所述程序代碼包含提供一寄存器的第一程序代碼,用于儲存所述指令的一操作數(shù);以及提供一調(diào)度器的第二程序代碼,被連接到所述寄存器,用于如果所述操作數(shù)是一第一預(yù)定值,則終止所述線程的執(zhí)行,以及如果所述操作數(shù)是一第二預(yù)定值,則調(diào)度所述用于執(zhí)行的線程。
61.根據(jù)權(quán)利要求60所述的計算機數(shù)據(jù)信號,其中所述計算機可讀取程序代碼還包括提供多個輸入的第三程序代碼,被連接至所述調(diào)度器,用于指示對應(yīng)的多個事件,其中如果所述操作數(shù)是在排除所述第一及所述第二預(yù)定值的一組預(yù)定值內(nèi),則所述操作數(shù)是規(guī)定所述多個輸入中的一或多個輸入的一位向量。
62.根據(jù)權(quán)利要求61所述的計算機數(shù)據(jù)信號,其中所述計算機可讀取程序代碼還包括提供一屏蔽寄存器的第四程序代碼,被連接至所述調(diào)度器,用于儲存規(guī)定所述多個輸入中的一或多個輸入的一值。
63.根據(jù)權(quán)利要求62所述的計算機數(shù)據(jù)信號,其中所述計算機可讀取程序代碼還包括提供一第二寄存器的第五程序代碼,被連接到所述多個輸入及所述屏蔽寄存器,用于儲存所述指令的一結(jié)果值,所述結(jié)果值規(guī)定響應(yīng)于所述指令取樣且由所述屏蔽寄存器值所限定的所述多個輸入的一狀態(tài)。
全文摘要
本發(fā)明公開一種在一多線程的微處理器中執(zhí)行的一產(chǎn)出(yield)指令。此產(chǎn)出指令包含一操作數(shù)。若操作數(shù)為零,則微處理器終止包含此產(chǎn)出指令的程序線程。若操作數(shù)為-1,則微處理器無條件地重新調(diào)度此程序線程。若操作數(shù)為一正整數(shù),則微處理器視操作數(shù)為一位向量,其規(guī)定一或多個產(chǎn)出限定輸入,例如中斷信號,并根據(jù)此限定輸入及位向量值,有條件地調(diào)度此程序線程。微處理器還包含一屏蔽寄存器,規(guī)定這些限定輸入的一位向量。若此操作數(shù)規(guī)定并未規(guī)定于一屏蔽寄存器的一限定輸入,則產(chǎn)生此指令的一異常。此指令返回一值,該值規(guī)定由屏蔽寄存器值限定的限定輸入的值。
文檔編號G06F9/318GK1846194SQ200480024852
公開日2006年10月11日 申請日期2004年8月27日 優(yōu)先權(quán)日2003年8月28日
發(fā)明者凱文·基塞爾 申請人:美普思科技有限公司