專利名稱:雙線程處理器的制作方法
技術(shù)領(lǐng)域:
以下的公開內(nèi)容涉及處理電路和系統(tǒng)。
背景技術(shù):
常規(guī)的操作系統(tǒng)典型地支持多任務(wù),多任務(wù)是一種調(diào)度機(jī)制,該機(jī)制允許不只一個(gè)處理器線程(processor thread)共享共同的處理資源。處理器線程代表處理器內(nèi)的架構(gòu)狀態(tài)(architectural state),其跟蹤軟件程序的執(zhí)行。如果計(jì)算機(jī)具有單個(gè)處理器,在任何給定的時(shí)間點(diǎn)就只處理一個(gè)處理器線程,這就意味著處理器現(xiàn)在正在有效地執(zhí)行與單個(gè)處理器線程相關(guān)聯(lián)的指令。從一個(gè)處理器線程重新分配處理器到另一個(gè)線程的操作稱為上下文切換或環(huán)境切換(context switch)。
在常規(guī)的流水線處理器中,上下文切換通常是通過硬件中斷和中斷服務(wù)例程發(fā)生的。中斷服務(wù)例程通常具有相聯(lián)的執(zhí)行時(shí)間或中斷開銷,從而消耗寶貴的處理器時(shí)間。另外,在常規(guī)的流水線處理器中,上下文切換通常只以固定的間隔(例如,每100微秒)發(fā)生,如例如操作系統(tǒng)的供應(yīng)商所確定的那樣。
發(fā)明內(nèi)容
大體上,在一個(gè)方面,本說明書描述了一種包括流水線級(jí)或流水線階段的處理器。所述流水線級(jí)包括第一輸入寄存器、第二輸入寄存器、第一輸出寄存器,和第二輸出寄存器。所述處理器進(jìn)一步包括與所述第一輸入寄存器和所述第二輸入寄存器通信的第一選擇器、和與所述第一輸出寄存器和所述第二輸出寄存器通信的第二選擇器。所述處理器也包括控制器,該控制器可運(yùn)行以控制所述第一和第二選擇器的切換,以使在正在處理第一處理器線程的時(shí)間期間,與第一處理器線程相關(guān)聯(lián)的數(shù)據(jù)傳遞通過所述第一輸入寄存器、所述流水線級(jí)、和所述第一輸出寄存器,而在正在處理第二處理器線程的時(shí)間期間,與第二處理器線程相關(guān)聯(lián)的數(shù)據(jù)傳遞通過所述第二輸入寄存器、所述流水線級(jí)、和所述第二輸出寄存器。所述第一輸入寄存器和所述第一輸出寄存器可運(yùn)行以存儲(chǔ)所述第一處理器線程的狀態(tài),而且所述第二輸入寄存器和所述第二輸出寄存器可運(yùn)行以存儲(chǔ)第二處理器線程的狀態(tài)。
特定的實(shí)施方式可包括一個(gè)或多個(gè)以下特征。所述第一選擇器可包括多路復(fù)用器,而所述第二選擇器可包括多路分解器。所述流水線級(jí)可包括取指令單元、譯碼邏輯、發(fā)令邏輯(issue logic)、執(zhí)行單元、讀邏輯、或?qū)戇壿嬛械囊粋€(gè)。所述控制器可基于確定分配到所述第一和第二處理器線程的每個(gè)線程的處理器時(shí)間的輸入,來控制所述第一和第二選擇器的切換。所述控制器可以在執(zhí)行程序期間動(dòng)態(tài)地控制所述第一和第二選擇器的切換,或基于先前確立的針對(duì)所述第一和第二處理器線程每個(gè)線程的處理器時(shí)間分配靜態(tài)地控制所述第一和第二選擇器的切換。
所述處理器可進(jìn)一步包括第一中斷處理例程,以處理與所述第一處理器線程相關(guān)聯(lián)的中斷請(qǐng)求;和第二中斷處理例程,以處理與所述第二處理器線程相關(guān)聯(lián)的中斷請(qǐng)求。所述第一中斷處理例程和所述第二處理例程可具有各自的入口點(diǎn)(entry point)。所述處理器可進(jìn)一步包括第一異常處理例程,以處理與所述第一處理器線程相關(guān)聯(lián)的異常請(qǐng)求;和第二異常處理例程,以處理與所述第二處理器線程相關(guān)聯(lián)的異常請(qǐng)求。所述處理器可進(jìn)一步包括單個(gè)異常處理例程或單個(gè)中斷處理例程,以分別處理與所述第一和第二處理器線程都相關(guān)聯(lián)的基本上所有的異常請(qǐng)求或基本上所有的中斷請(qǐng)求。
所述處理器可進(jìn)一步包括對(duì)應(yīng)于多個(gè)處理器線程中每個(gè)線程的一組寄存器。組中的每個(gè)寄存器可以位于所述處理器的流水線級(jí)之前或之后。所述控制器可以在所述多個(gè)處理器線程之間執(zhí)行上下文切換,包括在對(duì)應(yīng)的寄存器組中存儲(chǔ)當(dāng)前執(zhí)行的處理器線程的狀態(tài),和將來自對(duì)應(yīng)的寄存器組的另一處理器線程的狀態(tài)載入以允許處理另一處理器線程。
大體上,在另一方面,本說明書描述的處理器包括對(duì)應(yīng)于多個(gè)處理器線程中每個(gè)線程的一組寄存器。組中的每個(gè)寄存器可以位于所述處理器的流水線級(jí)之前或之后。所述處理器進(jìn)一步包括可編程控制器,用來在所述多個(gè)處理器線程之間中執(zhí)行上下文切換,包括在對(duì)應(yīng)的寄存器組中存儲(chǔ)當(dāng)前執(zhí)行的處理器線程的狀態(tài),和將來自對(duì)應(yīng)的寄存器組的另一處理器線程的狀態(tài)載入以允許處理另一處理器線程。
特定的實(shí)施方式包括一個(gè)或多個(gè)以下的特征。所述可編程控制器可以在指令周期的結(jié)束(end)執(zhí)行上下文切換。所述處理器可進(jìn)一步包括寄存器文件或寄存器堆或集(register file),該寄存器文件具有對(duì)應(yīng)于所述多個(gè)處理器線程中每個(gè)線程的多個(gè)存儲(chǔ)體或組(bank)。每個(gè)存儲(chǔ)體可存儲(chǔ)與對(duì)應(yīng)的處理器線程相關(guān)聯(lián)的數(shù)據(jù)。所述處理器可以進(jìn)一步包括多個(gè)程序計(jì)數(shù)器,每個(gè)程序計(jì)數(shù)器可運(yùn)行以指示對(duì)應(yīng)的處理器線程的執(zhí)行狀態(tài)。所述處理器可進(jìn)一步包括對(duì)應(yīng)于所述多個(gè)處理器線程的多個(gè)中斷處理例程,其中每個(gè)中斷處理例程處理與對(duì)應(yīng)的處理器線程相關(guān)聯(lián)的中斷請(qǐng)求。所述多個(gè)中斷處理例程的每一個(gè)可以具有分離的入口點(diǎn)。所述處理器可進(jìn)一步包括對(duì)應(yīng)于所述多個(gè)處理器線程的多個(gè)異常處理器例程,其中每個(gè)異常處理例程處理與對(duì)應(yīng)的處理器線程相關(guān)聯(lián)的異常請(qǐng)求。所述處理器可包括單個(gè)異常處理例程或單個(gè)中斷處理例程以分別處理與所述多個(gè)處理器線程相關(guān)聯(lián)的基本上所有的異常請(qǐng)求或基本上所有的中斷請(qǐng)求。
大體上,在另一方面,本說明書描述的一種方法包括提供用于指令執(zhí)行的第一處理器線程;提供用于指令執(zhí)行的第二處理器線程;處理所述第一處理器線程;和執(zhí)行從所述第一處理器線程到所述第二處理器線程的上下文切換。執(zhí)行上下文切換包括在對(duì)應(yīng)于所述第一存儲(chǔ)器線程的第一組寄存器內(nèi)存儲(chǔ)所述第一處理器線程的狀態(tài),和將來自對(duì)應(yīng)于所述第二處理器線程的第二組寄存器的、所述第二處理器線程的狀態(tài)載入。
特定的實(shí)施方式可包括一個(gè)或多個(gè)以下的特征。在對(duì)應(yīng)的寄存器組內(nèi)存儲(chǔ)給定處理器線程的狀態(tài)包括存儲(chǔ)對(duì)應(yīng)于處理器流水線級(jí)的數(shù)據(jù)。所述方法進(jìn)一步包括接收改變所述處理器時(shí)間分配的輸入、和基于改變的處理器時(shí)間分配執(zhí)行在所述第一和第二處理器線程中之間的上下文切換。執(zhí)行上下文切換可包括在執(zhí)行程序期間動(dòng)態(tài)地執(zhí)行上下文切換,或基于先前確立的針對(duì)所述第一和第二處理器線程每個(gè)線程的處理器時(shí)間分配靜態(tài)地執(zhí)行上下文切換。所述方法進(jìn)一步包括使用第一中斷處理例程來處理與所述第一處理器線程相關(guān)聯(lián)的中斷請(qǐng)求、和使用第二中斷處理例程來處理與所述第二處理器線程相關(guān)聯(lián)的中斷請(qǐng)求。所述方法進(jìn)一步包括使用第一異常處理例程,以處理與所述第一處理器線程相關(guān)聯(lián)的異常請(qǐng)求;和使用第二異常處理例程,以處理與所述第二處理器線程相關(guān)聯(lián)的異常請(qǐng)求。所述方法進(jìn)一步包括使用單個(gè)異常處理例程或單個(gè)中斷處理例程,以分別處理與所述第一和第二處理器線程相關(guān)聯(lián)的基本上所有的異常請(qǐng)求或基本上所有的中斷請(qǐng)求。
大體上,在另一個(gè)方面,本說明書描述的處理器包括取指令單元,該單元可運(yùn)行以取出與多個(gè)處理器線程相關(guān)聯(lián)的指令;響應(yīng)于所述取指令單元的譯碼器;響應(yīng)于所述譯碼器的發(fā)令邏輯;和寄存器文件,該寄存器文件包括對(duì)應(yīng)于所述多個(gè)處理器線程的多個(gè)存儲(chǔ)體或組(bank)。每個(gè)存儲(chǔ)體可運(yùn)行從而只存儲(chǔ)與對(duì)應(yīng)的處理器線程相關(guān)聯(lián)的數(shù)據(jù)。
特定的實(shí)施方式可包括一個(gè)或多個(gè)以下特征。所述數(shù)據(jù)可包括與給定的處理器線程相關(guān)聯(lián)的被執(zhí)行指令的操作數(shù)或結(jié)果。所述處理器進(jìn)一步包括與所述取指令單元通信的控制器。所述控制器可以確定處理器線程,從該處理器線程中,可以由所述取指令單元讀取下一個(gè)指令。所述處理器進(jìn)一步包括對(duì)應(yīng)于所述多個(gè)線程的每個(gè)線程的一組寄存器。組中的每個(gè)寄存器可以位于所述處理器的流水線級(jí)之前或之后。所述控制器可以在所述多個(gè)處理器線程之間執(zhí)行上下文切換,包括在對(duì)應(yīng)的寄存器組中存儲(chǔ)當(dāng)前執(zhí)行的處理器線程的狀態(tài),和將來自對(duì)應(yīng)的寄存器組的另一處理器線程的狀態(tài)載入以允許處理另一處理器線程。所述控制器可包括對(duì)應(yīng)于所述多個(gè)處理器線程的多個(gè)線程分配計(jì)數(shù)器。每個(gè)線程分配計(jì)數(shù)器可包含一個(gè)數(shù)值,該數(shù)值代表有多少處理器時(shí)間將分配給各自的處理器線程。所述控制器可執(zhí)行上下文切換,其包括切換與所述取指令單元通信的選擇器。所述選擇器可包括多路復(fù)用器和多路分解器。
大體上,在一個(gè)方面,本說明書描述的處理器包括貫穿整個(gè)流水線級(jí)執(zhí)行指令的裝置。用于執(zhí)行指令的所述裝置包括用于存儲(chǔ)數(shù)據(jù)的第一輸入裝置,用于存儲(chǔ)數(shù)據(jù)的第二輸入裝置,用于存儲(chǔ)數(shù)據(jù)的第一輸出裝置,和用于存儲(chǔ)數(shù)據(jù)的第二輸出裝置。所述處理器進(jìn)一步包括與用于存儲(chǔ)數(shù)據(jù)的所述第一輸入裝置和用于存儲(chǔ)數(shù)據(jù)的所述第二輸入裝置通信的第一選擇裝置;和與用于存儲(chǔ)數(shù)據(jù)的所述第一輸出裝置和用于存儲(chǔ)數(shù)據(jù)的所述第二輸出裝置通信的第二選擇裝置。所述處理器也包括用于控制所述第一和第二選擇裝置的切換的裝置,使得在正在處理第一處理器線程的時(shí)間期間,與所述第一處理器線程相關(guān)聯(lián)的數(shù)據(jù)通過用于存儲(chǔ)數(shù)據(jù)的所述第一輸入裝置、所述執(zhí)行裝置、和用于存儲(chǔ)數(shù)據(jù)的所述第一輸出裝置,而在正在處理第二處理器線程的時(shí)間期間,與所述第二處理器線程相關(guān)聯(lián)的數(shù)據(jù)通過用于存儲(chǔ)數(shù)據(jù)的所述第二輸入裝置、所述執(zhí)行裝置、和用于存儲(chǔ)數(shù)據(jù)的所述第二輸出裝置。用于存儲(chǔ)數(shù)據(jù)的所述第一輸入裝置和用于存儲(chǔ)數(shù)據(jù)的所述第一輸出裝置可運(yùn)行以存儲(chǔ)所述第一處理器線程的狀態(tài),而用于存儲(chǔ)數(shù)據(jù)的所述第二輸入裝置和用于存儲(chǔ)數(shù)據(jù)的所述第二輸出裝置可運(yùn)行以存儲(chǔ)所述第二處理器線程的狀態(tài)。
大體上,在另一方面,本說明書描述的處理器包括對(duì)應(yīng)于多個(gè)處理器線程中每個(gè)線程的數(shù)據(jù)存儲(chǔ)裝置。每個(gè)數(shù)據(jù)存儲(chǔ)裝置可以位于所述處理器的流水線級(jí)裝置之前或之后。所述處理器進(jìn)一步包括用于在所述多個(gè)處理器線程之間執(zhí)行上下文切換的裝置,其包括用于在對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)裝置組內(nèi)存儲(chǔ)當(dāng)前執(zhí)行的處理器線程的狀態(tài)、并將來自對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)裝置組的另一處理器線程的狀態(tài)載入以允許處理另一處理器線程的裝置。
大體上,在另一方面,本發(fā)明描述的控制器包括用于取出與多個(gè)處理器線程相關(guān)聯(lián)的指令的裝置;用于對(duì)取出的指令進(jìn)行譯碼的裝置;用于發(fā)出譯碼指令的裝置;和用于在對(duì)應(yīng)的存儲(chǔ)裝置內(nèi)存儲(chǔ)與對(duì)應(yīng)的處理器線程相關(guān)聯(lián)的數(shù)據(jù)的裝置。
特定的實(shí)施方式可包括一個(gè)或多個(gè)以下特征。所述數(shù)據(jù)可包括與給定處理器線程相關(guān)聯(lián)的被執(zhí)行指令的操作數(shù)或結(jié)果。所述處理器進(jìn)一步包括確定處理器線程的裝置,從該處理器線程,將取出下一個(gè)指令。所述處理器進(jìn)一步包括對(duì)應(yīng)于所述多個(gè)處理器線程中每個(gè)線程的數(shù)據(jù)存儲(chǔ)裝置。每個(gè)數(shù)據(jù)存儲(chǔ)裝置可以位于所述處理器的流水線級(jí)裝置之前或之后。所述處理器可包括用于在所述多個(gè)處理器線程之間執(zhí)行上下文切換的裝置,其包括用于在對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)裝置內(nèi)存儲(chǔ)當(dāng)前執(zhí)行的處理器線程的狀態(tài)、并將來自對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)裝置的另一處理器線程的狀態(tài)載入以允許處理另一處理器線程的裝置。
用于執(zhí)行上下文切換的所述裝置可包括用于存儲(chǔ)數(shù)值的裝置,該數(shù)值代表有多少處理器時(shí)間將分配給各個(gè)處理器線程。用于執(zhí)行上下文切換的所述裝置可包括用于切換選擇器的裝置,該選擇器與所述取指令裝置通信。
實(shí)施方式可包括一個(gè)或多個(gè)以下特征。流水線處理器被構(gòu)造成在沒有與硬件中斷相關(guān)聯(lián)的任何中斷開銷,例如中斷服務(wù)例程的情況下執(zhí)行上下文切換。在一個(gè)實(shí)施方案中,上下文切換自動(dòng)地發(fā)生,并主要通過硬件,例如,使用可編程的線程分配控制器。在一個(gè)實(shí)施方案中,流水線處理器將第一處理器線程的狀態(tài)保存到位于所述流水線處理器每個(gè)流水線級(jí)之間的第一組寄存器,并將來自也位于所述流水線處理器每個(gè)流水線級(jí)之間的第二組寄存器的第二處理器線程的狀態(tài)載入。所述寄存器的位置允許快速的上下文切換時(shí)間。
用戶,例如,網(wǎng)絡(luò)管理員可以定制分配給每個(gè)處理器線程多少時(shí)間。在一個(gè)實(shí)施方式中,確立了初始處理器時(shí)間分配后,用戶可進(jìn)一步動(dòng)態(tài)地改變處理器時(shí)間分配。用戶可以保留對(duì)處理器時(shí)間分配的完全控制,而不是放棄對(duì)操作系統(tǒng)的控制。
一個(gè)或多個(gè)實(shí)施方式的細(xì)節(jié)在附圖和下面的說明中給出。通過說明和附圖以及權(quán)利要求,其它的特征和優(yōu)點(diǎn)會(huì)很清楚。
圖1是一種流水線處理器架構(gòu)的框圖。
圖2是在圖1的流水線處理器結(jié)構(gòu)或架構(gòu)中運(yùn)行的方法。
圖3是根據(jù)圖1中流水線處理器結(jié)構(gòu)的一種流水線處理器的框圖。
圖4是一種流水線處理器結(jié)構(gòu)的框圖。
圖5是根據(jù)圖4中流水線處理器結(jié)構(gòu)的一種流水線處理器的框圖。
圖6是在圖1和圖4的流水線處理器結(jié)構(gòu)中執(zhí)行異常處理的方法。
圖7是在圖1和圖4的流水線處理器結(jié)構(gòu)中執(zhí)行中斷處理的方法。
在各個(gè)附圖中相同的附圖標(biāo)記表示相同的元件。
具體實(shí)施例方式圖1是流水線處理器結(jié)構(gòu)100的框圖,該結(jié)構(gòu)可運(yùn)行以處理兩個(gè)或更多個(gè)處理器線程T1、T2...Tn。處理器線程T1、T2...Tn每個(gè)都代表流水線處理器結(jié)構(gòu)100內(nèi)跟蹤對(duì)應(yīng)的軟件程序執(zhí)行的一種結(jié)構(gòu)狀態(tài)。軟件程序的指令可以從,例如,指令高速緩沖存儲(chǔ)器(例如指令高速緩沖存儲(chǔ)器102)中檢索到。在一個(gè)實(shí)施方案中,流水線處理器結(jié)構(gòu)100包括兩個(gè)或多個(gè)程序計(jì)數(shù)器(未示出),每個(gè)計(jì)數(shù)器對(duì)應(yīng)處理器線程T1、T2...Tn。每個(gè)程序計(jì)數(shù)器指示流水線處理器結(jié)構(gòu)100關(guān)于指令序列的位置(針對(duì)對(duì)應(yīng)的處理器線程T1、T2...Tn)。程序計(jì)數(shù)器在下面將結(jié)合圖3和圖5更詳細(xì)地討論。
在一個(gè)實(shí)施方案中,流水線處理器結(jié)構(gòu)100包括六個(gè)流水線級(jí)。六個(gè)流水線級(jí)包括取指令級(jí)(instruction fetch stage,IF)、譯碼指令級(jí)(instruction decode stage,ID)、發(fā)出指令級(jí)(instruction issue stage,IS)、執(zhí)行指令級(jí)(instruction execution stage,EX)、讀取數(shù)據(jù)存儲(chǔ)器級(jí)(data memory read stage,MEM)、和回寫級(jí)(write back stage,WB)。然而,流水線處理器結(jié)構(gòu)100可包括不同數(shù)量的流水線級(jí)。流水線處理器結(jié)構(gòu)100進(jìn)一步包括取指令單元(instruction fetch unit,IFU)104、譯碼邏輯106、發(fā)令邏輯108、寄存器文件110、執(zhí)行單元112、讀邏輯114、寫邏輯116、和可編程線程分配控制器118。
取指令單元104從例如,指令高速緩沖存儲(chǔ)器102取回程序指令。譯碼邏輯106將程序指令譯碼并產(chǎn)生將要被執(zhí)行單元112執(zhí)行的譯碼指令。在一個(gè)實(shí)施方案中,譯碼指令是固定長度的微操作(micro-op)指令。發(fā)令邏輯108向執(zhí)行單元112發(fā)出譯碼指令用于執(zhí)行。執(zhí)行單元112可以是載入執(zhí)行單元、存儲(chǔ)執(zhí)行單元、算術(shù)邏輯單元(ALU)、乘法和累加單元(MAC)、或組合載入/存儲(chǔ)執(zhí)行單元,如發(fā)明人為Hong-yiChen和Jensen Tjeng,名稱為“Variable Length Pipeline ProcessorArchitecture”的美國專利申請(qǐng)(代理人案卷號(hào)為MP0634/13361-140001)所描述的那樣,該申請(qǐng)?jiān)诖巳w參考引入。讀邏輯114從,例如,數(shù)據(jù)高速緩沖存儲(chǔ)器(未示出)讀數(shù)據(jù)。寫邏輯116將執(zhí)行指令的結(jié)果回寫到,例如,數(shù)據(jù)高速緩沖存儲(chǔ)器、寄存器文件110、或重排序緩沖器(re-order buffer)(未示出)。
寄存器文件110存儲(chǔ)與每個(gè)處理器線程T1、T2...Tn相關(guān)聯(lián)的數(shù)據(jù)。在一個(gè)實(shí)施方案中,寄存器文件110包括分離的存儲(chǔ)體(例如,存儲(chǔ)體T1、T2...Tn),這些存儲(chǔ)體存儲(chǔ)與對(duì)應(yīng)的處理器線程T1、T2...Tn相關(guān)聯(lián)的數(shù)據(jù)。例如,如果寫邏輯116正在將與處理器線程T2相關(guān)聯(lián)的數(shù)據(jù)回寫到寄存器文件110,那么寫邏輯116就會(huì)將數(shù)據(jù)寫到寄存器文件110的存儲(chǔ)體T2。可以選擇地,可以在流水線處理器結(jié)構(gòu)110中實(shí)現(xiàn)分離的寄存器文件(未示出),用于存儲(chǔ)對(duì)應(yīng)于每個(gè)處理器線程T1、T2...Tn的數(shù)據(jù)。
可編程線程分配控制器118可以被編程以存儲(chǔ)已經(jīng)為每個(gè)處理器線程T1、T2...Tn定義的處理器時(shí)間分配,即,哪部分處理器時(shí)間將專用于每個(gè)處理器線程T1、T2...Tn。在一個(gè)實(shí)施方案中,例如來自用戶的輸入通過圖形用戶界面(未示出)被接收,該輸入定義了分配給多個(gè)處理器線程(例如,處理器線程T1、T2...Tn)中每個(gè)線程的處理器時(shí)間部分。例如,針對(duì)雙線程流水線處理器,用戶可以將處理器時(shí)間的95%分配給第一處理器線程,并將處理器時(shí)間的5%分配給第二處理器線程。在一個(gè)實(shí)施方案中,為每個(gè)處理器線程(例如,處理器線程T1、T2...Tn)定義的處理器時(shí)間分配可以被用戶或優(yōu)選地被軟件程序(例如,將被執(zhí)行的軟件程序)動(dòng)態(tài)地改變,即,在程序執(zhí)行中改變。可以選擇地,每個(gè)處理器線程的處理器時(shí)間分配可以被靜態(tài)地設(shè)定,即,在程序執(zhí)行期間不改變。
在一個(gè)實(shí)施方案中,可編程線程分配控制器118通過確定從其中讀取(例如,被取指令單元104讀取)下一條指令的處理器線程,來自動(dòng)執(zhí)行上下文切換。在一個(gè)實(shí)施方案中,可編程線程分配控制器118通過切換一個(gè)或多個(gè)選擇器來執(zhí)行上下文切換,其中所述選擇器例如為與取指令單元104通信的多路復(fù)用器和/或多路分解器(未示出)。包括多路復(fù)用器和多路分解器來執(zhí)行上下文切換的處理器的一個(gè)實(shí)施方案在下面結(jié)合圖3、4和5討論。當(dāng)上下文切換發(fā)生時(shí),與下一個(gè)處理器線程相關(guān)聯(lián)的指令被取指令單元104讀取。雖然流水線處理器結(jié)構(gòu)100的流水線級(jí)(例如,流水線級(jí)IF、ID、IS、EX、MEM、WB)可以包含與兩個(gè)或更多個(gè)處理器線程相關(guān)聯(lián)的指令,但與每個(gè)給定處理器線程相關(guān)聯(lián)的數(shù)據(jù)通過寄存器文件110被分別保存,因而與每個(gè)處理器線程相關(guān)的數(shù)據(jù)的完整性得以保持。與需要中斷服務(wù)例程的常規(guī)流水線處理器不同,可編程線程分配控制器118沒有與執(zhí)行上下文切換相關(guān)聯(lián)的任何中斷開銷。
圖2示出了通過流水線處理器結(jié)構(gòu)(例如,流水線處理器結(jié)構(gòu)100)處理處理器線程的一種方法200。接收輸入(步驟202),該輸入確定了分配給多個(gè)處理器線程中每個(gè)線程的處理器時(shí)間部分。在一個(gè)實(shí)施方案中,來自用戶的輸入分配是通過圖形用戶界面被接收的。分配給每個(gè)處理器線程的處理器時(shí)間可以被存儲(chǔ)在可編程線程分配控制器(例如,可編程線程分配控制器118)中。在一個(gè)實(shí)施方案中,處理器時(shí)間是基于CPU(中央處理器)周期、時(shí)鐘周期和/或指令周期分配的。
每個(gè)線程根據(jù)分配給每個(gè)線程的處理器時(shí)間被流水線處理器處理(步驟204)。在一個(gè)實(shí)施方案中,上下文切換根據(jù)存儲(chǔ)在所述可編程線程分配控制器中的、分配給每個(gè)線程的處理器時(shí)間而自動(dòng)發(fā)生。在一個(gè)實(shí)施方案中,可編程線程分配控制器控制一個(gè)或多個(gè)多路復(fù)用器和/或多路分解器的切換,所述多路復(fù)用器和/或多路分解器與取指令單元(例如取指令單元104)通信。在一個(gè)實(shí)施方案中,可編程線程分配控制器控制一個(gè)或多個(gè)多路復(fù)用器和/或多路分解器的切換來進(jìn)行上下文切換,所述多路復(fù)用器和/或多路分解器定位在流水線處理器的每個(gè)流水線級(jí)之前和之后,如以下更詳細(xì)地討論的那樣。在這個(gè)實(shí)施方案中,處理器線程的狀態(tài)被存入寄存器并從寄存器載入,這些寄存器位于流水線處理器中每個(gè)流水線級(jí)之前和之后。在一個(gè)實(shí)施方案中,上下文切換發(fā)生在給定指令周期的結(jié)尾或結(jié)束。
作出(例如通過可編程線程分配控制器118)是否接收了動(dòng)態(tài)改變處理器時(shí)間分配的輸入的決定(步驟206)。如果分配給每個(gè)處理器線程的處理器時(shí)間沒有被動(dòng)態(tài)地改變,那么根據(jù)先前確立的處理器時(shí)間分配來處理每個(gè)處理器線程,方法200返回到步驟204。如果處理器時(shí)間分配已經(jīng)被動(dòng)態(tài)地改變,那么每個(gè)處理器線程就根據(jù)改變的處理器時(shí)間分配被處理(步驟208)。步驟208之后,方法200返回到步驟206,如以上討論的那樣。
圖3示出了一種流水線處理器300的框圖,該處理器300根據(jù)流水線處理器結(jié)構(gòu)100而構(gòu)造,能處理(n)個(gè)處理器線程T1、T2...Tn。在一個(gè)實(shí)施方案中,流水線處理器300包括取指令單元304、譯碼器306、寄存器文件308、發(fā)令邏輯310、兩級(jí)執(zhí)行單元312、重排序緩沖器314、和可編程線程分配控制器316。流水線處理器300進(jìn)一步包括分別對(duì)應(yīng)于處理器線程T1、T2...Tn的寄存器T1-Tn和程序計(jì)數(shù)器T1-Tn。流水線處理器300進(jìn)一步包括多路復(fù)用器350。
在一個(gè)實(shí)施方案中,在取指令(IF)級(jí)中,取指令單元304從,例如指令高速緩沖存儲(chǔ)器302,檢索將被執(zhí)行的指令。取指令單元304根據(jù)程序計(jì)數(shù)器T1、T2...Tn檢索指令。在一個(gè)實(shí)施方案中,程序計(jì)數(shù)器T1指示處理器線程T1的執(zhí)行狀態(tài)(即,相對(duì)于與處理器線程T1相關(guān)聯(lián)的指令序列,流水線處理器300的位置),程序計(jì)數(shù)器T2指示與處理器線程T2相關(guān)聯(lián)的執(zhí)行狀態(tài),程序計(jì)數(shù)器Tn指示與處理器線程Tn相關(guān)聯(lián)的執(zhí)行狀態(tài)。
在譯碼指令的級(jí)(ID)中,由取指令單元304檢索的指令被譯碼。
在發(fā)出指令級(jí)(IS)中,在一個(gè)實(shí)施方案中,譯碼后的指令被發(fā)送到重排序緩沖器314(通過發(fā)令邏輯310)。重排序緩沖器314存儲(chǔ)譯碼后的指令直到譯碼后的指令被發(fā)送用于執(zhí)行。在一個(gè)實(shí)施方案中,重排序緩沖器314是循環(huán)緩沖器。
重排序緩沖器314也可以存儲(chǔ)執(zhí)行指令的結(jié)果,直到執(zhí)行的指令準(zhǔn)備退出,例如,退到寄存器文件308內(nèi)。在一個(gè)實(shí)施方案中,寄存器文件308包括存儲(chǔ)體(例如,存儲(chǔ)體T1、T2...Tn),這些存儲(chǔ)體對(duì)應(yīng)于被處理器300處理的每個(gè)處理器線程(例如,處理器線程T1、T2...Tn)。存儲(chǔ)體T1保存與處理器線程T1相關(guān)聯(lián)的數(shù)據(jù),存儲(chǔ)體T2保存與處理器線程T2相關(guān)聯(lián)的數(shù)據(jù),存儲(chǔ)體Tn保存與處理器線程Tn相關(guān)聯(lián)的數(shù)據(jù)。數(shù)據(jù)可以包括與給定處理器線程相關(guān)聯(lián)的執(zhí)行指令的操作數(shù)和/或結(jié)果。在一個(gè)實(shí)施方案中,流水線處理器300不包括重排序緩沖器314。
在執(zhí)行級(jí)EX1、EX2中,執(zhí)行單元312執(zhí)行從發(fā)令邏輯310發(fā)送的譯碼指令。執(zhí)行單元312可以是任何類型的執(zhí)行單元,如以上討論的那樣。雖然所示的執(zhí)行單元312具有兩個(gè)流水線級(jí),但執(zhí)行單元312可以具有不同數(shù)量的流水線級(jí)。在一個(gè)實(shí)施方案中,執(zhí)行指令的結(jié)果被回寫到重排序緩沖器314,然后退到寄存器文件308。
可編程線程分配控制器316可以被編程從而存儲(chǔ)針對(duì)每個(gè)處理器線程T1、T2...Tn的處理器時(shí)間分配,即,多少處理器時(shí)間將專用于每個(gè)處理器線程T1、T2...Tn。在一個(gè)實(shí)施方案中,例如來自用戶的輸入通過圖形用戶界面(未示出)被接收,該輸入為每個(gè)處理器線程T1、T2...Tn分配部分處理器時(shí)間。在一個(gè)實(shí)施方案中,每個(gè)處理器線程T1、T2...Tn的處理器時(shí)間分配可以被用戶動(dòng)態(tài)地改變。在一個(gè)實(shí)施方案中,每個(gè)處理器線程T1、T2...Tn的處理器時(shí)間分配通過由處理器300正處理的軟件應(yīng)用被動(dòng)態(tài)地改變。
在一個(gè)實(shí)施方案中,通過切換與取指令單元304通信的多路復(fù)用器350,可編程線程分配控制器316自動(dòng)地執(zhí)行處理器線程T1、T2...Tn之間的上下文切換。例如,在流水線處理器300正在處理處理器線程T1的時(shí)間期間,多路復(fù)用器350被控制以將與處理器線程T1相關(guān)聯(lián)的指令傳遞通過流水線處理器300的流水線級(jí)。當(dāng)從處理器線程T1發(fā)生上下文切換時(shí),多路復(fù)用器350被控制以傳遞通過與另一處理器線程,例如,處理器線程T2,相關(guān)聯(lián)的指令。在一個(gè)實(shí)施方案中,多路復(fù)用器350是n-對(duì)-1的多路復(fù)用器。
在一個(gè)實(shí)施方案中,可編程線程分配控制器316包括多個(gè)線程分配計(jì)數(shù)器(例如,線程分配計(jì)數(shù)器T1-Tn),這些計(jì)數(shù)器確定對(duì)應(yīng)于分配給每個(gè)處理器線程的處理器時(shí)間的加權(quán)。例如,在一個(gè)實(shí)施方案中,線程分配計(jì)數(shù)器T1-Tn中的每個(gè)計(jì)數(shù)器都包含一數(shù)值,該數(shù)值代表多少CPU周期被分配給每個(gè)線程。例如,如果線程分配計(jì)數(shù)器T1包含的數(shù)值為256,線程分配計(jì)數(shù)器T2包含的數(shù)值為16,而線程分配計(jì)數(shù)器Tn包含的數(shù)值為零,那么首先從處理器線程T1取出的指令用于256個(gè)CPU周期,然后從處理器線程T2取出的指令用于16個(gè)CPU周期,而從處理器線程Tn取出零個(gè)指令。然后從處理器線程T1和T2取出的指令重新分別用于另外256個(gè)CPU周期和16個(gè)CPU周期,如此等等。取指令可以這樣繼續(xù)直到一個(gè)或多個(gè)線程分配計(jì)數(shù)器內(nèi)的數(shù)值被改變。隨著每個(gè)線程分配計(jì)數(shù)器T1-Tn達(dá)到零值,可編程線程分配計(jì)數(shù)器316切換多路復(fù)用器350以將與下一個(gè)處理器線程相關(guān)聯(lián)的指令傳遞給取指令單元304用于處理。
圖4是一種流水線處理器結(jié)構(gòu)400的框圖,該結(jié)構(gòu)可運(yùn)行以處理兩個(gè)或多個(gè)處理器線程T1、T2...Tn。與處理器線程T1、T2...Tn相關(guān)的指令可以從,例如,指令高速緩沖存儲(chǔ)器(例如,指令高速緩沖存儲(chǔ)器402)檢索。
在一個(gè)實(shí)施方案中,流水線處理器結(jié)構(gòu)400包括六個(gè)流水線級(jí)。這六個(gè)流水線級(jí)包括取指令級(jí)(IF)、譯碼指令級(jí)(ID)、發(fā)出指令級(jí)(IS)、執(zhí)行指令級(jí)(EX)、讀數(shù)據(jù)存儲(chǔ)器級(jí)(MEM)、和回寫級(jí)(WB)。然而流水線處理器結(jié)構(gòu)400可以包括不同數(shù)量的流水線級(jí)。流水線處理器結(jié)構(gòu)400進(jìn)一步包括取指令單元(IFU)404、譯碼邏輯406、發(fā)令邏輯408、執(zhí)行單元410、讀邏輯412、寫邏輯414、和可編程線程分配控制器416。流水線處理器結(jié)構(gòu)400類似于圖1的流水線處理器結(jié)構(gòu),然而,流水線處理器結(jié)構(gòu)400進(jìn)一步包括位于每個(gè)流水線級(jí)(在每個(gè)級(jí)之前和之后的一個(gè))之間的一組寄存器(例如,寄存器A1-A7、B1-B7、N1-N7)用于在上下文切換期間存儲(chǔ)對(duì)應(yīng)的處理器線程T1、T2...Tn的狀態(tài)。
寄存器A1-A7存儲(chǔ)處理器線程T1的狀態(tài)。以類似的方式,寄存器B1-B7存儲(chǔ)處理器線程T2的狀態(tài),而寄存器N1-N7儲(chǔ)存處理器線程Tn的狀態(tài)。在一個(gè)實(shí)施方案中,每個(gè)寄存器A1-A7、B1-B7、N1-N7存儲(chǔ)對(duì)應(yīng)的處理器線程的狀態(tài),包括存儲(chǔ)流水線處理器結(jié)構(gòu)400的對(duì)應(yīng)的流水線級(jí)在給定指令周期的結(jié)尾產(chǎn)生的數(shù)據(jù)的狀態(tài)。例如,當(dāng)處理與處理器線程T1相關(guān)的指令時(shí),在指令周期的結(jié)尾,寄存器A3可以存儲(chǔ)從譯碼邏輯406接收的用于處理器線程T1的數(shù)據(jù)的狀態(tài),而寄存器A5可以存儲(chǔ)從執(zhí)行單元410接收的數(shù)據(jù)的狀態(tài)。寄存器A1-A7、B1-B7、N1-N7之所以有助于上下文切換,是因?yàn)樗鼈冊(cè)试S對(duì)應(yīng)的處理器線程的狀態(tài)直接從給定的寄存器載入(或存儲(chǔ)到給定的寄存器)。在一個(gè)實(shí)施方案中,每組寄存器A1-A7、B1-B7、N1-N7的位置相對(duì)靠近流水線處理器結(jié)構(gòu)400內(nèi)的功能單元(例如,在每個(gè)流水線級(jí)之間),從而允許快速的上下文切換時(shí)間。
在一個(gè)實(shí)施方案中,可編程線程分配控制器416通過切換位于每個(gè)流水線級(jí)(例如,流水線級(jí)IF、ID、IS、EX、MEM、WB)之前和之后的一個(gè)或多個(gè)多路復(fù)用器和/或多路分解器(未示出),來自動(dòng)地執(zhí)行上下文切換。包括多路復(fù)用器和多路分解器以執(zhí)行上下文切換的處理器的一個(gè)實(shí)施方案在下面將會(huì)結(jié)合圖5進(jìn)行討論。當(dāng)上下文切換發(fā)生時(shí),與從其要發(fā)生上下文切換的當(dāng)前處理器線程(例如,處理器線程T1)相關(guān)聯(lián)的一組寄存器(例如,寄存器A1-A7)存儲(chǔ)當(dāng)前處理器線程的狀態(tài)。為了完成上下文切換,將來自與下一個(gè)處理器線程相關(guān)聯(lián)的一組不同的寄存器(例如,寄存器B1-B7)的下一個(gè)處理器線程(例如,處理器線程T2)的狀態(tài)載入。流水線處理器在接下來的指令周期內(nèi)處理下一個(gè)處理器線程。在一個(gè)實(shí)施方案中,上下文切換發(fā)生在指令周期的結(jié)尾(即,在來自流水線級(jí)的數(shù)據(jù)已經(jīng)被存到相關(guān)的寄存器后)從而允許無縫上下文切換。
圖5示出流水線處理器500的框圖,處理器500根據(jù)流水線處理器結(jié)構(gòu)400構(gòu)造,能夠處理兩個(gè)線程T1、T2。在一個(gè)實(shí)施方案中,流水線處理器500包括取指令單元504、譯碼器506、寄存器文件508、發(fā)令邏輯510、兩級(jí)執(zhí)行單元512、重排序緩沖器514、和可編程線程分配控制器516。流水線處理器500進(jìn)一步包括對(duì)應(yīng)于處理器線程T1的第一組寄存器A1-A6,和對(duì)應(yīng)于處理器線程T2的第二組寄存器B1-B6。流水線處理器500進(jìn)一步包括程序計(jì)數(shù)器T1、T2、多路復(fù)用器550、和多路分解器552。
在一個(gè)實(shí)施方案中,在取指令(IF)級(jí),取指令單元504從,例如指令高速緩沖存儲(chǔ)器502,檢索將被執(zhí)行的指令。取指令單元504根據(jù)程序計(jì)數(shù)器T1、T2檢索指令。在一個(gè)實(shí)施方案中,程序計(jì)數(shù)器T1指示處理器線程T1的執(zhí)行狀態(tài)(即,相對(duì)于與處理器線程T1相關(guān)聯(lián)的指令序列,流水線處理器500的位置),程序計(jì)數(shù)器T2指示與處理器線程T2相關(guān)聯(lián)的執(zhí)行狀態(tài)。
在譯碼指令級(jí)(ID)中,由取指令單元504檢索的指令被譯碼。
在發(fā)出指令級(jí)(IS)中,在一個(gè)實(shí)施方案中,譯碼后的指令被發(fā)送到重排序緩沖器514(通過發(fā)令邏輯510)。重排序緩沖器514存儲(chǔ)譯碼后的指令直到譯碼后的指令被發(fā)送用于執(zhí)行。在一個(gè)實(shí)施方案中,重排序緩沖器514是循環(huán)緩沖器。
重排序緩沖器514也可以存儲(chǔ)執(zhí)行指令的結(jié)果,直到執(zhí)行的指令準(zhǔn)備退出,例如,退到寄存器文件508內(nèi)。在一個(gè)實(shí)施方案中,寄存器文件508包括兩個(gè)存儲(chǔ)體T1、T2。存儲(chǔ)體T1保存與處理器線程T1相關(guān)聯(lián)的數(shù)據(jù),存儲(chǔ)體T2保存與處理器線程T2相關(guān)聯(lián)的數(shù)據(jù)。寄存器文件508可包括線程索引(未示出)以指示將從哪個(gè)寄存器載入數(shù)據(jù)。線程索引確保來自與當(dāng)前執(zhí)行的處理器線程相關(guān)的寄存器的數(shù)據(jù)被載入到寄存器文件508內(nèi)。
在執(zhí)行級(jí)EX1、EX2中,執(zhí)行單元512執(zhí)行從發(fā)令邏輯510發(fā)送的譯碼后的指令。執(zhí)行單元512可以是任何類型的執(zhí)行單元,如以上討論的那樣。雖然所示的執(zhí)行單元512具有兩個(gè)流水線級(jí),但執(zhí)行單元512可以具有不同數(shù)量的流水線級(jí)。在一個(gè)實(shí)施方案中,執(zhí)行指令的結(jié)果被回寫到重排序緩沖器514,然后退到寄存器文件508。
可編程線程分配控制器516可以被編程從而存儲(chǔ)針對(duì)每個(gè)處理器線程T1、T2的處理器時(shí)間分配。在一個(gè)實(shí)施方案中,可編程線程分配控制器516通過切換分別位于流水線處理器500的每個(gè)流水線級(jí)(例如,流水線級(jí)IF、ID、IS、EX1、EX2)之前和之后的多路復(fù)用器550和多路分解器552,來自動(dòng)執(zhí)行處理器線程T1、T2之間的上下文切換。例如,當(dāng)流水線處理器500正在處理處理器線程T1時(shí),多路復(fù)用器550和多路分解器552被控制以傳遞與處理器線程T1相關(guān)聯(lián)的指令(通過流水線處理器500的流水線級(jí))。處理器線程T2的狀態(tài)信息被存儲(chǔ)在寄存器B1-B6中。當(dāng)從處理器線程T1發(fā)生上下文切換時(shí),寄存器A1-A6存儲(chǔ)處理器線程T1的狀態(tài),來自寄存器B1-B6的處理器線程T2的狀態(tài)被載入(通過多路復(fù)用器550和多路分解器552)并被流水線處理器500處理。在一個(gè)實(shí)施方案中,每個(gè)多路復(fù)用器550是2-對(duì)-1的多路復(fù)用器,而每個(gè)多路分解器552是1-對(duì)-2的多路分解器。
異常處理 當(dāng)根據(jù)流水線處理器結(jié)構(gòu)100、400構(gòu)造的處理器(例如,處理器300、500)檢測(cè)到異常時(shí),正常的指令執(zhí)行順序被中止。異常就是引起正常程序執(zhí)行中止的事件。異常的種類包括,例如,尋址異常、數(shù)據(jù)異常、操作異常、溢出異常、保護(hù)異常、下溢異常等等。異常可以是由硬件或軟件產(chǎn)生的。
圖6示出了在根據(jù)流水線處理器結(jié)構(gòu)100、400實(shí)施的處理器中執(zhí)行異常處理的一種方法。當(dāng)正在執(zhí)行給定線程的指令i時(shí)發(fā)生異常請(qǐng)求(步驟602)。與處理器流水線內(nèi)當(dāng)前指令的狀態(tài)一起,與每個(gè)處理器線程相關(guān)聯(lián)的程序計(jì)數(shù)器的值被保存(步驟604)。在一個(gè)實(shí)施方案中,處理器流水線內(nèi)所有的指令被終止或刷新。處理器跳轉(zhuǎn)到與給定線程相關(guān)的異常處理例程(步驟606)。在一個(gè)實(shí)施方案中,每個(gè)處理器線程都有相關(guān)的異常處理例程,該異常處理例程是分離的并獨(dú)立于與其它處理器線程相關(guān)的異常處理例程。在一個(gè)實(shí)施方案中,單個(gè)異常處理例程執(zhí)行針對(duì)幾乎所有的處理器線程的異常請(qǐng)求。
異常請(qǐng)求是由給定的異常處理例程執(zhí)行的(步驟608)。處理器已經(jīng)執(zhí)行異常請(qǐng)求后,程序計(jì)數(shù)器的值在處理器的程序計(jì)數(shù)器內(nèi)被恢復(fù),(異常請(qǐng)求之前的)指令的狀態(tài)在處理器的流水線內(nèi)被恢復(fù)(步驟610)。從異常處理例程返回后,處理器繼續(xù)下一條指令(例如,指令i+1)的程序執(zhí)行(步驟612)。在步驟612,如果指令要被重新執(zhí)行處理器就恢復(fù)在指令i處的程序指令。
中斷處理 根據(jù)流水線處理器結(jié)構(gòu)100、400實(shí)施的處理器中的中斷以類似于異常處理的方式被處理。圖7示出了在根據(jù)流水線處理器結(jié)構(gòu)100、400實(shí)施的處理器中處理中斷的一種方法。
當(dāng)正在執(zhí)行給定的線程的指令i時(shí)發(fā)生中斷(步驟702)。連同處理器流水線內(nèi)當(dāng)前指令的狀態(tài),與每個(gè)處理器線程相關(guān)聯(lián)的程序計(jì)數(shù)器的值被保存(步驟704)。處理器跳轉(zhuǎn)到與給定線程相關(guān)的中斷處理例程(步驟706)。在一個(gè)實(shí)施方案中,每個(gè)處理器線程都有相關(guān)的中斷處理例程,該中斷處理例程的入口點(diǎn)是分離的并獨(dú)立于與其它處理器線程相關(guān)的中斷處理例程。入口點(diǎn)是中斷處理例程的開始地址。在一個(gè)實(shí)施方案中,單個(gè)中斷處理例程(具有單個(gè)入口點(diǎn))執(zhí)行針對(duì)幾乎所有的處理器線程的中斷。
中斷是由給定的中斷處理例程執(zhí)行的(步驟708)。處理器已經(jīng)執(zhí)行中斷后,程序計(jì)數(shù)器的值在處理器的程序計(jì)數(shù)器內(nèi)被恢復(fù),(中斷請(qǐng)求之前的)指令的狀態(tài)在處理器的流水線內(nèi)被恢復(fù)(步驟710)。從中斷處理例程返回后處理器繼續(xù)下一條指令(例如,指令i+1)的程序執(zhí)行(步驟712)。
根據(jù)流水線處理器結(jié)構(gòu)100、400構(gòu)造的流水線處理器可以用于廣泛的應(yīng)用中。實(shí)例性的應(yīng)用包括數(shù)據(jù)存儲(chǔ)應(yīng)用、無線應(yīng)用、和計(jì)算機(jī)系統(tǒng)應(yīng)用。
已經(jīng)描述了若干實(shí)施方式。但是,應(yīng)該理解的是可以在不背離本發(fā)明的精神和范圍的前提下進(jìn)行各種改進(jìn)。例如,上述的方法的步驟可以以不同的順序來執(zhí)行而仍能獲得所需的結(jié)果。因此,其它的實(shí)施方式仍然在所附的權(quán)利要求的保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種處理器,包括流水線級(jí),該流水線級(jí)包括,第一輸入寄存器,第二輸入寄存器,第一輸出寄存器,第二輸出寄存器;第一選擇器,其與所述第一輸入寄存器和所述第二輸入寄存器通信;第二選擇器,其與所述第一輸出寄存器和所述第二輸出寄存器通信;和控制器,該控制器可運(yùn)行以控制所述第一和第二選擇器的切換,以使在正在處理第一處理器線程的時(shí)間期間,與第一處理器線程相關(guān)聯(lián)的數(shù)據(jù)傳遞通過所述第一輸入寄存器、所述流水線級(jí)、和所述第一輸出寄存器,而在正在處理第二處理器線程的時(shí)間期間,與第二處理器線程相關(guān)聯(lián)的數(shù)據(jù)傳遞通過所述第二輸入寄存器、所述流水線級(jí)、和所述第二輸出寄存器,其中所述第一輸入寄存器和所述第一輸出寄存器可運(yùn)行以存儲(chǔ)所述第一處理器線程的狀態(tài),而且所述第二輸入寄存器和所述第二輸出寄存器可運(yùn)行以存儲(chǔ)第二處理器線程的狀態(tài)。
2.如權(quán)利要求1所述的處理器,其中所述控制器基于確定分配到所述第一和第二處理器線程的每個(gè)線程的處理器時(shí)間的輸入,來控制所述第一和第二選擇器的切換。
3.如權(quán)利要求1所述的處理器,進(jìn)一步包括第一中斷處理例程,其處理與所述第一處理器線程相關(guān)聯(lián)的中斷請(qǐng)求;和第二中斷處理例程,其處理與所述第二處理器線程相關(guān)聯(lián)的中斷請(qǐng)求。
4.如權(quán)利要求3所述的處理器,其中所述第一中斷處理例程和所述第二處理例程具有各自的入口點(diǎn)。
5.如權(quán)利要求1所述的處理器,進(jìn)一步包括第一異常處理例程,其處理與所述第一處理器線程相關(guān)聯(lián)的異常請(qǐng)求;和第二異常處理例程,其處理與所述第二處理器線程相關(guān)聯(lián)的異常請(qǐng)求。
6.如權(quán)利要求1所述的處理器,進(jìn)一步包括單個(gè)異常處理例程或單個(gè)中斷處理例程,它們分別處理與所述第一和第二處理器線程都相關(guān)聯(lián)的幾乎所有的異常請(qǐng)求或幾乎所有的中斷請(qǐng)求。
7.如權(quán)利要求1所述的處理器,進(jìn)一步包括一組寄存器,其對(duì)應(yīng)于多個(gè)處理器線程中的每個(gè)線程,所述多個(gè)處理器線程包括所述第一處理器線程和所述第二處理器線程,組中的每個(gè)寄存器可以位于所述處理器的流水線級(jí)之前或之后;和其中所述控制器包括可編程控制器,該控制器可運(yùn)行以在所述多個(gè)處理器線程之間執(zhí)行上下文切換,包括在對(duì)應(yīng)的寄存器組中存儲(chǔ)當(dāng)前執(zhí)行的處理器線程的狀態(tài),和將來自對(duì)應(yīng)的寄存器組的另一處理器線程的狀態(tài)載入以允許處理另一處理器線程。
8.如權(quán)利要求7所述的處理器,進(jìn)一步包括寄存器文件,該寄存器文件包括對(duì)應(yīng)于所述多個(gè)處理器線程中每個(gè)線程的多個(gè)存儲(chǔ)體,每個(gè)存儲(chǔ)體可存儲(chǔ)與對(duì)應(yīng)的處理器線程相關(guān)聯(lián)的數(shù)據(jù)。
9.如權(quán)利要求7所述的處理器,進(jìn)一步包括多個(gè)程序計(jì)數(shù)器,每個(gè)程序計(jì)數(shù)器可運(yùn)行以指示對(duì)應(yīng)的處理器線程的執(zhí)行狀態(tài)。
10.如權(quán)利要求1所述的處理器,進(jìn)一步包括取指令單元,該單元可運(yùn)行以取出與多個(gè)處理器線程相關(guān)聯(lián)的指令,所述多個(gè)處理器線程包括所述第一處理器線程和所述第二處理器線程;譯碼器,其響應(yīng)于所述取指令單元;發(fā)令邏輯,其響應(yīng)于所述譯碼器;和寄存器文件,其包括對(duì)應(yīng)于所述多個(gè)處理器線程的多個(gè)存儲(chǔ)體,每個(gè)存儲(chǔ)體可運(yùn)行從而只存儲(chǔ)與對(duì)應(yīng)的處理器線程相關(guān)聯(lián)的數(shù)據(jù)。
11.如權(quán)利要求10所述的處理器,其中所述數(shù)據(jù)包括與給定處理器線程相關(guān)聯(lián)的執(zhí)行指令的操作數(shù)或結(jié)果。
12.如權(quán)利要求10所述的處理器,進(jìn)一步包括與所述取指令單元通信的控制器,所述控制器可以確定由所述取指令單元從其中讀取下一個(gè)指令的處理器線程。
13.如權(quán)利要求10所述的處理器,進(jìn)一步包括一組寄存器,其對(duì)應(yīng)于所述多個(gè)處理器線程的每個(gè)線程,組中的每個(gè)寄存器可以位于所述處理器的流水線級(jí)之前或之后,其中所述控制器可以在所述多個(gè)處理器線程之間執(zhí)行上下文切換,包括在對(duì)應(yīng)的寄存器組中存儲(chǔ)當(dāng)前執(zhí)行的處理器線程的狀態(tài),和將來自對(duì)應(yīng)的寄存器組的另一處理器線程的狀態(tài)載入以允許處理另一處理器線程。
14.如權(quán)利要求10所述的處理器,其中所述控制器可包括對(duì)應(yīng)于所述多個(gè)處理器線程的多個(gè)線程分配計(jì)數(shù)器,每個(gè)線程分配計(jì)數(shù)器可包含一個(gè)數(shù)值,該數(shù)值代表有多少處理器時(shí)間要分配給各自的處理器線程。
15.如權(quán)利要求10所述的處理器,其中所述控制器可執(zhí)行上下文切換,其包括切換與所述取指令單元通信的選擇器。
16.如權(quán)利要求15所述的處理器,其中所述控制器可以在執(zhí)行程序期間,動(dòng)態(tài)地控制與所述取指令單元通信的所述選擇器的切換。
17.如權(quán)利要求15所述的處理器,其中所述控制器可以基于先前確定的針對(duì)所述多個(gè)處理器線程的每個(gè)線程的處理器時(shí)間分配,靜態(tài)地控制與所述取指令單元通信的所述選擇器的切換。
18.一種方法,包括提供用于指令執(zhí)行的第一處理器線程;提供用于指令執(zhí)行的第二處理器線程;處理所述第一處理器線程;和執(zhí)行從所述第一處理器線程到所述第二處理器線程的上下文切換,執(zhí)行上下文切換包括,在對(duì)應(yīng)于所述第一處理器線程的第一組寄存器內(nèi)存儲(chǔ)所述第一處理器線程的狀態(tài);和將來自對(duì)應(yīng)于所述第二處理器線程的第二組寄存器的、所述第二處理器線程的狀態(tài)載入。
19.如權(quán)利要求18所述的方法,其中在對(duì)應(yīng)的寄存器組內(nèi)存儲(chǔ)給定處理器線程的狀態(tài)包括存儲(chǔ)對(duì)應(yīng)于處理器流水線級(jí)的數(shù)據(jù)。
20.如權(quán)利要求18所述的方法,進(jìn)一步包括接收改變所述處理器時(shí)間分配的輸入;和基于改變的處理器時(shí)間分配在所述第一和第二處理器線程之間執(zhí)行上下文切換。
21.如權(quán)利要求18所述的方法,其中執(zhí)行上下文切換包括在執(zhí)行程序期間,動(dòng)態(tài)地執(zhí)行上下文切換。
22.如權(quán)利要求18所述的方法,其中執(zhí)行上下文切換包括基于先前確定的針對(duì)所述第一和第二處理器線程的每個(gè)線程的處理器時(shí)間分配,靜態(tài)地執(zhí)行上下文切換。
23.如權(quán)利要求18所述的方法,其中執(zhí)行上下文切換包括在指令周期的結(jié)尾執(zhí)行上下文切換。
24.如權(quán)利要求18所述的方法,進(jìn)一步包括在寄存器文件的對(duì)應(yīng)的存儲(chǔ)體中存儲(chǔ)與給定處理器線程相關(guān)聯(lián)的數(shù)據(jù)。
25.如權(quán)利要求18所述的方法,進(jìn)一步包括指示對(duì)應(yīng)的處理器線程的執(zhí)行狀態(tài)。
26.如權(quán)利要求18所述的方法,進(jìn)一步包括讀取與多個(gè)處理器線程相關(guān)的指令,所述多個(gè)處理器線程包括第一處理器線程和所述第二處理器線程;譯碼所述指令;將所述指令發(fā)送到執(zhí)行單元;和將與給定處理器線程的發(fā)送的指令相關(guān)的數(shù)據(jù)存儲(chǔ)到寄存器文件的對(duì)應(yīng)的存儲(chǔ)體中,其中每個(gè)存儲(chǔ)體只存儲(chǔ)與對(duì)應(yīng)的處理器線程相關(guān)聯(lián)的數(shù)據(jù)。
27.如權(quán)利要求26所述的方法,進(jìn)一步包括確定從其中讀取下一條指令的處理器線程。
全文摘要
本發(fā)明提供了一種流水線處理器架構(gòu)或結(jié)構(gòu)、處理器、和方法。在一個(gè)實(shí)施方案中,所提供的處理器包括取指令單元,該單元可運(yùn)行以取出與多個(gè)處理器線程相關(guān)聯(lián)的指令;響應(yīng)于所述取指令單元的譯碼器;響應(yīng)于所述譯碼器的發(fā)令邏輯;和寄存器文件,該寄存器文件包括對(duì)應(yīng)于所述多個(gè)處理器線程的多個(gè)存儲(chǔ)體(bank)。每個(gè)存儲(chǔ)體可運(yùn)行從而存儲(chǔ)與對(duì)應(yīng)的處理器線程相關(guān)聯(lián)的數(shù)據(jù)。所述處理器可包括對(duì)應(yīng)于多個(gè)處理器線程中每個(gè)線程的一組寄存器。組中的每個(gè)寄存器可以位于所述處理器的流水線級(jí)之前或之后。
文檔編號(hào)G06F9/38GK1841314SQ20061006533
公開日2006年10月4日 申請(qǐng)日期2006年3月17日 優(yōu)先權(quán)日2005年3月18日
發(fā)明者H-Y·陳, S·蘇塔迪亞 申請(qǐng)人:馬維爾國際貿(mào)易有限公司