專利名稱:用于在一個多線程處理器內(nèi)進(jìn)行線程切換的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明通常涉及多線程處理器領(lǐng)域,尤其是涉及一種用于在一個多線程處理器內(nèi)執(zhí)行上下文(或線程)切換的方法及其裝置。
發(fā)明
背景技術(shù):
多線程處理器設(shè)計近來已經(jīng)被認(rèn)為是一種用于提高處理器性能的日益有吸引力的選擇。此外,在一個處理器內(nèi)的多線程處理為更有效地利用各種處理器資源提供了可能性,尤其是為更加有效地利用在一個處理器內(nèi)的執(zhí)行邏輯提供了可能性。特別地,通過將多個線程傳送到一個處理器的執(zhí)行邏輯,原先由于在一個特定線程處理過程中的停止或其它延遲而造成空閑的時鐘周期可以被用來服務(wù)另外一個線程。在一個特定線程處理過程中的一個停止可以由一個處理器流水線內(nèi)的許多事件引起。例如,用于一條包含在一個線程內(nèi)的指令的一個高速緩存故障或一個分支錯誤預(yù)測(即一個長等待時間的操作),通常會導(dǎo)致有關(guān)線程處理過程的停止。長等待時間的操作在執(zhí)行邏輯效率上的消極影響由于近來執(zhí)行邏輯吞吐量的增加而有所加劇,其中該執(zhí)行邏輯吞吐量在存儲器訪問和檢索率方面有超前的增長。
鑒于由許多普及的操作系統(tǒng)、諸如Windows NT和UNIX操作系統(tǒng)提供給這種多線程應(yīng)用的支持,多線程的計算機(jī)應(yīng)用也變得日益普及。多線程計算機(jī)應(yīng)用在多媒體環(huán)境中尤其有效。
依據(jù)在有關(guān)處理器內(nèi)使用的線程交錯或切換方案,多線程處理器可以被廣泛地分為兩類(即精細(xì)或粗糙設(shè)計)。精細(xì)的多線程設(shè)計在一個處理器內(nèi)支持多個有效線程,并且通常在一個周期接一個周期的基礎(chǔ)上交錯兩個不同的線程。粗糙的多線程設(shè)計通常在發(fā)生某些長等待時間的事件、諸如一個高速緩存故障時交錯不同線程的指令。在以下文獻(xiàn)中討論了一種粗糙的多線程設(shè)計R.;Johnson,R.;et al.;“Evaluation of Multithreaded Uniprocessors for CommercialApplication Environments″,The 23rd Annual InternationalSymposium on Computer Architecture(第23屆計算機(jī)體系結(jié)構(gòu)國際年會論文集),pp.203-212,May 1996.而在以下文獻(xiàn)中進(jìn)一步討論了精細(xì)和粗糙設(shè)計之間的區(qū)別Laudon,j;Gupta,A,“Architecturaland Implementation Tradeoffs in the Design of Multiple-Context Processors”,Multithreaded Computer Architectures(多線程結(jié)構(gòu))A Summary of the State of the Art(技術(shù)狀態(tài)概述),edited by R.A.Iannuci dt al.,(由Lannuci等編輯),pp.167-200,Kluwer Academic Publishers,Norwell,Massachusetts,1994.Laudon進(jìn)一步提出了一個交錯方案,它將一個精細(xì)設(shè)計一個周期接一個周期的切換和一個粗糙設(shè)計的完全流水線聯(lián)鎖(或鎖定方案)結(jié)合起來。為此,Laudon提出了一條“補償”指令,使一個特定線程(或上下文)在一個特定數(shù)目的周期內(nèi)無法使用。這樣一條“補償”指令可以依據(jù)預(yù)定事件、諸如一個高速緩存故障的發(fā)生來發(fā)布。這樣,Laudon通過簡單地使這些線程中的一個無法使用而避免了必須執(zhí)行一個實際的線程切換。
發(fā)明概述依據(jù)本發(fā)明,提供了一種用于在一個多線程處理器內(nèi)執(zhí)行一個線程切換操作的方法。對用于第一個線程的第一個預(yù)定量指令信息從該多線程處理器內(nèi)部的一個指令信息源的發(fā)送進(jìn)行檢測。對用于第一個線程的第一個預(yù)定量指令信息發(fā)送的檢測做出響應(yīng),開始從該指令信息源發(fā)送用于第二個線程的指令信息。
通過附圖和隨后的詳細(xì)說明,本發(fā)明的其它特征將是顯而易見的。
附圖簡要說明本發(fā)明通過附圖進(jìn)行了舉例說明,但是不局限于此,且附圖中相似的標(biāo)記表示相似的單元,其中
圖1的框圖說明了在其內(nèi)部可以實現(xiàn)本發(fā)明的一個處理器的一個示范流水線;圖2的框圖以一個通用多線程微處理器的形式說明了在其內(nèi)部可以實現(xiàn)本發(fā)明的一個處理器的一個示范實施例;圖3的框圖為一個包含在如圖2所示的通用微處理器內(nèi)部的微指令翻譯機(jī)的示例的體系結(jié)構(gòu)提供了更多細(xì)節(jié);圖4的框圖說明了一個示范性多線程微處理器的選定部件,而且特別地描述了由于為容納多個線程而被邏輯分區(qū)的各種提供緩存能力的功能單元;圖5的框圖說明了關(guān)于依據(jù)本發(fā)明一個實施例的一個示范性指令流緩存器的結(jié)構(gòu)和體系結(jié)構(gòu)的更多細(xì)節(jié);圖6的框圖說明了依據(jù)本發(fā)明一個示范實施例的線程切換控制邏輯的邏輯元件;圖7的流程圖說明了依據(jù)本發(fā)明一個示范實施例、用于當(dāng)在一個多線程處理器內(nèi)的多個線程空閑時確定一個開始線程的方法;圖8的流程圖說明了依據(jù)本發(fā)明示范實施例、用于當(dāng)從一個指令源發(fā)送當(dāng)前線程的分支指令時在一個多線程處理器內(nèi)部執(zhí)行線程切換操作的方法;圖9的流程圖說明了依據(jù)本發(fā)明一個示范實施例、用于當(dāng)發(fā)生一個長等待時間的停止時在一個多線程處理器內(nèi)執(zhí)行線程切換操作的方法;圖10的流程圖說明了依據(jù)本發(fā)明一個示范實施例、用于當(dāng)發(fā)生一個內(nèi)部流水線清除時在一個多線程處理器內(nèi)執(zhí)行線程切換操作的方法;圖11的流程圖說明了依據(jù)本發(fā)明示范實施例、用于當(dāng)出現(xiàn)關(guān)于一個特定線程的“無數(shù)據(jù)流”狀態(tài)時在一個多線程處理器內(nèi)執(zhí)行線程切換操作的方法;圖12的流程圖說明了依據(jù)本發(fā)明一個示范實施例、用于當(dāng)從一個指令流緩存器向一個指令預(yù)解碼器發(fā)送用于一個特定線程的一個預(yù)定量指令信息時在一個多線程處理器內(nèi)執(zhí)行線程切換操作的方法;圖13是一個說明了依據(jù)本發(fā)明示范實施例、用于當(dāng)發(fā)生一個外部流水線清除時在一個多線程處理器內(nèi)執(zhí)行線程切換操作的方法的流程圖;圖14是一個說明了依據(jù)本發(fā)明示范實施例、用于當(dāng)在一個用于當(dāng)前線程的指令流內(nèi)檢測到一個插入的流程時在一個多線程處理器內(nèi)部執(zhí)行線程切換操作的方法的流程圖;圖15A和15B是顯示了依據(jù)本發(fā)明、如圖6中框圖形式所示的線程切換控制邏輯的相應(yīng)示范實施例的結(jié)構(gòu)簡圖;圖16是依據(jù)本發(fā)明的示例、用于將一個流程標(biāo)記(或插入流)插入到一個指令流里的邏輯簡圖。
詳細(xì)說明描述了一種用于在一個多線程處理器內(nèi)進(jìn)行線程切換的方法和裝置。在下面的描述中,為說明起見,闡述了大量具體細(xì)節(jié)以便提供對本發(fā)明的徹底理解。然而,對本領(lǐng)域技術(shù)人員來說,顯然本發(fā)明沒有這些具體細(xì)節(jié)也可以實現(xiàn)。
就該說明書來說,術(shù)語“發(fā)送”應(yīng)該包括數(shù)據(jù)從一個存儲單元或功能單元的實際發(fā)送或傳播,以及準(zhǔn)備該數(shù)據(jù)的實際發(fā)送或傳播的那些步驟。例如,術(shù)語“發(fā)送”應(yīng)該包含要從一個存儲單元或緩存器傳播的數(shù)據(jù)以一個特定次序或準(zhǔn)備狀態(tài)的放置。
處理器流水線圖1是說明了在其內(nèi)部可以實現(xiàn)本發(fā)明的處理器流水線10的一個示范實施例的高級框圖。就該說明書來說,術(shù)語“處理器”應(yīng)該指的是任何能夠執(zhí)行一個指令序列(例如,宏指令或微指令)的機(jī)器,并且應(yīng)該包含但不局限于通用微處理器、專用微處理器、圖形控制器、音頻控制器、多媒體控制器和微控制器。此外,術(shù)語“處理器”還應(yīng)該指的是復(fù)雜指令集計算機(jī)(CISC)、精簡指令集計算機(jī)(RISC)、或超長指令字(VLIW)處理器。該流水線10包含多個進(jìn)程階段,從一個讀取進(jìn)程階段12開始,在那兒讀出指令(例如宏指令)并將其送入該流水線10中。例如,一條宏指令可以從一個與該處理器集成或與之密切相關(guān)的高速緩存存儲器中讀出,或是經(jīng)由一條處理器總線從一個外部主存儲器中讀出。這些宏指令從該讀取進(jìn)程階段12被傳播到一個解碼進(jìn)程階段14,在那兒宏指令被譯成適于在該處理器內(nèi)執(zhí)行的微指令(也稱為“微碼”)。然后這些微指令被向下傳送到一個分配進(jìn)程階段16,在那兒依據(jù)可用性和需要將處理器資源分配給不同的微指令。然后這些微指令在一個退出進(jìn)程階段20中退出之前在一個執(zhí)行階段18執(zhí)行。
微處理器體系結(jié)構(gòu)圖2的框圖以一個通用微處理器30的形式說明了在其內(nèi)部可以實現(xiàn)本發(fā)明的一個處理器的示范實施例。該微處理器30作為一個多線程(MT)處理器而描述如下,而且因此能同時處理多個指令線程(或上下文)。然而,以下在說明書中提供的多個示教沒有特指一個多線程處理器,而且在一個單線程處理器中也可以發(fā)現(xiàn)該應(yīng)用。在一個示例中,該微處理器30可以包含一個能夠執(zhí)行Intel體系結(jié)構(gòu)指令集的Intel(英特爾)體系結(jié)構(gòu)(IA)微處理器。
微處理器30包含一個有序前端和一個無序后端。該有序前端包含一個總線接口單元32,起到微處理器30和一個在其內(nèi)部可以使用該微處理器30的計算機(jī)系統(tǒng)的其它元件(例如主存儲器)之間的管道作用。為此,該總線接口單元32將該微處理器30連接到一條處理器總線(未顯示),經(jīng)由該總線可以在微處理器30接收、并從微處理器30傳播數(shù)據(jù)和控制信息。該總線接口單元32包含前側(cè)總線(FSB)邏輯34,由它控制經(jīng)由該處理器總線的通信。此外該總線接口單元32還包含一個總線隊列36,它為經(jīng)由該處理器總線的通信提供緩存功能。該總線接口單元32從一個存儲器執(zhí)行單元42接收總線請求38,并向其發(fā)送探聽或總線返回,其中該存儲器執(zhí)行單元42提供了在微處理器30內(nèi)的一個本地存儲器性能。該存儲器執(zhí)行單元42包含一個統(tǒng)一的數(shù)據(jù)和指令高速緩存44、一個數(shù)據(jù)翻譯后備緩存器(TLB)46、和存儲器排序邏輯48。該存儲器執(zhí)行單元42從一個微指令翻譯機(jī)54接收指令讀取請求50,并向其傳送未處理的指令52(即編碼的宏指令),其中該微指令翻譯機(jī)54將接收的宏指令翻譯成為一組相應(yīng)的微指令。在下面提供了關(guān)于該微指令翻譯機(jī)54的更多細(xì)節(jié)。
解碼的指令(即微指令)從該微指令翻譯機(jī)54發(fā)送到一個記錄傳送機(jī)60。該記錄傳送機(jī)60包含一個記錄高速緩存62、一個記錄分支預(yù)測器(BTB)64、一個微碼定序器66和一個微碼(uop)隊列68。該記錄傳送機(jī)60起一個微指令高速緩存的作用,而且是用于一個下游的執(zhí)行單元70的微指令的主要來源。通過在該處理器流水線內(nèi)提供一個微指令高速緩存功能,該記錄傳送機(jī)60、特別是該記錄高速緩存62允許由微指令翻譯機(jī)54所做的翻譯工作被平衡以便提供一個相對高的微指令帶寬。在一個示范實施例中,該記錄高速緩存62可以包含一個256組的8路組相關(guān)存儲器。在本示例中,術(shù)語“記錄”可以指在記錄高速緩存62的條目內(nèi)存儲的微指令序列,其中每個條目包含指向包含該記錄在內(nèi)的先前和正在處理的微指令的指針。這樣,該記錄高速緩存62便于高性能的排序,體現(xiàn)在在完成當(dāng)前訪問之前為獲得隨后一條微指令而要訪問的下一個條目的地址是已知的。記錄可以被看作是彼此由記錄頭區(qū)別、而且一旦遇到一個間接分支或達(dá)到許多給出的閾值條件中的一個就結(jié)束的指令“塊”,這些閾值條件諸如在單個記錄中可以容納的條件分支的數(shù)目或是可以包含一個記錄的全體微指令的最大數(shù)目。
該記錄高速緩存分支預(yù)測器64提供了關(guān)于在該記錄高速緩存62內(nèi)的記錄的本地分支預(yù)測。該記錄高速緩存62和微碼定序器66向微碼隊列68提供微指令,然后從那兒將這些微指令送到一個無序的執(zhí)行群集。因此,該微處理器30可以被看作是具有一個包含總線接口單元32、存儲器執(zhí)行單元42、微指令翻譯機(jī)54和記錄傳送機(jī)60的有序前端、以及一個無序后端,該無序后端將在下面進(jìn)行詳細(xì)描述。
從微碼隊列68發(fā)送的微指令被接收到一個無序群集71中,其中該無序群集71包含一個調(diào)度器72、一個寄存器重命名器74、一個分配器76、一個重新排序緩存器78以及一個重調(diào)隊列80。調(diào)度器72包含一組預(yù)定位置,而且操作用以調(diào)度和發(fā)送微指令用于由執(zhí)行單元70執(zhí)行。寄存器重命名器74就隱藏的整數(shù)和浮點寄存器(可以用來代替八個通用寄存器中的任何一個或八個浮點寄存器中的任何一個,在那兒微處理器30執(zhí)行Intel體系結(jié)構(gòu)指令集)執(zhí)行寄存器重命名功能。分配器76依據(jù)可用性和需要操作用以向微指令分配執(zhí)行單元70和群集71的資源。在沒有足夠資源可以用來處理一條微指令的情況下,該分配器76負(fù)責(zé)確定一個停止信號82,該信號通過記錄傳送機(jī)60被傳送到微指令翻譯機(jī)54,如在58所示。其源字段由寄存器重命名器74進(jìn)行調(diào)整的微指令以嚴(yán)格的程序次序被放置在一個重新排序緩存器78中。然后,當(dāng)在該重新排序緩存器78內(nèi)的微指令已經(jīng)完成了執(zhí)行、并準(zhǔn)備好退出時,將它們從該重新排序緩存器78中刪除。重調(diào)隊列80將要重調(diào)的微指令傳播到執(zhí)行單元70。
如圖所示,執(zhí)行單元70包含一個浮點執(zhí)行機(jī)84、一個整數(shù)執(zhí)行機(jī)86、以及一個0級數(shù)據(jù)高速緩存88。在一個其中微處理器30執(zhí)行Intel體系結(jié)構(gòu)指令集的示范實施例中,浮點執(zhí)行機(jī)84還可以執(zhí)行MMX指令。
微指令翻譯機(jī)圖3的框圖為微指令翻譯機(jī)54的一個示范實施例的體系結(jié)構(gòu)提供了更多細(xì)節(jié)。微指令翻譯機(jī)54實際上操作作為一個記錄高速緩存“故障處理器”,體現(xiàn)在如果發(fā)生一個記錄高速緩存故障它就操作用于向記錄高速緩存62傳送微指令。為此,如果發(fā)生一個記錄高速緩存故障,則該微指令翻譯機(jī)54起到提供讀取進(jìn)程階段12和解碼進(jìn)程階段14的作用。微指令翻譯工具54包含一個下一指令指針(NIP)100、一個指令翻譯后備緩存器(TLB)102、一個分支預(yù)測器104、一個指令流緩存器106、一個指令預(yù)解碼器108、指令控制邏輯110、一個指令解碼器112、以及一個分支地址計算器114。下一指令指針100、TLB 102、分支預(yù)測器104和指令流緩存器106一起構(gòu)成了一個分支預(yù)測單元(BPU)99。指令解碼器112和分支地址計算器114一起構(gòu)成了一個指令翻譯(IX)單元113。
下一指令指針100向統(tǒng)一高速緩存44發(fā)布下一指令請求。在其中微處理器30包含一個能夠處理兩個線程的多線程微處理器的這個示例中,下一指令指針100可以包含一個多路復(fù)用器(MUX)(未顯示),它在與第一或者第二線程有關(guān)的指令指針之間進(jìn)行選擇,用于包含在在此發(fā)布的該下一指令請求內(nèi)。在一個實施例中,假定已經(jīng)請求了用于兩個線程的指令,而且用于兩個線程的指令流緩存器106的資源沒有用完,則下一指令指針100將在一個周期接一個周期(“往復(fù)轉(zhuǎn)換工作”)的基礎(chǔ)上交錯用于第一和第二線程的下一指令請求。取決于初始請求地址是否位于一個32字節(jié)或者64字節(jié)校準(zhǔn)行的上半部,下一指令指針請求可以是16、32或64字節(jié)。下一指令指針100可以由分支預(yù)測器104、分支地址計算器114、或記錄高速緩存62利用作為最高優(yōu)先權(quán)的重定向請求的一個記錄高速緩存故障請求進(jìn)行重定向。
當(dāng)下一指令指針100向統(tǒng)一高速緩存44做出一個指令請求時,它產(chǎn)生一個與該指令請求有關(guān)的2位的“請求標(biāo)識符”,并且該標(biāo)識符用作該相關(guān)指令請求的一個“標(biāo)記”。當(dāng)對一個指令請求做出響應(yīng)返回數(shù)據(jù)時,該統(tǒng)一高速緩存44和該數(shù)據(jù)一起返回下列標(biāo)記或標(biāo)識符1.由下一指令指針100提供的“請求標(biāo)識符”;
2.一個用以識別返回組塊的三位的“組塊標(biāo)識符”;以及3.一個用以識別返回的數(shù)據(jù)所屬的那個線程的“線程標(biāo)識符”。
下一指令請求從該下一指令指針100傳播到指令TLB 102,在那兒執(zhí)行一個地址查找操作,并向該統(tǒng)一高速緩存44傳送一個物理地址。統(tǒng)一高速緩存44向指令流緩存器106傳送一條相應(yīng)的宏指令。每個下一指令請求也直接從該下一指令指針100傳播到指令流緩存器106,以便允許該指令流緩存器106識別從該統(tǒng)一高速緩存44接收的一條宏指令所屬的那個線程。然后將來自于第一和第二線程的宏指令從該指令流緩存器106發(fā)布到指令預(yù)解碼器108,由它執(zhí)行關(guān)于接收的(宏指令的)指令流的多個長度計算和字節(jié)標(biāo)記操作。特別地,指令預(yù)解碼器108還產(chǎn)生一系列的字節(jié)標(biāo)記矢量,用于區(qū)別在傳播到該指令控制邏輯110的指令流內(nèi)的宏指令。然后指令控制邏輯110利用這些字節(jié)標(biāo)記矢量以操縱離散的宏指令進(jìn)入指令解碼器112中進(jìn)行解碼。此外還從指令控制邏輯110傳播宏指令到分支地址計算器114用于分支地址計算。然后微指令從該指令解碼器112傳送到記錄傳送機(jī)60。
多線程實現(xiàn)在如圖2所示的微處理器30的示范例實施例中,會注意到存在資源的有限重復(fù)。為了在一個其中存在功能單元有限重復(fù)的處理器內(nèi)提供多線程性能,就必須在線程之間實現(xiàn)某些程度的資源共享。應(yīng)當(dāng)意識到使用的資源共享方案取決于該處理器能同時處理的線程數(shù)目。因為在一個處理器內(nèi)的功能單元通常提供了某些緩存(或存儲)功能和傳播功能,所以資源共享的問題可以被看作是包含(1)存儲和(2)處理/傳播帶寬共享元件。例如,在一個支持同時處理兩個線程的處理器中,在不同功能單元內(nèi)的緩存資源可以在兩個線程之間在邏輯上進(jìn)行分區(qū)和分配。類似地,由一個用于在兩個功能單元之間傳播信息的路徑提供的帶寬必須在這兩個線程之間被分開和分配。由于這些資源共享問題可以在一個處理器流水線內(nèi)的多個存儲單元產(chǎn)生,因此可以根據(jù)該特定存儲單元的命令和特性,在這些不同的存儲單元使用不同的資源共享方案。應(yīng)當(dāng)明白,考慮到各不相同的功能和操作特性,不同的資源共享方案可以適于不同的存儲單元。
圖4的框圖說明了如圖3所示的微處理器30的選定元件,而且描述了由于為容納兩個線程(即線程0和線程1)而被邏輯分區(qū)從而提供緩存能力的各種功能單元。一個功能單元的緩存(或存儲)功能的用于兩個線程的邏輯分區(qū),可以通過分配在一個緩存資源內(nèi)的第一組預(yù)定條目給第一個線程、并分配該緩存資源內(nèi)的第二組預(yù)定條目給第二個線程來實現(xiàn)。特別地,這可以通過提供兩對讀和寫指針來實現(xiàn),其中第一對讀和寫指針與第一個線程有關(guān),而第二對讀和寫指針與第二個線程有關(guān)。第一組讀和寫指針可以局限于一個緩存資源內(nèi)部的第一個預(yù)定數(shù)目條目,而第二組讀和寫指針可以局限于在同一緩存資源內(nèi)的第二個預(yù)定數(shù)目條目。在該示范實施例中,指令流緩存器106、記錄高速緩存62、和一個指令隊列103中的每一個都提供了存儲能力,該能力在第一個和第二個線程之間進(jìn)行邏輯分區(qū)。
以下將更為詳細(xì)地討論在一個處理器內(nèi)功能單元之間的一條路徑的帶寬分配問題。
指令流緩存器參見圖3,指令流緩存器106傳送一個指令流進(jìn)入單指令解碼器112(即沒有解碼器重復(fù))中。為了有效利用這個單解碼資源,期望確保在指令流緩存器106和指令解碼器112之間的路徑帶寬,因此該指令解碼器112的“解碼帶寬”被以一種有效方式分開并分配。因此本發(fā)明提出了一種方法,就從指令流緩存器106傳送的兩個指令流而論,通過該方法實現(xiàn)了線程切換。這種線程切換方法確定用于這兩個線程中每一個的指令以何種速率被送到指令解碼器112。本發(fā)明尋求實現(xiàn)一種線程切換算法,它試圖實現(xiàn)下列線程切換目標(biāo)●只有當(dāng)另外一個線程有數(shù)據(jù)可以向下傳送(例如從指令流緩存器106)時,才執(zhí)行一個切換線程;●當(dāng)當(dāng)前一個線程正在被錯誤地執(zhí)行時(例如,當(dāng)當(dāng)前一個線程接收一個后端清除時),切換線程;●切換線程以便在執(zhí)行該線程切換之前保證在下游流水線內(nèi)的前進(jìn)進(jìn)程(例如,通過確保當(dāng)前線程的至少一個完全指令,將在執(zhí)行從當(dāng)前線程到目標(biāo)線程的線程切換之前,從指令流緩存器106發(fā)出);●防止一個線程使其它線程空閑(例如,通過只有一旦用于當(dāng)前線程的預(yù)定數(shù)量指令信息已經(jīng)沿該處理器流水線向下傳播、而沒有任何其它線程切換機(jī)制已經(jīng)被啟用時,才執(zhí)行一個線程切換操作);以及●分?jǐn)偩€程切換損失(例如,通過在尋找一個可能觸發(fā)線程切換操作的采取的分支之前發(fā)出一個預(yù)定最低數(shù)量的指令信息)。
下面將參考一個示范實施例對本發(fā)明進(jìn)行描述,該實施例用來在指令流緩存器106內(nèi)部緩存的線程數(shù)據(jù)之間進(jìn)行選擇、用于沿單一路徑向下向指令解碼器112傳播該數(shù)據(jù)。然而,容易理解,為了線程切換或交錯,本發(fā)明的這些示教可以在一個處理器流水線內(nèi)部的任何位置使用。圖5的框圖顯示了關(guān)于該指令流緩存器106的結(jié)構(gòu)和體系結(jié)構(gòu)的更多細(xì)節(jié)。特別地,如圖所示,該指令流緩存器106包含一個具有4個條目120(條目0-條目3)的存儲陣列,它被邏輯上分區(qū)成為用于存儲第一個線程(線程0)指令的第一分區(qū)122、以及用于存儲第二個線程(線程1)指令的第二分區(qū)124。在一個示范實施例中,每一條目120都能容納8組塊的信息,因此該指令流緩存器106為每個線程提供了16組塊的數(shù)據(jù)高速緩存。
此外該指令流緩存器106還包含一個分配模塊125,用于控制將數(shù)據(jù)寫入到邏輯分區(qū)122和124、以及從該邏輯分區(qū)122和124讀取數(shù)據(jù)。
每一分區(qū)122和124都有各自的、包含在該分配模塊125內(nèi)部的分配邏輯126。每個分配邏輯126都包含一個寫入指針128和一個讀取指針130,它們每一個都指向在相關(guān)分區(qū)122或124內(nèi)部的一個條目120。每個分配邏輯26從統(tǒng)一高速緩存44接收一個指令流,并依據(jù)線程規(guī)范將該指令流的組塊(即8字節(jié))寫入到第一分區(qū)122或第二分區(qū)124里。特別地,通過檢查與每個組塊數(shù)據(jù)有關(guān)的“線程標(biāo)識符”,每個分配邏輯26能夠確定將從該統(tǒng)一高速緩存44接收的數(shù)據(jù)寫入到哪個分區(qū)。
每一個分配邏輯126從各自的分區(qū)122或124輸出數(shù)據(jù)到一個MUX 132,由它根據(jù)由線程切換控制邏輯136確定的一個線程選擇信號134在分區(qū)122和124的輸出之間進(jìn)行選擇。因此,在本發(fā)明的該示范實施例中,由線程切換控制邏輯136實現(xiàn)線程交錯或切換方案。此外,線程切換控制邏輯136還經(jīng)由線路138和140監(jiān)控每一個分區(qū)122或124的輸出,以便能夠確定何時將一個組塊數(shù)據(jù)從分區(qū)122或124中的任何一個發(fā)送,并識別該組塊是從這些分區(qū)中的哪一個發(fā)送的。然后,將由MUX 132選擇用于輸出的該組塊數(shù)據(jù)在處理器流水線內(nèi)部向下傳播到指令預(yù)解碼器108,并最終傳送到指令解碼器122用于解碼。
圖6的框圖描述了線程切換控制邏輯136的邏輯元件。特別地,如圖所示,該線程切換控制邏輯136包含在空閑上切換的邏輯150、在分支上切換的邏輯152、長等待時間停止邏輯154、內(nèi)部清除邏輯156、無數(shù)據(jù)流邏輯158、強(qiáng)制線程改變邏輯160、外部清除邏輯162、以及插入流邏輯164。雖然如圖6所示每一個邏輯150-164中是獨立的,但是在各種邏輯之間可能有重要元件共享,如以下將要描述得那樣。邏輯150-164中的每一個都實現(xiàn)一種特定的功能,可以使到該MUX 132的選擇信號134被確定或不確定,借此以上述方式引起一個線程切換。在每一個邏輯150-164內(nèi)部包含的功能將參考在圖7-14中提供的流程圖進(jìn)行描述。參考圖15-16對一個特定示范實施例的細(xì)節(jié)進(jìn)行描述。
在空閑上切換的邏輯(150)在空閑上切換的邏輯150確定在所有線程都空閑的情況下多個線程中的哪一個被選擇作為一個開始線程。圖7的流程圖說明了一種依據(jù)本發(fā)明示例、用于當(dāng)在一個多線程處理器內(nèi)的兩個線程空閑時確定一個開始線程的方法200。應(yīng)當(dāng)明白該方法200還可以在不只支持兩個線程的多線程處理器中得到應(yīng)用。該方法200可以在在空閑上切換的邏輯150的內(nèi)部實現(xiàn)。方法200在步驟202用一個空閑線程狀態(tài)開始,其中兩個線程(即線程0和31)都是空閑的。在步驟204,根據(jù),僅僅用于示例,在一個流水線清除事件之后的微碼中的一個指示(例如,一個流水線“nuke”),由該選擇信號134的確定或不確立選擇第一個線程(例如線程0)。在判定框206,就在收到對線程0的一條指令的請求之前是否收到對線程1的一條指令的請求做出判定。參見圖5,能夠看出線程切換控制邏輯136連接用以經(jīng)由一個線程信號137從下一指令指針100接收一個指示,其中該指示關(guān)于從統(tǒng)一高速緩存44讀出的下一指令。這樣,線程切換控制邏輯136,特別是在空閑上切換的邏輯150能夠識別下一指令請求指向的那個線程。再次參考圖7,如果對線程1一條指令的請求在對線程0一條指令的請求之前接收了,則在步驟208執(zhí)行一個線程切換。相反,則在步驟210保持當(dāng)前線程選擇。然后方法200在步驟212結(jié)束。
在分支上切換的邏輯(152)在諸如圖2所示、使用了一個分支預(yù)測機(jī)制的一個微處理器30中,錯誤預(yù)測分支的可能性當(dāng)然是存在的。為此,本發(fā)明提出了一種線程切換方案,一旦在一個特定線程的指令流內(nèi)部遇到了一條要采取的、由分支預(yù)測單元預(yù)測的分支指令,就執(zhí)行一個線程切換??紤]到相關(guān)分支指令被錯誤預(yù)測的可能性和繼續(xù)分支指令的指令流的推測特性,這減少了分配給那個特定線程的處理器資源。這樣,以不為它的重要程度而可能包含一條分支指令的另外一個線程為代價,防止了用于一個可能處理錯誤的預(yù)測分支的線程的推理性指令流太深地滲入到該處理器流水線中。
圖8的流程圖說明了一種依據(jù)本發(fā)明示范實施例的方法220,用于在一個多線程處理器內(nèi)部,在當(dāng)前線程(例如線程0)的一條分支指令從指令流緩存器106到指令預(yù)解碼器108排序(或發(fā)送)時,執(zhí)行一個線程切換操作。該方法220在步驟222開始,在那兒由分配模塊125排序一條分支指令以便從該陣列的一個邏輯分區(qū)122或124(例如,從分配給線程0的邏輯分區(qū)122)發(fā)出。線程切換控制邏輯136,尤其是在分支上切換的邏輯152,從如圖5中所示的分配模塊125接收一個分支識別信號224(BPsbsawbranch)。
該分支識別信號224由分配模塊125確定,以將已經(jīng)由分支預(yù)測單元99預(yù)測的一條分支指令識別為正在處理。特別地,分支預(yù)測器104將利用多個公知的預(yù)測和方法或算法中的任何一個(例如,根據(jù)一條用于相關(guān)分支指令的記錄的分支歷史記錄)、就一條特定分支指令是否將被處理或者不被處理做出預(yù)測。然后分支預(yù)測器104將設(shè)置與該相關(guān)指令有關(guān)的一個位、并用該指令在處理器流水線內(nèi)部和“請求標(biāo)識符”一起向下傳播,從而使它能夠與由分配模塊125進(jìn)行的相關(guān)分配有關(guān)。應(yīng)當(dāng)注意到該分支識別信號224僅僅確定被預(yù)測進(jìn)行處理的分支指令,而不是那些被預(yù)測不進(jìn)行處理的分支指令。然而,在本發(fā)明的一個替換實施例中,分支識別信號224可以在遇到任何已經(jīng)對其做出任何預(yù)測的分支指令時,進(jìn)行確定。
圖15說明了分支識別信號224向一個與門225提供輸入。
在判定框226,就用于當(dāng)前線程(線程0)的一個預(yù)定最低數(shù)量的指令信息(例如,一個預(yù)定最少數(shù)量的組塊)是否已經(jīng)從指令流緩存器106發(fā)送(或傳送)做出判定。這結(jié)束后,并參見圖15A,切換控制邏輯136包含一個以一個發(fā)送組塊增量器228的形式的計數(shù)器,它保持對在一個線程切換之前從指令流緩存器106的一個當(dāng)前邏輯分區(qū)122或124發(fā)送的組塊的計數(shù)。該發(fā)送組塊增量器228由一個接收三個輸入的與門230的輸出遞增。一個BPready信號232由分配模塊125確定以指示一個組塊準(zhǔn)備好從有關(guān)的邏輯分區(qū)122或124發(fā)送。一個與ENTRY條目(來自線程切換控制邏輯136)有關(guān)的線程信號234,標(biāo)識準(zhǔn)備發(fā)送的組塊所屬的那個線程(以及相應(yīng)的邏輯分區(qū)122或124)。一個NOT(IStall)信號236指示在指令控制邏輯110沒有遇到停止?fàn)顟B(tài)。在確定這些信號232-236時,對與門230的輸出進(jìn)行確定,并遞增該發(fā)送組塊增量器228,以便記錄用于從指令流緩存器106發(fā)送的一個組塊的排序。
在本發(fā)明的一個實施例中,線程切換控制邏輯136還包含一個“在分支上切換之前的組塊”寄存器238,它可經(jīng)由一條控制寄存器總線240進(jìn)行編程以存儲一個表示組塊一個預(yù)定數(shù)量的值,它是在響應(yīng)于一條分支指令進(jìn)行一個線程切換操作之前,要求已經(jīng)從指令流緩存器106中排序的組塊數(shù)量。在本發(fā)明的一個替換實施例中,表示該組塊的預(yù)定數(shù)量的值可以是硬布線的。此外,切換控制邏輯136還包含一個比較器242,用于就增量器228和寄存器238的輸出執(zhí)行一個比較操作,并且如果由增量器228指示的值大于在寄存器238內(nèi)存儲的值的話,確定一個信號給與門244。對比較器242輸出信號的確定相應(yīng)于在圖8的判定框226進(jìn)行的肯定判定。
與門230還提供輸入給與門225,而且與門230的輸出確定和分支標(biāo)識信號224的確定一起使與門225的輸出(即一個分支發(fā)送信號227)被確定作為給與門244的輸入。分支發(fā)送信號227的確定表示在步驟222檢測的情況的發(fā)生。
在判定框226進(jìn)行肯定判定之后,該方法200繼續(xù)到判定框248,在那兒就用于一個替換線程(例如線程1)的一個預(yù)定最低數(shù)量的指令信息(例如一個預(yù)定最少數(shù)目的組塊)是否待決和可用于從指令流緩存器106的邏輯分區(qū)124發(fā)送做出判定。這個判定的有利之處在于它防止當(dāng)沒有足夠的指令信息已經(jīng)緩存在指令流緩存器106內(nèi)部用于目標(biāo)線程時,一個線程切換的發(fā)生,以便保證到這樣一個目標(biāo)線程的一個線程切換。特別地,一個線程切換可能比要求再次提供用于當(dāng)前線程的指令信息耗費更多的時鐘周期。例如,一個線程切換操作可能要求六個周期,而可能存在一個高的幾率,即用于當(dāng)前線程的指令信息可以在三個時鐘周期內(nèi)接收到。
再次參看圖15,線程切換控制邏輯136的一個示范實施例可以包含一個“切換之前未決的組塊”寄存器,它可以允許經(jīng)由控制寄存器總線240進(jìn)行編程以存儲一個表示用于一個目標(biāo)線程(例如線程1)的、應(yīng)該在允許切換到那個目標(biāo)線程的一個線程切換之前被緩存在一個陣列分區(qū)內(nèi)部(例如分區(qū)124)的組塊的預(yù)定最少數(shù)目值。在本發(fā)明的一個替換實施例中,表示組塊的這個預(yù)定數(shù)目的值同樣可以是硬布線的。線程切換控制邏輯136還包含一個“統(tǒng)計未決組塊”增量器252,它保持對指令流緩存器106內(nèi)存儲的、用于一個目標(biāo)線程(即不是當(dāng)前線程)的組塊數(shù)目的統(tǒng)計。增量器252由一個“IPD發(fā)送未決組塊”信號254遞增,其中該信號在從統(tǒng)一高速緩存44接收的一個組塊指令信息被分配給緩存器106內(nèi)的一個條目時由分配模塊125進(jìn)行確定。分配模塊125利用以上討論的、并與每個響應(yīng)于下一指令請求讀出的組塊有關(guān)的“線程標(biāo)識符”,來識別一個特定組塊是否用于該目標(biāo)線程,而不是用于當(dāng)前線程。比較器256比較寄存器250和增量器252內(nèi)存儲的相應(yīng)值,并且如果由增量器202保持的值大于寄存器250內(nèi)存儲的值,則確定一個輸出信號給與門244。對比較器256的輸出信號的確定相應(yīng)于在圖8中的判定框248進(jìn)行的肯定判定。
在判定框248進(jìn)行一個肯定判定之后,該方法220繼續(xù)到判定框260,在那兒就用于當(dāng)前線程的一個預(yù)定量指令信息是否已經(jīng)沿著微處理器30的流水線進(jìn)行了排序做出判定。這個判定的有利之處在于它保證了在一個線程切換操作之前當(dāng)前線程的前進(jìn)進(jìn)程。在使用了Intel體系結(jié)構(gòu)(IA)指令集的本發(fā)明的一個示范實施例中,就用于當(dāng)前線程的三(3)個組塊的指令信息是否已經(jīng)排序做出判定,因為這保證了用于當(dāng)前線程的至少一條完整指令。
在本發(fā)明的替換實施例中,由于對一條分支指令排序的檢測,本身構(gòu)成了至少一條完整指令,從而確保了與在判定框260的判定一致,因此在判定框260做出的判定可以省去。
參見圖15A,線程切換控制邏輯136的一個示范實施例可以包含一個比較器262,由它確定由該“發(fā)送組塊”增量器228保持的計數(shù)值是否大于或等于一個預(yù)定的最小值、例如3。在本發(fā)明的替換實施例中,這個預(yù)定的最小值可以是可編程的或是硬布線的。如果由增量器228保持的值等于或大于該預(yù)定的最小值,則比較器262確定一個輸出信號給與門244。對比較器262的輸出信號的確定相應(yīng)于在如圖8所示的判定框260進(jìn)行的肯定判定。
在判定框260進(jìn)行一個肯定的判定之后,由判定框226、248和260表示的條件已經(jīng)滿足了,然后在步驟264執(zhí)行一個線程切換操作。另一方面,如果由判定框226、248或260給出的這些條件中的任何一個沒有得到滿足的話,則在步驟266保持當(dāng)前線程選擇。然后該方法220在步驟268結(jié)束。
應(yīng)當(dāng)明白由步驟222表示的條件、以及判定框226、248和260,表示了給如圖15A所示的與門244的四個輸入,而且當(dāng)這條件全部滿足時,與門244的輸出將被確定并提供一個輸入給一個或門245?;蜷T245的輸出構(gòu)成了從線程切換控制邏輯136輸出的線程選擇信號134。對或門245的輸出的確定相應(yīng)于在步驟264執(zhí)行線程切換操作。
雖然本發(fā)明的上述實施例被描述成是用一個增量器228、一個“在分支切換之前的組塊”寄存器238和比較器242實現(xiàn)的,但是容易理解本發(fā)明可以用一個減量器代替增量器228來實現(xiàn),而且每當(dāng)發(fā)生一個線程切換時在該減量器中預(yù)先載入寄存器238中包含的值。在這個實施例中,該減量器在每次從指令流緩存器106的當(dāng)前邏輯分區(qū)122或124發(fā)送一個組塊時進(jìn)行遞減。然后該減量器確定一個輸出信號(對應(yīng)于在先前描述的實施例中的比較器242的輸出信號)以指示在判定框226的一個肯定判定。在這個實施例中,該減量器還可以由與門230的輸出遞減。
長等待時間停止邏輯(154)由于可分配給一個多線程處理器的處理器流水線內(nèi)部的一個特定線程的一個指令流的資源有限,以及由于分支錯誤預(yù)測和高速緩存故障,在這樣一個處理器流水線內(nèi)部的停止是很平常的。特別地,參見如圖2所示的微處理器30,可能會發(fā)生由分配器76確定沒有足夠的資源(例如物理寄存器、在線程0和線程1之間被邏輯上分區(qū)在預(yù)定位置或重新排序緩存器78內(nèi)部的條目)可用于從隊列68接收的一個特定線程的指令(即微指令)。在這種情況下,分配器76專門為一個線程確定一個停止信號82,該信號經(jīng)由記錄傳送機(jī)60傳送到微指令翻譯機(jī)54。在確定用于一個特定線程的這樣一個停止信號82時,可能期望執(zhí)行一個線程切換操作。長等待時間停止邏輯154包含用于在一個處理器流水線停止的情況下實現(xiàn)一個線程切換操作的電路。
圖9的流程圖說明了一種依據(jù)本發(fā)明一個示例方法280,用于例如由于資源不能利用、分支錯誤預(yù)測、或高速緩存故障引起的一個處理器流水線內(nèi)部的一個停止而出現(xiàn)長等待時間停止時,在一個多線程處理器內(nèi)部執(zhí)行一個線程切換操作。該方法280在步驟282開始,在那兒檢測一個停止條件。如上所述,可以通過決定對如圖2所示的線程特有的停止信號82的確定來檢測這個停止條件。做為選擇,可以通過決定對其它例如由分配器76、記錄高速緩存62(兩個都稱為“末端”停止)、指令解碼器112或指令控制邏輯110確定的停止信號的確定來檢測該停止條件。在判定框284,就繼在步驟282檢測到停止以來一個預(yù)定最少數(shù)目的時鐘周期是否已經(jīng)過去做出判定。參見圖15,線程切換控制邏輯136的一個示例可以包含一個“長等待時間統(tǒng)計”寄存器286,它經(jīng)由控制寄存器總線240進(jìn)行編程,以存儲一個表示自檢測停止以來,在允許到一個目標(biāo)線程的線程切換之前,已經(jīng)過去的時鐘周期的這個預(yù)定最少數(shù)目。在本發(fā)明的一個替換實施例中,表示時鐘周期的這個預(yù)定最少數(shù)目的值可以是硬布線的。切換控制邏輯136還包含一個“長等待時間”增量器288,由它保持對自在步驟282檢測停止以來已經(jīng)過去的時鐘周期數(shù)目的統(tǒng)計。該增量器288由一個“IXstall”或指令翻譯停止信號290遞增,其中該指令翻譯停止信號290在處理器流水線停止的每個時鐘周期進(jìn)行確定。此外,增量器288由一個“TCFBstall”信號292的不確定進(jìn)行復(fù)位,其中該“TCFBstall”信號292在停止被克服時進(jìn)行不確定。由一個記錄高速緩存填充緩存器(TCFB)(未顯示)確定該“TCFBstall”信號292,其中該緩存器(TCFB)從記錄傳送機(jī)60向上傳送一個分配停止信號58到微指令翻譯機(jī)54。比較器294比較寄存器286和增量器288內(nèi)存儲的相應(yīng)值,并且如果由增量器288保持的值大于寄存器286內(nèi)存儲的值,則確定一個輸出信號給一個與門296。對比較器294的輸出信號的確定相應(yīng)于在如圖9所示的判定框284進(jìn)行的一個肯定判定。
如果在判定框284判定時鐘周期的該預(yù)定數(shù)目沒有過去,則在步驟285保持當(dāng)前線程選擇,然后該方法280返回到判定框284。
在判定框284進(jìn)行一個肯定判定之后,該方法280繼續(xù)到判定框284,在那兒就用于當(dāng)前線程的一個預(yù)定最低數(shù)量指令信息是否已經(jīng)沿著微處理器30中的流水線進(jìn)行了排序做出判定。如上面結(jié)合圖8所示的判定框260描述的那樣,由“發(fā)送組塊”增量器228和比較器262的組合做出這個判定。比較器262提供一個輸入給與門296,一旦用于當(dāng)前線程的一個預(yù)定數(shù)目的組塊已經(jīng)沿著微處理器流水線排序了,就確定比較器262的輸出。
與門296的輸出信號297被傳送到分支地址計算器114,然后由它確定一個用于從其已經(jīng)進(jìn)行切換的那個線程(即當(dāng)前線程)的再啟動指令指針,而且不確定一個用于當(dāng)前線程的分支地址清除(BAclear)信號。當(dāng)發(fā)生一個線程切換時,在更一般的級別,要求一個指令指針以識別一個存儲單元,其中從該存儲單元再啟動已經(jīng)從其發(fā)生切換的那個線程。這個指令指針可以是(1)被預(yù)測為TAKEN(要采取的)的一條分支指令的目標(biāo),在這種情況下該指令指針由在分支上切換的邏輯152提供;(2)由微碼提供;或(3)由分支地址計算器114提供(是以上剛討論的情況)。
在判定框298進(jìn)行了一個肯定判定之后,還在判定框300就一個指令翻譯后端清除信號302是否已經(jīng)被確定做出判定。如果是這樣的話,則在步驟303執(zhí)行一個線程切換。做為選擇,在判定框298或者300進(jìn)行了否定判定之后,在步驟304保持當(dāng)前線程選擇。然后該方法280在步驟306結(jié)束。
內(nèi)部清除邏輯(156)與從微指令翻譯機(jī)54的外部(例如從退出邏輯以一個“nuke”清除操作的形式)激活一個外部清除相反,從微指令翻譯機(jī)54本身內(nèi)部激活一個內(nèi)部流水線清除操作。由于存在作為與當(dāng)前一個線程有關(guān)的一個條件的結(jié)果激活了該清除操作的高可能性,而且一個替換線程可能更好地準(zhǔn)備了在流水線內(nèi)部的處理(例如已經(jīng)填充了緩存器),所以這種清除操作被期望為一個線程切換操作。
圖10的流程圖說明了一種依據(jù)本發(fā)明一個示范實施例、用于當(dāng)發(fā)生一個內(nèi)部流水線清除時在一個多線程處理器內(nèi)執(zhí)行線程切換操作的方法310。該方法310在步驟312開始,在那兒檢測一個清除信號的確定。參見如圖15A所示的切換控制邏輯136的示范實施例,這可以通過檢測指令翻譯分支地址計算器清除“IXbaclear”信號302的確定來執(zhí)行。特別地,這個信號302被提供輸入給一個與門314,該與門314還進(jìn)一步從比較器256接收輸入。如上所述,當(dāng)在指令流緩存器106內(nèi)部由“統(tǒng)計未決組塊”增量器252記錄的未決的組塊數(shù)目大于“切換之前未決的組塊”寄存器250內(nèi)存儲的值時,對比較器256的輸出進(jìn)行確定。因此,比較器256的輸出被確定以表示對由方法310的判定框316表示的條件的肯定判定,在這之后在步驟318執(zhí)行一個線程切換操作。特別地,當(dāng)與門314的兩個輸入都被確定時,接著與門314的輸出被確定以向或門245提供一個確定的輸入。另一方面,如果在判定框316做出了一個否定判定,則在步驟320保持當(dāng)前線程選擇。然后該方法310在步驟322終止。
無數(shù)據(jù)流邏輯(158)在發(fā)生了用于當(dāng)前線程的一個第一級高速緩存故障的情況下,一個長等待時間的操作通常會導(dǎo)致可能要求相對多的時鐘周期來完成。如果滿足了由如圖9所示的流程圖指定的用于一個長等待時間操作的條件,則長等待時間邏輯154在這種情況下可以觸發(fā)一個線程切換操作。然而,如果用于一個長等待時間操作的所有條件沒有得到滿足,則長等待時間邏輯154將不會觸發(fā)一個線程切換操作。在這種情況下,就需要一個替換邏輯。
圖11的流程圖說明了依據(jù)本發(fā)明一個示例、用于當(dāng)在一個多線程處理器內(nèi)出現(xiàn)關(guān)于一個特定線程的“無數(shù)據(jù)流”條件時,在該多線程處理器內(nèi)執(zhí)行線程切換操作的方法330。方法330在步驟332開始,在那兒檢測到缺少用于當(dāng)前線程的、從統(tǒng)一高速緩存44到指令流緩存器106的一個指令流。參見圖15A,在一個示范實施例中,這可以通過一個數(shù)據(jù)流信號334的確定(不確定)進(jìn)行檢測,其中該數(shù)據(jù)流信號334由統(tǒng)一高速緩存44在一個指令流被提供給指令流緩存器106期間的每個時鐘周期進(jìn)行確定?!盁o數(shù)據(jù)流”條件也可以作為到指令預(yù)先解碼器108的數(shù)據(jù)流的一個鎖定被檢測到,因為這暗示在從統(tǒng)一高速緩存44到指令流緩存器106的數(shù)據(jù)流上的一個鎖定?!盁o數(shù)據(jù)流”條件也可以作為到指令預(yù)先解碼器108的數(shù)據(jù)流的一個鎖定被檢測,是由于這暗示在從統(tǒng)一高速緩存44到指令流緩存器106的數(shù)據(jù)流上的一個鎖定。
在判定框336,就沒有數(shù)據(jù)流從統(tǒng)一高速緩存44到指令流緩存器106的一個預(yù)定最小數(shù)目的時鐘周期是否已經(jīng)過去做出判定。為此,線程切換控制邏輯136如圖15A所示,包含一個“無數(shù)據(jù)流”計數(shù)器338,它為數(shù)據(jù)流信號334不確定的每個連續(xù)時鐘周期加1,以指示缺少一個用于當(dāng)前線程、流向指令流緩存器106的指令流。計數(shù)器338可以通過信號335的確定進(jìn)行復(fù)位,一旦恢復(fù)了從指令流緩存器106到指令預(yù)先解碼器108的一個數(shù)據(jù)流,就對信號335進(jìn)行確定??梢皂憫?yīng)于在信號232和236(即,BPready和NOT ISstall信號)上執(zhí)行的一個與操作對該信號335進(jìn)行確定。邏輯136進(jìn)一步包含一個“無數(shù)據(jù)流周期”寄存器340,它可經(jīng)由控制寄存器總線240進(jìn)行編程以存儲一個表示在能夠檢測到一個無數(shù)據(jù)流條件之前的時鐘周期的一個預(yù)定最小數(shù)目值。在本發(fā)明的一個替換實施例中,表示這個時鐘周期的預(yù)定數(shù)目的值可以是硬布線的。計數(shù)器338和寄存器340向一個比較器342提供輸入,當(dāng)由計數(shù)器338保持的值大于在寄存器340內(nèi)存儲的值時由該比較器342確定一個輸出到與門344。對比較器342的輸出信號的確定相應(yīng)于在如圖11所示的判定框336進(jìn)行的一個肯定判定。
如果在判定框336進(jìn)行了一個否定判定,則方法330繼續(xù)進(jìn)行到步驟345,在那兒保持當(dāng)前線程選擇。
繼在判定框336進(jìn)行了一個肯定判定之后,該方法330繼續(xù)在判定框346和348執(zhí)行判定,它們相當(dāng)于如圖8所示的方法220在判定框248和260做出的判定。因此,實現(xiàn)在判定框346和348的判定的比較器256和262的輸出被輸入到與門344。與門344的輸出再次輸入到或門245。這提供了一個如果對應(yīng)于判定框336、346和348出現(xiàn)了肯定判定、則在方法330中的步驟350執(zhí)行線程切換操作的邏輯實現(xiàn)。做為選擇,如果在判定框336、346或348中的任何一個出現(xiàn)了一個否定判定,則在步驟352保持當(dāng)前線程選擇。然后方法330在步驟354結(jié)束。
強(qiáng)迫線程改變邏輯(160)在某些情況下,可能會遇到一個尤其是線性的指令流(包含一個第一或者第二線程),而且因此沒有包含許多分支指令。假定以上或下面討論的其它條件都不存在,可以設(shè)想如果沒有事件出現(xiàn)以觸發(fā)一個線程切換,則這樣一個線性線程可能耗費一個不成比例的處理器資源。為了防止這樣一個線性線程過分使用處理器資源,本發(fā)明提出了繼從一個資源、例如指令流緩存器106排序或發(fā)送一個預(yù)定量的、用于單個線程的指令信息之后觸發(fā)一個線程切換操作的邏輯。
圖12的流程圖說明了一種依據(jù)本發(fā)明一個示例、用于當(dāng)用于一個特定線程(例如線程0)的、一個預(yù)定量的指令信息從指令流緩存器106到指令預(yù)解碼器108排序(或發(fā)送)時,在一個多線程處理器內(nèi)部執(zhí)行一個線程切換操作的方法360。方法360在步驟362開始,在那兒用于一個特定線程(例如線程0)的指令信息被選擇用于從指令流緩存器106排序和發(fā)送。這個選擇可以由從線程切換控制邏輯136輸出到MUX 132的線程選擇信號134表示。
在判定框364,就用于當(dāng)前線程(例如線程0)的一個預(yù)定最大數(shù)量的指令信息是否已經(jīng)從指令流緩存器106排序做出判定。如圖15A所示的示例線程切換控制邏輯136包含一個“資源拱曲”寄存器366,它可經(jīng)由控制寄存器總線240進(jìn)行編程以存儲一個表示在觸發(fā)一個線程切換操作之前、用于一個特定線程的、從指令流緩存器106進(jìn)行排序的組塊的一個預(yù)定最大數(shù)目的值。在本發(fā)明的一個替換實施例中,表示組塊的這個預(yù)定最大數(shù)目的值可以是硬布線的。該“資源拱曲”寄存器366和保持對從緩存器106發(fā)出的用于特定線程的組塊的計數(shù)的“發(fā)送組塊”增量器228,提供輸入到一個比較器368里,當(dāng)增量器228的輸出值大于在該“資源拱曲”寄存器366內(nèi)的存儲值時由該比較器368確定一個輸出給與門344。因此,對比較器368的輸出信號的確定相應(yīng)于在如圖12所示的判定框364進(jìn)行的一個肯定判定。
如圖所示,與門344的輸出向或門245提供輸入,還提供一個“插入FTC”輸出434。
如果在判定框364進(jìn)行一個否定判定,則方法360繼續(xù)進(jìn)行到步驟370,在那兒保持當(dāng)前線程選擇,隨后方法330循環(huán)返回到判定框364。
繼在判定框364進(jìn)行了一個肯定判定之后,該方法360繼續(xù)在判定框372和374執(zhí)行判定,它們相當(dāng)于如圖8所示的方法220在判定框248和260做出判定。因此,如圖所示,實現(xiàn)在判定框372和374做出判定的比較器256和262的輸出被輸入到與門344。
繼在判定框336、346和348做出肯定判定之后,一個流標(biāo)記(或“插入流”)(例如‘1100)被插入到從指令流緩存器106發(fā)送的該指令流中。特別地,由于線程切換操作也許已經(jīng)在一條不完全的指令上發(fā)生了,所以分支地址計算器114將被要求重新開始讀取當(dāng)前線程,所以該插入流是必需的。在這種情況下,分支預(yù)測單元113將該插入流插入到指令流中以指示強(qiáng)迫線程改變。插入流具有一個被確定的ForceUOPValid。該插入流只是在一個組塊已經(jīng)預(yù)定從指令流緩存器106發(fā)送給指令預(yù)先解碼器108以后才被插入。一旦發(fā)送了有關(guān)的組塊,該插入流就被多路復(fù)用到一個ForceUOPVector字段(event_info字段)里。為此,參考圖16,它說明了用于在指令流緩存器106內(nèi)部的一個示范陣列分區(qū)122內(nèi)緩存的組塊的event_info字段。如圖所示,“插入FTC”輸出434操作一個MUX 450以在(1)存儲在分區(qū)122內(nèi)部的一個條目120內(nèi)的一個組塊的event_info字段121的當(dāng)前內(nèi)容以及(2)插入流452之間進(jìn)行選擇。在繼確定了比較器368的輸出之后輸出244被確定的情況下,插入流452將被插入到從分區(qū)122發(fā)送的一個組塊的event_info字段121中。
然后響應(yīng)于對與門344的輸出的確定,在步驟376通過對選擇信號134的確定執(zhí)行一個線程切換操作。做為選擇,如果在判定框364、372或374中的任何一個出現(xiàn)了一個否定判定,則在步驟378保持當(dāng)前線程選擇。然后該方法360在步驟380結(jié)束。
由強(qiáng)迫線程改變邏輯160啟動的一個線程切換操作不同于在本說明書中討論的其它線程切換操作,體現(xiàn)在以下方面在其上發(fā)生線程切換的數(shù)據(jù)組塊沒有某些特殊或區(qū)別特征,其中這些特殊和區(qū)別特征可能會提供一個線程切換操作的某些前兆。特別地,由線程切換控制邏輯136內(nèi)部的其它邏輯150-164執(zhí)行的線程切換操作伴隨有一個使線程切換操作有利的條件,而且因此實施的硬件不要求警告。沒有配備指令控制邏輯110以處理一個突然的和意料不到的線程切換操作。因此,插入流標(biāo)記提供了一個機(jī)制以向指令控制邏輯110通知上游發(fā)生的線程切換操作。
此外,利用一個強(qiáng)迫線程改變,如同利用在當(dāng)前說明書中討論的其它線程切換操作一樣,需要一個“重新啟動”指令指針。由于由強(qiáng)迫線程改變邏輯160強(qiáng)迫了在該指令流中的一個中斷,因此期望讓微碼提供有重新啟動指針,這與下一指令指針100相反。
外部清除邏輯(162)如以上參考內(nèi)部清除邏輯156描述得那樣,從微指令翻譯機(jī)54的外部激活一個外部清除。
圖13的流程圖說明了依據(jù)本發(fā)明示范實施例、用于當(dāng)發(fā)生一個外部流水線清除時在一個多線程處理器內(nèi)執(zhí)行一個線程切換操作的方法400。該方法400在步驟402開始,在那兒檢測對一個外部清除信號的確定。參見如圖15A所示的線程切換控制邏輯136的示范實施例,這可以通過檢測一個記錄高速緩存/微指令翻譯機(jī)清除信號“TCmiteclear”404的確定來執(zhí)行,該信號提供一個直接輸入到或門245。因此,如圖5所示,信號404的確定將導(dǎo)致對從線程切換控制邏輯136傳送到MUX 132的線程選擇信號134的確定。這在該方法400的步驟406中反映出來,該方法此后在步驟408結(jié)束。
插入流邏輯(164)在微指令翻譯機(jī)54內(nèi),如圖3所示,當(dāng)指令翻譯后備緩沖器(ITLB)102登記一個頁故障時,一個流標(biāo)記(也被稱為一個“插入流”)被插入到指令流中以標(biāo)記這個事件。這樣一個頁故障導(dǎo)致一個頁故障控制器(未顯示)的一個相對長的走頁操作,它可能僅僅例如耗費最多150個時鐘周期。在一個多線程處理器中,當(dāng)前線程的一個指令流發(fā)生一個頁故障時,執(zhí)行一個線程切換操作以便允許一個替換線程利用由走頁操作帶來的等待時間,這可能是有利的。如上所述,插入流邏輯164提供了一個在出現(xiàn)頁故障時實現(xiàn)和執(zhí)行一個線程切換功能的邏輯示范實施例。
除了頁故障之外,可能導(dǎo)致一個插入流的其它事件在本領(lǐng)域內(nèi)是公知的,或是專門用于一個微處理器體系結(jié)構(gòu)。
圖14的流程圖說明了依據(jù)本發(fā)明一個示范實施例、用于在檢測到用于當(dāng)前線程的一個指令流內(nèi)部的一個插入流時在一個多線程處理器內(nèi)執(zhí)行一個線程切換操作的方法420,其中插入流指示僅僅例如一個關(guān)于指令TLB 102的頁故障。該方法420在步驟422用選擇當(dāng)前線程(例如線程0)開始。這個選擇可以由從線程切換控制邏輯136輸出到MUX 132的線程選擇信號134表示。在判定框424,就在用于當(dāng)前線程的指令流內(nèi)的一個指令翻譯事件“Iteventid”字段426是否指定了一個插入流(例如不具有’0000或’0111的值)做出判定。特別地,在指令翻譯事件字段426內(nèi)出現(xiàn)上述值可能指示缺少一個插入流。參見圖15A,如圖所示,字段426被輸入到一對比較器(或其它邏輯)428和430,由它們確定該字段426是否包含值’0000或者’0111。如果是這樣的話,則比較器428或430確定一個輸出給或非NOR門432,它的輸出被輸入到或門245。
在判定框436,就用于一個目標(biāo)線程(例如線程1)的一個預(yù)定最少數(shù)量的指令信息是否可以從指令流緩存器106發(fā)送做出選擇性地判定??梢岳没蚍情TNOR42的輸出和比較器262的輸出來做出這個判定。
繼在判定框424和436做出了肯定判定之后,然后可以在步驟438執(zhí)行一個線程切換操作。特別地,對NOR門42的輸出的確定可以相當(dāng)于在步驟438執(zhí)行的線程切換操作,它通過或門245傳播以導(dǎo)致對選擇信號134進(jìn)行確定。做為選擇,如果在判定框424或436中的任何一個做出了一個否定判定,則在步驟440保持當(dāng)前線程選擇。然后該方法420在步驟442終止。
結(jié)論在以上參考圖15討論的線程切換控制邏輯136的示例中,多個邏輯150-164被描述為利用增量器、寄存器和比較器的組合來實現(xiàn)。在本發(fā)明的一個替換實施例中,這些邏輯中的某些或全部都可以使用僅僅從一個預(yù)定的、可編程的值遞減并在達(dá)到零值時確定一個信號的一個減量器來實現(xiàn)。這樣一個實施例的例子如圖15B所示。
總之,以上描述的線程切換邏輯136的有利之處在于它提供了多個靈活的機(jī)制,響應(yīng)于發(fā)生在其上可能有益于執(zhí)行這種線程切換操作的事件,實現(xiàn)和執(zhí)行線程切換操作。此外,通過包含可編程的參數(shù),本發(fā)明允許用于各種情況和考慮線程切換機(jī)制的修改和很好調(diào)整。例如,當(dāng)執(zhí)行一個類型的應(yīng)用程序、諸如多媒體應(yīng)用程序時,可能期望使線程切換機(jī)制的參數(shù)被設(shè)置為與執(zhí)行一個不同類型的應(yīng)用程序、諸如一個字處理應(yīng)用程序時不同的值。
線程切換邏輯136適于時間分割一條路徑(在一個源資源和一個目的地資源之間)的帶寬和/或在一個多線程處理器內(nèi)的處理資源。雖然線程切換邏輯136如上所述,被用來從一個指令流緩存器向一個指令預(yù)解碼器發(fā)送用于兩個線程的指令信息,但是容易理解,本發(fā)明的這些示教能夠被用在一個處理器流水線內(nèi)部從任何源向任何目的地發(fā)送用于多個線程的指令信息。
因此,已經(jīng)描述了用于在一個多線程處理器內(nèi)進(jìn)行線程切換的方法和裝置。盡管已經(jīng)參考特定示例對本發(fā)明進(jìn)行了描述,但是顯然可以在沒有背離本發(fā)明的寬闊的精神和范圍的情況下,對這些實施例進(jìn)行各種修改和改變。因此,該說明書和附圖是用來作為例證的而不具有限制意義。
權(quán)利要求
1.一種用于在一個多線程處理器內(nèi)執(zhí)行一個線程切換操作的方法,該方法包括在一個多線程處理器內(nèi)檢測用于第一個線程的第一個預(yù)定量指令信息從一個指令信息源的發(fā)送;以及對用于第一個線程的第一個預(yù)定量的指令信息發(fā)送做出響應(yīng),從該指令信息源開始用于第二個線程的指令信息的發(fā)送。
2.如權(quán)利要求1所述的方法,其特征在于對用于第一個線程的第一個預(yù)定量指令信息的發(fā)送的檢測包含保持對從該指令信息資源發(fā)送的、用于第一個線程的指令信息的非連續(xù)數(shù)量的計數(shù),以及確定何時該指令信息的非連續(xù)數(shù)量計數(shù)大于第一個預(yù)定閾值。
3.如權(quán)利要求2所述的方法,其特征在于對發(fā)送的用于第一個線程的非連續(xù)數(shù)量指令信息的計數(shù)包含一旦從該指令信息源發(fā)送了一個非連續(xù)數(shù)量的指令信息,就將一個計數(shù)器加1。
4.如權(quán)利要求2所述的方法,其特征在于對發(fā)送的第一個線程非連續(xù)數(shù)量的指令信息計數(shù)包含一旦從該指令信息源發(fā)送了一個非連續(xù)數(shù)量的指令信息,就將一個計數(shù)器減1。
5.如權(quán)利要求1所述的方法,其特征在于該檢測包括在一個可編程存儲單元的內(nèi)容和一個遞增計數(shù)器的內(nèi)容之間執(zhí)行一個比較操作,其中該遞增計數(shù)器保持從指令信息源發(fā)送的用于第一個線程的非連續(xù)數(shù)量指令信息的計數(shù)。
6.如權(quán)利要求1所述的方法,其特征在于該檢測包含從該可編程存儲單元中將該預(yù)定閾值載入到一個遞減計數(shù)器中作為一個初始值,并檢測何時該遞減計數(shù)器記錄一個零值。
7.如權(quán)利要求1所述的方法,其特征在于指令信息源包含一個存儲單元,它被進(jìn)行分區(qū)以便在第一分區(qū)中存儲用于第一個線程的指令信息而在第二分區(qū)中存儲用于第二個線程的指令信息;以及其中開始發(fā)送用于第二個線程的指令信息包含操作線程選擇邏輯以便選擇指令信息用于從該指令信息源的第二分區(qū)而不是第一分區(qū)進(jìn)行發(fā)送。
8.如權(quán)利要求1所述的方法,包含確定用于第二個線程的第二個預(yù)定量指令信息是否可用于從指令信息源進(jìn)行發(fā)送,以及只有當(dāng)用于第二個線程的第二個預(yù)定量指令信息可用于發(fā)送時,才開始從該指令信息源發(fā)送用于第二個線程的指令信息。
9.如權(quán)利要求8所述的方法,其特征在于該指令信息源包含一個存儲單元;而且其中對用于第二個線程的第二個預(yù)定量指令信息是否可用于從該指令信息源發(fā)送的確定包含保持對接收到該存儲單元中的用于第二個線程的非連續(xù)數(shù)量的指令信息的計數(shù),以及確定接收到該存儲單元中的非連續(xù)數(shù)量指令信息的計數(shù)何時大于第二個預(yù)定閾值。
10.如權(quán)利要求1所述的方法,包含確定用于第一個線程的第三個預(yù)定量的指令信息是否已經(jīng)從該指令信息源發(fā)送了,以及只有當(dāng)用于第一個線程的第三個預(yù)定量的指令信息已經(jīng)從該指令信息源發(fā)送了時,才開始從該指令信息源發(fā)送用于第二個線程的指令信息。
11.如權(quán)利要求10所述的方法,其特征在于指令信息的第三個預(yù)定量等于或大于第一個指令集的一條完整指令的指令信息的最低數(shù)量。
12.如權(quán)利要求10所述的方法,其特征在于對用于第一個線程的第三個預(yù)定量的指令信息是否已經(jīng)從該指令信息源發(fā)送的確定包含對從該指令信息源發(fā)送用于第一個線程的非連續(xù)數(shù)量指令信息進(jìn)行計數(shù);以及確定對從該指令信息源發(fā)送的非連續(xù)數(shù)量指令信息的計數(shù)是否大于第三個預(yù)定閾值。
13.如權(quán)利要求1所述的方法,包含在開始從該指令信息源發(fā)送用于第二個線程的指令信息之前,將一個流標(biāo)記插入到一個包含從該指令信息源發(fā)送的用于第一個線程的指令信息的指令流里。
14.如權(quán)利要求1所述的方法,包含確定用于第一個線程的第四個預(yù)定量的指令信息是否已經(jīng)從該指令信息源發(fā)送了;以及如果是這樣的話,就檢測要從該指令信息源發(fā)送用于第一個線程的指令信息內(nèi)部的一條分支指令;以及響應(yīng)于分支指令的檢測,開始從該指令信息源發(fā)送用于第二個線程的指令信息。
15.如權(quán)利要求14所述的方法,包含檢測從該指令信息源發(fā)送用于第一個線程的第四個預(yù)定量的指令信息;響應(yīng)于對第四個預(yù)定量指令信息發(fā)送的檢測,檢查接著要被發(fā)送的用于第一個線程的指令信息以識別一條分支指令;以及響應(yīng)于對要發(fā)送的用于第一個線程的指令信息內(nèi)部的一條分支指令的識別,開始從該指令信息源發(fā)送用于第二個線程的指令信息。
16.如權(quán)利要求15所述的方法,其特征在于對用于第一個線程的第四個預(yù)定量的指令信息發(fā)送的檢測包含對從該指令信息源發(fā)送用于第一個線程的非連續(xù)數(shù)量指令信息進(jìn)行計數(shù);以及確定對非連續(xù)數(shù)量信息的計數(shù)何時大于第四個預(yù)定閾值。
17.如權(quán)利要求1所述的方法,包含在該多線程處理器的一個處理器流水線內(nèi)部檢測用于第一個線程的一個停止條件;在對該停止條件的檢測之后檢測第一個預(yù)定時間間隔在什么時候已經(jīng)過去;以及,響應(yīng)于對第一個預(yù)定時間間隔已經(jīng)過去的檢測,開始從該指令信息源發(fā)送用于第二個線程的指令信息。
18.如權(quán)利要求1所述的方法,包含檢測用于第一個線程的指令信息從一個處理器流水線內(nèi)上游源到該指令信息源里的流動的缺乏;在對缺少指令信息流動的檢測之后檢測第二個預(yù)定時間間隔在什么時侯已經(jīng)過去;以及,響應(yīng)于對第二個預(yù)定時間間隔已經(jīng)過去的檢測,開始從該指令信息源發(fā)送用于第二個線程的指令信息。
19.如權(quán)利要求1所述的方法,包含用于在指令信息源接收的第一個線程的指令信息內(nèi)部檢測一個流標(biāo)記;以及響應(yīng)于對該流標(biāo)記的檢測,開始從該指令信息源發(fā)送用于第二個線程的指令信息。
20.如權(quán)利要求19所述的方法,其特征在于該流標(biāo)記指示在該指令信息源的一個處理器流水線上游中的一個存儲單元出現(xiàn)了一個頁丟失。
全文摘要
一種用于在一個多線程處理器內(nèi)部執(zhí)行一個線程切換操作的方法。檢測用于第一個線程的第一個預(yù)定量的指令信息從一個指令流緩存器的發(fā)送。響應(yīng)于對第一個預(yù)定量指令信息發(fā)送的檢測,就指令流緩存器的輸出執(zhí)行一個線程切換操作。因此開始了從指令流緩存器發(fā)送用于第二個線程的指令信息。依據(jù)用于已經(jīng)處理(或發(fā)送用于處理)的一個特定線程的指令數(shù)據(jù)的數(shù)量,而不是依據(jù)一個任意定時機(jī)制,在線程之間分配對處理器資源的利用。
文檔編號G06F9/48GK1364261SQ00809404
公開日2002年8月14日 申請日期2000年4月20日 優(yōu)先權(quán)日1999年4月29日
發(fā)明者S·卡拉法蒂斯, A·B·凱克, R·D·菲施 申請人:英特爾公司