專利名稱:上下文流水線操作的制作方法
背景并行處理在計(jì)算處理中是一種高效的并發(fā)事件信息處理的方式。并行處理在計(jì)算機(jī)中需要同時(shí)處理很多程序,而不是順序處理。在一個(gè)并行處理器的上下文中,并行包括了同一時(shí)間內(nèi)處理不止一件事情。與所有的任務(wù)都在單個(gè)的工作站中順序地執(zhí)行的串行處理范例或在特定工作站中執(zhí)行任務(wù)的流水線機(jī)器不同,在并行處理中,提供有多臺(tái)工作站,其中的每個(gè)都能同時(shí)執(zhí)行不同的任務(wù)。大量工作站同時(shí)工作并獨(dú)立于相同或共用的計(jì)算任務(wù)的元件。因此,使用或提供并行處理能解決計(jì)算問(wèn)題。
附圖簡(jiǎn)要說(shuō)明
圖1是使用基于硬件的多線程處理器的一種通信系統(tǒng)的結(jié)構(gòu)圖。
圖2是在圖1中基于硬件的多線程處理器中使用的可編程引擎功能單元的結(jié)構(gòu)圖。
圖3是一個(gè)上下文狀態(tài)改變的結(jié)構(gòu)圖。
圖4是一個(gè)上下文尋址存儲(chǔ)器(CAM)的結(jié)構(gòu)圖。
圖5是一個(gè)CAM處理的詳細(xì)的結(jié)構(gòu)圖。
圖6是一個(gè)上下文流水線處理的簡(jiǎn)單的結(jié)構(gòu)圖。
描述體系結(jié)構(gòu)參考圖1,一個(gè)計(jì)算機(jī)處理系統(tǒng)10包括一個(gè)并行的,基于硬件的多線程網(wǎng)絡(luò)處理器12。該基于硬件的多線程處理器12被連接到一個(gè)存儲(chǔ)器系統(tǒng)或存儲(chǔ)資源14。存儲(chǔ)器系統(tǒng)14包括動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)14a和靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)14b。該處理系統(tǒng)10適用于可被分割成并行的子任務(wù)或功能的任務(wù)。特別地,該基于硬件的多線程處理器12用于面向帶寬而不是面向等待時(shí)間的任務(wù)。該基于硬件的多線程處理器12具有多個(gè)功能微引擎或可編程引擎16,其每個(gè)都具有多個(gè)由硬件控制的能同時(shí)工作并獨(dú)立工作于特定任務(wù)的線程。
可編程引擎16每個(gè)都保留了硬件的程序計(jì)數(shù)器和與程序計(jì)數(shù)器關(guān)聯(lián)的狀態(tài)。事實(shí)上,雖然在每個(gè)可編程引擎16上上下文或線程的相應(yīng)組能同時(shí)激活,但在任何時(shí)間只有一個(gè)被實(shí)際操作。
在此實(shí)例中,圖1示出了8個(gè)可編程引擎16a-16h??删幊桃?6a-16h的每個(gè)引擎處理8個(gè)硬件線程或上下文。這8個(gè)可編程引擎16a-16h與包括了存儲(chǔ)資源14和總線接口(未示出)的共享資源一切執(zhí)行?;谟布亩嗑€程處理器12包括了一個(gè)動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)控制器18a和一個(gè)靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)控制器18b。DRAM存儲(chǔ)器14a和DRAM控制器18a典型地被用于處理大容量的數(shù)據(jù),例如,處理從網(wǎng)絡(luò)包來(lái)的網(wǎng)絡(luò)有效載荷。SRAM存儲(chǔ)器14b和SRAM控制器18b在聯(lián)網(wǎng)設(shè)備中用于低等待時(shí)間、快速訪問(wèn)的任務(wù),例如,訪問(wèn)查找表,訪問(wèn)用于核心處理器20的存儲(chǔ)器等等。
這8個(gè)可編程引擎16a-16h基于數(shù)據(jù)特性訪問(wèn)DRAM存儲(chǔ)器14a或SRAM存儲(chǔ)器14b。因此,低等等時(shí)間,低帶寬的數(shù)據(jù)被存儲(chǔ)在SRAM存儲(chǔ)器14b中并從中取出,而對(duì)等待時(shí)間不重要的更高帶寬數(shù)據(jù)則初存儲(chǔ)在DRAM存儲(chǔ)器14a中并從中取出。可編程引擎16a-16h可為DRAM控制器18a或SRAM控制器18b執(zhí)行存儲(chǔ)參考指令。
基于硬件的多線程處理器12還包括了一個(gè)用以加載為可編程引擎16a-16h的微碼控制的處理核心20。在本實(shí)例中,該處理核心20是一個(gè)基于構(gòu)架的XScaleTM。
該處理核心20執(zhí)行通用目的計(jì)算機(jī)類型的功能例如處理協(xié)議,異常事件,同時(shí)額外支持包處理,其中可編程引擎16例如在臨界條件下將該包停止以便進(jìn)行更詳細(xì)的處理。
該處理核心20有一個(gè)操作系統(tǒng)(未示出)。通過(guò)該操作系統(tǒng)(OS),處理核心20能調(diào)用功能來(lái)在可編程引擎16a-16h上運(yùn)行。該處理核心20能使用任何所支持的OS,特別是,一個(gè)實(shí)時(shí)OS。由于該處理核心20以一個(gè)XScaleTM的構(gòu)架來(lái)實(shí)現(xiàn),因此可以使用諸如Micorosoft NT real-time,VXWorks和μCOS的操作系統(tǒng),或通過(guò)因特網(wǎng)得到的免費(fèi)OS的操作系統(tǒng)。
硬件多線程的優(yōu)點(diǎn)可通過(guò)SRAM或DRAM存儲(chǔ)器訪問(wèn)來(lái)解釋。作為一個(gè)實(shí)例,一個(gè)來(lái)自可編程引擎16之一的由上下文(例如,Thread_0)請(qǐng)求的SRAM訪問(wèn)將使得SRAM控制器18b啟動(dòng)一個(gè)對(duì)SRAM存儲(chǔ)器14b的訪問(wèn)。該SRAM控制器18b訪問(wèn)該SRAM存儲(chǔ)器14b,從該SRAM存儲(chǔ)器14b中取出數(shù)據(jù),并將數(shù)據(jù)返回到請(qǐng)求的可編程引擎16。
在一個(gè)SRAM訪問(wèn)期間,如果可編程引擎16a-16h之一僅有一個(gè)能操作的線程,那么該可編程引擎將處在睡眠狀態(tài)直到數(shù)據(jù)從SRAM存儲(chǔ)器14b中返回。
通過(guò)在每個(gè)可編程引擎16a-16h中使用硬件上下文交換,該硬件上下文交換使其他具有唯一程序計(jì)數(shù)器的上下文在同一個(gè)可編程引擎中執(zhí)行。這樣,另一個(gè)線程,例如Thread_1,就能當(dāng)?shù)谝粋€(gè)線程Thread_0正等待返回讀數(shù)據(jù)時(shí)被執(zhí)行。在執(zhí)行期間,Thread_1可以訪問(wèn)DRAM存儲(chǔ)器14a。當(dāng)Thread_1在DRAM單元運(yùn)行時(shí),一個(gè)新的線程,例如Thread_2,能立即在可編程引擎16中運(yùn)行。Thread_2能運(yùn)行一定時(shí)間直到它需要訪問(wèn)存儲(chǔ)器或執(zhí)行其他一些長(zhǎng)等待時(shí)間的操作,例如對(duì)總線接口的訪問(wèn)。因此,同時(shí)地,該多線程處理器12能有一個(gè)總線操作,一個(gè)SRAM操作,和一個(gè)DRAM操作,這些所有的均能通過(guò)一個(gè)可編程引擎16完成或操作并具有更多的可用線程或上下文來(lái)處理更多的工作。
硬件上下文交換也與任務(wù)的完成同步。例如,兩個(gè)線程能訪問(wèn)共享的存儲(chǔ)器資源。例如,SRAM存儲(chǔ)器14b。每個(gè)單獨(dú)的功能單元之一,例如SRAM控制器18b和DRAM控制器18a,當(dāng)它們完成來(lái)自一個(gè)可編程引擎線程或上下文的任務(wù)時(shí)就返回一個(gè)操作完成的標(biāo)志信令。當(dāng)可編程引擎16a-16h接收到該標(biāo)志時(shí),可編程引擎16a-16h就能確定輪到哪個(gè)線程。
基于硬件的多線程處理器12的一個(gè)應(yīng)用實(shí)例是作為一個(gè)網(wǎng)絡(luò)處理器。作為一個(gè)網(wǎng)絡(luò)處理器,基于硬件的多線程處理器12與諸如媒體訪問(wèn)控制器(MAC)設(shè)備,例如10/100BaseT Octal MAC13a或千兆以太網(wǎng)設(shè)備13b的網(wǎng)絡(luò)設(shè)備連接??偟貋?lái)說(shuō),作為一個(gè)網(wǎng)絡(luò)處理器,基于硬件的多線程處理器12能與任何類型的通信設(shè)備或接收或發(fā)送大量數(shù)據(jù)的接口連接。能應(yīng)用在網(wǎng)絡(luò)上的計(jì)算機(jī)處理系統(tǒng)10能接收網(wǎng)絡(luò)包并能以并行的方式處理這些包。
編程引擎參考圖2,示出了來(lái)自可編程引擎16a-16h的一個(gè)示范性的編程引擎16a。該可編程引擎16a包括一個(gè)控制核心30,其在一個(gè)實(shí)例中包括一個(gè)具有4096個(gè)40比特指令的RAM。該RAM存儲(chǔ)了該可編程引擎16a執(zhí)行的微程序。在控制核心30中的微程序通過(guò)處理器核心20(圖1)加載。
除了執(zhí)行線程的事件信號(hào)是局部的外,該可編程引擎16a所使用的信令狀態(tài)是全程的。根據(jù)信令的狀態(tài),一個(gè)執(zhí)行線程能將一個(gè)信號(hào)的狀態(tài)傳播給所有的可編程引擎16a-16h。在可編程引擎中的任何一個(gè)以及所有的線程都能按這些信令的狀態(tài)而改變。這些信令狀態(tài)可被用來(lái)確定一個(gè)資源的可用性或一個(gè)資源是否適于服務(wù)。上下文事件邏輯對(duì)這8個(gè)線程有一個(gè)仲裁。在一個(gè)實(shí)例中,該仲裁是一個(gè)循環(huán)機(jī)制。其他可以使用的技術(shù)包括優(yōu)先隊(duì)列或加權(quán)公平隊(duì)列。
如上所述的,可編程引擎16a支持8個(gè)上下文的多線程執(zhí)行。這使得一個(gè)線程剛在另一個(gè)線程發(fā)出一個(gè)存儲(chǔ)參考信號(hào)之后就開(kāi)始執(zhí)行并且必須等待直到該參考信號(hào)完成才能做更多的工作。多線程執(zhí)行是保持可編程引擎16高效的硬件執(zhí)行的關(guān)鍵,這是因?yàn)榇鎯?chǔ)等特時(shí)間是很重要的。多線程執(zhí)行使得該可編程引擎16通過(guò)執(zhí)行交叉于幾個(gè)線程中的有用的獨(dú)立工作來(lái)隱藏存儲(chǔ)等待時(shí)間。
考慮到高效的上下文交換,可編程引擎16a,具有自己的寄存器組,程序計(jì)數(shù)器,和上下文特定本地寄存器。每個(gè)上下文都有一個(gè)副本,這降低了從共享存儲(chǔ)器和用于每個(gè)上下文交換的可編程引擎寄存器中來(lái)回移動(dòng)上下文特定信息的需求。快速上下文交換允許當(dāng)其他的上下文在等待輸人-輸出(I/O),典型地為外部存儲(chǔ)器訪問(wèn),時(shí)完成一個(gè)上下文的計(jì)算或用于來(lái)自另一個(gè)上下文或硬件單元的信號(hào)。
例如,可編程引擎16a通過(guò)保留8個(gè)程序計(jì)數(shù)器和寄存器的8個(gè)上下文關(guān)聯(lián)組來(lái)執(zhí)行這8個(gè)上下文。存在有6個(gè)不同類型的上下文關(guān)聯(lián)寄存器,即,通用寄存器(GPR)32,內(nèi)部程序代理寄存器(未示出),靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)輸入轉(zhuǎn)移寄存器34,動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)輸入轉(zhuǎn)移寄存器36,SRAM輸出轉(zhuǎn)移寄存器38,DRAM輸出轉(zhuǎn)移寄存器40。
GPR32用于通用編程目的。該GPR32在程序的控制下排他地讀和寫。GPR32,當(dāng)在指令中作為一個(gè)來(lái)源時(shí),給執(zhí)行的數(shù)據(jù)通路44提供操作數(shù)。當(dāng)在指令中作為一個(gè)目的地時(shí),GPR32用執(zhí)行數(shù)據(jù)路徑44的結(jié)果寫入??删幊桃?6a還包括I/O轉(zhuǎn)移寄存器34,36,38和40,這些寄存器被用來(lái)在可編程引擎16a和可編程引擎16a的外部,例如DRAM存儲(chǔ)器14a,SRAM存儲(chǔ)器14b等之間來(lái)回轉(zhuǎn)移數(shù)據(jù)。
還使用了本地存儲(chǔ)器42。本地存儲(chǔ)器42是位于可編程引擎16a中的地址存儲(chǔ)器。本地存儲(chǔ)器42在程序控制下排他地讀和寫。本地存儲(chǔ)器42還包括了通過(guò)所有可編程引擎16a-16h共享的變量。共享的變量在各種分配的任務(wù)中由可編程引擎16a-16h在功能流水線階段改變,其將在下面說(shuō)明。該共享的變量包括一個(gè)關(guān)鍵部分,它定義了讀-修改-寫的時(shí)間。該關(guān)鍵部分在計(jì)算處理系統(tǒng)10中的執(zhí)行和使用也將在下面描述。
可編程引擎上下文可編程引擎16a的每個(gè)支持8個(gè)上下文的多線程執(zhí)行。這樣做的一個(gè)原因是允許一個(gè)線程剛在另一個(gè)線程發(fā)出一個(gè)存儲(chǔ)參考信號(hào)之后就開(kāi)始執(zhí)行并且必須等待直到該參考信號(hào)完成才能做更多的工作。這個(gè)行為是保持可編程引擎16a-16f高效的硬件執(zhí)行的關(guān)鍵,因?yàn)榇鎯?chǔ)等待時(shí)間是很重要的。不同的是,如果只支持單個(gè)線程的執(zhí)行,那么可編程引擎將為等待要完成的參考信號(hào)的大量周期而空閑,并因此而減低了總計(jì)算的吞吐量。多線程執(zhí)行允許一個(gè)可編程引擎通過(guò)執(zhí)行交叉于幾個(gè)線程中的有用的獨(dú)立工作來(lái)隱藏存儲(chǔ)等待時(shí)間。
可編程引擎16a-16h的每個(gè)具有8個(gè)可用的上下文??紤]到高效的上下文交換,在可編程引擎中8個(gè)上下文的每個(gè),都具有自己的寄存器組,程序計(jì)數(shù)器,和上下文特定本地寄存器。每個(gè)上下文都有一個(gè)副本,這就降低了從共享存儲(chǔ)器和用于每個(gè)上下文交換的可編程引擎寄存器中來(lái)回移動(dòng)上下文特定信息的需求??焖偕舷挛慕粨Q允許當(dāng)其他的上下文在等待I/O,典型地為外部存儲(chǔ)器訪問(wèn),時(shí)完成一個(gè)上下文的計(jì)算或用于來(lái)自另一個(gè)上下文或硬件單元的信號(hào)。
因此,圖3顯示了用于一個(gè)上下文的狀態(tài)改變。8個(gè)上下文中的每個(gè)均是以上描述的狀態(tài)中的一種。最多,一個(gè)上下文在同一時(shí)間能處于一種執(zhí)行狀態(tài)而其他的上下文處于其他狀態(tài)的一種1)非活動(dòng)狀態(tài)(100a)-由于一些應(yīng)用程序可以不需要所有的8個(gè)上下文,因此當(dāng)一個(gè)上下文的CTX_Enable(上下文激活)控制和狀態(tài)寄存器(CSR)的激活位為“0”時(shí),該上下文處在非激活狀態(tài)。
2)準(zhǔn)備狀態(tài)(100b)-在這個(gè)狀態(tài)中,雖然上下文作好了執(zhí)行的準(zhǔn)備,但該上下文由于一個(gè)不同的上下文仍在執(zhí)行而不能進(jìn)行。當(dāng)執(zhí)行的上下文轉(zhuǎn)到睡眠狀態(tài)時(shí),可編程引擎的上下文仲裁器從所有處在準(zhǔn)備狀態(tài)的上下文中選擇下一個(gè)上下文,從而轉(zhuǎn)到執(zhí)行狀態(tài)。該仲裁是一個(gè)循環(huán)。
3)執(zhí)行狀態(tài)(100c)-當(dāng)一個(gè)上下文的數(shù)在Active_CTX_Status_CSR中時(shí)則該上下文是執(zhí)行狀態(tài)。執(zhí)行上下文的程序計(jì)數(shù)器(未示出)被用來(lái)從控制存儲(chǔ)器50中取出指令。上下文保持執(zhí)行狀態(tài)直到其執(zhí)行導(dǎo)致它進(jìn)入睡眠狀態(tài)的指令。最多,一個(gè)上下文在任何時(shí)間都能是執(zhí)行狀態(tài)。
4)睡眠狀態(tài)(100d)-上下文等待在CTX_#_Wakeup_Events CSR中指定的外部事件來(lái)發(fā)生,其中#表示8個(gè)不同的上下文例如上下文#0到#7,典型地但不限于一個(gè)I/O訪問(wèn)。在此狀態(tài)中,不將該上下文裁決為進(jìn)入執(zhí)行狀態(tài)。
回到圖2,每個(gè)可編程引擎22包括四種如下所述的32比特的數(shù)據(jù)路徑寄存器。256個(gè)通用目的寄存器,128個(gè)臨近寄存器,512個(gè)轉(zhuǎn)移寄存器,以及640個(gè)32比特字本地存儲(chǔ)器。
通用目的寄存器可編程引擎16a包括了通用目的寄存器(GPR)52,其用于通用編程的目的。它們?cè)诔绦虻目刂葡屡潘刈x和寫。GPR52,當(dāng)在指令中用做一個(gè)來(lái)源時(shí),給執(zhí)行的數(shù)據(jù)通路56提供操作數(shù)。當(dāng)在指令中用做一個(gè)目的地時(shí),GPR52用執(zhí)行數(shù)據(jù)路徑56的結(jié)果寫入。GPR52被物理和邏輯地包括在兩個(gè)存儲(chǔ)體GPR A 52a和GPR B 52b中,如圖3所示。
轉(zhuǎn)移寄存器可編程引擎16a還包括了轉(zhuǎn)移寄存器58和60。轉(zhuǎn)移寄存器34,36,38和40被用來(lái)在可編程引擎16a和如DRAM,SRAM等的可編程引擎的外部單元之間來(lái)回轉(zhuǎn)移數(shù)據(jù)。在圖2中例舉了四種類型的轉(zhuǎn)移寄存器,即輸入轉(zhuǎn)移寄存器和輸出轉(zhuǎn)移寄存器。
當(dāng)該輸入轉(zhuǎn)移寄存器當(dāng)在指令中用做一個(gè)來(lái)源時(shí),給執(zhí)行的數(shù)據(jù)通路44提供操作數(shù)。當(dāng)輸出轉(zhuǎn)移寄存器在指令中用做一個(gè)目的地時(shí),用執(zhí)行數(shù)據(jù)路徑44的結(jié)果寫入其中。
本地控制和狀態(tài)寄存器(CSR)本地控制和狀態(tài)寄存器(CSR)66在執(zhí)行數(shù)據(jù)通路56的外部并保留有特定目的信息。其能由特定的指令(local_csr_re和local_csr_wr)讀和寫,同時(shí)典型地比數(shù)據(jù)路徑寄存器的訪問(wèn)頻率低。
臨近寄存器可編程引擎16a還包括128個(gè)臨近(NN)寄存器54。每個(gè)NN寄存器54當(dāng)在指令中用做一個(gè)來(lái)源時(shí),也給執(zhí)行的數(shù)據(jù)通路44提供操作數(shù)。該NN寄存器54要么通過(guò)一個(gè)外部實(shí)體來(lái)寫入,但不限于一個(gè)臨近可編程引擎,要么通過(guò)相同的駐留有NN寄存器54的可編程引擎16a來(lái)寫入。該特定寄存器由一個(gè)與上下文關(guān)聯(lián)的操作選取,其中該寄存器的數(shù)字在指令中被編碼,或者作為一個(gè)循環(huán)操作,通過(guò)諸如在CSR寄存器中的NN_Put(NN寫地址)和NN_Get(NN讀地址)選取。
當(dāng)先前的臨近可編程引擎與作為目的地的NN_Put一起執(zhí)行一條指令時(shí)使用NN_Put寄存器。由此寄存器中的值所選取的NN寄存器被寫入,然后增加NN_Put中的值(值到127后轉(zhuǎn)回到0)。在此寄存器中的值與在NN_Get寄存器中的值比較以確定何時(shí)宣布NN_Full和NN_Empty狀態(tài)信號(hào)。
當(dāng)NN寄存器54作為一個(gè)來(lái)源而被訪問(wèn)時(shí)使用NN_Get寄存器,其在指令中的來(lái)源字段中指定。由此寄存器中的值所選取的NN寄存器54被讀出,然后增加NN_Put中的值(值到127后轉(zhuǎn)回到0)。在此寄存器中的值與在NN_Put寄存器中的值比較以確定何時(shí)宣布NN_Full和NN_Empty狀態(tài)信號(hào)。
特別地,當(dāng)NN寄存器54作為一個(gè)指令的目標(biāo)時(shí),該指令結(jié)果數(shù)據(jù)就從可編程引擎16a發(fā)送到,典型地是到另一個(gè),臨近可編程引擎。另一方面,當(dāng)NN寄存器54作為一個(gè)指令的目標(biāo)時(shí),該指令結(jié)果數(shù)據(jù)寫入到在可編程引擎16a中選擇的NN寄存器54。該數(shù)據(jù)并不從該可編程引擎22f中發(fā)送出去,這是因?yàn)镹N寄存器54是作為一個(gè)目標(biāo)。該NN寄存器54用在一個(gè)上下文流水線方法中,如下所描述。
本地寄存器可編程引擎16a在本地存儲(chǔ)器42中包括了640個(gè)32比特字。本地寄存器42是位于可編程引擎16a中的尋址存儲(chǔ)器。本地存儲(chǔ)器42在程序控制下排他地讀和寫。本地存儲(chǔ)器42將操作數(shù)提供給執(zhí)行數(shù)據(jù)路徑44作為一個(gè)來(lái)源,同時(shí)接收結(jié)果作為一個(gè)目的地。特定本地存儲(chǔ)器位置的選取是基于一個(gè)LM_Addr寄存器53中的值,該值是通過(guò)local_CSR_wr指令寫入的。每個(gè)上下文及其每個(gè)工作副本都有兩個(gè)LM_Addr寄存器53。當(dāng)一個(gè)上下文轉(zhuǎn)到睡眠狀態(tài)100d時(shí),將工作副本的值放到LM_Addr的上下文副本中。當(dāng)上下文轉(zhuǎn)到執(zhí)行狀態(tài)時(shí),將LM_Addr的上下文副本中的值放到工作副本中。LM_Addr_0或LM_Addr_1的選擇在該指令中被選取。通過(guò)設(shè)置CTX_Enable[LM_Addr_0_Global]和/或CTX_Enable[LM_Addr_1_Global]來(lái)使用這兩個(gè)或一個(gè)LM_Addr作為全局也是可能的。當(dāng)全局使用時(shí),所有的上下文都使用LM_Addr的工作副本以代替它們自己的上下文特定副本。
本地存儲(chǔ)器42還包括了可編程引擎16a-16h共享的變量。共享的變量在各種分配的任務(wù)中由可編程引擎16a-16h在功能流水線階段改變。該共享的變量包括一個(gè)關(guān)鍵部分,它定義了讀-修改-寫的時(shí)間。
關(guān)鍵部分可編程引擎16a-16h的流水線階段包括了由在共享的變量的關(guān)鍵部分和后續(xù)包的到達(dá)時(shí)間之間的差所定義的最小解。分配給關(guān)鍵部分的時(shí)間必需少于后續(xù)包到達(dá)的時(shí)間,其確定了流水線階段的最小解。存儲(chǔ)器讀的等待時(shí)間遠(yuǎn)遠(yuǎn)超出了用以最小尺寸包的包到達(dá)率,這里存儲(chǔ)器讀后面跟著于修改變量的指令,然后跟著存儲(chǔ)器寫。因此,該關(guān)鍵部分必須保持比后續(xù)包的到達(dá)時(shí)間少。
執(zhí)行數(shù)據(jù)路徑可編程引擎16a還包括了執(zhí)行數(shù)據(jù)路徑44,它能取走一個(gè)或兩個(gè)操作數(shù),執(zhí)行一個(gè)操作,并任選地寫回一個(gè)結(jié)果。來(lái)源和目的地可以是GPR32,轉(zhuǎn)移寄存器34、36,38和40,NN寄存器54,以及本地存儲(chǔ)器42。該操作是移位,加/減。邏輯運(yùn)算,乘法,字節(jié)排列,和找到第一比特。執(zhí)行數(shù)據(jù)路徑44還包括一個(gè)內(nèi)容尋址存儲(chǔ)器(CAM)64。
上下文尋址存儲(chǔ)器(CAM)圖4示出了一個(gè)CAM結(jié)構(gòu)圖102。可編程引擎16a包括了16個(gè)具有關(guān)聯(lián)控制邏輯104的項(xiàng)CAM64。每個(gè)項(xiàng)存儲(chǔ)一個(gè)32比特值,其能與一個(gè)來(lái)源操作數(shù)相比較。所有的項(xiàng)并行比較,并且查找結(jié)果是一個(gè)6比特的值。該6比特的值包括一個(gè)與4比特項(xiàng)數(shù)連接的2比特碼。查找108的可能結(jié)果是兩層。第一個(gè)結(jié)果是一個(gè)miss(0)110,其中該查找值不在CAM64中并且該項(xiàng)數(shù)是最近最少使用(LRU)的項(xiàng),它可用做一個(gè)用于代替的所建議的項(xiàng)。第二個(gè)結(jié)果可以是一個(gè)hit(1)112,其中查找值是在CAM64中,并且該項(xiàng)數(shù)是一個(gè)已經(jīng)匹配的項(xiàng)。
LRU邏輯104保留一個(gè)用于CAM64的項(xiàng)用途的時(shí)間順序表。當(dāng)一個(gè)項(xiàng)被加載或與一個(gè)查找108匹配時(shí),其被標(biāo)記為MRU(最近最常使用)。錯(cuò)過(guò)的查找并不修改LRU表。
參考圖5,顯示的是一個(gè)典型的CAM處理120。例如,可編程引擎16a,使用一個(gè)16項(xiàng)的高速緩沖存儲(chǔ)器或具有一個(gè)LRU代替策略的CAM64來(lái)存儲(chǔ)在同一時(shí)間工作在8個(gè)活動(dòng)上下文或線程上的最近所使用變量的列表。這些線程按序執(zhí)行,使用一個(gè)讀階段122和一個(gè)修改-寫的階段(未示出)。在該讀階段122期間,上下文請(qǐng)求一個(gè)變量并且該CAM64被檢測(cè)以了解是否所需的變量已被高速緩沖存儲(chǔ)(124)。如果該CAM64表示一次命中,則不需要讀并且CAM64的內(nèi)容給出了在該CAM(126)中的變量的位置。此外,當(dāng)比上下文在其修改-寫階段變有效時(shí),變量的更新值將存入高速緩沖存儲(chǔ)器中,同時(shí)該上下文從CAM64(128)中直接讀出該值。
另一方面,如果CAM64表示在讀階段122期間的一次未命中,則開(kāi)始讀取所需變量(130)。因此。剩余7個(gè)上下文的執(zhí)行時(shí)間被用來(lái)完全隱藏該讀(132)的等待時(shí)間。而且,該變量在此上下文的修改-寫階段是可用的。由于如果最近被使用過(guò)則該變量在CAM64中已經(jīng)是有效的了,因此就避免了該關(guān)鍵部分的寫等待時(shí)間。接著,CAM被寫或更新(134)。CAM64的內(nèi)容為L(zhǎng)RU高速緩沖存儲(chǔ)器變量的位置,同時(shí)新的變量覆蓋先前使用的變量。
接著,上下文直接從CAM64(136)中讀出其值,并且該上下文返回到讀階段的開(kāi)始(122)。因此,每個(gè)可編程引擎或?yàn)榱艘粋€(gè)流水線階段,執(zhí)行包處理的特定任務(wù),同時(shí)監(jiān)視用以特定任務(wù)的上下文或變量。
上下文流水線操作參考圖6,一個(gè)上下文流水線130流程示出了被分配給一個(gè)包或者單元的處理任務(wù)的特定部分的可編程引擎16a-16h。該用以特定任務(wù)的上下文保留在使用了CAM64a-64c的可編程引擎16a-16h中。該包以一個(gè)流水線方式處理,其類似于使用NN寄存器54a-54c的裝配線來(lái)使數(shù)據(jù)從一個(gè)可編程引擎?zhèn)鞯胶竺媾R近的可編程引擎。數(shù)據(jù)從流水線的一個(gè)階段132a傳到后面的階段132b,并接著從階段132b傳到流水線的階段132c,諸如此類。換句話說(shuō),數(shù)據(jù)傳給流水線的下一階段,以使得處理步驟能在處理器中循環(huán)交替。特別地,當(dāng)一個(gè)指令被執(zhí)行時(shí),下一個(gè)指令能被取出,其意味著在任何時(shí)間在“管道”中都可以有超過(guò)一條的指令,且每個(gè)均在不同的處理階段。
例如,數(shù)據(jù)能從一個(gè)可編程引擎16向前傳送到下一個(gè)在流水線中使用于NN寄存器54a-54c的可編程引擎16。這種執(zhí)行流水線處理的方法的優(yōu)點(diǎn)是,包括在CAM64a-64C中的用于每階段132a-c的信息對(duì)流水線階段的所有8個(gè)上下文都是始終有效的。當(dāng)來(lái)自被處理的包的最小數(shù)據(jù)必須要優(yōu)先通過(guò)上下文流水線130時(shí),可以使用該上下文流水線方法。
其他實(shí)施例可以理解的是,雖然以上的實(shí)例已經(jīng)被詳細(xì)描述,但前面的描述只是例舉而并不限制本發(fā)明的范圍,本發(fā)明的范圍由所附權(quán)利要求的范圍加以限定。其他的方面,優(yōu)點(diǎn),和修改均在以下權(quán)利要求的范圍之內(nèi)。
權(quán)利要求
1.一種方法包括將用以包處理的任務(wù)分配給多個(gè)可編程引擎;建立相應(yīng)于多個(gè)可編程引擎的編程階段;和在編程階段間建立多個(gè)流水線。
2.如權(quán)利要求1的方法,進(jìn)一步包括在多個(gè)可編程引擎上建立用以分配任務(wù)的上下文。
3.如權(quán)利要求2的方法,其中建立用于分配的任務(wù)的上下文包括使用一個(gè)軟件控制的高速緩沖存儲(chǔ)器。
4.如權(quán)利要求3的方法,其中軟件控制的高速緩沖存儲(chǔ)器是一個(gè)內(nèi)容尋址存儲(chǔ)器(CAM)。
5.如權(quán)利要求1的方法,進(jìn)一步包括形成至少一個(gè)駐留在每個(gè)可編程引擎中的臨近寄存器。
6.如權(quán)利要求5的方法,其中建立多個(gè)流水線包括將數(shù)據(jù)從至少一個(gè)駐留在多個(gè)可編程引擎之一中的臨近寄存器轉(zhuǎn)移到駐留在與多個(gè)可編程引擎之一中的臨近的可編程引擎中的后續(xù)臨近寄存器。
7.如權(quán)利要求6的方法,其中一個(gè)可編程引擎保留有該流水線當(dāng)前操作的編程階段,而臨近可編程引擎保留有多個(gè)流水線的后續(xù)編程階段。
8.如權(quán)利要求1的方法,進(jìn)一步包括該多個(gè)可編程引擎在編程階段中使用的分配的任務(wù)中修改變量。
9.如權(quán)利要求8的方法,其中該變量是由該多個(gè)可編程引擎的編程階段使用的共享變量,并包括了用來(lái)定義共享變量的讀—修改—寫時(shí)間的關(guān)鍵部分。
10.如權(quán)利要求9的方法,進(jìn)一步包括定義一個(gè)通過(guò)在共享變量的關(guān)鍵部分和后續(xù)包到達(dá)時(shí)間之間的差所定義的編程階段的最小解,其中該關(guān)鍵部分少于后續(xù)包到達(dá)的時(shí)間。
11.如權(quán)利要求4的方法,其中該多個(gè)可編程引擎的每個(gè)同時(shí)執(zhí)行多個(gè)上下文。
12.如權(quán)利要求11的方法,其中該多個(gè)上下文順序執(zhí)行。
13.如權(quán)利要求12的方法,其中該順序包括一個(gè)讀階段和一個(gè)寫—修改階段。
14.如權(quán)利要求13的方法,其中CAM包括多個(gè)用以監(jiān)視最近最少被使用的變量的項(xiàng)。
15.如權(quán)利要求14的方法,其中讀階段包括確定CAM中的共享變量的高速緩沖存儲(chǔ)器狀態(tài),并且如果該共享變量在CAM中被高速緩沖存儲(chǔ)則更新用于該共享變量的值。
16.如權(quán)利要求14的方法,其中該讀階段在多個(gè)上下文中的至少一個(gè)中從本地存儲(chǔ)器讀出共享變量。
17.如權(quán)利要求16的方法,其中保留多個(gè)上下文通過(guò)執(zhí)行為處理包而分配的其他任務(wù),從而隱藏了讀的等待時(shí)間。
18.如權(quán)利要求16的方法,其中該共享的變量在CAM中被高速緩沖存儲(chǔ),并在多個(gè)上下文的至少一個(gè)中的修改—寫階段上處理是可用的。
19.一種處理器包括多個(gè)可編程引擎,包括分配給該多個(gè)可編程引擎的用于包處理的特定任務(wù);相應(yīng)于該多個(gè)可編程引擎的編程階段;在編程階段之間的多個(gè)流水線;和與該用于所分配任務(wù)的多個(gè)可編程引擎相應(yīng)的多個(gè)上下文。
20.如權(quán)利要求19的處理器,其中多個(gè)可編程引擎中的每個(gè)進(jìn)一步包括下一個(gè)臨近寄存器,用來(lái)將數(shù)據(jù)從駐留在最近執(zhí)行的可編程引擎中的下一個(gè)臨近寄存器轉(zhuǎn)移到駐留在臨近可編程引擎中的隨后的下一個(gè)臨近寄存器。
21.如權(quán)利要求20的處理器,其中該多個(gè)可編程引擎中的每個(gè)進(jìn)一步包括一個(gè)內(nèi)容尋址存儲(chǔ)器(CAM)。
22.如權(quán)利要求21的處理器,其中該CAM包括多個(gè)用以監(jiān)視最近最少被使用的變量的項(xiàng)。
23.如權(quán)利要求21的處理器,進(jìn)一步包括由該多個(gè)可編程引擎的編程階段使用的共享變量,該共享變量包括了用來(lái)定義共享變量的讀—修改—寫時(shí)間的關(guān)鍵部分。
24.如權(quán)利要求23的處理器,進(jìn)一步包括由在共享變量的關(guān)鍵部分和后續(xù)包的到達(dá)時(shí)間之間的差所定義的編程階段的最小解,其中該關(guān)鍵部分少于后續(xù)包的到達(dá)時(shí)間。
25.如權(quán)利要求21的處理器,其中該多個(gè)上下文按順序執(zhí)行,該順序包括一個(gè)讀階段和一個(gè)寫—修改階段,其中該讀階段包括在CAM中確定共享變量的高速緩沖存儲(chǔ)器狀態(tài)并且如果該共享變量在CAM中被高速緩沖存儲(chǔ)則更新用于共享變量的值,其中該讀階段在多個(gè)上下文的至少一個(gè)中從本地存儲(chǔ)器讀出共享變量。
全文摘要
本發(fā)明描述了一種基于硬件的并行多線程處理的方法。該方法包括將用以包括處理的任務(wù)分配給可編程引擎并在編程階段建立響應(yīng)可編程引擎的流水線。該方法還包括了建立用于可編程引擎上所分配的任務(wù)的上下文,并使用諸如CAM的軟件控制的高速緩沖存儲(chǔ)器以便在駐留在可編程引擎中的下一個(gè)臨近寄存器之間轉(zhuǎn)移數(shù)據(jù)。
文檔編號(hào)G06F15/76GK1820253SQ03802464
公開(kāi)日2006年8月16日 申請(qǐng)日期2003年1月16日 優(yōu)先權(quán)日2002年1月25日
發(fā)明者M·阿迪萊塔, D·伯恩斯坦恩, H·威爾金森, G·沃爾里奇, M·羅森布魯斯 申請(qǐng)人:英特爾公司