亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

在一個多線程處理器內(nèi)停用時鐘信號的方法和裝置的制作方法

文檔序號:6638270閱讀:243來源:國知局
專利名稱:在一個多線程處理器內(nèi)停用時鐘信號的方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明通常涉及多線程處理器領(lǐng)域,更具體地涉及一種用于在一個多線程(MT)處理器內(nèi)停用一個時鐘信號的方法和裝置。
發(fā)明
背景技術(shù)
多線程(MT)處理器設(shè)計近來已經(jīng)被認為是一個越來越吸引人的、用于增加處理器性能的選擇。在一個處理器內(nèi)的多線程,特別提供了用于更有效地使用各種處理器資源、和尤其用于更有效地使用在一個處理器內(nèi)的執(zhí)行邏輯的可能性。具體來說,通過傳送多個線程到一個處理器的執(zhí)行邏輯,否則將由于在一個特定線程處理過程中的一個停止或者其它延遲而成為空閑的時鐘周期可以被利用以服務(wù)于一個進一步的線程。在一個特定線程處理過程中的一個停止可以由在一個處理器流水線內(nèi)的許多事故引起。例如,對于包含在一個線程內(nèi)的一條指令來說,一個高速緩存未中或者一個分支預(yù)測錯誤(即,一個長的延遲操作)通常會導(dǎo)致相關(guān)線程處理過程的停止。長延遲操作在執(zhí)行邏輯效率上的負面影響由近來在執(zhí)行邏輯吞吐量中的增加而被加重,其中該增加在存儲器訪問和檢索速率中有超前的提高。
鑒于由許多流行的操作系統(tǒng),諸如Windows NT和UNIX操作系統(tǒng)、對這種多線程應(yīng)用的支持,多線程計算機應(yīng)用也變得越來越普遍。多線程計算機應(yīng)用尤其在多媒體領(lǐng)域是有效率的。
依據(jù)在相關(guān)處理器內(nèi)使用的線程交叉或切換方案,多線程處理器大致可以被分為兩個類別(即,精細或者粗糙設(shè)計)。精細多線程設(shè)計在一個處理器內(nèi)支持多個活動的線程,而且通常在一個周期接一個周期的基礎(chǔ)上交叉兩個不同的線程。粗糙多線程設(shè)計一般在發(fā)生某些長延遲事件、諸如一個高速緩存未中時交叉不同線程的指令。一個粗糙多線程設(shè)計在1996年5月、第23期Annual InternationalSvmposium on Computer Architecture的203-212頁上、由Eickemayer,R.、Johnson,R.等人所著的“Evaluation ofMultithreaded Uniprocessors for Commercial ApplicationEnvironments”中進行了討論。在由Massachusetts Norwell的Kluwer Academic出版社于1994年出版的、由R.A.lannuci等人編輯的Multithreaded Computer ArchitecturesA Summary of theState of the Art的167-200頁上、由Laudon,I、Gupta,A所著的“Architectural and Implementation Tradeoffs in the Designof Multiple Context Processors”中,進一步討論了在精細和粗糙設(shè)計之間的區(qū)別。Laudon進一步提出了一種把一個精細設(shè)計中的一個周期接一個周期的切換和一個粗糙設(shè)計中的完全流水線互鎖(或者分塊方案)組合在一起的交叉方案。為此,Laudon提出了一條使一個特定線程(或者環(huán)境)不可用持續(xù)一個特定周期數(shù)目的“后退”指令。可以依據(jù)預(yù)定事件、諸如一個高速緩存未中的發(fā)生,發(fā)布這樣的一條“后退”指令。這樣,Laudon通過簡單地使一個線程不可用而避免了執(zhí)行一個實際的線程切換。
一個用于一個處理器的多線程結(jié)構(gòu)在一個無序的推測性執(zhí)行處理器體系結(jié)構(gòu)的環(huán)境中給出了許多進一步的難題。更具體地說,當(dāng)考慮多線程時,可能導(dǎo)致在一個指令流的流動中一個意外變化的事件(例如,轉(zhuǎn)移指令、例外或者中斷)的處理是復(fù)雜的。在一個實現(xiàn)了在多個線程之間共享資源(即有有限的、或者沒有功能單元的復(fù)制用于由該處理器支持的每一個線程)的處理器中,關(guān)于一個特定線程的事件發(fā)生的處理是復(fù)雜的,這是因為在處理這種事件中必須考慮進一步的線程。
在一個多線程處理器內(nèi)實現(xiàn)了資源共享的地方,響應(yīng)于在該多線程處理器內(nèi)正被服務(wù)的線程狀態(tài)中的變化,試圖增加該共享資源的使用率是更令人期望的。
發(fā)明概述根據(jù)本發(fā)明,提供了一種方法,包含相對于多線程處理器內(nèi)支持的多個線程中的每一個,保持一個待決事件的一個指示。為在該多線程處理器內(nèi)支持的多個線程中的每一個保持一個活動或者不活動狀態(tài)的一個指示。檢測由相對于多個線程中每一個的非待決事件指示和用于每一個線程的不活動狀態(tài)所指示的一個時鐘停用條件。如果一個時鐘信號被啟用了,則響應(yīng)于該時鐘停用條件的檢測,相對于在該多線程處理器內(nèi)的至少一個功能單元,停用該時鐘信號。
通過附圖及其后的詳細說明,本發(fā)明的這些及其它特征和優(yōu)點將會是顯然的。
附圖簡要說明本發(fā)明通過舉例進行說明而且不局限于附圖中的圖表,在附圖中類似的附圖標記表示類似的單元,其中

