一種可控動(dòng)態(tài)多線程方法及處理器的制造方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種可控動(dòng)態(tài)多線程方法及處理器,所述方法是對(duì)一個(gè)采用流水線結(jié)構(gòu)的處理器,在其指令結(jié)構(gòu)中新增mark,該mark包含二部分信息:mark對(duì)應(yīng)指令所屬的線程以及mark對(duì)應(yīng)指令的優(yōu)先級(jí)信息;處理器根據(jù)mark控制其對(duì)應(yīng)指令,并根據(jù)mark中的線程及優(yōu)先級(jí)信息發(fā)射并執(zhí)行該指令。所述處理器至少包括一個(gè)含有mark的指令系統(tǒng)、一個(gè)能夠識(shí)別和跟蹤mark的程序執(zhí)行控制單元(Branch)、一個(gè)能夠識(shí)別mark并進(jìn)行解碼的指令解碼電路、一個(gè)能夠識(shí)別和解碼mark的算術(shù)運(yùn)算單元及相應(yīng)的內(nèi)存單元。本發(fā)明能夠動(dòng)態(tài)的調(diào)度一個(gè)處理器的所有運(yùn)算硬件資源從而提高處理器的運(yùn)算能力,且不需要增加很多復(fù)雜的硬件。
【專(zhuān)利說(shuō)明】
-種可控動(dòng)態(tài)多線程方法及處理器
技術(shù)領(lǐng)域
[0001 ] 本發(fā)明設(shè)及處理器領(lǐng)域,尤其設(shè)及一種可控動(dòng)態(tài)多線程方法(Dynamic Multi- t虹eading)及處理器。
【背景技術(shù)】
[0002] 為了提高處理器的運(yùn)算能力,很多并行處理技術(shù)被開(kāi)發(fā)出來(lái),如超標(biāo)量(Super- scalar),流水線(Pipeline).超長(zhǎng)寬指令(VLIW),單指令多執(zhí)行(SIMD),等等??墒牵捎谝?個(gè)軟件程序的指令處理是順序執(zhí)行的,其執(zhí)行過(guò)程中存在的指令及數(shù)據(jù)的依賴性 (dependencies)造成了處理器經(jīng)常的處于等待狀態(tài)因而限制了運(yùn)些并行處理技術(shù)效率的 發(fā)揮。
[0003] 為了克服指令執(zhí)行中的依賴性,一些提高指令發(fā)射效率的技術(shù),如亂序碼(Out- of-Order) , 控制程序預(yù)測(cè) (Branch Prediction) 等被開(kāi)發(fā)出來(lái) ,但是運(yùn)些技術(shù)都有其局限 性。它們或者是硬件非常復(fù)雜,或者是效率提高有限而不適合嵌入式系統(tǒng)的應(yīng)用。一個(gè)嵌入 式系統(tǒng),尤其是移動(dòng)設(shè)備,如移動(dòng)通信,車(chē)載設(shè)備,穿戴式設(shè)備等,對(duì)處理器性能的要求不僅 運(yùn)算能力要高,更要求功耗要低及實(shí)時(shí)性要強(qiáng)。
[0004] 多線程并行處理器技術(shù)(Multi-化reading),因?yàn)樗蒞在同一個(gè)處理器中并行 處理2個(gè)或多個(gè)完全獨(dú)立的運(yùn)算程序,因而可W比較好的解決指令執(zhí)行過(guò)程中的控制及數(shù) 據(jù)依賴性所帶來(lái)的運(yùn)行效率限制,其中同步多線程技術(shù)(Simultaneous Multi-threading) 及令牌驅(qū)動(dòng)多線程技術(shù)(Token Triggered multi-t虹eading,SMT)在一些處理器產(chǎn)品中得 到 了很好的應(yīng)用,比如Intel的Hyper-Threading, IBM的POWERS , Sun Microsystems的 叫化aSPARC Τ2及MIPS的MT都是采用了SMT技術(shù)。San化ridge的SaiKlblasterDSP核采用的是 令牌驅(qū)動(dòng)多線程技術(shù)。
[0005] SMT技術(shù)雖然能解決程序執(zhí)行過(guò)程中的依賴性問(wèn)題,SMT技術(shù)除了需要給每個(gè)線程 都有自己的一套執(zhí)行程序所需的寄存器外還要在每級(jí)的流水線加上線程跟蹤邏輯,增加共 享資源的尺寸,如指令Cache,化Bs等。其線程跟蹤邏輯不僅要跟蹤線程的行程還要檢查和 判斷該線程是否已執(zhí)行完成。由于會(huì)有大量的線程處于執(zhí)行或半執(zhí)行狀態(tài),因而CPU的 化ches及TLB的尺寸必須足夠大W避免不必要的線程之間的化rashing,其硬件的復(fù)雜程度 隨著線程數(shù)的增加而大大的增加因而限制了其很難應(yīng)用于嵌入式處理器及低功耗處理器 的設(shè)計(jì)。
[0006] 下表是一個(gè)典型的SMT多線程程序執(zhí)行過(guò)程:
令牌驅(qū)動(dòng)多線程是一種時(shí)分多線程,由于在每個(gè)時(shí)鐘周期內(nèi)它只能執(zhí)行同一個(gè)線程程 序的指令,因而相比SMT它的硬件復(fù)雜要簡(jiǎn)化很多,但是效率也跟著下降。其特點(diǎn)是: 1. 每個(gè)時(shí)鐘周期只有一個(gè)線程能發(fā)出指令; 2. 所有線程是順序啟動(dòng)如圖1所示,因而簡(jiǎn)化了線程選擇電路; 3. 每個(gè)線程都有相同的執(zhí)行指令的時(shí)鐘周期,不需要依賴檢查和繞行硬件; 4. 運(yùn)算結(jié)果能保證在下次的線程執(zhí)行之前就已經(jīng)得到。
[0007] 下表給出了令牌驅(qū)動(dòng)多線程的程序執(zhí)行過(guò)程:
'^但是由于令牌驅(qū)動(dòng)多線程處理器在規(guī)定的時(shí)鐘周期只能執(zhí)行特定的線程操作,因此如I 果在運(yùn)個(gè)時(shí)鐘周期,其指定的線程由于指令或數(shù)據(jù)的缺失(missing)或因?yàn)橐蕾囆远荒?發(fā)射指令時(shí),該時(shí)鐘周期就被浪費(fèi)了。為了克服令牌驅(qū)動(dòng)多線程運(yùn)個(gè)運(yùn)個(gè)缺陷,一個(gè)機(jī)會(huì)多 線程技術(shù)被開(kāi)發(fā)出來(lái)。
[0008] 機(jī)會(huì)多線程技術(shù)允許一個(gè)多線程處理器的一個(gè)線程在某一個(gè)的時(shí)鐘周期內(nèi)如果 沒(méi)有有效指令時(shí)不必HOLD運(yùn)個(gè)時(shí)鐘周期,而是將該時(shí)鐘周期讓給別的有有效指令的線程。 即將原來(lái)浪費(fèi)的時(shí)鐘周期作為一個(gè)"機(jī)會(huì)"讓給別的線程使用。
[0009] 采用該方法對(duì)一個(gè)具有多線程處理器來(lái)說(shuō),其線程不再受每個(gè)線程周期只能發(fā)一 次指令的限制,而是可W利用任何"機(jī)會(huì)"在每個(gè)時(shí)鐘周期都可W發(fā)射指令只要該時(shí)鐘周期 原始設(shè)定的線程在該時(shí)鐘周期內(nèi)沒(méi)有有效的指令。
[0010] 1.機(jī)會(huì)多線程技術(shù)和令牌驅(qū)動(dòng)多線程技術(shù)一樣,它是一種分時(shí)多線程技術(shù),每個(gè) 時(shí)鐘周期只能執(zhí)行一個(gè)程序。其可執(zhí)行的線程數(shù)受限于硬件的線程數(shù)。
[0011] 2.機(jī)會(huì)多線程需要一個(gè)指令預(yù)測(cè)電路,對(duì)于一個(gè)采用化IW結(jié)構(gòu)的處理器,它需要 對(duì)每一個(gè)子指令的依賴性進(jìn)行預(yù)測(cè)。因此指令預(yù)測(cè)電路相當(dāng)復(fù)雜。
[0012] 3.機(jī)會(huì)多線程技術(shù)需要一組2維的線程身份(ID)寄存器W用于跟蹤線程指令在 每級(jí)流水線的執(zhí)行情況W保證結(jié)果數(shù)據(jù)不會(huì)被搞混亂。
[0013] 4.實(shí)際應(yīng)用中,采用機(jī)會(huì)多線程的處理器的每個(gè)運(yùn)算單元必需為每個(gè)線程增加 一組2維的完全獨(dú)立于其他線程的數(shù)據(jù)寄存器W防止處于半執(zhí)行狀態(tài)的線程之間的數(shù)據(jù) Thr曰shingo
[0014] 5.為了能在每一個(gè)處理器的時(shí)鐘周期內(nèi)發(fā)射指令,線程所屬的指令內(nèi)存也必須 運(yùn)行在和處理器時(shí)鐘周期相同的時(shí)鐘頻率W保證線程能及時(shí)的讀取指令。由此,多線程的 一個(gè)能降低存儲(chǔ)器功耗的特點(diǎn)將不再存在。
[0015] W上分析可W看出采用機(jī)會(huì)多程序技術(shù)的處理器的硬件復(fù)雜度要比令牌驅(qū)動(dòng)多 線程技術(shù)增加很多,而且為了使每個(gè)線程能在每個(gè)時(shí)鐘周期都能讀取指令,其指令內(nèi)存的 時(shí)鐘頻率必須是和處理器的主振頻率一樣,運(yùn)樣處理器的功耗會(huì)明顯增加。因而機(jī)會(huì)多線 程技術(shù)并不適合應(yīng)用于低功耗嵌入式處理器設(shè)計(jì)。
[0016] 圖2是機(jī)會(huì)多線程的程序執(zhí)行示意圖。
【發(fā)明內(nèi)容】
[0017] 本發(fā)明所要解決的技術(shù)問(wèn)題是針對(duì)【背景技術(shù)】中所設(shè)及到的缺陷,提供一種可控動(dòng) 態(tài)多線程方法及處理器。
[001引本發(fā)明為解決上述技術(shù)問(wèn)題采用W下技術(shù)方案: 一種可控動(dòng)態(tài)多線程方法,對(duì)一個(gè)采用流水線結(jié)構(gòu)且具有I-cache的處理器,在其指 令結(jié)構(gòu)中新增mark,該mark包含二部分信息:mark對(duì)應(yīng)指令所屬的線程W及mark對(duì)應(yīng)指令 的優(yōu)先級(jí)信息,所述優(yōu)先級(jí)信息用于指明指令的執(zhí)行順序及與其前后指令的相關(guān)性;處理 器根據(jù)mark控制其對(duì)應(yīng)指令,按該指令的優(yōu)先級(jí)信息和所屬的線程發(fā)射并執(zhí)行該指令。
[0019] 作為本發(fā)明一種可控動(dòng)態(tài)多線程方法進(jìn)一步的優(yōu)化方案,所述處理器根據(jù)mark控 制其對(duì)應(yīng)指令、按該指令的優(yōu)先級(jí)信息和所屬的線程發(fā)射并執(zhí)行該指令的具體步驟如下: 步驟1),根據(jù)等待被執(zhí)行指令對(duì)應(yīng)mark中的優(yōu)先級(jí)信息讀取指令; 步驟2),指令解碼及分配: 處理器的解碼電路將步驟1)中所讀取的指令解碼為mark和各個(gè)子指令,處理器的分配 邏輯根據(jù)各個(gè)子指令的功能將其分配給不同的運(yùn)算單元去執(zhí)行; 步驟3),指令執(zhí)行: 對(duì)于各個(gè)子指令,處理器按照其所屬指令mark中的線程信息讀取相應(yīng)的寄存器的數(shù) 據(jù),并將執(zhí)行的結(jié)果存入相應(yīng)線程的寄存器; 步驟4),跳轉(zhuǎn)至步驟1)。
[0020] 根據(jù)具體的硬件實(shí)現(xiàn)方法,有時(shí)步驟1和2會(huì)需要多個(gè)時(shí)鐘周期,有時(shí)只需要1個(gè)時(shí) 鐘周期,步驟3)則需要n-1個(gè)時(shí)鐘周期,η為處理器運(yùn)算單元的流水線級(jí)數(shù)。
[0021] 作為本發(fā)明一種可控動(dòng)態(tài)多線程方法進(jìn)一步的優(yōu)化方案,所述步驟1)的詳細(xì)步驟 如下: 步驟1.1 ),處理器的指令讀取電路檢查I-化Che是否有指令被等待執(zhí)行,即是否存在處 于化lid狀態(tài)的指令; 步驟1.1.1),如果僅存在1個(gè)處于化lid狀態(tài)的指令,則讀取該指令; 步驟1.1.2),如果有2個(gè)W上的指令處于化1 id狀態(tài),則根據(jù)指令對(duì)應(yīng)的mark檢查哪一 條指令的優(yōu)先級(jí)高; 步驟1.1.2.1),如果存在優(yōu)先級(jí)高于其他指令的指令,則讀取該指令, 步驟1.1.2.2),如果不存在優(yōu)先級(jí)高于其他指令的指令,則判斷是否存在前一步執(zhí)行 的指令線程; 步驟1.1.2.2.1 ),如果存在前一步執(zhí)行的指令線程,讀取和前一步執(zhí)行的指令線程不 同的指令或根據(jù)線程的順序讀取指令; 步驟1.1.2.2.1 ),如果不存在前一步執(zhí)行的指令線程,根據(jù)線程的順序讀取指令。
[0022] 作為本發(fā)明一種可控動(dòng)態(tài)多線程方法進(jìn)一步的優(yōu)化方案,所述mark由軟件寫(xiě)入或 者編譯器在編譯過(guò)程中自動(dòng)寫(xiě)入。
[0023] 作為本發(fā)明一種可控動(dòng)態(tài)多線程方法進(jìn)一步的優(yōu)化方案,所述處理器為多指令發(fā) 射處理器,其每條指令都獨(dú)立帶有自己的mark。
[0024] 作為本發(fā)明一種可控動(dòng)態(tài)多線程方法進(jìn)一步的優(yōu)化方案,所述處理器為多指令發(fā) 射處理器,多條指令共用一組mark。
[0025] 作為本發(fā)明一種可控動(dòng)態(tài)多線程方法進(jìn)一步的優(yōu)化方案,所述處理器為單指令發(fā) 射處理器,其每條指令對(duì)應(yīng)一個(gè)mark。
[00%]本發(fā)明還公開(kāi)了一種基于該可控動(dòng)態(tài)多線程方法的處理器,至少包含一個(gè)mark的 指令系統(tǒng)、一個(gè)能夠識(shí)別和跟蹤mark的程序執(zhí)行控制單元、一個(gè)能夠識(shí)別mark并進(jìn)行解碼 的指令解碼電路、一個(gè)能夠識(shí)別和解碼mark的算術(shù)運(yùn)算單元及相應(yīng)的內(nèi)存單元。
[0027] 本發(fā)明采用W上技術(shù)方案與現(xiàn)有技術(shù)相比,具有W下技術(shù)效果: 1. 不需要復(fù)雜的多線程控制電路及復(fù)雜的指令有效預(yù)測(cè)電路就可W高效的調(diào)動(dòng)處理 器的硬件資源,有效的判斷指令的優(yōu)先級(jí)及相關(guān)性; 2. 根據(jù)指令的優(yōu)先級(jí)順序執(zhí)行指令而不用擔(dān)屯、因?yàn)槟承┲噶罨驍?shù)據(jù)的missing而造 成硬件資源的浪費(fèi)和出現(xiàn)運(yùn)算結(jié)果混亂的現(xiàn)象; 3. 有效的提高處理器的硬件資源的利用率,進(jìn)而降低功耗。
【附圖說(shuō)明】
[0028] 圖1是一個(gè)四線程的令牌驅(qū)動(dòng)多線程線程流程圖; 圖2是機(jī)會(huì)多線程程序執(zhí)行示意圖; 圖3是帶mark的單指令結(jié)構(gòu)圖; 圖4是多指令帶單個(gè)mark指令結(jié)構(gòu)圖; 圖5是多指令帶多mark指令結(jié)構(gòu)圖; 圖6是一個(gè)具有6級(jí)流水線的多線程執(zhí)行流程圖; 圖7是一個(gè)具有軟件可控動(dòng)態(tài)多線程功能的處理器框圖。
【具體實(shí)施方式】
[0029] 下面結(jié)合附圖對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)說(shuō)明: 本發(fā)明是在一個(gè)采用多級(jí)流水線結(jié)構(gòu)的處理器的指令系統(tǒng)中增加一組對(duì)應(yīng)指令的線 程身份和其優(yōu)先級(jí)信息的符號(hào)(mark)。處理器的指令系統(tǒng)在讀取(Fetch)指令的同時(shí)獲得 執(zhí)行該指令的線程身份W及其優(yōu)先級(jí)的信息的mark。處理器的指令控制運(yùn)算系統(tǒng)(Branch) 根據(jù)該mark的信息來(lái)安排處理器的硬件資源W及執(zhí)行順序。運(yùn)個(gè)mark將一直跟隨著指令 執(zhí)行的每一步w便于跟蹤該指令的執(zhí)行步驟,并根據(jù)優(yōu)先級(jí)信息指示該條指令與它前后的 指令/數(shù)據(jù)的依賴性W及優(yōu)先執(zhí)行的順序。
[0030] 本發(fā)明的mark的內(nèi)容可W是在程序員編程時(shí)根據(jù)應(yīng)用系統(tǒng)的要求而設(shè)定執(zhí)行該 程序指令的線程及執(zhí)行優(yōu)先級(jí),也可W是編譯器在編譯過(guò)程中自動(dòng)設(shè)定線程并根據(jù)程序的 運(yùn)算功能在判別該指令與其前后指令和數(shù)據(jù)的相關(guān)性來(lái)設(shè)定其優(yōu)先級(jí)。
[0031] 采用軟件設(shè)置程序的執(zhí)行線程并提供該程序中每條指令的優(yōu)先級(jí)和與其前后執(zhí) 行指令的相關(guān)性的信息附著在每一條指令上作為一個(gè)識(shí)別符(mark)。處理器硬件只需能夠 識(shí)別運(yùn)些mark的信息就可W實(shí)現(xiàn)動(dòng)態(tài)的調(diào)動(dòng)處理器的硬件資源并高效的執(zhí)行多線程的指 令運(yùn)行。
[0032] 采用軟件設(shè)置和管理多線程處理器的程序的執(zhí)行線程還可W使得同時(shí)運(yùn)行的線 程數(shù)不受處理器的發(fā)射指令數(shù)及流水線級(jí)數(shù)的限制。也可W避免因程序線程少于流水線而 造成的時(shí)鐘周期/硬件資源浪費(fèi)的現(xiàn)象。
[0033] 為實(shí)現(xiàn)軟件可控動(dòng)態(tài)多線程方法,其處理器的指令系統(tǒng)除了通常執(zhí)行程序的指令 字外還必須附加一組包含有線程號(hào)及優(yōu)先級(jí)信息的識(shí)別符作為一個(gè)mark附加在指令字中, 如圖3所示。圖中的mark是一個(gè)至少2位的2進(jìn)制數(shù)字。
[0034] W-個(gè)3位數(shù)的mark為例: 假設(shè)mark= "000";表示執(zhí)行該指令的線程是0,優(yōu)先級(jí)是0(0代表低優(yōu)先級(jí)) 假設(shè)mark="l〇r;表示執(zhí)行該指令的線程是1,優(yōu)先級(jí)是1(代表高優(yōu)先級(jí)) Mark的具體數(shù)值可W是程序員在編程時(shí)根據(jù)系統(tǒng)的要求設(shè)定該段程序的執(zhí)行線程及 優(yōu)先級(jí),也可W是編譯系統(tǒng)在編譯過(guò)程中根據(jù)程序的功能來(lái)自動(dòng)給出。
[0035] 本發(fā)明的軟件可控動(dòng)態(tài)多線程方法不僅可W用于單指令發(fā)射的處理器,也可W用 于多指令發(fā)射的處理器。
[0036] 對(duì)于一個(gè)多指令發(fā)射的處理器,其多發(fā)射指令可W共用一個(gè)mark信息,也可W每 條指令帶有一個(gè)自己的mark信息。
[0037] 圖3是一個(gè)單mark單指令的指令結(jié)構(gòu)。
[003引圖4是一個(gè)單mark多指令的指令結(jié)構(gòu);其中指令字l,2,,n必須是同一個(gè)線程程序 中的不同指令。單mark指令字的結(jié)構(gòu)只能執(zhí)行時(shí)分多線程處理。
[0039] 圖5給出的是多mark、多指令字的指令結(jié)構(gòu),圖中,Μ即代表Mark的意思;由于每個(gè) 指令字都有其自己的mark,所W運(yùn)些指令可W是不同線程的程序的指令。運(yùn)種多mark的指 令結(jié)構(gòu)可適用于同步多線程處理。
[0040] 本發(fā)明的動(dòng)態(tài)多線程方法的執(zhí)行步驟如下: 步驟1(或時(shí)鐘周期0)讀取指令:處理器的I-化Che讀取控制電路檢查是否有指令等待 執(zhí)行(Valid),如果有2個(gè)W上的指令Valid,(-個(gè)多線程的處理器的I-化che應(yīng)該至少有2 個(gè)或W上的Bank),則檢查哪一條指令的優(yōu)先級(jí)高,如果有就讀取優(yōu)先級(jí)高的指令,如果優(yōu) 先級(jí)一樣則讀取和前一步執(zhí)行的指令線程不同的指令或根據(jù)線程的順序讀取指令; 步驟2(或時(shí)鐘周期1)指令解碼及分配:解碼電路解碼指令1,指令2,指令3,分配邏輯再 根據(jù)解碼指令的功能分配給不同的運(yùn)算單元去執(zhí)行; 步驟3(或時(shí)鐘周期2~n+1)指令執(zhí)行:處理器按照mark中的線程信息讀取相應(yīng)的寄存 器的數(shù)據(jù),并將執(zhí)行的結(jié)果存入相應(yīng)線程的寄存器;W指令控制電路為例,根據(jù)mark的線程 信息按相應(yīng)的PC寄存器內(nèi)容順序執(zhí)行程序指令,并根據(jù)指令讀取相應(yīng)的線程的其他功能寄 存器(如loop counter, jump, condition等)數(shù)據(jù),并將執(zhí)行指令的結(jié)果再存入相應(yīng)的線 程的運(yùn)些寄存器; 運(yùn)里時(shí)鐘周期2~n+1中的η數(shù)值決定于處理器運(yùn)算單元的流水線級(jí)數(shù)。如果是一個(gè)4級(jí) 流水的結(jié)構(gòu),運(yùn)個(gè)η就等于4,如果是6級(jí)流水線結(jié)構(gòu),η就等于6; 步驟3的時(shí)鐘周期n+1執(zhí)行完后就再回到步驟1。
[0041] 由于本發(fā)明中的單mark多指令的動(dòng)態(tài)多線程結(jié)構(gòu)是一個(gè)時(shí)分多線程結(jié)構(gòu),因此當(dāng) 當(dāng)前程序運(yùn)行到步驟2(時(shí)鐘周期1)時(shí),處理器的I-化Che讀取控制電路在重復(fù)步驟1,即讀 取控制電路在檢查下一步的出現(xiàn)的指令的有效性(Valid)并根據(jù)Valid來(lái)決定讀取哪一個(gè) 線程的程序指令。
[0042] 當(dāng)當(dāng)前的程序執(zhí)行到步驟3時(shí)(時(shí)鐘周期2),I-Cache讀取控制電路仍然重覆步驟 1,根據(jù)指令的Valid信息讀取第Ξ組指令;而處理器的解碼分配電路則重覆執(zhí)行步驟2,解 碼和分配程序2的指令;如此周而復(fù)始。
[0043] 圖6給出了一個(gè)具有6級(jí)流水線(運(yùn)算單元)結(jié)構(gòu)的動(dòng)態(tài)多線程的執(zhí)行流程示意。圖 中: T-線程; Y-線程號(hào),y=〇,1,2,,,n;用于代表第y線程T;比如Τ(2)表示線程2; Υ的值是由指令字中的mark給出; i-相同線程在同一個(gè)指令周期內(nèi)的第i次發(fā)射;在運(yùn)個(gè)例子中一個(gè)指令周期等于6個(gè) 時(shí)鐘周期; J-流水線級(jí)數(shù); 比如T(32,4)代表線程3的第2次發(fā)射及其在流水線第4級(jí)時(shí)的狀態(tài)。
[0044] 運(yùn)里的流程圖的操作過(guò)程相當(dāng)上面所述的步驟3)。其中η等于6,即處理器已經(jīng)讀 取了指令并將指令解碼和分配給了相應(yīng)的處理單元。相應(yīng)的處理單元已經(jīng)得到了線程和優(yōu) 先級(jí)的?胃息。
[0045] -個(gè)動(dòng)態(tài)多線程的操作流程是:(假設(shè)程序0,1,2,,,5都是獨(dú)立的線程) 在時(shí)鐘周期零時(shí)C0(運(yùn)里的時(shí)鐘周期0相當(dāng)于前述的指令周期2):處理器的處理單元已 經(jīng)讀取指令并解碼出指令字的mark部分得到當(dāng)前指令的線程Υ,假設(shè)Υ=0,即線程0的程序的 指令,該指令就被授予線程Τ(Οο,ο)并從第零級(jí)流水線開(kāi)始執(zhí)行; 在時(shí)鐘周期一時(shí)C1:處理器讀取下一條指令并解碼出mark得到Υ=1,說(shuō)明該指令是線程 1的程序的指令,該指令被授予線程Τ(1〇,〇),并從第一級(jí)流水線開(kāi)始執(zhí)行,而運(yùn)時(shí)前條指令 已經(jīng)流水到第1級(jí)流水線,所W狀態(tài)變成T(Oo,i); 在時(shí)鐘周期二時(shí)C2:正常情況下處理器應(yīng)該讀取到線程2程序的指令即Υ=2,但是由于 某種原因,線程2的程序的指令missing,而出現(xiàn)線程0的程序的指令已經(jīng)準(zhǔn)備好,運(yùn)時(shí)處理 器會(huì)讀到指令的mark并解碼得到Υ=0如果解碼還得到優(yōu)先級(jí)等于1(即不需要等待線程0的 程序前一條指令的運(yùn)算結(jié)果),運(yùn)時(shí)處理器就開(kāi)始授權(quán)線程Τ(化,0)并開(kāi)始執(zhí)行該指令,順序 的,前面2條指令的狀態(tài)變成,Τ(Οο,2)和Τ( 1〇, 1); 在時(shí)鐘周期Ξ時(shí)C3:處理器讀取指令并解碼mark得到Υ=3,即授予該指令線程T(3g,〇)并 開(kāi)始執(zhí)行。運(yùn)時(shí)前面的指令執(zhí)行狀態(tài)順序變成T(〇G,3),T(U2)及T(0l,l); 在時(shí)鐘周期四時(shí)C4:處理器讀取指令并解碼mark得到Υ=4,即授予該指令線程Τ(4〇,〇)并 開(kāi)始執(zhí)行。運(yùn)時(shí)前面的指令執(zhí)行狀態(tài)順序變成了(0(),4),了(1(),3),1'(〇1,2)及1'(3〇,1); 在時(shí)鐘周期五時(shí)巧:處理器讀取指令并解碼mark得到Υ=5,即授予該指令線程T(5g,〇)并 開(kāi)始執(zhí)行。運(yùn)時(shí)前面的指令執(zhí)行狀態(tài)順序變成T(0g,5),T(1(),4),T(0i,3),T(3(),2^T(4(),2);S 此,一個(gè)指令周期結(jié)束,指令Τ(0〇)的運(yùn)算結(jié)果存入相應(yīng)的寄存器。
[0046] 從W上分析可W看出,采用軟件控制動(dòng)態(tài)多線程技術(shù),對(duì)于處理器來(lái)說(shuō)只需跟蹤 每條指令的T(Yi,j)便能夠有效的調(diào)動(dòng)硬件資源。而多線程的設(shè)置完全可W從系統(tǒng)的要求出 發(fā)靈活的調(diào)動(dòng)。
[0047] 圖7是一個(gè)化rvard結(jié)構(gòu)的,采用了軟件設(shè)置線程的動(dòng)態(tài)可控的多線程處理器邏輯 框圖。圖中的處理器的指令結(jié)構(gòu)是一個(gè)單marks指令字發(fā)射結(jié)構(gòu)。從圖中可W看到處理器 在指令字結(jié)構(gòu)中增加幾個(gè)比特的mark位外其他部分和一個(gè)典型的處理器結(jié)構(gòu)幾乎完全一 樣。Mark的信息需要傳送給所有的運(yùn)算單元。指令控制單元根據(jù)mark的線程及優(yōu)先級(jí)信息 控制指令的讀取及控制和跟蹤多線程的執(zhí)行狀態(tài),算術(shù)運(yùn)算單元?jiǎng)t是利用mark的信息來(lái)確 保該指令的運(yùn)算結(jié)果不會(huì)被搞混亂。
[004引本技術(shù)領(lǐng)域技術(shù)人員可W理解的是,除非另外定義,運(yùn)里使用的所有術(shù)語(yǔ)(包括技 術(shù)術(shù)語(yǔ)和科學(xué)術(shù)語(yǔ))具有與本發(fā)明所屬領(lǐng)域中的普通技術(shù)人員的一般理解相同的意義。還 應(yīng)該理解的是,諸如通用字典中定義的那些術(shù)語(yǔ)應(yīng)該被理解為具有與現(xiàn)有技術(shù)的上下文中 的意義一致的意義,并且除非像運(yùn)里一樣定義,不會(huì)用理想化或過(guò)于正式的含義來(lái)解釋。 [0049] W上所述的【具體實(shí)施方式】,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步 詳細(xì)說(shuō)明,所應(yīng)理解的是,W上所述僅為本發(fā)明的【具體實(shí)施方式】而已,并不用于限制本發(fā) 明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明 的保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1. 一種可控動(dòng)態(tài)多線程方法,其特征在于,對(duì)一個(gè)采用流水線結(jié)構(gòu)且具有I-cache的處 理器,在其指令結(jié)構(gòu)中新增mark,該mark包含二部分信息:mark對(duì)應(yīng)指令所屬的線程以及 mark對(duì)應(yīng)指令的優(yōu)先級(jí)信息,所述優(yōu)先級(jí)信息用于指明指令的執(zhí)行順序及與其前后指令的 相關(guān)性(dependencies);處理器根據(jù)mark控制其對(duì)應(yīng)指令,按該指令的優(yōu)先級(jí)信息和所屬 的線程發(fā)射并執(zhí)行該指令。2. 根據(jù)權(quán)利要求1所述的可控動(dòng)態(tài)多線程方法,其特征在于,所述處理器根據(jù)mark控制 其對(duì)應(yīng)指令、按該指令的優(yōu)先級(jí)信息和所屬的線程發(fā)射并執(zhí)行該指令的具體步驟如下: 步驟1 ),根據(jù)等待被執(zhí)行指令對(duì)應(yīng)mark中的優(yōu)先級(jí)信息讀取指令; 步驟2),指令解碼及分配: 處理器的解碼電路將步驟1)中所讀取的指令解碼為mark和各個(gè)子指令,處理器的分配 邏輯根據(jù)各個(gè)子指令的功能將其分配給不同的運(yùn)算單元去執(zhí)行; 步驟3),指令執(zhí)行: 對(duì)于各個(gè)子指令,處理器按照其所屬指令mark中的線程信息讀取相應(yīng)的寄存器的數(shù) 據(jù),并將執(zhí)行的結(jié)果存入相應(yīng)線程的寄存器; 步驟4),跳轉(zhuǎn)至步驟1)。3. 根據(jù)權(quán)利要求2所述的可控動(dòng)態(tài)多線程方法,其特征在于,所述步驟1)的詳細(xì)步驟如 下: 步驟1.1),處理器的指令讀取電路檢查I-Cache是否有指令被等待執(zhí)行,即是否存在處 于Valid狀態(tài)的指令; 步驟1.1.1),如果僅存在1個(gè)處于Valid狀態(tài)的指令,則讀取該指令; 步驟1.1.2),如果有2個(gè)以上的指令處于Valid狀態(tài),則根據(jù)指令對(duì)應(yīng)的mark檢查哪一 條指令的優(yōu)先級(jí)高; 步驟1.1.2.1 ),如果存在優(yōu)先級(jí)高于其他指令的指令,則讀取該指令, 步驟1.1.2.2),如果不存在優(yōu)先級(jí)高于其他指令的指令,則判斷是否存在前一步執(zhí)行 的指令線程; 步驟1.1.2.2.1),如果存在前一步執(zhí)行的指令線程,讀取和前一步執(zhí)行的指令線程不 同的指令或根據(jù)線程的順序讀取指令; 步驟1.1.2.2.1 ),如果不存在前一步執(zhí)行的指令線程,根據(jù)線程的順序讀取指令。4. 根據(jù)權(quán)利要求1所述的可控動(dòng)態(tài)多線程方法,其特征在于,所述mark由軟件寫(xiě)入或者 編譯器在編譯過(guò)程中自動(dòng)寫(xiě)入。5. 根據(jù)權(quán)利要求1所述的可控動(dòng)態(tài)多線程方法,其特征在于,所述處理器為多指令發(fā)射 處理器,其每條指令都獨(dú)立帶有自己的mark。6. 根據(jù)權(quán)利要求1所述的可控動(dòng)態(tài)多線程方法,其特征在于,所述處理器為多指令發(fā)射 處理器,多條指令共用一組mark。7. 根據(jù)權(quán)利要求1所述的可控動(dòng)態(tài)多線程方法,其特征在于,所述處理器為單指令發(fā)射 處理器,其每條指令對(duì)應(yīng)一個(gè)mark。8. 基于權(quán)利要求1所述的可控動(dòng)態(tài)多線程方法的處理器,其特征在于,至少包含一個(gè)帶 mar k的指令系統(tǒng)、一個(gè)能夠識(shí)別和跟蹤mar k的程序執(zhí)行控制單元、一個(gè)能夠識(shí)別mar k并進(jìn) 行解碼的指令解碼電路、一個(gè)能夠識(shí)別和解碼mark的算術(shù)運(yùn)算單元及相應(yīng)的內(nèi)存單元。
【文檔編號(hào)】G06F9/38GK105824605SQ201610272367
【公開(kāi)日】2016年8月3日
【申請(qǐng)日】2016年4月28日
【發(fā)明人】王生洪
【申請(qǐng)人】王生洪