專利名稱:多線程處理器及其指令執(zhí)行與同步方法及計算機程序產品的制作方法
技術領域:
本發(fā)明有關于一種指令執(zhí)行與同步的方法及相關的系統(tǒng),且特別有關于一種多線 程處理器的指令執(zhí)行與同步的方法及相關的系統(tǒng)。
背景技術:
近年來,隨著計算機技術的提升以及處理器技術的演進,具有多線程 (multi-thread)的處理器也開始廣泛地使用。多線程是指從軟件或者硬件上實現(xiàn)多個線程 的并行執(zhí)行的技術。具有多線程的處理/計算機系統(tǒng)因有硬件支持而能夠在同一時間執(zhí)行 多于一個線程,進而提升整體處理效能。一般來說,目前對于多線程的并行執(zhí)行僅采用基本的順序執(zhí)行來對每個線程進行 單獨控制,或者采用在指令中標識的方法來達到多指令并行處理的效果。在指令中標識的 方法中需要為每條指令均配置一預測暫存器,例如可以為每條指令加上一位的數(shù)據,由編 譯器(compiler)將其標識為1或0來決定是否跳過上述條指令。如此一來,需要復雜的控 制邏輯,除了對編譯器造成較大的負擔,也會增加硬件的復雜度。
發(fā)明內容
有鑒于此,本發(fā)明提供一種多線程處理器的指令執(zhí)行與同步的方法與裝置。本發(fā)明實施例的一種多線程處理器的指令執(zhí)行及同步方法。其中,多線程處理器 內運行多線程且多線程可同時執(zhí)行一指令序列。指令執(zhí)行及同步方法包括下列步驟。首先, 接收一原始碼或一目的碼。接著,編譯原始碼或目的碼,產生指令序列,其中指令序列中的 所有函數(shù)的指令依據一調用順序進行排序。之后,提供每一線程一計數(shù)值,每一計數(shù)值指向 指令序列中的一指令。最后,依據多線程的計數(shù)值,決定一主控計數(shù)值,致使多個線程同步 執(zhí)行指令序列中主控計數(shù)值所指向的指令。本發(fā)明實施例的一種多線程處理器,至少包括多個邏輯單元,其中每一邏輯單元 內運行多線程中的其中一線程且每一線程可同時執(zhí)行一指令序列。其中,每一邏輯單元具 有一計數(shù)值,每一計數(shù)值指向指令序列中的一指令。多線程處理器還包括一比較單元,依據 邏輯單元的計數(shù)值,決定一主控計數(shù)值,致使多個邏輯單元同步執(zhí)行指令序列中主控計數(shù) 值所指向的指令。本發(fā)明上述方法可以通過程序碼方式而存在。當程序碼被機器載入并執(zhí)行時,上 述機器就會變成用于實行本發(fā)明的裝置。本發(fā)明可以直接跳掉所有線程均不用執(zhí)行的函數(shù)段,得到較高的執(zhí)行效率,且無 需特定的控制器來對指令排序,可大大簡化硬件結構。
圖1顯示依據本發(fā)明實施例的多重指令處理器。圖2顯示表2的C語言原始碼所對應的一指令序列。
圖3顯示依據本發(fā)明實施例的多線程處理器的指令執(zhí)行及同步方法的流程圖。圖4顯示依據本發(fā)明實施例的一示范的計數(shù)值與暫存器內容的變化情形,用以說 明本案的多線程處理器的指令執(zhí)行及同步方法的實作方式。圖5顯示依據本發(fā)明實施例的多線程處理器的指令執(zhí)行及同步系統(tǒng)。
具體實施例方式為使本發(fā)明的上述目的、特征與優(yōu)點能更明顯易懂,下文特舉實施例,并配合所附 圖示,詳細說明如下。圖1顯示依據本發(fā)明實施例的多線程(multi-thread)處理器。依據本發(fā)明實施 例的多線程處理器100至少包括多個邏輯單元122 (例如運算邏輯單元(ALU)),其中每一邏 輯單元122內運行多線程中的其中一線程(thread),且這些線程可同時執(zhí)行同一指令序列 (instruction sequence)。其中,每一邏輯單元122具有一計數(shù)值124,每一計數(shù)值124指 向該指令序列中的一指令。具體來說,一邏輯單元的計數(shù)值124指向的指令為該邏輯單元 內運行的線程下一個將執(zhí)行的指令。于一實施例中,可為每個邏輯單元122配置一個暫存 器或程序計數(shù)器(program counter)來儲存其計數(shù)值。此外,多線程處理器100的每個邏 輯單元122還可配置一個暫存器(又稱狀態(tài)暫存器)126,用以儲存指令的執(zhí)行結果。注意 的是,雖然圖1僅標示了 4個邏輯單元122,但并非用以限定本發(fā)明僅止于此。換句話說,邏 輯單元122的個數(shù)可隨著實際需求增加或減少。多線程處理器100還包括一比較單元120,其可依據所有邏輯單元122的所 有計數(shù)值124,決定一主控計數(shù)值128,致使每一邏輯單元122同步執(zhí)行指令序列中 的主控計數(shù)值128所指向的指令。于一實施例中,該指令序列存儲于一指令緩沖器 (instructioncache) 130中,每一邏輯單元122均依據主控計數(shù)值128從指令緩沖器130中 取出主控計數(shù)值128所指向的一指令,并同步執(zhí)行該指令。于另一實施例中,比較單元120 可找出所有邏輯單元122的所有計數(shù)值124中的一最小計數(shù)值,并設定主控計數(shù)值128為 該最小計數(shù)值。注意的是,雖然圖1標示了計數(shù)值124與主控計數(shù)值128儲存于多線程處 理器100內部,但并非用以限定本發(fā)明僅止于此。換句話說,計數(shù)值124與主控計數(shù)值128 可隨著實際需求儲存于多線程處理器100內部或其外部。于一些實施例中,在每一邏輯單元122同步執(zhí)行指令序列中的主控計數(shù)值128所 指向的指令以后,邏輯單元122比較其計數(shù)值124與主控計數(shù)值128,并依據比較的結果,判 斷是否要將執(zhí)行的結果寫回其對應的暫存器126。若一邏輯單元122的計數(shù)值124與主控 計數(shù)值128相同,邏輯單元122將指令的執(zhí)行結果寫入其暫存器126中。若計數(shù)值124與 主控計數(shù)值128不相同,邏輯單元122則忽略此指令的此執(zhí)行結果或寫入一無效(USELESS) 標記至其暫存器126中。換句話說,當某一邏輯單元122的計數(shù)值124與主控計數(shù)值128 不相同時,邏輯單元122便不會將執(zhí)行結果寫回其暫存器126中。于一些實施例中,多線程處理器100還可提供每一邏輯單元一個旗標,并且可依 據每個邏輯單元122的計數(shù)值與主控計數(shù)值的比較結果來設定(例如將旗標設為1)或清 除旗標設定(例如將旗標設為0)。其中,當一邏輯單元122的計數(shù)值124與主控計數(shù)值128 相同時,其旗標被設定,而當邏輯單元122的計數(shù)值124與主控計數(shù)值128不相同時,其旗 標被清除。之后,再利用旗標來判斷是否要將執(zhí)行的結果寫回其對應的暫存器126。
于一些實施例中,當所有邏輯單元122內運行的多個線程在上述的原則下(舉例 而言,設定主控計數(shù)值128為所有計數(shù)值124中的一最小計數(shù)值)同步執(zhí)行相同指令時,為 了保證指令序列的所有指令都可以被執(zhí)行到,該多線程處理器100的編譯器(compiler)在 編譯該指令序列的原始碼或目的碼,產生該指令序列時,應保證該指令序列具有一指令執(zhí) 行順序。于一實施例中,該編譯器以該多線程處理器100的一驅動程序(driver)的形式實 現(xiàn)。于另一實施例中,多線程處理器100可包括一圖形處理器(Graphic Processing Unit, GPU),但不限于此。當多線程處理器100為一 GPU時,該指令序列又可稱為著色器的程序碼 (shadercode)0編譯器將指令序列中的所有函數(shù)依據一調用順序進行排序,致使指令序列中每一 被調用的函數(shù)(亦即子函數(shù))的指令可位于對應的一調用函數(shù)(亦即母函數(shù))的指令的前 面。關于如何將指令序列中的所有函數(shù)依據一調用順序進行排序的說明請參見表1。表1 顯示依據本發(fā)明實施例的一示范的程序碼的原始碼。如表1所示,原始碼200中包括函數(shù) A-E,且函數(shù)A中調用了函數(shù)B,C,D,而函數(shù)D中則進一步調用函數(shù)E。由于函數(shù)D調用了函 數(shù)E,因此函數(shù)E的指令于排序時會放在D的前面。類似地,函數(shù)B,C,D被函數(shù)A所調用, 因此,函數(shù)B,C,D的指令于排序時會放在A的前面。因此,于本實施例中,函數(shù)A-E的調用 順序為(E,B, C,D,A)。表1A (){B ();C ();D ();}B (){ ;}C() { ;}D() {E() ;}E (){ ;}接下來請參見表2與圖2。表2顯示依據本發(fā)明實施例的一示范的C語言原始碼, 圖2顯示表2的C語言原始碼經編譯器編譯后所產生的指令序列。于圖2中,行號表示執(zhí)行 的順序,程序碼表示編譯后的結果,而注解則用以說明上述指令所執(zhí)行的動作,其中行號愈 小的指令會愈早被執(zhí)行。如圖2所示,指令序列300包含了行號1-22的指令。參見表2,因 為CallFunction函數(shù)被Main函數(shù)所調用,因此,CallFunction函數(shù)的指令于指令序列300 中位于其對應的調用函數(shù)Main的指令的前面。換句話說,于指令序列300中,CallFunction 函數(shù)的指令(即圖2中行號2-3的指令)的行號小于Main函數(shù)的指令(即圖2中行號4_22 的指令)的行號。一般來說,指令序列300包括一主函數(shù)(即表2中的Main函數(shù)),并且主 函數(shù)設于指令序列300的最末端,以符合前述依據函數(shù)的調用順序進行排序的原則。表 2extern int a ;void CallFunction()
{a++ ;Return}void main(){intb ;a++ ;for(b = 0 ;b < 100 ;b++){If (a == 0){Do things ;Break ;}Else if (a ==1){CallFunction ();Break ;}Else if (a < 5){Do things 2 ;Break ;}Do things 3.}}于執(zhí)行時,多線程處理器100將依據指令序列300的行號順序依序執(zhí)行指令。由 于該指令序列300中每一被調用的函數(shù)的指令位于對應的一調用函數(shù)的指令的前面,保證 了多線程處理器100的多個邏輯單元122內運行的多個線程同時執(zhí)行所有計數(shù)值124中最 小計數(shù)值指向的指令時,指令序列300中所有函數(shù)的的指令都可以被執(zhí)行到。當然,指令序 列300指令執(zhí)行順序也可以按其它排序方式(例如每一被調用的函數(shù)的指令位于對應的一 調用函數(shù)的指令的后面,而多線程處理器100將依據指令序列300的行號逆序依序執(zhí)行指 令),相應地,比較單元120應找出所有邏輯單元122的所有計數(shù)值124中的一最大計數(shù)值, 并設定主控計數(shù)值128為該最大計數(shù)值。相應多線程處理器的指令執(zhí)行及同步方法將于后進行說明。圖3顯示依據本發(fā)明實施例的多線程處理器的指令執(zhí)行及同步方法的流程圖。請 同時參考圖1、表2、圖2與圖3進行說明。舉例來說,多線程處理器100可包括一圖形處理器(GraphicProcessing Unit, GPU),但不限于此。其中,多線程處理器100內運行多線程 且多個線程可同時執(zhí)行一指令序列(例如圖2所示的指令序列300)。首先,如步驟S402, 多線程處理器100的編譯器接收一原始碼(例如表2所示)或一目的碼,并如步驟S404, 編譯原始碼或目的碼,產生指令序列(例如圖2所示的指令序列300)。于此步驟中,當接 收到一原始碼時,編譯器先將原始碼進行編譯,再對編譯的結果依據一調用順序進行排序, 例如,使得指令序列中每一個被調用的函數(shù)的指令均安排在對應的一調用函數(shù)的指令的前 面,也就是說,編譯器會依據函數(shù)的調用順序,由高至低(主函數(shù)為最高層,主函數(shù)直接調 用的層次為次高層,依此類推),將指令序列中的指令在該指令緩沖器130或其它指令緩沖 器(未繪示)中依照下到上(亦即主函數(shù)設置于指令序列的最末端,主函數(shù)直接調用的函 數(shù)次的,依此類推)的順序排放指令。舉例來說,如表2與圖2所示,因為CallFimction函 數(shù)被Main函數(shù)所調用,因此,CallFimction函數(shù)的指令(即表2中行號2_3的指令)于指 令序列300中位于其對應的調用函數(shù)Main的指令(即表2中行號4_22的指令)的前面。當指令序列300產生之后,此指令序列300將被儲存于指令緩沖器130內,等待被 多線程處理器100執(zhí)行。其后,當欲執(zhí)行此指令序列時,如步驟S406,多線程處理器100提供每一個線程一 個計數(shù)值124,每一個計數(shù)值124指向指令序列300中的一指令。具體來說,每個計數(shù)值 124用以記錄其對應的邏輯單元122中的線程下一條應該執(zhí)行的指令的位置(例如指令 行號)。接著,如步驟S408,多線程處理器100可以依據所有多線程的計數(shù)值124,決定一主 控計數(shù)值128,并使得每一個線程同步執(zhí)行指令序列300中主控計數(shù)值128所指向的上述 指令。于一些實施例中,多線程處理器100決定主控計數(shù)值128的方法先找出所有計數(shù)值 124中的一最小計數(shù)值,再設定主控計數(shù)值128為此最小計數(shù)值。于決定主控計數(shù)值128之后,多線程處理器100可由指令緩沖器130中找出主控 計數(shù)值128所對應的指令,并分別發(fā)送此指令至所有線程中執(zhí)行。因此,所有線程將同步執(zhí) 行此指令,并且產生對應此指令的執(zhí)行結果。于一些實施例中,多線程處理器100可比較每一線程的計數(shù)值124與主控計數(shù)值 128,并依據比較的結果,判斷是否要將執(zhí)行的結果寫回其對應的暫存器126。若一線程的 計數(shù)值124與主控計數(shù)值128相同,多線程處理器100將指令的執(zhí)行結果寫入至此線程所 對應的邏輯單元122的暫存器126中。若線程的計數(shù)值124與主控計數(shù)值128不相同,多 線程處理器100則忽略此指令的此執(zhí)行結果或寫入一無效(USELESS)標記至線程所對應的 邏輯單元122的暫存器126中。換句話說,當某一線程的計數(shù)值124與主控計數(shù)值128不 相同時,多線程處理器100便不會將執(zhí)行結果寫回上述線程對應的邏輯單元122的暫存器 126 中。于一些實施例中,多線程處理器100還可提供每一線程一個旗標,并且可依據每 個線程的計數(shù)值與主控計數(shù)值的比較結果來設定(例如將旗標設為1)或清除旗標設定 (例如將旗標設為0)。其中,當一線程的計數(shù)值124與主控計數(shù)值128相同時,其旗標被設 定,而當線程的計數(shù)值124與主控計數(shù)值128不相同時,其旗標被清除。之后,再利用旗標 來判斷是否要將執(zhí)行的結果寫回其對應的暫存器126。以下列舉一實施例,用以輔助說明依據本發(fā)明的指令執(zhí)行及同步方法細節(jié),但本 發(fā)明并不限于此。圖4顯示依據本發(fā)明實施例的一示范的計數(shù)值與暫存器內容的變化情形,用以說明本案的多線程處理器的指令執(zhí)行及同步方法的實作方式。請同時參考圖1、圖 2、圖3與圖4進行說明。于本實施例中,假設多線程處理器100的4個邏輯單元122同時 有4個線程A、B、C與D正在執(zhí)行圖2的指令序列300且線程A、B、C與D的變數(shù)a的初始 值分別為1、2、3、0。如圖4所示,PC_A、PC_B、PC_C以及PC_D分別表示4個線程A、B、C與 D所對應的計數(shù)值,PC表示主控計數(shù)值,而A_status、B_status、C_status以及D_status 分別表示4個線程A、B、C與D所對應的暫存器所儲存的內容。舉例來說,于標號510的行 中,PC_A、PC_B、PC_C以及PC_D均為1,此時主控計數(shù)值PC為1,表示4個線程A-D均執(zhí)行 行號1的指令“JMP4”,因此A_status、B_status、C_status以及D_status所儲存的內容均 為“JMP 4”。于圖4的標號520的行中,PC_A、PC_B以及PC_C均為15,PC_D為13,此時主 控計數(shù)值PC被設定為PC_A、PC_B、PC_C&PC_D中的最小值,即13,表示4個線程A-D均執(zhí) 行行號13的指令“JMP 2”。然而,由于只有PC_D的值與PC的值相同,因此,D_status所儲 存的內容為“JMP 2”。此時,因PC_A、PC_B以及PC_C均與PC的值不相同,因此,A_status、 B.status以及C_status中將不儲存執(zhí)行結果或儲存的內容均為無效(“Useless”)。類似地,于圖4的標號530的行中,PC_A、PC_B以及PC_C均為15,PC_D為22,此 時主控計數(shù)值PC被設定為PC_A、PC_B、PC_C及PC_D中的最小值,即15,表示4個線程A-D 均執(zhí)行行號15的指令“a < 5 ? ”。然而,由于PC_A、PC_B以及PC_C的值與PC的值相同, 因此,A_status、B_status以及C_statu所儲存的內容為“a < 5 ? ”。此時,因PC_D與PC 的值不相同,因此,D_StatuS中將不儲存執(zhí)行結果或儲存的內容為“Useless”。于圖4的標號540的這些行中,PC_A、PC_B以及PC_C均為15,PC_D為2或3,此時 主控計數(shù)值PC被設定為PC_A、PC_B、PC_C及PC_D中的最小值,即2或3,表示4個線程A-D 均執(zhí)行行號2的指令“a++”(即執(zhí)行被Main函數(shù)調用的CallFimction函數(shù)),或者均執(zhí)行行 號3的指令“ JMP 14”。由于CallFunction函數(shù)的行號小于Main函數(shù),因此CallFunction 函數(shù)的指令才能在最小行號優(yōu)先的指令選取原則下被執(zhí)行到。圖5顯示依據本發(fā)明實施例的多線程處理器的指令執(zhí)行及同步系統(tǒng)。多線程處理 器的指令執(zhí)行及同步系統(tǒng)600可執(zhí)行多線程處理器100的指令執(zhí)行及同步方法,其中多線 程處理器100內運行多個線程且上述多線程可同時執(zhí)行同一指令序列,多線程處理器的指 令執(zhí)行及同步系統(tǒng)600包括第一程序碼610,用以得到如表2所示的原始碼或目的碼,于 一實施例中,第一程序碼610以該系統(tǒng)的應用程序層的一應用程序實現(xiàn);第二程序碼620, 用以編譯第一程序碼610得到的原始碼或目的碼,產生如圖2所示的指令序列300,其中于 指令序列300中每一被調用的函數(shù)位于對應的一調用函數(shù)的前面,于一實施例中,第二程 序碼620以該系統(tǒng)的驅動程序層的多線程處理器100的一驅動程序實現(xiàn);第三程序碼630, 提供每一線程一計數(shù)值,每一計數(shù)值指向指令序列300中的一指令,依據每一線程的計數(shù) 值,決定一主控計數(shù)值,致使每一線程同步執(zhí)行指令序列中主控計數(shù)值所指向的指令,于一 實施例中,第三程序碼630以該系統(tǒng)的硬件層的多線程處理器100的硬件代碼實現(xiàn)。因此,通過本案的多線程處理器的指令執(zhí)行及同步方法與系統(tǒng),利用對編譯結果 的特定排序方式以及對執(zhí)行中的線程的最小行號優(yōu)先的指令選取原則,可以直接跳掉所有 線程均不用執(zhí)行的函數(shù)段(例如圖4的標號550的這些行,使得4個線程A-D均跳過行號 9和10的指令),得到較高的執(zhí)行效率。此外,由于本案的多線程處理器的指令執(zhí)行及同步 方法采用最小行號原則來決定所有線程要執(zhí)行的下一個指令,因此無需特定的控制器來對指令排序,可大大簡化硬件結構。并且,所有線程都同步執(zhí)行指令序列中的相同指令,這樣 便于完成需要所有線程同步執(zhí)行的工作。再者,本案的多線程處理器的指令執(zhí)行及同步方 法除了可用在圖形處理器上之外,也可用在其他具有多線程的系統(tǒng)架構中,例如采用圖形 處理器作為處理單元的協(xié)同處理器架構中或x86平臺的處理器的通用計算中。本發(fā)明的方法或特定型態(tài)或其部份,可以以程序碼的型態(tài)存在。程序碼可以包含 于實體介質,如軟盤、光盤片、硬盤、或是任何其他機器可讀取(如計算機可讀取)儲存介 質,亦或不限于外在形式的計算機程序產品,其中,當程序碼被機器,如計算機載入且執(zhí)行 時,此機器變成用以參與本發(fā)明的裝置。程序碼也可以通過一些傳送介質,如電線或電纜、 光纖或是任何傳輸型態(tài)進行傳送,其中,當程序碼被機器,如計算機接收、載入且執(zhí)行時,此 機器變成用以參與本發(fā)明的裝置。當在一般用途處理單元實作時,程序碼結合處理單元提 供一操作類似于應用特定邏輯電路的獨特裝置。以上所述僅為本實用新型較佳實施例,然其并非用以限定本實用新型的范圍,任 何熟悉本項技術的人員,在不脫離本實用新型的精神和范圍內,可在此基礎上做進一步的 改進和變化,因此本實用新型的保護范圍當以本申請的權利要求書所界定的范圍為準。附圖中符號的簡單說明如下100 多線程處理器120:比較單元122 邏輯單元124 計數(shù)值126 暫存器128 主控計數(shù)值130 指令緩沖器300 指令序列S402-S408 步驟。
權利要求
一種多線程處理器的指令執(zhí)行及同步方法,其特征在于,上述多線程處理器內運行多個線程且上述線程能同時執(zhí)行一指令序列,上述指令執(zhí)行及同步方法包括下列步驟接收一原始碼或一目的碼;編譯上述原始碼或上述目的碼,產生上述指令序列,其中上述指令序列中的所有函數(shù)的指令依據一調用順序進行排序;提供每一上述線程一計數(shù)值,每一上述計數(shù)值指向上述指令序列中的一指令;以及依據每一上述線程的上述計數(shù)值,決定一主控計數(shù)值,致使上述線程同步執(zhí)行上述指令序列中上述主控計數(shù)值所指向的指令。
2.根據權利要求1所述的多線程處理器的指令執(zhí)行及同步方法,其特征在于,還包括比較上述線程中的一線程的計數(shù)值與上述主控計數(shù)值;若上述線程中的該線程的計數(shù)值與上述主控計數(shù)值相同,將上述主控計數(shù)值所指向的 指令的一執(zhí)行結果寫入至上述線程中的該線程所對應的一暫存器中;以及若上述線程中的該線程的計數(shù)值與上述主控計數(shù)值不相同,忽略上述主控計數(shù)值所指 向的指令的上述執(zhí)行結果或寫入一無效標記至上述線程中的該線程所對應的上述暫存器 中。
3.根據權利要求1所述的多線程處理器的指令執(zhí)行及同步方法,其特征在于,上述依 據上述計數(shù)值,決定上述主控計數(shù)值的步驟還包括找出上述計數(shù)值中的一最小計數(shù)值;以及設定上述主控計數(shù)值為上述最小計數(shù)值。
4.根據權利要求3所述的多線程處理器的指令執(zhí)行及同步方法,其特征在于,上述指 令序列的指令進行排序后,于上述指令序列中每一被調用的函數(shù)的指令位于對應的一調用 函數(shù)的指令的前面。
5.一種多線程處理器,其特征在于,包括多個邏輯單元,其中每一上述邏輯單元內運行多個線程中的其中一線程且上述多個線 程能同時執(zhí)行一指令序列,其中每一上述邏輯單元具有一計數(shù)值,每一上述計數(shù)值指向上 述指令序列中的一指令;以及一比較單元,依據上述邏輯單元的上述計數(shù)值,決定一主控計數(shù)值,致使上述邏輯單元 同步執(zhí)行上述指令序列中上述主控計數(shù)值所指向的指令。
6.根據權利要求5所述的多線程處理器,其特征在于,每一邏輯單元還包括一暫存器, 并且上述多個邏輯單元中的一邏輯單元比較其計數(shù)值與上述主控計數(shù)值,若上述多個邏輯 單元中的該邏輯單元的計數(shù)值與上述主控計數(shù)值相同,將上述主控計數(shù)值所指向的指令對 應的一執(zhí)行結果寫入至上述多個邏輯單元中的該邏輯單元的暫存器中,若上述多個邏輯單 元中的該邏輯單元的計數(shù)值與上述主控計數(shù)值不相同,上述多個邏輯單元中的該邏輯單元 忽略上述主控計數(shù)值所指向的指令的上述執(zhí)行結果或寫入一無效標記至上述多個邏輯單 元中的該邏輯單元的暫存器中。
7.根據權利要求6所述的多線程處理器,其特征在于,每一上述邏輯單元還具有一旗 標,并且上述多個邏輯單元中的該邏輯單元依據其計數(shù)值與上述主控計數(shù)值的比較結果, 設定或清除其旗標,其中當上述多個邏輯單元中的該邏輯單元的計數(shù)值與上述主控計數(shù)值 相同時,上述多個邏輯單元中的該邏輯單元設定其旗標,而當上述多個邏輯單元中的該邏輯單元的計數(shù)值與上述主控計數(shù)值不相同時,上述多個邏輯單元中的該邏輯單元清除其旗 標。
8.根據權利要求5所述的多線程處理器,其特征在于,上述比較單元找出上述計數(shù)值 中的一最小計數(shù)值,并設定上述主控計數(shù)值為上述最小計數(shù)值。
9.根據權利要求8所述的多線程處理器,其特征在于,上述指令序列中每一被調用的 函數(shù)的指令位于對應的一調用函數(shù)的指令的前面。
10.根據權利要求5所述的多線程處理器,其特征在于,還包括一指令緩沖器,并且上 述邏輯單元從上述指令緩沖器中找出上述主控計數(shù)值所對應的指令,且該對應的指令被分 別發(fā)送至上述邏輯單元中執(zhí)行。
11.根據權利要求5所述的多線程處理器,其特征在于,上述多線程處理器包括一圖形 處理器。
12.—種計算機程序產品,其特征在于,其被一機器載入以執(zhí)行一多線程處理器的指令 執(zhí)行及同步方法,其中上述多線程處理器內運行多個線程且上述多個線程能同時執(zhí)行一指 令序列,上述計算機程序產品包括一第一程序碼,用以得到一原始碼或一目的碼;一第二程序碼,用以編譯上述原始碼或上述目的碼,產生上述指令序列,其中于上述指 令序列中每一被調用的函數(shù)位于對應的一調用函數(shù)的前面;一第三程序碼,提供每一上述線程一計數(shù)值,每一上述計數(shù)值指向上述指令序列中的 一指令,依據每一上述線程的上述計數(shù)值,決定一主控計數(shù)值,致使上述線程同步執(zhí)行上述 指令序列中上述主控計數(shù)值所指向的指令。
全文摘要
一種多線程處理器及其指令執(zhí)行與同步方法及計算機程序產品。其中,多線程處理器內運行多個線程且多線程可同時執(zhí)行一指令序列。首先,接收一原始碼或一目的碼。接著,編譯原始碼或目的碼,產生指令序列,其中指令序列中的所有函數(shù)的指令依據一調用順序進行排序。之后,提供每一線程一計數(shù)值,每一計數(shù)值指向指令序列中的一指令。最后,依據多線程的計數(shù)值,決定一主控計數(shù)值,致使所述多個線程同步執(zhí)行指令序列中主控計數(shù)值所指向的指令。本發(fā)明可以得到較高的執(zhí)行效率,且無需特定的控制器來對指令排序,可大大簡化硬件結構。
文檔編號G06F9/38GK101980147SQ20101053188
公開日2011年2月23日 申請日期2010年11月4日 優(yōu)先權日2010年11月4日
發(fā)明者張彥剛 申請人:威盛電子股份有限公司