圖1是一個框圖,說明了一個具有多線程支持的處理器中的一條流水線的一個實施例。
圖2是一個框圖,其以一個通用多線程微處理器的形式說明了一個處理器的一個示范性實施例。
圖3是一個框圖,說明了一個示范多線程微處理器中的所選組件,并且具體描述了各種提供一個緩存(或者存儲)性能的功能單元,其中該緩存被邏輯分區(qū)以容納多個線程。
圖4是依據(jù)一個實施例、說明了一個無序群集的一個框圖。
圖5是一個寄存器別名表和一個寄存器堆的圖解表示,并且在一個實施例內(nèi)使用。
圖6A是一個依據(jù)一個實施例、說明了有關(guān)一個重新排序緩存的詳情的框圖,其中該緩存被邏輯分區(qū)以服務(wù)在一個多線程處理器內(nèi)的多個線程。
圖6B是依據(jù)一個實施例的一個待決事件寄存器和一個事件禁止寄存器的一個圖解表示。
圖7A是一個流程圖,其依據(jù)一個實施例說明了一種在一個多線程處理器內(nèi)處理一個事件的方法。
圖7B是一個流程圖,其依據(jù)一個實施例說明了一種在一個多線程處理器內(nèi)處理一個“虛擬清空”事件的方法。
圖8是可以由依據(jù)一個實施例、在一個多線程處理器內(nèi)實現(xiàn)的一個事件檢測器檢測到的多個示例事件的一個圖解表示。
圖9和10中的框圖分別顯示了在一個諸如如圖6A所示的示例重新排序緩存中的一個重新排序表的示例內(nèi)容。
圖11A是一個流程圖,其依據(jù)一個示例實施例說明了一種在一個支持至少第一和第二線程的多線程處理器內(nèi)執(zhí)行一個清除(或者清空)操作的方法。
圖11B是一個框圖,其依據(jù)一個示例實施例說明了配置邏輯,其中該邏輯根據(jù)一個活動線程狀態(tài)機的輸出進行操作以配置一個功能單元。
圖12是一個時序圖,其依據(jù)一個實施例說明了一個清空信號的斷定。
圖13是一個流程圖,其依據(jù)一個實施例說明了一種在一個多線程處理器內(nèi)提供對一個事件處理器的排它訪問的方法。
圖14是一個狀態(tài)圖,其依據(jù)一個實施例描述了在一個多線程處理器內(nèi)實現(xiàn)的一個排它訪問狀態(tài)機的操作。
圖15是一個狀態(tài)圖,其依據(jù)一個實施例說明了可以由在一個多線程處理器內(nèi)實現(xiàn)的一個活動線程狀態(tài)機占據(jù)的狀態(tài)。
圖16A是一個流程圖,依據(jù)一個實施例說明了一種在一個多線程處理器內(nèi)檢測到用于一個活動線程的一個睡眠事件時,退出該活動線程的方法。
圖16B是一個依據(jù)一個實施例、當(dāng)退出一個線程時存儲寄存器的狀態(tài)和解定位的圖解表示。
圖17是一個流程圖,依據(jù)一個實施例說明了一種在檢測到用于一個不活動線程的一個中斷事件時、把該線程從一個不活動狀態(tài)轉(zhuǎn)換到一個活動狀態(tài)的方法。
圖18被一個流程圖,其依據(jù)一個實施例說明了一種管理向在一個多線程處理器內(nèi)的至少一個功能單元啟用和停用一個時鐘信號的方法。
圖19A是一個框圖,依據(jù)一個實施例說明了用于在一個多線程處理器內(nèi)啟用和停用一個時鐘信號的時鐘控制邏輯。
圖19B是一個示意圖,顯示了如圖19A所示的時鐘控制邏輯的一個實施例。
詳細說明這里描述了一種用于在一個多線程處理器內(nèi)管理一個時鐘信號的方法和裝置。在下面的描述中,為了說明起見,闡述了許多具體的細節(jié)以便提供對本發(fā)明的一個徹底了解。然而,對本領(lǐng)域技術(shù)人員來說,顯然可以實踐本發(fā)明而不用這些細節(jié)。
為了本說明書起見,使用的術(shù)語“事件”應(yīng)當(dāng)包含在一個處理器內(nèi)部或外部的任何事件,其導(dǎo)致對在一個處理器內(nèi)的一個指令流(宏或者微指令)服務(wù)的改變或者中斷。據(jù)此,采用的術(shù)語“事件”應(yīng)當(dāng)包含,但不局限于,可以在該處理器內(nèi)部或外部產(chǎn)生的轉(zhuǎn)移指令處理、例外和中斷。
為了本說明書起見,術(shù)語“處理器”應(yīng)當(dāng)用來涉及能夠執(zhí)行一個指令(例如,宏或者微指令)序列的任何機器,而且應(yīng)當(dāng)用來包含,但不局限于,通用微處理器、專用微處理器、圖形控制器、音頻控制器、多媒體控制器、微型控制器或者網(wǎng)絡(luò)控制器。此外,采用的術(shù)語“處理器”應(yīng)當(dāng)尤其涉及復(fù)雜指令集計算機(Complex InstructionSet Computers,CISC)、精簡指令集計算機(Reduced InstructionSet Computers,RISC)、或者超長指令字(Very Long InstructionWorld,VLIW)處理器。
此外,采用的術(shù)語“清除點”應(yīng)當(dāng)包含通過一個流標記或者其它指令在一個指令流(包含一個微指令或者宏指令流)中提供的、在該指令流中一個可以處理一個事件的位置處的任何指令。
采用的術(shù)語“指令”應(yīng)當(dāng)包含,但不局限于,一條宏指令或者一條微指令。
本發(fā)明的某些示例實施例被描述為主要以硬件或者軟件實現(xiàn)。盡管如此,但是那些本領(lǐng)域技術(shù)人員還可以理解許多特征可以容易地以硬件、軟件或者硬件和軟件的一個組合來實現(xiàn)。用于實現(xiàn)本發(fā)明實施例的軟件(例如,任何微指令以及宏指令)可以完全或者至少部分地駐留在一個可由一個處理器訪問及/或在該處理器本身內(nèi)的主存儲器(例如,在一個高速緩存或者一個微碼定序器內(nèi))中。例如,事件處理器和狀態(tài)機可以以從一個微碼定序器發(fā)送的微碼形式實現(xiàn)。
軟件可以進一步經(jīng)由網(wǎng)絡(luò)接口設(shè)備傳送或者接收。
為了這個說明書起見,采用的術(shù)語“機器可讀介質(zhì)”應(yīng)當(dāng)包含任何能夠存儲或者編碼一個指令序列用于由該機器執(zhí)行并且導(dǎo)致該機器執(zhí)行本發(fā)明中的任何一種方法的介質(zhì)。
采用的術(shù)語“機器可讀介質(zhì)”因此應(yīng)當(dāng)包含,但不局限于,固態(tài)存儲器、光和磁盤、以及載波信號。
處理器流水線圖1是說明了處理器流水線10的一個實施例的一個高級框圖。流水線10包含多個流水線階段,其從一個檢索指令(例如,宏指令)并且把該指令送入流水線10的取指令流水線階段12開始。例如,一條宏指令可以從與該處理器集成或者與該處理器緊密相關(guān)的一個高速緩沖存儲器中檢索得到,或者可以經(jīng)由一條處理器總線從一個外部主存儲器檢索得到。宏指令從取指令階段12傳送到一個解碼流水線階段14,其中宏指令被翻譯為適于在該處理器內(nèi)執(zhí)行的微指令(也稱為“微碼”)。然后該微指令向下傳送到一個分配流水線階段16,在那兒依據(jù)可用性和需要把處理器資源分配給各種微指令。然后該微指令在被收回之前在一個執(zhí)行階段18中被執(zhí)行,或者在一個收回流水線階段20中被“寫回”(例如,提交到一個體系結(jié)構(gòu)狀態(tài))。
微處理器體系結(jié)構(gòu)圖2是一個框圖,其以一個通用多線程微處理器的形式,說明了一個處理器30的一個示例實施例。如下所述,處理器30是一個多線程(MT)處理器,而且因此能夠處理多個指令線程(或者環(huán)境)。然而,在該說明書中下面提供的許多示教不專門針對一個多線程處理器,并且可能在一個單線程處理器中找到應(yīng)用。在一個示例實施例中,處理器30可以包含一個能夠執(zhí)行Intel結(jié)構(gòu)指令集的Intel結(jié)構(gòu)(IA)微處理器。這樣一個Intel結(jié)構(gòu)微處理器的示例是由Califorinia,Santa Clara的Intel公司制造的Pentium Pro微處理器或者Pentium III微處理器。
在一個實施例中,處理器30包含一個有序前端和一個無序后端。該有序前端包含一個總線接口單元32,其起到在處理器30和一個其中可以使用該處理器30的計算機系統(tǒng)中的其它組件(例如,主存儲器)之間的流水線作用。為此,總線接口單元32把處理器30連接到一條處理器總線(沒有顯示),經(jīng)由該處理器總線可以在處理器30處接收數(shù)據(jù)和控制信息并且從處理器30傳送數(shù)據(jù)和控制信息??偩€接口單元32包含控制通過該處理器總線進行通信的前側(cè)總線(FSB)邏輯34??偩€接口單元32進一步包含一個總線隊列36,其對于通過該處理器總線的通信提供一個緩沖功能??偩€接口單元32被顯示為從一個在處理器30內(nèi)提供一個局部存儲器性能的存儲器執(zhí)行單元42中接收總線請求38,以及發(fā)送探聽或者總線返回到該存儲器執(zhí)行單元42。該存儲器執(zhí)行單元42包含一個統(tǒng)一的數(shù)據(jù)與指令高速緩存44、一個數(shù)據(jù)翻譯后援緩存(TLB)46、以及存儲器排序緩存48。存儲器執(zhí)行單元42從一個微指令翻譯引擎54接收指令取出請求50,并且傳送原始指令52(即,編碼的宏指令)到該微指令翻譯引擎54,其中該微指令翻譯引擎54把接收到的宏指令翻譯成為一組相應(yīng)的微指令。
因為如果發(fā)生一個軌跡高速緩存未中時,該微指令翻譯引擎54進行操作以傳送微指令到一個軌跡高速緩存62,所以該微指令翻譯引擎54事實上操作作為一個軌跡高速緩存“未中處理器”。為此,如果發(fā)生一個軌跡高速緩存未中,則微指令翻譯引擎54就起到提供取指令和解碼流水線階段12和14的作用。顯示的微指令翻譯引擎54包含一個下一指令指針(NIP)100、一個指令翻譯后援緩沖器(TLB)102、一個轉(zhuǎn)移預(yù)測器104、一個指令流緩存106、一個指令預(yù)解碼器108、指令控制邏輯110、一個指令解碼器112、和一個轉(zhuǎn)移地址計算器114。下一指令指針100、TLB 102、轉(zhuǎn)移預(yù)測器104以及指令流緩存106一起構(gòu)成了一個轉(zhuǎn)移預(yù)測單元(BPU)99。指令解碼器112和轉(zhuǎn)移地址計算器114一起組成了一個指令翻譯(IX)單元113。
下一指令指針100發(fā)布下一個指令請求到統(tǒng)一的高速緩存44。在其中處理器30包含一個能夠處理兩個線程的多線程微處理器的示例實施例中,下一指令指針100可以包含一個多路復(fù)用器(MUX)(沒有顯示),其在與第一個或者第二個線程相關(guān)的指令指針之間進行選擇用于包含在由此發(fā)布的下一個指令請求內(nèi)。在一個實施例中,假定用于兩個線程的指令都已經(jīng)被請求了,而且用于兩個線程的指令流緩存106資源都還沒有被用盡,則該下一指令指針100將在一個周期接一個周期(“往復(fù)轉(zhuǎn)換”)的基礎(chǔ)上,交叉用于第一和第二線程的下一個指令請求。取決于初始請求地址是否在一個32字節(jié)或者64字節(jié)定位行的上半部,下一指令指針請求可以是16、32或者64字節(jié)。下一指令指針100可以由轉(zhuǎn)移預(yù)測器104、轉(zhuǎn)移地址計算器114或者軌跡高速緩存62重定向,其中一個軌跡高速緩存未中請求是最高優(yōu)先級的重定向請求。
當(dāng)下一指令指針100做出一個到統(tǒng)一高速緩存44的指令請求時,它產(chǎn)生一個兩位的“請求標識符”,該標識符與該指令請求相關(guān)聯(lián)并且起到一個用于該相關(guān)指令請求的“標記”作用。
當(dāng)響應(yīng)于一個指令請求返回數(shù)據(jù)時,該統(tǒng)一高速緩存44和數(shù)據(jù)一起返回下列標記或者標識符1.由下一指令指針100提供的“請求標識符”;2.一個標識返回塊的三位“塊標識符”;以及
3.一個標識返回數(shù)據(jù)所屬線程的“線程標識符”。
下一指令請求從下一指令指針100傳送到指令TLB 102,該TLB 102執(zhí)行一個地址查找操作,并且傳送一個物理地址到統(tǒng)一的高速緩存44。統(tǒng)一的高速緩存44傳送一個相應(yīng)的宏指令到指令流緩存106。每一個下一指令請求也都從下一指令指針100直接傳送到該指令流緩存106,以便允許該指令流緩存106標識從該統(tǒng)一高速緩存44接收到的一個宏指令屬于哪個線程。來自于第一和第二線程的宏指令然后從該指令流緩存106發(fā)布到指令預(yù)解碼器108,指令預(yù)解碼器108對于一個接收的指令流(宏指令)執(zhí)行多個長度計算和字節(jié)標記操作。具體地說,該指令預(yù)解碼器108產(chǎn)生一系列字節(jié)標記向量,其尤其服務(wù)于把在該指令流內(nèi)、要傳送到指令控制邏輯110的宏指令劃分開。
指令控制邏輯110然后為了解碼,利用該字節(jié)標記向量來引導(dǎo)離散的宏指令到指令解碼器112中。為了轉(zhuǎn)移地址計算起見,宏指令也從該指令控制邏輯110傳送到轉(zhuǎn)移地址計算器114。微指令然后從該指令解碼器112傳送到軌跡傳送引擎60。
在解碼期間,流標記與一個宏指令被翻譯成的每一個微指令相關(guān)聯(lián)。一個流標記指示相關(guān)微指令的一個特征,而且可以,例如,指示相關(guān)的微指令是在表示一個宏指令的一個微碼序列中的第一個或者最后一個微指令。流標記包含一個“宏指令開始”(BOM)和一個“宏指令末端”(EOM)流標記。根據(jù)本發(fā)明,解碼器112可以進一步解碼該微指令,以具有與此相關(guān)的共享資源(多處理器)(SHRMP)流標記和同步(SYNC)流標記。具體來說,一個共享資源流標記把一個微指令標識作為在一個特定線程內(nèi)的位置,在該位置處,和在該線程中的別處相比,該線程可以被中斷(例如,重新啟動或者暫停)而具有較少的負面后果。在本發(fā)明的一個示例實施例中,解碼器12被構(gòu)造為用一個共享資源流標記來標記組成一個原始宏指令的結(jié)尾或者開始的微指令、以及在較長微碼序列中的間斷點。一個同步流標記把一個微指令標識作為在一個特定線程內(nèi)的一個位置,在該位置處,響應(yīng)于例如在另一個線程內(nèi)的一個同步指令,該線程可以與另一個線程同步。為了本說明書起見,采用的術(shù)語“同步”應(yīng)當(dāng)涉及在至少一個線程中標識至少一個第一點,在該點處,可以根據(jù)那個線程及/或至少一個進一步線程,相對于在那個線程或者在另一個線程中的一個第二點,減小或者降低對該處理器的破壞來修改處理器狀態(tài)。
在本發(fā)明的一個示例實施例中,解碼器112被構(gòu)造為標記位于選定宏指令邊界處的微指令,其中在同一個處理器中共存的線程之間共享的狀態(tài)能夠由一個線程進行改變而不會不利地影響其它線程的執(zhí)行。
被解碼的指令(即,微指令)從微指令翻譯引擎54中發(fā)送到一個軌跡傳送引擎60。該軌跡傳送引擎60包含一個軌跡高速緩存62、一個軌跡轉(zhuǎn)移預(yù)測器(BTB)64、一個微碼定序器66和一個微碼(uop)隊列68。軌跡傳送引擎60起到一個微指令高速緩存的作用,并且是用于一個下游執(zhí)行單元70的主要微指令來源。通過在處理器流水線內(nèi)提供一個微指令高速緩存功能,該軌跡傳送引擎60,具體來說該軌跡高速緩存62,允許調(diào)整由該微指令翻譯引擎54執(zhí)行的翻譯工作以提供增加了的微指令帶寬。在一個示例實施例中,該軌跡高速緩存62可以包含一個256組、8路組的相關(guān)存儲器。在本示例實施例中,術(shù)語“軌跡”可以涉及存儲在該軌跡高速緩存62的入口內(nèi)的一序列微指令,每一個入口包含指向組成該軌跡的、在前和正在進行的微指令的指針。這樣,因為在當(dāng)前訪問完成之前,為了獲得一個后續(xù)微指令而要被下一個訪問的入口地址是已知的,所以該軌跡高速緩存62有助于高性能的定序。在一個實施例中,軌跡可以被看作由軌跡頭彼此區(qū)別的指令“塊”,并且當(dāng)遇到一個間接轉(zhuǎn)移或者到達多個給出的閾值條件中的一個時被終止,其中這些閾值條件諸如在單個軌跡中可以容納的條件轉(zhuǎn)移數(shù)目、或者可以組成一個軌跡的最大微指令總數(shù)。
軌跡高速緩存轉(zhuǎn)移預(yù)測器64提供了關(guān)于在該軌跡高速緩存62內(nèi)的軌跡本地轉(zhuǎn)移預(yù)測。該軌跡高速緩存62和微碼定序器66提供微指令到微碼隊列68,然后微指令從該微碼隊列68送到一個無序執(zhí)行群集。顯示的微碼定序器66進一步包含多個以微碼形式實現(xiàn)的事件處理器67,這些事件處理器67響應(yīng)于一個諸如例外或者中斷的事件的發(fā)生而在處理器30內(nèi)實現(xiàn)多個操作。如將在下面進一步仔細描述的那樣,事件處理器67由包含在處理器30后端中的一個寄存器重命名器74內(nèi)的一個事件檢測器188激活。
處理器30可以被看作具有一個包含了總線接口單元32、存儲器執(zhí)行單元42、微指令翻譯引擎54和軌跡傳送引擎60的有序前端,以及一個將在下面進行詳細描述的無序后端。
從微碼隊列68發(fā)送的宏指令被接收到一個無序群集71中,該無序群集71包含一個調(diào)度器72、一個寄存器重命名器74、一個分配器76、一個重新排序緩存78以及一個重放隊列80。該調(diào)度器72包含一組保留位置,并且操作來調(diào)度和發(fā)送用于由執(zhí)行單元70執(zhí)行的微指令。寄存器重命名器74相對于隱藏的整數(shù)和浮點數(shù)寄存器執(zhí)行一個寄存器重命名功能(在一個處理器30執(zhí)行Intel結(jié)構(gòu)指令集的地方,可以被使用來代替任意八個通用寄存器或者任意八個浮點寄存器)。分配器76依據(jù)可用性和需要進行操作,以把執(zhí)行單元70和群集71的資源分配到微指令。如果沒有足夠的資源可以用來處理一個微指令的話,則分配器76負責(zé)聲明一個停止信號82,該信號通過軌跡傳送引擎60傳送到微指令翻譯引擎54,如在58所示的那樣。已經(jīng)讓它們的源字段由寄存器重命名器74調(diào)整的微指令以嚴格的程序次序放置到重新排序緩存78中。當(dāng)在該重新排序緩存78內(nèi)的微指令已經(jīng)完成執(zhí)行并且準備收回時,它們?nèi)缓髲囊粋€重新排序緩存中刪除并且以一種有序方式(即,依據(jù)一個原有程序次序)被檢索。重放隊列80傳送要被重放的微指令到執(zhí)行單元70。
顯示的執(zhí)行單元70包含一個浮點數(shù)執(zhí)行引擎84、一個整數(shù)執(zhí)行引擎86、和一個0級數(shù)據(jù)高速緩存88。在一個處理器30執(zhí)行Intel結(jié)構(gòu)指令集的示例實施例中,該浮點數(shù)執(zhí)行引擎84可以進一步執(zhí)行MMX指令和流SIMD(單指令,多數(shù)據(jù))擴展(SSE)。
多線程實現(xiàn)在圖2中所示的處理器30的示例實施例中,可以有有限的資源復(fù)制來支持一個多線程性能,并且因此必須在線程當(dāng)中實現(xiàn)某種程度的資源共享。將要理解使用的資源共享方案取決于該處理器能夠同時處理的線程數(shù)目。因為在一個處理器內(nèi)的功能單元一般提供某些緩存(或者存儲)功能和傳送功能,所以資源共享的發(fā)布可以被看作包含(1)存儲和(2)處理/傳送帶寬共享組件。例如,在一個支持同時處理兩個線程的處理器中,在各個功能單元內(nèi)的緩存資源可以被靜態(tài)或者邏輯地在兩個線程之間進行劃分。類似地,由一個路徑提供的、用于在兩個功能單元之間傳送信息的帶寬必須在兩個線程之間進行劃分和分配。因為可以在一個處理器流水線內(nèi)的多個位置處產(chǎn)生這些資源共享發(fā)布,根據(jù)該特定位置的指令和特征,在這些不同位置處可以使用不同的資源共享方案。將要理解鑒于變化的功能和操作特性,不同的資源共享方案可能適于不同的位置。
圖3是一個框圖,說明了用于在圖2中說明的處理器30的一個實施例的選定組件,并且描述了提供一個緩存性能的不同功能單元,該緩存性被邏輯劃分以容納兩個線程(即線程0和線程1)。通過分配在一個緩存資源內(nèi)的一個第一預(yù)定組入口到一個第一線程以及分配在該緩存資源內(nèi)的一個第二預(yù)定組入口到一個第二線程,可以實現(xiàn)一個功能單元的緩存(或者存儲)和處理功能用于兩個線程的邏輯劃分。然而,在替換實施例中,緩存還能夠被動態(tài)共享。具體來說,這可以通過提供兩對讀和寫指針來實現(xiàn),其中第一對讀和寫指針與一個第一線程相關(guān)聯(lián),而第二對讀和寫指針與一個第二線程相關(guān)聯(lián)。第一組讀和寫指針可以局限于在一個緩存資源內(nèi)的一個第一預(yù)定數(shù)目入口,而第二組讀和寫指針可以局限于在同一個緩存資源內(nèi)的一個第二預(yù)定數(shù)目入口內(nèi)。在說明的實施例中,顯示的指令流緩存106、軌跡高速緩存62、和一個指令隊列103的每一個都提供了一個在第一和第二線程之間進行邏輯劃分的存儲容量。
無序群集(71)圖4是一個框圖,說明了無序群集71的一個實施例的更多細節(jié)。群集71在處理器30內(nèi)提供了保留位置、寄存器重命名、重放和收回功能。群集71從軌跡傳送引擎60接收微指令、分配資源到這些微指令、為每一個微指令重命名源和目的寄存器、調(diào)度微指令用于發(fā)送到合適的執(zhí)行單元70、處理由于數(shù)據(jù)推測而被重放的微指令、以及然后最后收回微指令(即,確認該微指令到一個永久體系結(jié)構(gòu)狀態(tài))。
在群集71處接收的微指令同時被傳送到一個寄存器別名表格120和分配及釋放列表管理邏輯122。寄存器別名表格120負責(zé)把邏輯寄存器名翻譯到由調(diào)度器72和執(zhí)行單元70使用的物理寄存器地址。更具體地說,參見圖5,該寄存器別名表格120重命名保持在一個物理寄存器堆124內(nèi)的整數(shù)、浮點數(shù)和段寄存器。顯示的寄存器堆124包含126個被別名到八個(8)體系結(jié)構(gòu)寄存器的物理寄存器。在說明的實施例中,該顯示的寄存器別名表格120包含一個前端表格126和一個后端表格128用于由相應(yīng)的處理器30前端和后端使用。在該寄存器別名表格120內(nèi)的每一個入口都與一個體系結(jié)構(gòu)寄存器相關(guān)聯(lián),或者被看作一個體系結(jié)構(gòu)寄存器,而且包含一個指向在該寄存器堆124內(nèi)的一個位置的指針130,在該位置處存儲屬于相關(guān)體系結(jié)構(gòu)寄存器的數(shù)據(jù)。以這種方式,可以解決由一個傳統(tǒng)微處理器體系結(jié)構(gòu)提供的、指定一個相對小數(shù)量的體系結(jié)構(gòu)寄存器的問題。
分配和釋放列表管理邏輯122負責(zé)在群集71內(nèi)的資源分配和狀態(tài)恢復(fù)。邏輯122分配下列資源到每一個微指令1.一個順序號,其給予每一個微指令以當(dāng)在該群集71內(nèi)處理該微指令時,在一個線程內(nèi)跟蹤它的邏輯次序。屬于每一個微指令的順序號和用于該微指令的狀態(tài)信息被一起存儲在該重新排序緩存162內(nèi)的一個表格180(顯示在下面圖10中)內(nèi)。
2.一個釋放列表管理入口,其給予每一個微指令,以在一個狀態(tài)恢復(fù)操作的情況下允許微指令的歷史記錄被跟蹤和恢復(fù)。
3.一個重新排序緩存(ROB)入口,由該順序號索引。
4.一個物理寄存器堆124入口(被稱為“彈子”),在其內(nèi)該微指令可以存儲有用的結(jié)果。
5.一個載入緩存(沒有顯示)入口。
6.一個停止緩存(沒有顯示)入口。
7.一個指令隊列入口(例如,到一個存儲器指令隊列或者一個通用指令地址隊列的入口,將在下面進行描述)。
如果邏輯122不能獲得用于一個接收的微指令序列的必要資源的話,該邏輯122將要求軌跡傳送引擎60停止微指令的傳送直到有足夠的資源變得可用為止。通過聲明在圖2中說明的停止信號82來傳遞這個請求。
考慮把在該寄存器堆124內(nèi)的一個入口分配到一個微指令,圖5顯示了一個垃圾堆數(shù)組132,其在該寄存器堆124內(nèi)保持沒有被分配給體系結(jié)構(gòu)寄存器的入口記錄(即,它們沒有在該寄存器別名表格120內(nèi)被指向)。邏輯122訪問該垃圾堆數(shù)組132以標識在該寄存器堆124內(nèi)、可以用來分配到一個接收的微指令的入口。邏輯122也負責(zé)重新要求在該寄存器堆124內(nèi)變得可用的入口。
邏輯122進一步保持一個釋放列表管理器(FLM)134以允許跟蹤該體系結(jié)構(gòu)寄存器。具體來說,當(dāng)微指令被分配到此時,該釋放列表管理器134保持一個對該寄存器別名表格120的改變的歷史記錄。該釋放列表管理器134提供這樣的性能,以在給定一個錯誤預(yù)測或者一個事件時,“展開”該寄存器別名表格120以指向一個非推測狀態(tài)。該釋放列表管理器134也“更新”在該寄存器堆124入口中的數(shù)據(jù)儲存以確保所有的狀態(tài)信息是當(dāng)前的。最后,在收回處,物理寄存器標識符從該釋放列表管理器134傳送到該垃圾堆數(shù)組132用于分配給一個進一步的微指令。
一個指令隊列單元136以順序程序次序傳送微指令到一個調(diào)度器和記分板單元(SSU)138,并且保持和發(fā)送由該執(zhí)行單元70需要的微指令信息。指令隊列單元136可以包含兩個明確的結(jié)構(gòu),即一個指令隊列(IQ)140和一個指令地址隊列(IAQ)142。指令地址隊列142是設(shè)計成當(dāng)需要時傳送關(guān)鍵信息(例如,微指令源、目的和延遲)到單元138的小型結(jié)構(gòu)。指令地址隊列142此外可以包含一個排隊信息用于存儲操作的存儲器指令地址隊列(MIAQ)和一個排隊信息用于非存儲操作的通用指令地址排隊(GIAQ)。指令隊列140存儲較不關(guān)鍵的信息,諸如用于微指令的操作碼和即時數(shù)據(jù)。當(dāng)相關(guān)的微指令被讀取和寫入到調(diào)度器和記分板單元138中時,從該指令隊列單元136中解分配該微指令。
調(diào)度器和記分板單元138通過確定每一個微指令源可以就緒的時間,以及何時合適的執(zhí)行單元可用于發(fā)送,負責(zé)調(diào)度執(zhí)行的微指令。如圖4所示的單元138包含一個寄存器堆記分板144、一個存儲器調(diào)度器146、一個矩陣調(diào)度器148、一個慢微指令調(diào)度器150和一個浮點數(shù)調(diào)度器152。
單元138通過檢查保持在寄存器堆記分板144內(nèi)的信息來確定何時該源寄存器是就緒的。為此,在一個實施例中,該寄存器堆記分板144具有256位,其跟蹤對應(yīng)于在該寄存器堆124內(nèi)的每一個寄存器的數(shù)據(jù)資源可用性。例如,當(dāng)分配數(shù)據(jù)到相關(guān)入口或者有一個到該單元138的寫操作時,可以清除用于在該寄存器堆124內(nèi)的一個特定入口的記分板位。
存儲器調(diào)度器146緩存存儲器類的微指令、檢查資源可用性、然后調(diào)度存儲器類的微指令。矩陣調(diào)度器148包含兩個緊密綁定的算術(shù)邏輯單元(ALU)調(diào)度器,其允許調(diào)度相關(guān)的背靠背微指令。浮點數(shù)調(diào)度器152緩存和調(diào)度浮點數(shù)微指令,而慢微指令調(diào)度器150調(diào)度不被上述調(diào)度器處理的微指令。
顯示的一個檢驗器、重放和收回單元(CRU)160包含一個重新排序緩存162、一個檢驗器164、一個分段隊列166和一個收回控制電路168。單元160具有三個主要功能,即一個檢驗功能、一個重放功能和一個收回功能。具體地說,檢驗器和重放功能包含重新執(zhí)行已經(jīng)被不正確執(zhí)行的微指令。該收回功能包含確認體系結(jié)構(gòu)有序狀態(tài)到處理器30。更具體地說,檢驗器164進行操作以確保每一個微指令已經(jīng)正確地執(zhí)行了正確的數(shù)據(jù)。如果該微指令沒有用正確數(shù)據(jù)進行執(zhí)行(例如,由于一個錯誤預(yù)測的轉(zhuǎn)移),則相關(guān)的微指令被重放以用正確數(shù)據(jù)執(zhí)行。
重新排序緩存162通過以程序次序收回微指令來負責(zé)確認體系結(jié)構(gòu)狀態(tài)到該處理器30。由一個收回控制電路168產(chǎn)生的一個收回指針182指示在該重新排序緩存162內(nèi)正被收回的一個入口。當(dāng)該收回指針182移動通過在一個入口內(nèi)的一個微指令時,則釋放在該釋放列表管理器134內(nèi)的相應(yīng)入口,而且現(xiàn)在可以回收相關(guān)的寄存器堆入口并且把它們傳送到垃圾堆數(shù)組132。顯示的收回控制電路168也實現(xiàn)了一個活動線程狀態(tài)機171,它的目的和功能將在下面進行說明。收回控制電路168控制把在該重新排序緩存162中保持的推測性結(jié)果確認到在該寄存器堆124內(nèi)的相應(yīng)體系結(jié)構(gòu)狀態(tài)。
重新排序緩存162也負責(zé)處理內(nèi)部和外部事件,如將在下面進一步詳細描述的那樣。當(dāng)由該重新排序緩存162檢測到一個事件發(fā)生時,就聲明一個“清空”信號170。清空信號170具有從該處理器流水線中清空所有當(dāng)前在傳送中的微指令的效果。重新排序緩存162也向該軌跡傳送引擎60提供一個地址,從該地址開始排序微指令以服務(wù)該事件(即,從那個地址發(fā)送以微碼體現(xiàn)的一個事件處理器67)。
重新排序緩存(162)圖6A是說明了有關(guān)重新排序緩存162的一個示例實施例的更多細節(jié)的一個框圖,該緩存被邏輯劃分以服務(wù)在該多線程處理器30內(nèi)的多個線程。具體地說,顯示的重新排序緩存162包含一個重新排序表格180,當(dāng)該處理器30以一個多線程模式進行操作時,該表格可以被邏輯劃分以容納用于第一和第二線程的入口。當(dāng)以一個單線程模式操作時,整個表格180可以被使用來服務(wù)該單個線程。在一個實施例中,表格180包含一個統(tǒng)一的存儲器結(jié)構(gòu),當(dāng)該存儲器結(jié)構(gòu)以多線程模式操作時,由兩個(2)局限于在該表格180內(nèi)的預(yù)定和明確入口組的收回指針182和183引用。類似地,當(dāng)以一個單線程模式操作時,表格180由單個收回指針182引用。表格180包含對應(yīng)于寄存器堆124中的每一個入口的一個入口,并且存儲一個順序號和以錯誤信息形式的狀態(tài)信息、一個邏輯目的地址、以及一個用于在寄存器堆124內(nèi)的每一個微指令數(shù)據(jù)入口的有效位。在表格180內(nèi)的入口每一個都由構(gòu)成用于每一個微指令的一個唯一標識符的順序號進行索引。根據(jù)該順序號,在該表格180內(nèi)的入口以一種順序和有序方式進行分配和解分配。除了其它流標記之外,顯示的表格此外還存儲一個用于每一個微指令的共享資源流標記184和一個同步流標記186。
重新排序緩存162包含一個事件檢測器188,其被連接以接收以中斷向量形式的中斷請求以及訪問在表格180內(nèi)、由收回指針182和183引用的入口。顯示的事件檢測器188此外還輸出清空信號170和清除信號172。
假定用于一個特定線程(例如,線程0)的一個特定微指令經(jīng)歷非轉(zhuǎn)移錯誤預(yù)測、例外或者中斷的話,則當(dāng)該收回指針182或者183被遞增以尋址相關(guān)入口時,保存在表格180內(nèi)的入口中、用于該特定指令的信息將被收回到體系結(jié)構(gòu)狀態(tài)。在這種情況下,一個形成為收回控制電路168一部分的指令指針計算器190遞增該宏或者微指令指針以指向(1)在寄存器堆124內(nèi)的相應(yīng)入口內(nèi)指定的一個轉(zhuǎn)移目標地址或者指向(2)如果不使用一個轉(zhuǎn)移的話,下一個宏或者微指令。
如果已經(jīng)發(fā)生了一個轉(zhuǎn)移錯誤預(yù)測,則信息通過錯誤信息域傳送到收回控制電路168和事件檢測器188。鑒于通過錯誤信息指示的轉(zhuǎn)移錯誤預(yù)測,處理器30也許已經(jīng)取出了至少某些不正確的指令,而且這些指令已經(jīng)遍及該處理器流水線。因為在表格180內(nèi)的入口以連續(xù)次序分配,所以在該錯誤預(yù)測轉(zhuǎn)移微指令之后的入口是由該錯誤預(yù)測轉(zhuǎn)移指令流沾染了的微指令。響應(yīng)于在錯誤信息內(nèi)為其記錄了一個錯誤預(yù)測轉(zhuǎn)移的一個微指令的試圖收回,事件檢測器188聲明清除信號172,其清除處理器整個無序后端的所有狀態(tài),并且因此刷新由在一個錯誤預(yù)測微指令之后的指令產(chǎn)生的無序后端所有狀態(tài)。清除信號172的聲明同時也阻塞隨后取出的、可能位于處理器30的有序前端內(nèi)的微指令的發(fā)布。
在該收回控制電路168內(nèi),依據(jù)通過一個收回微指令的錯誤信息通知的一個錯誤預(yù)測轉(zhuǎn)移,IP計算器190確保指令指針179及/或181被更新以表示正確的指令指針值?;谠撧D(zhuǎn)移是否將被使用,IP計算器190用來自對應(yīng)于表格180相關(guān)入口的寄存器堆入口的結(jié)果數(shù)據(jù)來更新指令指針179及/或181,或者當(dāng)不使用轉(zhuǎn)移時遞增指令指針179和181。
事件檢測器188還包含多個寄存器200用于保持關(guān)于為多個線程中的每一個檢測的事件的信息。寄存器200包含一個事件信息寄存器202、一個待決事件寄存器204、一個事件禁止寄存器206、和展開寄存器208以及一個管腳狀態(tài)寄存器210。每一個寄存器202-210都能夠存儲關(guān)于為一個特定線程產(chǎn)生的一個事件的信息。因此,用于多個線程的事件信息可以由寄存器200保持。
圖6B是用于一個第一線程(例如,T0)的一個示例待決事件寄存器204和一個示例事件禁止寄存器206的一個示意圖。
待決事件和事件禁止寄存器204和206為在多線程處理器30內(nèi)支持的每一個線程提供。可以為每一個線程提供明確的寄存器204和206,或者單個物理寄存器可以被邏輯劃分以支持多個線程。
示例待決事件寄存器204包含一位,或者其它數(shù)據(jù)項,用于每一種由該事件檢測器188登記的事件類型(例如,如下參考圖8所述的事件)。這些事件可以構(gòu)成在該處理器30內(nèi)部產(chǎn)生的內(nèi)部事件,或者在該處理器30外部產(chǎn)生的外部事件(例如,從處理器總線接收的管腳事件)。在說明的實施例中,用于每一個線程的待決事件寄存器204不包含用于寫回事件的一位,因為這樣的事件不是線程特有的而且因此不在該待決事件寄存器中“排隊”。為此,事件檢測器188可以包含寫回檢測邏輯205,其在檢測到一個寫回事件上聲明一個寫回信號。通過事件檢測器188來設(shè)置在用于每一個線程的待決事件寄存器204內(nèi)的位,其中該檢測器188觸發(fā)一個設(shè)置在該待決事件寄存器204內(nèi)的適當(dāng)位的鎖存器。在一個示例實施例中,如將在下面描述的那樣,在該待決事件寄存器204內(nèi)與一個預(yù)定事件相關(guān)聯(lián)的一組位提供了一個相關(guān)類型的事件正被待決的指示。
類似地,用于每一個線程的事件禁止寄存器206包含一位,或者其它數(shù)據(jù)結(jié)構(gòu),用于由該事件檢測器188辨別的每一種事件類型,這個位被設(shè)置或者重置(即,清除)以相對于該特定線程把一個事件記錄為一個中斷事件。在一個事件禁止寄存器206內(nèi)的相應(yīng)位由一個控制寄存器寫操作設(shè)置,該控制寄存器寫操作使用一個特定微指令來修改在處理器30內(nèi)的非重命名狀態(tài)。在一個事件禁止寄存器206內(nèi)的一位可以類似地使用一個控制寄存器寫操作重置(或者清除)。
一個示例處理器還可以具有某些模式,在這些模式中可以設(shè)置在該事件禁止寄存器206中的位來禁止在相應(yīng)的模式內(nèi)選擇事件。
用于保持在用于一個特定線程的每一個待決事件和事件禁止寄存器204和206內(nèi)的一種特定事件類型的位被輸出到一個與(AND)門209,當(dāng)寄存器204和206的內(nèi)容指示相關(guān)的事件類型被待決而不是被禁止時,該與(AND)門209反過來輸出一個用于每一種事件類型的事件已檢測信號211。例如,在一種事件類型不被禁止的地方,依據(jù)在待決事件寄存器204內(nèi)一個事件的登記,通過聲明用于相關(guān)事件類型的事件已檢測信號211,該事件馬上被發(fā)信號通知被檢測了。在另一方面,如果事件類型被事件禁止寄存器206的內(nèi)容禁止,則事件發(fā)生將被記錄在待決事件寄存器204內(nèi),但是僅僅如果在該事件禁止寄存器206內(nèi)的適當(dāng)位被清除了同時該事件仍然在該寄存器204內(nèi)被記錄為待決的話,才聲明該事件已檢測信號211。因此,一個事件可以被記錄在待決事件寄存器204內(nèi),但是用于相關(guān)事件發(fā)生的事件已檢測信號211僅僅可以在以后的某一時間、當(dāng)用于特定線程的事件禁止被刪除了時,被發(fā)信號通知。
用于每一種用于每一個線程的事件類型的事件已檢測信號211被送到事件處理邏輯(事件優(yōu)先化和選擇邏輯)和時鐘控制邏輯,如將在下面進一步描述那樣。
一旦事件處理已經(jīng)完成時,用于一個特定事件的一個事件處理器負責(zé)清除在用于一個特定線程的待決事件寄存器204內(nèi)的適當(dāng)位。在一個替換實施例中,該待決事件寄存器可以由硬件清除。
在一個多線程處理器環(huán)境內(nèi)的事件發(fā)生和事件處理在多線程處理器30內(nèi)的事件可以從若干個源檢測到以及發(fā)信號通知。例如,處理器30的有序前端可以發(fā)信號通知一個事件,而且執(zhí)行單元70可以同樣地發(fā)信號通知一個事件。事件可以包含中斷和例外。中斷是在處理器30外部產(chǎn)生、并且可以經(jīng)由一個公共總線(未顯示)從一個設(shè)備發(fā)起到處理器30的事件。中斷可以導(dǎo)致控制流被導(dǎo)向到一個微碼事件處理器67。除了別的以外,例外可以泛泛地分類為錯誤、陷阱和幫助。例外是一般在處理器30內(nèi)產(chǎn)生的事件。
事件被直接傳遞到在重新排序緩存162內(nèi)的事件檢測器188,響應(yīng)于此,事件檢測器188執(zhí)行多個有關(guān)為其產(chǎn)生事件或者相對于其產(chǎn)生事件的線程的操作。在一個高層處來看,響應(yīng)于一個事件的檢測,事件檢測器188暫停用于該線程的微指令收回、寫適當(dāng)?shù)腻e誤信息到表格180里、聲明清空信號170、激活一個事件處理器67來處理該事件、確定一個重新啟動地址、然后重新啟動微指令的取出。事件可以以一個中斷請求(或者中斷扇區(qū))的形式被直接傳遞到事件檢測器188,或者通過記錄在重新排序表格180內(nèi)、用于正被收回的第一或者第二線程的一個指令的錯誤信息被傳遞到事件檢測器188。
清空信號(nuke signal)170的聲明具有清除多線程處理器30有序前端和無序后端的狀態(tài)的效果。具體地說,響應(yīng)于清空信號170的聲明,許多功能單元,然而并非必須是全部,被清除了狀態(tài)和微指令。存儲器有序緩存48和總線接口單元32的某些部分沒有被清除(例如,收回但不確認存儲、總線探聽、等)。清空信號170的聲明進一步停止前端的指令取出以及停止把微指令排序到微碼隊列68中。雖然這個操作能夠不受損害地在一個單線程多處理器、或者一個執(zhí)行單個線程的多處理器內(nèi)執(zhí)行,在多個線程共存而且在一個多線程處理器30內(nèi)處理的地方,當(dāng)解決有關(guān)一個線程的事件發(fā)生時,不能忽略其它線程的存在。因此,本發(fā)明提出一種用于在一個多線程處理器內(nèi)處理一個事件的方法和裝置,當(dāng)發(fā)生用于單個線程的一個事件時,該方法和裝置考慮到在該多線程處理器內(nèi)多個線程的處理和存在。
圖7A是一個流程圖,其依據(jù)本發(fā)明的示例實施例說明了一種在一個多線程處理器30內(nèi)處理一個事件發(fā)生的方法220。方法220開始于塊222,在那兒由事件檢測器188檢測用于第一線程的一個第一事件。圖8是多個可以由在塊222處的事件檢測器188檢測的示例事件224的一個圖解表示。在圖8中表示的事件已經(jīng)依據(jù)對事件224響應(yīng)的特征,泛泛地進行了分組。第一組事件包含RESET事件226和MACHINECHECK事件228,它們由事件檢測器188以如下所述的方式發(fā)信號通知到在一個多線程處理器30內(nèi)的多個線程,一旦檢測到這些事件就導(dǎo)致所有線程同時到達同一個事件處理器67。第二組事件包含F(xiàn)AULT事件230、ASSIST事件232、DOUBLE FAULT事件234、SHUTDOWN事件236和SMC(自我修改代碼)事件238,這些事件的每一個在發(fā)信號通知該事件的一個特定線程的微指令收回上被報告。具體地說,事件檢測器188將依據(jù)錯誤信息為其指示一個錯誤狀態(tài)的一個微指令的收回而檢測第二組中的一個事件。第二組中的一個事件的檢測僅僅由事件檢測器188發(fā)信號通知到產(chǎn)生相關(guān)事件的線程。
第三組事件包含一個INIT(簡短重置)事件240、一個INTR(本地中斷)事件242、一個NMI(非屏蔽中斷)事件244、一個DATABREAKPOINT事件246、一個TRACE MESSAGE事件248和一個A20M(地址繞回)事件250。在具有一個接收中斷或者接收陷阱流標記的一個微指令的收回上報告第三組事件。第三組中的事件檢測僅僅由事件檢測器188發(fā)信號通知到產(chǎn)生相關(guān)事件的線程。
第四組事件包含一個SMI(系統(tǒng)管理中斷)事件250、一個STOPCLOCK事件252、和一個PREQ(探測請求)事件254。第四組中的事件被發(fā)信號通知到在該多線程處理器30內(nèi)現(xiàn)存的所有線程,而且當(dāng)多個線程的任何一個收回一個具有一個適當(dāng)中斷流標記的微指令時報告該事件。響應(yīng)于第四組中的任意事件,沒有在多個線程之間實現(xiàn)同步。
依據(jù)一個示例實施例,第五組事件,是一個多線程處理器結(jié)構(gòu)特有的并且在所描述的實施例內(nèi)實現(xiàn)以解決為一個多線程處理器環(huán)境所特有的問題。第五組事件包含一個VIRTUAL NUKE事件260、一個SYNCHRONIZATION事件262和一個SLEEP事件264。
VIRTUAL NUKE事件260是一個當(dāng)(1)在該多線程處理器30內(nèi)的第一線程具有一個待決事件(例如,任何上面所述的事件被待決)、(2)第二線程沒有待決事件(不同于事件260)、和(3)具有一個共享資源流標記184或者一個同步流標記186的微指令被重新排序緩存162收回時,相對于一個第二線程被登記的事件。VIRTUAL NUKE事件260具有激活一個虛擬清空事件處理器的效果,該虛擬清空事件處理器在具有流標記184或者186的收回微指令之后微指令處重新啟動第二線程的執(zhí)行。
當(dāng)一個特定線程(例如,一個第一線程)被要求在多線程處理器30內(nèi)修改一個共享狀態(tài)或者資源時,由微碼發(fā)信號通知該SYNCHRONIZATION事件262。為此,該微碼定序器66插入一個同步微指令到用于第一個線程的流中,而且為了避免一個死鎖情況,用一個共享資源流標記184和一個同步流標記186一起標記該“同步微指令”。僅僅依據(jù)用于第一線程的同步微指令的收回,以及依據(jù)用于第二線程、具有一個同步流標記186與此相關(guān)的一個微指令的收回,檢測(或者登記)SYNCHRONIZATION事件262。SYNCHRONIZATION事件262具有激活一個同步事件處理器的效果,該同步事件處理器在保存在一個微碼暫存寄存器中的一個指令指針處重新啟動第一個線程的執(zhí)行。在下面提供了有關(guān)一個SYNCHRONIZATION事件262的處理的更多細節(jié)。第二個線程執(zhí)行虛擬的NUKE 260。
SLEEP事件264是一個導(dǎo)致一個相關(guān)線程從一個活動狀態(tài)轉(zhuǎn)換到一個不活動(或者睡眠)狀態(tài)的事件。不活動線程則可以由一個適當(dāng)?shù)腂REAK事件再次從不活動轉(zhuǎn)換到活動狀態(tài)。轉(zhuǎn)換該線程回到活動狀態(tài)的BREAK事件的特性取決于轉(zhuǎn)換該線程到不活動狀態(tài)的SLEEP事件264。線程進入一個活動狀態(tài)和退出一個活動狀態(tài)在下面詳細描述。
圖9是一個顯示了在重新排序緩存162內(nèi)的重新排序表格180的示例內(nèi)容的框圖,其應(yīng)當(dāng)在下面進行描述為了說明在本發(fā)明的一個示例實施例內(nèi)的事件和清除點(還稱為“清空點”)檢測。響應(yīng)于從在該多線程處理器30內(nèi)的一個內(nèi)源或者從在處理器30外的一個外源傳送到事件檢測器188的一個事件266,在塊222處可以發(fā)生事件檢測器188對上述任一事件的檢測。這樣一個事件266通信的一個示例可以是一個中斷向量。做為選擇,通過用于正被收回并且因此由收回指針182標識的一個特定線程(例如,線程1)的一個微指令的錯誤信息268,一個事件發(fā)生可以傳送到事件檢測器188。應(yīng)當(dāng)注意對于外部事件,每一個線程有一個(1)信號(例如,分別如信號266和267)。對于內(nèi)部事件,重新排序緩存162入口包含通過它的位置指示該錯誤屬于哪個線程的線程(例如,T0對比T1)。依據(jù)一個事件的檢測,事件檢測器188在事件信息寄存器202內(nèi)存儲涉及該特定事件的事件信息(例如事件類型、事件源,等),并且此外在待決事件寄存器204中登記用于相關(guān)線程的一個待決事件。如上所述,在待決事件寄存器204內(nèi)登記用于相關(guān)線程的一個待決事件包含在寄存器204內(nèi)設(shè)置與該特定事件相關(guān)聯(lián)的一個位。此外要注意到如果事件沒有被在事件禁止寄存器206內(nèi)設(shè)置的、用于相關(guān)線程的一個位禁止,而且在一個微指令包含一個適當(dāng)?shù)牧鳂擞浀那闆r中,通過聲明一個適當(dāng)?shù)氖录褭z測信號211,可以有效地檢測到該事件。
現(xiàn)在返回到圖7A中顯示的流程圖,在塊222處檢測用于第一個線程的第一個事件之后,事件檢測器188在塊270處停止收回第一個線程并且聲明一個“預(yù)清空”信號169。聲明預(yù)清空信號169以避免一種死鎖情況,在該死鎖情況中第一線程把第二線程排除在外控制指令流水線。具體地說,第二線程被拒絕訪問指令流水線,而相對于第二線程、開始一個多線程清空操作所要求的狀態(tài)不能發(fā)生。預(yù)清空信號169因此被傳送到處理器的前端,具體地說傳送到存儲器執(zhí)行單元42,以填充構(gòu)成其中檢測到該事件的第一線程的微指令處理器流水線。處理器流水線的填充可以,僅僅舉例來說,通過禁止由存儲器執(zhí)行單元42或者前端的其它組件執(zhí)行的指令預(yù)取和自我修改代碼(SMC)操作,來執(zhí)行。概括地說,通過停止第一線程中的微指令收回,及/或通過停止或者實質(zhì)上減小傳送有關(guān)第一線程的微指令到處理器流水線中,第二線程在該處理器中被給予了優(yōu)先權(quán)而且一種死鎖情況的可能性被降低了。
在判定框272處,做出關(guān)于第二線程在多線程處理器30內(nèi)是否是活動的判定,并且據(jù)此由該重新排序緩存162收回第二線程。如果第二線程不是活動的,則方法220直接進行到塊274,在那兒執(zhí)行稱為一個“清空操作”的一個第一類型清除操作??梢詤⒖加墒栈乜刂齐娐?68保持的活動線程狀態(tài)機171來執(zhí)行關(guān)于一個特定線程是否活動的判定。清空操作從聲明清空信號170開始,如上所述,清空信號170的聲明具有清除多線程處理器30有序前端和無序后端的狀態(tài)的效果。由于僅僅第一個線程是活動的,所以不需要考慮該清空操作在任何其它可能在該多線程處理器30內(nèi)給出和現(xiàn)存的線程上的影響。
在另一方面,如果在判定框272處確定第二線程在多線程處理器30內(nèi)是活動的,則方法220繼續(xù)執(zhí)行一系列構(gòu)成檢測用于第二線程的一個清除點(或者清空點)的操作,在該清除點處,可以執(zhí)行一個對該第二線程具有減少的負影響的清空操作。在一個清除點檢測之后執(zhí)行的清空操作是和在塊274處執(zhí)行的操作相同的操作,并且因此清除了多線程處理器30的狀態(tài)(即,用于第一和第二線程的狀態(tài))。狀態(tài)清除包含微指令“排出”操作,其在該說明書的別處進行描述。在本應(yīng)用中公開的一個示例實施例中,在檢測一個清除點之后執(zhí)行的清空操作在多線程處理器30內(nèi)、不在為第一線程保持的狀態(tài)和為第二線程保持的狀態(tài)之間進行區(qū)分。在一個替換實施例中,在一個清除點檢測之后執(zhí)行的清空操作可能僅僅清除單個線程(即,檢測到事件的線程)的狀態(tài),在一個多線程處理器30內(nèi)發(fā)生一個有效程度的資源共享以及這樣的共享資源被動態(tài)地劃分和未劃分以服務(wù)多個線程的地方,為單個線程清除狀態(tài)尤其是復(fù)雜的。然而,這個替換實施例可能需要越來越復(fù)雜的硬件。
在判定框272處的肯定判定之后,在判定框278處做出關(guān)于第二線程是否已經(jīng)遇到一個事件的一個進一步判定。這樣一個事件可以包含除VIRTUAL NUKE事件260之外任何上述的事件。這個判定再次由事件檢測器188響應(yīng)于事件信號266或者用于第二線程的一個錯誤信息信號269做出。關(guān)于由第二線程遇到的任何事件的消息被保存在專用于第二線程的部分事件信息寄存器202中,而且在待決事件寄存器204內(nèi)登記該事件發(fā)生。
如果第二線程已經(jīng)獨立地遇到一個事件,則該方法直接進行到塊280,在那兒執(zhí)行一個多線程的清空操作以清除多線程處理器30的狀態(tài)。做為選擇,如果第二線程沒有遇到一個事件,則在判定框282處做出第一個線程遇到的第一個事件是否要求一個共享狀態(tài)、或者共享資源被修改以處理第一個事件的判定。舉例來說,在第一個事件包含如上所述的一個SYNCHRONIZATION事件262的地方,這個指示第一個線程必需訪問一個共享狀態(tài)資源??梢酝ㄟ^收回一個用于第一線程、具有共享資源和同步流標記184和186與此相關(guān)的同步微指令來標識SYNCHRONIZATION事件262。圖10是一個類似于在圖9中所示的框圖,其顯示了用于重新排序表格180的示例內(nèi)容。顯示的、分配給第一線程(例如,線程0)的部分表格180包含一個由收回指針182引用的同步微指令。顯示的同步微指令此外還具有與此相關(guān)的一個共享資源流標記184和一個同步流標記186。說明的同步微指令的收回將由事件檢測器188登記為一個SYNCHRONIZATION事件262的發(fā)生。
如果用于第一線程(例如,線程0)的第一事件被確定不修改一個共享的狀態(tài)或者資源,該方法220繼續(xù)到判定框284,在那兒做出關(guān)于第二線程(例如,線程1)是否正收回一個具有一個與此相關(guān)的共享資源流標記184的微指令的判定。參見圖9,顯示的、用于線程1的收回指針182引用一個具有一個共享資源流標記184和一個同步流標記186的微指令。在這個情況中,出現(xiàn)于判定框284處的狀態(tài)將已經(jīng)被滿足了,而且方法220因此繼續(xù)到塊280,在那兒執(zhí)行多線程的清空操作。做為選擇,如果用于第二線程(例如,線程1)的收回指針182沒有引用一個具有一個共享資源流標記184或者一個同步流標記186的微指令,方法繼續(xù)到塊286,在那兒通過前進收回指針182來繼續(xù)第二線程的收回。方法220從塊286返回到判定框278,在那兒再次做出第二線程是否已經(jīng)遇到一個事件的一個判定。
如果在判定框282處,確定用于第一線程(例如,線程0)的第一事件處理需要修改一個共享的狀態(tài)或者資源,該方法220繼續(xù)到判定框288,在那兒做出第二線程(例如,線程1)是否正收回一個具有一個與此相關(guān)的同步流標記186的微指令的判定。如果是這樣的話,則在塊280處執(zhí)行多線程清空操作。如果不是的話,繼續(xù)在塊286收回用于第二線程的微指令直到遇到用于第二線程的一個事件或者用于第二線程的收回指針182索引到一個具有與此相關(guān)的一個同步流標記186的微指令為止。
在塊280處清空操作開始之后,在塊290處,在微碼形式實現(xiàn)并且從該微碼定序器66中定序的一個適當(dāng)事件處理器67繼續(xù)處理相關(guān)的事件。
Virtual Nuke事件如上所述,VIRTUAL NUKE事件260以一種稍微不同于其它事件的方式進行處理。為此,圖7B是一個流程圖,說明一種依據(jù)一個示例實施例,檢測和處理一個VIRTUAL NUKE事件260的方法291。方法291假定當(dāng)前沒有用于第二線程的事件被待決(即,記錄在一個用于第二線程的寄存器中)。
方法291開始于塊292,在那兒由事件檢測器188檢測用于第一線程的一個第一事件。這樣一個事件能夠是上述參考圖8討論的任何一個事件。
在塊293處,事件檢測器188停止收回第一個線程。在塊294處,事件檢測器188檢測收回一個具有一個共享資源流標記184或者一個同步流標記的微指令。在塊295處,從微碼定序器66中激活一個“虛擬清空(virtual nuke)”處理器。在塊296處,該“虛擬清空”事件處理器在上面塊294處收回的微指令之后的一個微指令處重新啟動第二線程的執(zhí)行。方法291然后在塊297結(jié)束。
Nuke操作圖11A是一個流程圖,說明了一種依據(jù)一個示例實施例,在一個支持至少第一和第二線程的多線程處理器內(nèi)執(zhí)行一個清除(或者清空)操作的方法300。方法300在塊302處、用由事件檢測器188響應(yīng)于一個事件的發(fā)生和檢測聲明清空信號170開始。清空信號170被傳送到在多線程處理器30內(nèi)的多個功能單元,而且它的聲明和解聲明定義了這樣一個窗口,在該窗口內(nèi)執(zhí)行為功能單元的狀態(tài)和配置清除而準備的動作。圖12是一個時序圖,顯示了與一個時鐘信號304的上升沿同步發(fā)生的清空信號170的聲明。
在塊303處,估算活動線程狀態(tài)機。
在塊306處,指示在其上發(fā)生事件的微指令是否被收回、用于第一和第二線程的順序號和最近的微指令信號,被傳送到分配和釋放列表管理邏輯122和TBIT,其中TBIT是在軌跡轉(zhuǎn)移預(yù)測單元(TBPU)(其反過來是TDE 60的一部分)中的一個結(jié)構(gòu),用于跟蹤在處理器30有序前端內(nèi)的宏指令和微指令指針信息。TBIT使用這個信息來鎖存涉及該事件的信息(例如,微指令和宏指令指令指針)。
在塊308處,事件檢測器188構(gòu)造和傳送用于第一和第二線程的每一個的一個事件向量到微碼定序器66。每一個事件向量在其中包含信息標識(1)當(dāng)定位清空點(或者清除點)時正被收回的物理重新排序緩沖區(qū)單元(即,當(dāng)標識清空點時每一個收回指針182的值)、(2)標識在微碼定序器66內(nèi)的一個位置的一個事件處理器標識符,其中定位構(gòu)成一個事件處理器67來處理檢測到的事件的微碼、(3)標識第一或者第二線程的一個線程標識符、以及(4)一個確定該事件處理器67相對于為其它線程激活的事件處理器的優(yōu)先級的線程優(yōu)先級位。
在塊310處,分配和釋放列表管理邏輯122使用在塊306處傳送的順序號把一個陰影寄存器別名表格(陰影RAT)前進到一個檢測到清空點的點處,而且在塊312處,從陰影寄存器別名表格中恢復(fù)主要寄存器別名表格120的狀態(tài)。
在塊314處,分配和釋放列表管理邏輯122從釋放列表管理器134中恢復(fù)寄存器號碼(或者“彈子”),并且分配該恢復(fù)的寄存器號碼到垃圾堆數(shù)組132,從該垃圾堆數(shù)組132中可以再次分配該寄存器號碼。當(dāng)所有的適當(dāng)寄存器號碼已經(jīng)從釋放列表管理器134中恢復(fù)時,分配和釋放列表管理邏輯122此外還聲明一個“已恢復(fù)”信號(沒有顯示)。清空信號170保持在一個聲明狀態(tài)直到從分配和釋放列表管理邏輯122中接收到這個“已恢復(fù)”信號為止。
在塊316處,用于第一和第二線程的所有“老的”存儲器(即,已經(jīng)收回但是還沒有更新的存儲器)使用存儲確認邏輯(沒有顯示)從該存儲器有序緩存中排出。
在塊320處,如圖12所示,事件檢測器188然后在時鐘信號304的一個上升沿上解聲明該清空信號170。注意到清空信號170被保持在一個聲明狀態(tài)中至少三個時鐘信號304時鐘周期。然而,如果來自分配和釋放列表管理邏輯122的“已恢復(fù)”信號沒有在接著清空信號170聲明之后的頭兩個時鐘信號304時鐘周期內(nèi)被聲明,事件檢測器188將擴展清空信號170的聲明超過說明的三個時鐘周期。在一個實施例中,清空信號170可以被保持足夠長(例如,三個時鐘周期)以允許完成上述討論的塊303、306和308的完成。清空信號170可以被要求保持額外的周期以允許完成塊310、312、314和316。為此,存儲器有序緩存聲明一個“存儲器緩存排出”信號以擴展清空信號聲明的擴展。
在塊322處,在多線程處理器30內(nèi)的微碼定序器66及其它功能單元檢查由活動線程狀態(tài)機171保持的“活動位”以確定在該事件發(fā)生之后,第一和第二線程中每一個是否都在一個活動狀態(tài)還是在一個不活動狀態(tài)中。更具體地說,活動線程狀態(tài)機171保持用于在多線程處理器30內(nèi)現(xiàn)存的每一個線程的一個相應(yīng)位指示,其指示相關(guān)的線程是在一個活動狀態(tài)還是在不活動(睡眠)狀態(tài)中。由事件檢測器188檢測以及事件檢測器188響應(yīng)于此聲明清空信號170的事件,可以包含一個SLEEP事件264或者一個BREAK事件,這些事件在活動和不活動狀態(tài)之間轉(zhuǎn)換第一或者第二線程。如在圖12中的324處,在聲明清空信號170期間估算活動線程狀態(tài)機171,而且依據(jù)清空信號170的解聲明,該“活動位”的狀態(tài)因此被認為是有效的。
在判定框326處,檢查活動線程狀態(tài)機171的活動位的每一個功能單元做出第一和第二線程是否活動的一個判定。如果基于活動位的狀態(tài),確定兩個線程都是活動的,則方法300繼續(xù)到塊328,在那兒每一個功能單元都被配置為支援和服務(wù)第一和第二活動線程。舉例來說,通過激活一個第二指針、或者第二組指針來對在不同功能單元內(nèi)提供的存儲和緩存性能進行邏輯上的劃分,這些第二指針局限于在一個存儲陣列內(nèi)一個特定組(或者范圍)的入口。此外,如果兩個線程都是活動的,則可以激活某些MT特有的支持。舉例來說,與微碼定序器相關(guān)聯(lián)的線程選擇邏輯可以基于活動線程狀態(tài)機171的輸出,以一種“乒乓”方式定序來自第一線程(例如,T0)、來自第二線程(例如,T1)或者來自第一和第二線程(例如,T0和T1)的線程。此外,可以基于活動線程狀態(tài)機的位輸出執(zhí)行本地時鐘選通。在一個文件地址寄存器實施例中,在一個處理器內(nèi)任意數(shù)量的狀態(tài)機,可以基于活動線程狀態(tài)機的輸出修改它們的行為,或者改變狀態(tài)。在塊330處,微碼定序器66然后繼續(xù)定序用于第一和第二線程的微指令。
做為選擇,如果在判定框326處確定第一和第二線程的僅僅一個是活動的,或者兩個線程都是不活動的,則在塊332處,每一個功能單元都被配置為支持和服務(wù)僅僅一個活動線程而且可以無效某些MT特有的支持。在沒有線程是活動的地方,作為一個缺省設(shè)置,功能單元被配置為支持單個活動線程。在其中一個功能單元先前被配置(例如,邏輯劃分)為支持多個線程的情況中,可以停用被使用來支持進一步線程的指針,而且由剩余指針引用的、在一個數(shù)據(jù)陣列內(nèi)的入口組可以被擴展以包含先前由停用的指針引用的入口。以這種方式,可以理解可以使先前分配給其他線程的數(shù)據(jù)入口然后用于由單個活動的線程使用。通過當(dāng)進一步線程是不活動時讓更多的資源可用于該單一活動的線程,相對于當(dāng)其他線程還在多線程處理器30內(nèi)支持時該單個剩余線程的性能,可提高該剩余線程的性能。
在塊334處,微碼定序器66忽略用于一個不活動線程、或者多個不活動線程的事件矢量,而且僅僅對一個可能的活動線程定序微指令。在沒有線程是活動的地方,微碼定序器66忽略用于所有線程的事件矢量。
通過提供由該活動線程狀態(tài)機171保持的活動位,提供了一個適當(dāng)和集中的指示,依據(jù)于此各個功能單元可以被配置為在一個清空操作完成之后在多線程處理器30內(nèi)支持一個正確數(shù)量的活動線程,其中活動線程狀態(tài)機171能夠由各個功能單元依據(jù)清空信號170解聲明(發(fā)信號通知一個清空操作的結(jié)束)進行檢查。
圖11B是一個顯示了示例配置邏輯329的框圖,其與一個功能單元331相關(guān)聯(lián),并且操作來配置功能單元331以在多線程處理器內(nèi)支持一個或多個活動線程。功能單元331可以是上面所述功能單元、或者任何將由一個所屬技術(shù)領(lǐng)域?qū)I(yè)人員認為要被包含在一個處理器內(nèi)的任何功能單元中的任何一個。顯示的功能單元331具有由配置邏輯329配置的存儲與邏輯組件。舉例來說,存儲組件可以包含多個寄存器。當(dāng)多個線程是活動時(即,當(dāng)一個處理器正以一個MT模式操作時),這些寄存器中的每一個都可以被分配以存儲用于這些線程特定一個的微指令或者數(shù)據(jù)。因此,如圖11B所示的存儲組件邏輯被劃分為支持第一和第二線程(例如,T0和T1)。當(dāng)然,該存儲組件能夠被劃分以支持任意數(shù)量的活動線程。
顯示的邏輯組件包含MT邏輯,該邏輯特別地用于在該處理器內(nèi)支持多線程操作(即,一個MT)。
顯示的配置邏輯329保持指針值333,其被輸出到功能單元331的存儲組件。在一個示例實施例中,這些指針值333被使用來邏輯劃分該存儲組件。例如,能夠為每一個活動線程產(chǎn)生一個單獨的讀和寫指針值對。取決于活動線程的數(shù)目,由配置邏輯329確定用于每一個線程的指針值的上下界限。例如,如果其他線程變得不活動的話,由一組用于一個特定線程的指針值指示的寄存器范圍可以被增加以覆蓋先前分配給另一個線程的寄存器。
配置邏輯329還包含MT支持啟用指示335,其被輸出到功能單元的邏輯組件以啟用或者停用功能邏輯331的MT支持邏輯。
由活動線程狀態(tài)機174輸出的活動位327,提供輸入到配置邏輯,并且由配置邏輯329使用來產(chǎn)生值333的適當(dāng)點以及提供適當(dāng)?shù)腗T支持啟用輸出。
一個事件處理器的排它訪問某些事件處理器(例如,用于處理分頁和同步事件的那些)需要排它訪問該多線程處理器30來使用共享資源以及修改共享狀態(tài)。因此,微碼定序器66實現(xiàn)了一個排它訪問狀態(tài)機69,其在用于第一和第二線程的事件處理器需要這樣的排它訪問的地方,反過來排它訪問這些事件處理器。僅僅當(dāng)多于一個線程在多線程處理器30內(nèi)活動時才可以引用該排它訪問狀態(tài)機69。與具有排它訪問的一個事件處理器相關(guān)聯(lián)的一個流標記被插入到用于該線程的流中,來標記包含該事件處理器的排它代碼的結(jié)尾。一旦為所有線程完成了排它訪問,微碼定序器66繼續(xù)微指令的正常發(fā)布。
圖13是一個流程圖,其說明了一種依據(jù)示例實施例,在一個多線程處理器30內(nèi)提供對一個事件處理器67的排它訪問的方法400。方法400在塊402處、由微碼定序器66從事件檢測器188接收用于相應(yīng)的第一和第二線程的第一和第二事件向量開始。如上所述,每一個第一和第二事件向量將標識一個相應(yīng)的事件處理器67。
在判定框403處,做出關(guān)于是否有多于一個(1)線程在活動的判定。這個判定由微碼定序器參考活動線程狀態(tài)機171做出。如果不是的話,方法400繼續(xù)到塊434。如果是這樣的話,方法400繼續(xù)到判定框404。
在判定框404處,微碼定序器66做出關(guān)于第一或者第二事件處理器67是否需要排它訪問一個共享資源、或者修改一個共享狀態(tài)的判定。如果是這樣的話,在塊406處微碼定序器66實現(xiàn)狀態(tài)機69,其按序提供對第一和第二事件處理器67每一個的排它訪問。圖14是依據(jù)示例實施例,描述了該排它訪問狀態(tài)機69的操作的一個狀態(tài)圖。顯示的狀態(tài)機69包含五個狀態(tài)。在第一狀態(tài)408中,用于第一和第二線程的微碼都由微碼定序器66發(fā)布。響應(yīng)于需要一個排它訪問事件處理器的一個事件發(fā)生一個清空操作410時,狀態(tài)機69轉(zhuǎn)換到第二狀態(tài)412,其中發(fā)布與用于第一線程的一個事件相關(guān)聯(lián)的第一個事件處理器67(即,微指令)。在所有構(gòu)成第一個事件處理器67的微指令定序之后,以及在由這樣的微指令指示的所有操作完成之后,微碼定序器66然后在414發(fā)布一個停止微指令(例如具有一個相關(guān)的停止流標記的微指令),以把該狀態(tài)機69從第二狀態(tài)412轉(zhuǎn)換到一個第三狀態(tài)416,在該狀態(tài)中停止發(fā)布第一線程的微指令。在418處,在414發(fā)布的停止微指令從重新排序緩存162收回,以由此把狀態(tài)機69從第三狀態(tài)416轉(zhuǎn)換到第四狀態(tài)420,其中微碼定序器66發(fā)布與用于第二線程的一個事件相關(guān)聯(lián)的第二事件處理器67。在所有構(gòu)成第二事件處理器67的微指令定序之后,以及在由這樣的微指令指示的所有操作完成之后,微碼定序器66然后在422發(fā)布一個進一步的停止微指令,以把該狀態(tài)機69從第四狀態(tài)轉(zhuǎn)換到一個第五狀態(tài)424,在該狀態(tài)中停止發(fā)布第二事件處理器67的微指令。在426處,在422發(fā)布的停止微指令從重新排序緩存162收回,由此把狀態(tài)機69從第五狀態(tài)424轉(zhuǎn)換回到第一狀態(tài)408。
在塊432處,假定兩個線程都是活動的,則再繼續(xù)用于第一和第二線程的微指令的正常定序和發(fā)布。
做為選擇,如果判定框404確定第一或者第二事件處理器都不需要排它訪問處理器30的共享資源或者狀態(tài),則方法繼續(xù)到塊434,其中微碼定序器66以一種非排它、交叉的方式定序構(gòu)成第一和第二事件處理器67的微碼。
活動線程狀態(tài)機(171)圖15是一個狀態(tài)圖500,其依據(jù)一個示例實施例說明了可以由活動線程狀態(tài)機171占據(jù)的狀態(tài),還依據(jù)一個示例實施例說明了可以導(dǎo)致活動線程狀態(tài)機171在各個狀態(tài)之間進行轉(zhuǎn)換的轉(zhuǎn)換事件。
顯示的活動線程狀態(tài)機171駐留在四個狀態(tài)中的一個中,這四個狀態(tài)即單個線程0(ST0)狀態(tài)502、單個線程1(ST1)狀態(tài)504、多個線程(MT)狀態(tài)506、以及零線程(ZT)狀態(tài)508?;顒泳€程狀態(tài)機171為每一線程保持單個活動位,當(dāng)該位被設(shè)置時,標識相關(guān)的線程正是活動的;以及當(dāng)被重置時,指示相關(guān)的線程正是不活動或者在睡眠中。
在四個狀態(tài)502-508之間的轉(zhuǎn)換由事件對觸發(fā),一個事件對的每一個事件都與第一或者第二線程有關(guān)。在狀態(tài)圖500中,指出了多個有助于在狀態(tài)之間進行轉(zhuǎn)換的事件類型。具體地說,SLEEP事件是一個導(dǎo)致線程變得不活動的事件。BREAK事件是一個當(dāng)為一個特定線程發(fā)生時,導(dǎo)致該線程從一個不活動狀態(tài)轉(zhuǎn)換到一個活動狀態(tài)的事件。一個特定事件是否有資格作為一個BREAK事件可以取決于導(dǎo)致該線程變得不活動的SLEEP事件。具體地說,一旦不活動是一個特定SLEEP事件的結(jié)果,則僅僅某些事件將導(dǎo)致一個線程變得活動。一個NUKE事件是任何當(dāng)為特定線程發(fā)生時,導(dǎo)致執(zhí)行一個如上所述的清空操作的事件。上面參考圖8討論的所有事件都可能包含清空事件。最后,還在狀態(tài)圖500內(nèi)說明了相對于一個特定線程發(fā)生的一個“沒有事件”,它作為一個可以與相對于一個進一步的線程發(fā)生的事件組合存在以導(dǎo)致一個狀態(tài)轉(zhuǎn)換的條件。
在一個實施例中,如果為一個特定線程發(fā)信號通知一個SLEEP事件,且用于那個線程的BREAK事件是待決的,則馬上服務(wù)于該BREAK事件(例如,線程不會進入睡眠并且被稍后喚醒來服務(wù)該BREAK事件)。相反情況也可以是真的,因為可以為一個特定線程發(fā)信號通知一個BREAK事件,而且一個SLEEP事件是待決的,然后就服務(wù)于該BREAK事件。
依據(jù)由事件檢測器188對清空信號170的聲明,估算活動線程狀態(tài)機171,如在圖12中的324處指示的那樣。在解聲明該清空信號170之后,基于由活動線程狀態(tài)機保持的活動位配置在多線程處理器30內(nèi)的所有功能單元。具體地說,檢驗器、重放和收回單元(CRU)160傳送基于該活動位產(chǎn)生的一個信號到所有受影響的功能單元,以向功能單元指示在該多線程處理器內(nèi)有多少線程是現(xiàn)存的,以及這些線程中的哪一個是活動的。在聲明清空信號170之后,一般在一個時鐘信號304的時鐘周期內(nèi)完成功能單元的配置(例如劃分或者取消劃分)。
線程退出和入口本發(fā)明提出了一種示例機制,借此在一個多線程處理器30內(nèi)的線程可以進入和退出(例如,變得活動或者不活動),其中這樣的進入和退出以一種統(tǒng)一的次序發(fā)生而不管正在運行的線程數(shù)目,而且當(dāng)在多線程處理器30內(nèi)沒有更多的線程是活動的或者正在運行時,可以很好地停止到各個功能單元的時鐘信號。
如上參考狀態(tài)圖500所述,響應(yīng)于用于一個當(dāng)前不活動線程的BREAK事件的檢測,發(fā)生線程進入(或者激活)。取決于一個特定線程變得不活動的理由,定義用于該相關(guān)不活動線程的BREAK事件。響應(yīng)于用于一個當(dāng)前活動線程的SLEEP事件,發(fā)生線程退出。SLEEP事件的示例包含執(zhí)行包含在一個活動線程內(nèi)的一個停止(HLT)指令、一個SHUTDOWN或者一個ERROR_SHUTDOWN條件的檢測、或者相對于該活動線程的一個“等待SIPI”(起動處理器間中斷)條件。
圖16A是一個流程圖,依據(jù)本發(fā)明的示例實施例說明了一種在檢測到用于一個活動線程的一個SLEEP事件時,退出該活動線程的方法600。方法600在塊602開始,在那兒保存用于該活動線程所有需要的狀態(tài),并且解除分配先前已經(jīng)分配給用于該活動線程的微指令、在寄存器堆124內(nèi)的所有寄存器入口。舉例來說,對于在寄存器堆124內(nèi)的僅僅128個寄存器入口,解分配先前分配給該活動線程的微指令的28個入口。被解分配的、用于該活動線程的寄存器內(nèi)容被保存在一個“便箋本”中,其可以包含與在多線程處理器30內(nèi)的一條控制寄存器總線相連的一個寄存器陣列或者隨機存取存儲器(RAM)。
可以由微碼定序器665響應(yīng)于用于活動線程的STOPCLK、HALT(HLT)或者SHUTDOWN事件的檢測、發(fā)布的一個解除分配微碼序列,來執(zhí)行在寄存器堆124內(nèi)的寄存器入口的解分配。解分配微碼序列進行操作以在釋放列表管理器134內(nèi)刪除(或者無效)用于該寄存器堆入口的記錄,并且在垃圾堆數(shù)組132內(nèi)創(chuàng)建(或者確認)用于該寄存器堆入口的記錄。換句話說,通過該解分配微碼序列,用于該解分配寄存器堆入口的記錄從釋放列出管理器134傳送到垃圾堆數(shù)組132。
圖16B是可以在塊602執(zhí)行的操作的一個示例實施例的圖解表示。例如,在寄存器堆124內(nèi)第一組寄存器內(nèi)容的傳送,這就是說先前分配給第一線程(例如,T0)的內(nèi)容被顯示為傳輸?shù)皆摫愎{本。在保存狀態(tài)中可以執(zhí)行的額外操作包含存儲用于一個退出線程的體系結(jié)構(gòu)寄存器內(nèi)容到便箋本;以及在退出這個第一線程時,存儲分配給第一線程的微碼暫存寄存器的內(nèi)容到便箋本。在一個線程退出上空出的寄存器然后可以用于再分配到另一個線程(例如,T1)。
當(dāng)重新進入一個特定線程時,應(yīng)當(dāng)理解分配給這個線程的寄存器內(nèi)容可以從該便箋本中恢復(fù),如在圖16B中的虛線指示的那樣。
在塊604處,一個用于該退出線程的線程特有“圍欄微指令”被插入到用于該退出線程的微指令流中,來從該存儲器有序緩存48、各個高速緩存和處理器總線中排出任何剩余的、與該線程相關(guān)聯(lián)的待決存儲器訪問。這個操作不會收回直到所有這些塊完成為止。
當(dāng)這些執(zhí)行單元20相對快速地執(zhí)行微指令時,利用響應(yīng)于SLEEP事件檢測聲明的清空信號,清除所有添加到執(zhí)行單元輸入端的所有新的微指令。如上所述,清空信號170被保持足夠長的一段時間(例如,三個時鐘周期)以便允許在聲明該清空信號170之前進入該執(zhí)行單元70的微指令從中排出。當(dāng)這些微指令從執(zhí)行單元70中排出時,它們被清除并且取消寫回。
在塊606處,通過由微碼定序器66產(chǎn)生的一個微指令寫回一個設(shè)置該展開寄存器狀態(tài)的值,設(shè)置保持在事件檢測器188內(nèi)的展開寄存器208,以指示該退出線程是在一個不活動(或者一個睡眠)狀態(tài)中。
在塊608處,通過讓控制寄存器寫入由微碼定序器66發(fā)布的微指令,設(shè)置用于該退出線程的事件禁止寄存器206來禁止用于該退出線程的非中斷事件。由控制寄存器微指令指示的、用于該退出線程的事件禁止寄存器的設(shè)置,取決于正被服務(wù)的睡眠事件類型。如上討論所述,取決于觸發(fā)到該不活動狀態(tài)轉(zhuǎn)換的SLEEP事件,相對于該不活動線程,僅僅某些事件有資格作為中斷事件。具體參考用于該不活動線程的事件禁止寄存器206,做出關(guān)于一個事件是否有資格作為用于一個特定不活動線程的中斷事件的判定。
在塊612處,使用一個特定微指令發(fā)信號通知用于該退出線程的睡眠事件,該微指令在該特定微指令的寫回錯誤信息字段中放置一個睡眠事件編碼。
圖17是一個流程圖,依據(jù)一個示例實施例說明了一種在檢測到用于一個不活動線程的一個BREAK事件時,把該線程從一個不活動狀態(tài)轉(zhuǎn)換到一個活動狀態(tài)的方法700。方法700在702處,為一個事件檢測一個事件發(fā)生開始,其中相對于一個不活動線程,該事件可能有資格作為一個BREAK事件或者不能作為一個BREAK事件。在判定框703處,由一個事件檢測邏輯185為相關(guān)事件做出確定該事件是否有資格作為一個用于該不活動線程的一個BREAK事件的判定。為此,事件檢測邏輯185檢查在事件檢測器188中的寄存器200內(nèi)的事件禁止寄存器206。如果相對于該不活動線程,相關(guān)的事件類型沒有被指出是一個禁止的BREAK事件,則方法700繼續(xù)到塊704,其中根據(jù)需要打開時鐘,正常地發(fā)信號通知該事件(在另一個線程上等待一個可清空點),并且如同用于任何事件一樣激活處理器。事件處理器檢查該線程睡眠狀態(tài),如果設(shè)置了睡眠狀態(tài),則繼續(xù)在706處恢復(fù)微碼狀態(tài)。事件處理器67通過訪問展開寄存器208來確認線程的不活動狀態(tài)。
更具體地說,通過恢復(fù)所有保存的寄存器狀態(tài)、禁止寄存器狀態(tài)、和指令指針信息,事件處理器67著手恢復(fù)用于該進入線程的微碼狀態(tài)。
在塊706處恢復(fù)微碼狀態(tài)之后,方法繼續(xù)塊708,其中恢復(fù)用于該進入線程的體系結(jié)構(gòu)狀態(tài)。在塊710處,通過從微碼定序器66發(fā)布的一個適當(dāng)?shù)奈⒅噶?,重置或者清除用于該進入線程的事件禁止寄存器206。在塊712處,事件處理器67繼續(xù)服務(wù)BREAK事件。在這一點上,在多線程處理器30內(nèi)執(zhí)行構(gòu)成該事件處理器67的微碼,以響應(yīng)于該事件發(fā)生執(zhí)行一系列操作。在塊716處,在處理器30內(nèi)為該進入線程重新繼續(xù)執(zhí)行指令取出操作。方法700然后在塊718處終止。
時鐘控制邏輯為了減少在該多線程處理器30內(nèi)的功耗和熱耗散,在一定條件下停止、或者暫停至少某些在處理器30內(nèi)的時鐘信號是合符需要的。圖18是一個流程圖,其依據(jù)一個示例實施例說明了一種在一個諸如上面所述的示例處理器30的多線程處理器內(nèi),停止、或者暫停選擇的時鐘信號的方法800。為了本說明書起見,使用的對在處理器內(nèi)的時鐘信號的暫停或者停止應(yīng)當(dāng)擁有許多在處理器內(nèi)暫?;蛘咄V挂粋€時鐘信號、或者多個信號的技術(shù)。例如,能夠暫停在處理器30內(nèi)的一個鎖相回路(PLL)、能夠禁止沿著一個時鐘中心的一個核心時鐘信號分布、或者能夠選通或者相反阻止經(jīng)由該時鐘中心分布一個時鐘信號到在該處理器內(nèi)的單獨功能單元。一個實施例設(shè)想后面的情況,其中在一個功能單元接著一個功能單元的基礎(chǔ)上,暫停、或者停止供應(yīng)一個內(nèi)部時鐘信號到在處理器30內(nèi)的功能單元。因此,當(dāng)相對于其他功能單元被選通時,該內(nèi)部時鐘信號可以是提供給某些功能單元。這樣一個方案在美國專利5,655,127中的單線程微處理器環(huán)境內(nèi)描述了。
在一個實施例中,在圖18中說明的方法800可以由集成在處理器30的總線接口單元32內(nèi)的時鐘控制邏輯35執(zhí)行。在替換實施例中,時鐘控制邏輯35當(dāng)然可以位于遠離處理器30的別處。圖19A和19B是分別說明有關(guān)示例時鐘控制邏輯35的更多細節(jié)的框圖和示意圖。
首先參見圖19A,顯示的時鐘控制邏輯35接收三個主要輸入,即(1)經(jīng)由活動線程狀態(tài)機174輸出的活動位820(例如,T0_ACTIVE和T1_ACTIVE);(2)由事件檢測器188輸出的事件檢測信號211;以及(3)由總線接口單元32輸出的一個探聽控制信號822,其在總線上檢測一個可探聽的訪問并且聲明信號882。時鐘控制邏輯35使用這些輸入產(chǎn)生一個停止時鐘信號826,該信號826反過來抑制或者禁止在處理器30內(nèi)某些功能單元的時鐘脈沖。
圖19B是一個說明示例組合邏輯的示意圖,其利用輸入211、820和822輸出停止時鐘信號826。具體地說,事件檢測器信號211提供輸入到一個或(OR)門822,其反過來提供輸入到一個進一步的或(OR)門824。活動位820和探聽控制信號822還提供輸入到NOR門824,該NOR門或運算這些輸入以輸出停止時鐘信號826。
具體地參見圖18,方法800在判定框802開始,在判定框802處判定是否有任何線程(例如,一個第一和一個第二線程)在多線程處理器30內(nèi)是活動的。這個判定由在圖19B中活動位820到或(OR)門824的輸出反映。雖然示例實施例說明相對于兩個線程可以滿足該判定,可以容易地理解相對于在一個多線程處理器內(nèi)支持的任意數(shù)量線程做出這個判定。
在判定框802處的一個否定判定之后,方法800繼續(xù)判定框804,其中做出關(guān)于沒有被禁止的任何事件是否為在該多線程處理器內(nèi)支持的任何線程待決的判定。再次,在示例實施例中,這包含確定任何事件是否為第一或者第二線程待決。這個判定由圖19B中顯示的,事件檢測信號211到或(OR)門822的輸入來表示。
在判定框804處的一個否定判定之后,在判定框806處做出任何探聽(例如,總線探聽、SNC探聽或者其他探聽)是否正由處理器總線處理的一個進一步的判定。在本發(fā)明的示例實施例中,這個判定由輸入該探聽控制信號822到或(OR)門824實現(xiàn)。
在判定框806處的一個否定判定之后,方法800繼續(xù)到塊808,其中到選定功能單元的內(nèi)部時鐘信號被停止或者抑制了。具體地說,到總線待決邏輯和總線訪問邏輯的時鐘信號沒有被暫?;蛘咄V梗驗檫@允許該總線接口單元32檢測在系統(tǒng)總線上起源的BREAK事件或者探聽(例如,管腳事件)并且響應(yīng)于這樣的BREAK事件再啟動該時鐘脈沖到功能單元。通過聲明停止時鐘信號826可以實現(xiàn)內(nèi)部時鐘信號到功能單元的抑制,其具有選通時鐘信號到預(yù)定功能單元的效果。
在塊808完成之后,方法800返回到判定框802。在判定框802、804和806處的判定之后,可以通過一個連續(xù)的基礎(chǔ)進行循環(huán)。
在判定框802、804和806中任何一個的肯定判定之后,方法800轉(zhuǎn)移到塊810,其中,如果已經(jīng)選通了到某些功能單元的時鐘信號的話,則這些內(nèi)部時鐘信號再次被激活。做為選擇,如果時鐘信號已經(jīng)是活動的,則把這些時鐘信號保持在一個活動狀態(tài)。
在響應(yīng)于一個中斷事件,執(zhí)行塊810的地方(例如,在判定框804的一個肯定判定之后),在微處理器內(nèi)的功能單元可以以上面所述的方式,基于活動線程的數(shù)目,在清空信號的聲明處被主動地劃分。
例如,在一個具有兩個或更多線程的多線程處理器30中,一些線程可以是不活動的,而在這樣情況下將不會劃分該功能單元以容納不活動的線程。
當(dāng)完成塊810時,方法800再次返回到判定框802,并且開始由判定框802、804和806表示的判定的另一次迭代。
因此,已經(jīng)描述了用于在一個多線程處理器內(nèi)管理一個時鐘信號的方法和裝置。雖然已經(jīng)參考具體的示例實施例加以描述了,但是顯然可以對這些實施例進行各種修改和改變而不背離本發(fā)明寬闊的范圍和精神。因此,說明書和附圖只作為一個示例說明,而不是起限制作用。
權(quán)利要求
1.一種方法,包含相對于在一個多線程處理器內(nèi)支持的多個線程中的每一個,保持一個待決事件的一個指示;為在該多線程處理器內(nèi)支持的多個線程中的每一個,保持一個活動或者不活動狀態(tài)的一個指示;檢測由相對于多個線程中每一個的非待決事件指示、和用于這多個線程中每一個的不活動狀態(tài)的指示所指示的一個時鐘停用條件;以及如果一個時鐘信號被啟用了,則響應(yīng)于該時鐘停用條件的檢測,相對于在該多線程處理器內(nèi)的至少一個功能單元,停用該時鐘信號。
2.如權(quán)利要求1所述的方法,包含檢測由相對于在多線程處理器內(nèi)支持的多個線程中的至少一個線程的一個待決事件指示、或者用于在多線程處理器內(nèi)支持的多個線程中的至少一個線程的一個活動狀態(tài)的指示來指示的一個時鐘啟用條件,以及,如果一個時鐘信號被停用了,則響應(yīng)于該時鐘啟用條件的檢測,相對于在該多線程處理器內(nèi)的至少一個功能單元,啟用該時鐘信號。
3.如權(quán)利要求1所述的方法,包含僅僅在沒有一個總線訪問操作的情況下,提供一個總線訪問操作的一個指示,并且檢測時鐘停用條件。
4.如權(quán)利要求3所述的方法,其特征在于總線訪問操作包含一個探聽操作,而且其中當(dāng)該總線訪問操作在一個預(yù)定的探聽期間是活動的時,提供該總線訪問操作的指示。
5.如權(quán)利要求2所述的方法,包含為由多線程處理器支持的多個線程中的至少一個第一線程保持一個事件禁止指示,其中該事件禁止指示標識相對于第一線程的至少一個事件,該事件不構(gòu)成觸發(fā)第一線程在不活動和活動狀態(tài)之間的一次轉(zhuǎn)換的一個事件。
6.如權(quán)利要求5所述的方法,其特征在于時鐘停用條件和時鐘啟用條件的檢測受到相對于第一線程的事件禁止指示的支配,而且如果由用于第一個線程的事件禁止指示指示一個待決事件被禁止了,則檢測到時鐘停用條件或者沒有檢測到一個時鐘啟用條件。
7.如權(quán)利要求1所述的方法,其特征在于維護相對于多個線程中每一個的線程動作指示包含保持一個活動的線程狀態(tài)機,其為支持的多個線程中的每一個輸出一個信號以指示一個相應(yīng)的線程是在活動狀態(tài)還是在不活動狀態(tài)中。
8.如權(quán)利要求1所述的方法,其特征在于相對于至少一個功能單元停用時鐘信號包含選通該時鐘信號。
9.如權(quán)利要求1所述的方法,其特征在于相對于至少一個功能單元停用該時鐘信號包含在一個處理器時鐘中心上禁止一個處理器時鐘信號的傳送。
10.如權(quán)利要求1所述的方法,其特征在于相對于至少一個功能單元停用該時鐘信號包含停用一個產(chǎn)生一個處理器時鐘信號的鎖相回路。
11.如權(quán)利要求1所述的方法,其特征在于停用時鐘信號包含保持提供一個時鐘信號到該多線程處理器的總線插腳,以便當(dāng)該時鐘信號被停用時啟用一個總線訪問操作或者事件的檢測。
12.一種裝置,包含一個待決事件指示器,其相對于在一個多線程處理器內(nèi)支持的多個線程中的每一個,保持一個待決事件的一個指示;一個活動線程指示器,其為在多線程處理器內(nèi)支持的多個線程中的每一個,保持一個活動或者不活動狀態(tài)的一個指示;以及時鐘控制邏輯,檢測由相對于多個線程中每一個的非待決事件的指示和相對于多個線程中每一個的一個不活動狀態(tài)指示的一個時鐘停用條件,并且響應(yīng)于該時鐘停用條件的檢測,相對于在該多線程處理器內(nèi)的至少一個功能單元停用一個時鐘信號。
13.如權(quán)利要求12所述的裝置,其特征在于該時鐘控制邏輯檢測由相對于在多線程處理器內(nèi)支持的多個線程中的至少一個線程的一個待決事件指示所指示的一個時鐘啟用條件,并且如果該時鐘信號被停用了,則響應(yīng)于該時鐘啟用條件的檢測,相對于在該多線程處理器內(nèi)的至少一個功能單元啟用該時鐘信號。
14.如權(quán)利要求12所述的裝置,其特征在于該時鐘控制邏輯檢測由用于在多線程處理器內(nèi)支持的多個線程中至少一個線程的一個活動狀態(tài)指示所指示的一個時鐘啟用條件,并且如果該時鐘信號被停用了,則響應(yīng)于該時鐘啟用條件的檢測,相對于在該多線程處理器內(nèi)的至少一個功能單元啟用該時鐘信號。
15.如權(quán)利要求12所述的裝置,包含提供了一個總線訪問操作的一個指示的總線探聽邏輯,而且其特征在于該時鐘控制邏輯僅僅在沒有來自于該總線探聽邏輯的一個總線訪問操作的一個指示的情況下,檢測該時鐘停用條件。
16.如權(quán)利要求15所述的裝置,其特征在于該總線訪問操作包含一個探聽操作,而且,當(dāng)該總線訪問操作活動持續(xù)一個預(yù)定探聽周期時,該總線探聽邏輯提供該總線訪問操作的指示。
17.如權(quán)利要求13所述的裝置,包含一個事件禁止指示器,為由該多線程處理器支持的多個線程中的至少一個第一線程保持一個事件禁止指示,該事件禁止指示標識有關(guān)該第一個線程的至少一個事件,該事件不構(gòu)成觸發(fā)第一個線程在不活動和活動狀態(tài)之間的一次轉(zhuǎn)換的一個事件。
18.如權(quán)利要求17所述的裝置,其特征在于時鐘控制邏輯檢測該時鐘停用條件和時鐘啟用條件受到有關(guān)第一個線程的事件禁止指示的支配,如果由用于第一個線程的事件禁止指示指示一個待決事件被禁止了,則該時鐘控制邏輯檢測到了該時鐘停用條件,或者沒有檢測到一個時鐘啟用條件。
19.如權(quán)利要求12所述的裝置,包含一個活動線程狀態(tài)機,其為支持的多個線程中的每一個輸出一個信號,來指示一個相應(yīng)的線程是在活動狀態(tài)還是在不活動狀態(tài)中。
20.如權(quán)利要求12所述的裝置,其特征在于相對于至少一個功能單元,該時鐘控制邏輯通過選通該時鐘信號來停用該時鐘信號。
21.如權(quán)利要求12所述的裝置,其特征在于相對于至少一個功能單元,該時鐘控制邏輯通過在一個處理器時鐘中心上禁止一個處理器時鐘信號的傳送來停用該時鐘信號。
22.如權(quán)利要求12所述的裝置,其特征在于相對于至少一個功能單元,該時鐘控制邏輯通過停用一個產(chǎn)生一個處理器時鐘信號的鎖相回路來停用該時鐘信號。
23.如權(quán)利要求12所述的裝置,其特征在于該時鐘控制邏輯相對于至少一個功能單元停用該時鐘信號,但是保持提供一個時鐘信號到多線程處理器的總線插腳,以便當(dāng)該時鐘信號被停用時,啟用一個總線訪問操作或者事件的檢測。
24.一種裝置,包含第一裝置,用于相對于在一個多線程處理器內(nèi)支持的多個線程中的每一個,保持一個待決事件的一個指示;第二裝置,用于為在該多線程處理器內(nèi)支持的多個線程中的每一個,保持一個活動或者不活動狀態(tài)的一個指示;以及第三裝置,用于檢測由相對于多個線程中每一個的非待決事件的指示和相對于多個線程中每一個的一個不活動狀態(tài)所指示的一個時鐘停用條件,以及響應(yīng)于該時鐘停用條件的檢測,相對于在該多線程處理器內(nèi)的至少一個功能單元停用一個時鐘信號。
25.一個包含了一個指令序列的機器可讀介質(zhì),當(dāng)該指令序列由一個機器執(zhí)行時,使該機器執(zhí)行以下步驟相對于在一個多線程處理器內(nèi)支持的多個線程中的每一個,保持一個待決事件的一個指示;為在該多線程處理器內(nèi)支持的多個線程中的每一個,保持一個活動或者不活動狀態(tài)的一個指示;檢測由相對于多個線程中每一個的非待決事件指示和用于多個線程中每一個的不活動狀態(tài)所指示的一個時鐘停用條件;以及如果一個時鐘信號被啟用了,則響應(yīng)于該時鐘停用條件的檢測,相對于在該多線程處理器內(nèi)的至少一個功能單元,停用該時鐘信號。
全文摘要
一種方法,包含根據(jù)在一個多線程處理器內(nèi)支持的多個線程中的每一個,保持一個待決事件的一個指示。還保持用于多個線程中每一個的一個活動或者不活動狀態(tài)的一個指示。檢測一個時鐘停用條件。可以由缺少相對于多個線程中每一個的待決事件和用于多個線程中每一個的不活動狀態(tài)來指示這個時鐘停用條件。如果一個時鐘信號被啟用了,則響應(yīng)于該時鐘禁止條件的檢測,相對于在該多線程處理器內(nèi)的至少一個功能單元,停用該時鐘信號。
文檔編號G06F9/38GK1433544SQ00818879
公開日2003年7月30日 申請日期2000年10月11日 優(yōu)先權(quán)日1999年12月9日
發(fā)明者D·羅杰斯, B·托爾, A·伍德 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1