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