欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

處理器、編譯裝置與編譯方法、存儲介質(zhì)的制作方法

文檔序號:6593476閱讀:251來源:國知局
專利名稱:處理器、編譯裝置與編譯方法、存儲介質(zhì)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及處理器、編譯裝置以及編譯方法,特別是在并行處理中,通過有效地利用運算器,實現(xiàn)性能提高的技術(shù)。
背景技術(shù)
伴隨著近年的微處理器應(yīng)用產(chǎn)品的高功能化和高速化,就要求具有高處理性能的微處理器(以下,稱作“處理器”)。一般為了提高各指令的效率,采用了把一個指令分割為幾個處理單位(這里稱作“階段”),通過用各自的硬件執(zhí)行各步驟,能并行處理多個指令的管道(pipeline)方式。另外,在管道方式那樣的空間上并行處理的基礎(chǔ)上,在時間上,采用進(jìn)行指令水平的并行處理的VLIW(Very Long Instruction Word)方式和超標(biāo)量體系結(jié)構(gòu)方式,能提高性能。
作為妨礙處理器的性能提高的一個主要原因有分支處理的系統(tǒng)開銷(overhead)。該系統(tǒng)開銷中,所述管道處理的階段數(shù)越多,指令供給的懲罰就越大。另外,當(dāng)進(jìn)行指令并行處理時,越提高并行度,分支指令的頻率就越多,系統(tǒng)開銷就越顯著。
這里,作為解決系統(tǒng)開銷的以往的技術(shù),有在各指令中附加表示執(zhí)行條件的信息,只當(dāng)該條件成立時,執(zhí)行指令表示的操作的條件執(zhí)行方式。在該方式下,在執(zhí)行時,參照附加在各指令中的執(zhí)行條件所對應(yīng)的條件標(biāo)志,當(dāng)條件不成立時,使該指令的執(zhí)行結(jié)果無效化,即作為無動作指令執(zhí)行。
例如,如果用在指令中附加表示執(zhí)行條件的信息的方式記述包含圖10所示的條件分支的流程的處理,就成為圖11那樣的程序。在圖11中,C0、C1表示附加在指令中的條件,當(dāng)與它對應(yīng)的條件標(biāo)志的值為真時,執(zhí)行了該指令,當(dāng)為假時,把該指令作為無動作指令執(zhí)行。在該例子中,首先把指令1(比較指令)的比較結(jié)果存儲在C0中。語詞同時,在C1中設(shè)置與C0相反的條件。因此,關(guān)于指令2和指令3中的任意一方,實際執(zhí)行了操作,剩下的一方作為無動作指令執(zhí)行。結(jié)果,不需要分支處理,解決了分支處理的系統(tǒng)開銷。

發(fā)明內(nèi)容
在所述的以往的條件執(zhí)行方式中,當(dāng)條件不成立時,該指令作為無動作指令工作,實質(zhì)上不執(zhí)行操作。因此,盡管并行記述了兩個指令,使用了兩個運算器,實際上只有效利用了一個運算器。結(jié)果,對于在程序中記述的并行度,存在有效性能下降的問題。
本發(fā)明是鑒于所述問題而提出的,其目的在于提供一種能實現(xiàn)硬件的有效利用、使性能提高的處理器、編譯裝置與編譯方法、存儲介質(zhì)。
本發(fā)明目的實現(xiàn)如下——(1)一種處理器,其中,包括如下各單元指令提供單元——用于提供多個指令,和解碼單元——用于分別把所述多個指令進(jìn)行解碼,和指令發(fā)出控制單元——參照用執(zhí)行條件信息指定的條件,決定執(zhí)行有效操作的指令或指令的集合,執(zhí)行條件信息是在所述多個指令中指定表示是否執(zhí)行各指令的信息,及執(zhí)行單元——根據(jù)指定執(zhí)行一個或多個操作,所述指定是指在所述多個指令中指定各指令的動作;指令發(fā)出控制單元具有以下功能通過參照用執(zhí)行條件信息指定的條件,判斷是有必要執(zhí)行的有效指令還是沒有必要執(zhí)行的無效指令,對于判斷為是無效指令的指令,通過控制使得該指令在被向所述執(zhí)行單元發(fā)出前被刪除,并且還通過控制使得該指令被該指令的后續(xù)有效指令所取代,向所述執(zhí)行單元發(fā)出。
據(jù)此,即使當(dāng)條件指令的條件不成立時,也不執(zhí)行無動作指令,后續(xù)的指令有效地利用了執(zhí)行部件中的運算器,所以運算器的使用率提高,能提高有效性能。
(2)所述執(zhí)行單元可具有在執(zhí)行與所述指令對應(yīng)的操作后用于使執(zhí)行結(jié)果無效化的執(zhí)行結(jié)果無效化單元,還可包括指令無效化方法選擇單元——對于各指令,選擇是在向所述執(zhí)行單元發(fā)出前刪除該指令自身,還是用所述執(zhí)行結(jié)果無效化單元使執(zhí)行結(jié)果無效。
由此,當(dāng)執(zhí)行條件判定中使用的條件標(biāo)志為未確定時,沒有必要停止處理器的管道,從而能提高性能。
(3)所述指令無效化方法選擇單元可通過參照表示各條件標(biāo)志的值是否確定的條件標(biāo)志有效信息,決定選擇哪個指令無效化方法;所述條件標(biāo)志有效信息中,當(dāng)所述解碼單元解碼為是更新條件標(biāo)志的指令時,該條件標(biāo)志的確定性設(shè)置為假,而當(dāng)用所述執(zhí)行單元執(zhí)行該指令、該條件標(biāo)志的值確定了時,設(shè)置為真。
(4)所述指令發(fā)出控制單元還可具有以下功能檢測能用單一的指令實現(xiàn)多個指令的功能的指令組合,從而進(jìn)行結(jié)合,把這些個指令作為單一的指令處理。據(jù)此,能用單一的運算器執(zhí)行原來打算使用多個運算器的指令,從而提高了運算器的使用率,能提高有效性能。
(5)所述多個指令的結(jié)合可適用于向所述執(zhí)行單元發(fā)出前刪除指令以后才被適用。
(6)還可以這樣所述指令發(fā)出控制單元,當(dāng)在各周期中連續(xù)配置了具有相同的所述執(zhí)行條件信息的指令時,預(yù)先把由所述解碼單元解碼的多個指令按各執(zhí)行條件分類,按該分類參照條件標(biāo)志來判斷是有必要執(zhí)行的有效指令還是沒有必要執(zhí)行的無效指令。據(jù)此,能把條件標(biāo)志的參照抑制在最小限度,能削減指令的消除判定所需的時間。
(7)在所述多個指令中,可指定表示是否為各指令并行執(zhí)行的邊界的并行執(zhí)行邊界信息,所述指令發(fā)出控制單元還可具有如是功能參照各指令的所述并行執(zhí)行邊界信息,檢測出在當(dāng)前周期中為執(zhí)行對象的指令群。
(8)還可以這樣所述指令發(fā)出控制單元,當(dāng)用指令內(nèi)的并行執(zhí)行邊界信息檢測的邊界指令以前的所有指令作為沒有必要執(zhí)行的無效指令被刪除時,使該邊界指令的并行執(zhí)行邊界信息無效化,通過參照該邊界指令以后的并行執(zhí)行邊界信息,檢測當(dāng)前周期的新的并行執(zhí)行邊界。據(jù)此,當(dāng)消除了配置在某周期中的全部指令時,能跳過該周期自身,執(zhí)行下一周期的指令,所以能削減執(zhí)行周期數(shù)。
(9)一種處理器,其中,包括如下各單元指令提供單元——用于提供多個指令,和解碼單元——用于分別把所述多個指令進(jìn)行解碼,和指令發(fā)出控制單元——決定執(zhí)行有效操作的指令或指令的集合,及執(zhí)行單元——根據(jù)指定執(zhí)行一個或多個操作,所述指定是指在所述多個指令中指定各指令的動作;指令發(fā)出控制單元具有以下功能從用所述解碼單元解碼的指令群中,檢測出能用單一的指令實現(xiàn)多個指令的功能的指令組合,進(jìn)行結(jié)合,把這些個指令作為單一的指令處理。
據(jù)此,能用單一的運算器執(zhí)行原來打算使用多個運算器的指令,從而提高了運算器的使用率,能提高有效性能。
(10)所述指令發(fā)出控制單元還可具有以下功能檢測出在當(dāng)前周期中未成為執(zhí)行對象、刪除對象、結(jié)合對象而剩下的指令群,進(jìn)行控制使這些指令群在下一周期以后成為發(fā)出對象。據(jù)此,即使由于例外的發(fā)生和編譯裝置的不良,在某周期中存在未被發(fā)出而殘留的指令,也不會引起錯誤動作,能繼續(xù)正確的執(zhí)行。
(11)一種編譯裝置,用于把用高級語言記述的程序的源代碼變換為執(zhí)行形式代碼,其中,具有用于把所述源代碼中的指令重新排列、使應(yīng)該并行執(zhí)行的指令相鄰的多個指令安排單元;所述指令安排單元包括如下各單元條件排他性解析單元——對于執(zhí)行附加在各指令中的有效操作的條件,解析各條件可否同時成立,及指令再配置單元——進(jìn)行指令的重新配置,使得可按周期中區(qū)分并行執(zhí)行的指令的集合;所述指令再配置單元,判定一下配置在當(dāng)前周期中的指令中執(zhí)行有效操作的指令使用的運算資源是否超出搭載在對象儀器上的運算器的限制,并且當(dāng)判定為配置在當(dāng)前周期中的兩個指令的執(zhí)行條件在所述條件排他解析單元中不能同時成立時,在一定的條件下,只把任意一方的指令作為使用運算資源的指令處理。
據(jù)此,考慮指令的消除,能在一個周期中配置搭載的運算器的個數(shù)以上數(shù)量的指令,從而能提高有效性能。
(12)所述指令再配置單元,即使當(dāng)配置在當(dāng)前周期中的兩個指令的執(zhí)行條件在所述條件排他性解析單元中判定為不會同時成立時,只要所述指令中的至少一方指令的執(zhí)行條件所對應(yīng)的條件標(biāo)志的內(nèi)容不確定,也作為所述兩個指令雙方使用運算資源處理。據(jù)此,能考慮條件判定中使用的條件標(biāo)志未確定的狀態(tài),沒有必要在硬件中停止管道,能保證正確的作業(yè)。
(13)所述指令再配置單元,根據(jù)當(dāng)前周期的前一周期中,是否配置了更新所述兩個指令的至少一方指令的執(zhí)行條件所對應(yīng)的條件標(biāo)志的指令,判定條件標(biāo)志的內(nèi)容是否確定。
(14)所述指令再配置單元,根據(jù)所述條件排他性解析單元的分析結(jié)果,對于執(zhí)行條件不會同時成立的指令,處理為只有一方使用運算資源,并且檢測出能用單一的指令實現(xiàn)使用運算資源的多個指令的功能的指令組合,把這些多個指令結(jié)合,作為單一指令處理。據(jù)此,考慮指令消除和結(jié)合,能在一個周期中配置搭載的運算器的個數(shù)以上數(shù)量的指令,從而能提高有效性能。
(15)所述指令再配置單元還具有以下功能對于在當(dāng)前周期中判定為可配置的指令的集合,調(diào)整配置順序,使具有相同的執(zhí)行條件的指令連續(xù)配置。據(jù)此,能把用硬件判定要消除的指令時的條件標(biāo)志的參照抑制在最低限度,從而取得了簡化硬件的效果。
(16)所述指令再配置單元,當(dāng)選擇當(dāng)前周期中配置的指令時,優(yōu)先選擇多個執(zhí)行條件中具有特定的執(zhí)行條件的指令。據(jù)此,能生成最適于頻率高的特定的執(zhí)行路徑的代碼,從而能提高有效性能。
(17)一種編譯裝置,用于把用高級語言記述的程序的源代碼變換為執(zhí)行形式代碼,其中,具有把所述源代碼中的指令重新排列、使應(yīng)該并行執(zhí)行的多個指令相鄰的指令安排單元;所述指令安排單元具有進(jìn)行指令的重新配置、使得可以按周期區(qū)分可并行執(zhí)行的指令的集合的指令再配置單元;所述指令再配置單元檢測能用單一的指令實現(xiàn)多個指令的功能的指令組合,把這些多個指令結(jié)合,作為單一指令處理,判定能否在當(dāng)前周期中配置。
據(jù)此,考慮指令的結(jié)合,能在一個周期中配置搭載的運算器的個數(shù)以上數(shù)量的指令,從而能提高有效性能。
(18)所述指令安排單元還具有執(zhí)行邊界附加單元,該執(zhí)行邊界附加單元根據(jù)所述指令再配置單元的結(jié)果,在指令內(nèi)附加表示是否為并行執(zhí)行的邊界的并行執(zhí)行邊界信息。
(19)一種編譯裝置,用于把用高級語言記述的程序的源代碼變換為執(zhí)行形式代碼,其中,具有用于把所述源代碼中的指令重新排列、使應(yīng)該并行執(zhí)行的指令相鄰的多個指令安排單元;所述指令安排單元包括如下各單元條件排他性解析單元——對于執(zhí)行附加在各指令中的有效操作的條件,解析各條件可否同時成立,及指令再配置單元——進(jìn)行指令的重新配置,使得可按周期中區(qū)分并行執(zhí)行的指令的集合;所述條件排他性解析單元,對于各基本塊開頭的指令和更新與操作執(zhí)行的有效性相關(guān)的某一條件標(biāo)志的指令,生成表示在各時刻的各條件標(biāo)志間的同時成立可能性的表。
據(jù)此,通過生成必要的最低限度的信息,就能分析各指令間的執(zhí)行條件的排他性,能削減編譯裝置的使用存儲器,提高編譯速度。
(20)所述指令安排單元還具有用于分析指令間的依存關(guān)系的依存關(guān)系解析單元;所述依存關(guān)系解析單元,根據(jù)用所述條件排他性解析單元生成的表,檢索各指令的在執(zhí)行時刻是有效的條件標(biāo)志間的同時成立可能性,分析兩個指令能否同時執(zhí)行。
(21)一種編譯方法,用于把用高級語言記述的程序的源代碼變換為執(zhí)行形式代碼,其中,具有把所述源代碼中的指令重新排列、使應(yīng)該并行執(zhí)行的多個指令相鄰的指令安排步驟;所述指令安排步驟包括如下各步驟條件排他性解析步驟——對于執(zhí)行附加在各指令中的有效操作的條件,解析各條件可否同時成立,及指令再配置步驟——進(jìn)行指令的重新配置,使得可按周期中區(qū)分并行執(zhí)行的指令的集合;所述指令再配置單元具有如是可配置判定步驟判定一下配置在當(dāng)前周期中的指令中執(zhí)行有效操作的指令使用的運算資源是否超出搭載在對象儀器上的運算器的限制,并且當(dāng)判定為配置在當(dāng)前周期中的兩個指令的執(zhí)行條件在所述條件排他解析步驟中不能同時成立時,只把任意一方的指令作為使用運算資源的指令處理。
(22)一種記錄了程序的存儲介質(zhì),記錄了把用高級語言記述的程序的源代碼變換為執(zhí)行形式代碼的程序,其中,所述程序具有把所述源代碼中的指令重新排列、使應(yīng)該并行執(zhí)行的多個指令相鄰的指令安排步驟;所述指令安排步驟包括如下各步驟條件排他性解析步驟——對于執(zhí)行附加在各指令中的有效操作的條件,解析各條件可否同時成立,及指令再配置步驟——進(jìn)行指令的重新配置,使得可按周期中區(qū)分并行執(zhí)行的指令的集合;所述指令再配置單元具有如是可配置判定步驟判定一下配置在當(dāng)前周期中的指令中執(zhí)行有效操作的指令使用的運算資源是否超出搭載在對象儀器上的運算器的限制,并且當(dāng)判定為配置在當(dāng)前周期中的兩個指令的執(zhí)行條件在所述條件排他解析步驟中不能同時成立時,只把任意一方的指令作為使用運算資源的指令處理。


下面簡要說明附圖。
圖1(a)~(c)是表示本發(fā)明的實施例1的處理器執(zhí)行的指令的結(jié)構(gòu)的圖。
圖2(a)、(b)是表示同一處理器的指令的供給和發(fā)出的概念的圖。
圖3是表示同一處理器的硬件結(jié)構(gòu)的框圖。
圖4是表示同一處理器的指令寄存器周邊的結(jié)構(gòu)的框圖。
圖5是表示同一處理器的指令發(fā)出控制部和它的周邊的電路結(jié)構(gòu)的圖。
圖6是表示用同一處理器執(zhí)行指令列時的管道定時的圖。
圖7是表示包含條件執(zhí)行指令的程序的一部分的圖。
圖8是表示具有以往的指令發(fā)出控制部的處理器的指令存儲器周邊的結(jié)構(gòu)的框圖。
圖9是表示用以往的指令發(fā)出控制部的處理器進(jìn)行圖7的程序的處理的程序的圖。
圖10是表示包含條件分支的處理的流程的圖。
圖11是表示用條件執(zhí)行方式記述了圖10的流程的處理的程序的圖。
圖12本發(fā)明的實施例2的編譯裝置的結(jié)構(gòu)和相關(guān)數(shù)據(jù)的框圖。
圖13是表示同一編譯裝置的條件排他性解析部的處理步驟的程序流程圖。
圖14是表示同一編譯裝置的兩個指令間的執(zhí)行條件排他性檢測的處理步驟的程序流程圖。
圖15是表示匯編代碼的一個例子的圖。
圖16是表示與圖15的匯編代碼的指令2對應(yīng)的條件排他信息表的圖。
圖17是與圖15對應(yīng)的依存圖表。
圖18表示同一編譯裝置的指令再配置部的處理步驟的程序流程圖。
圖19是表示匯編代碼的一個例子的圖。
圖20是與圖19對應(yīng)的依存圖表。
圖21是表示與圖19對應(yīng)的執(zhí)行形式代碼的圖。
圖22是表示用以往的編譯裝置安排圖19的代碼時的執(zhí)行形式代碼的一個例子的圖。
圖23是表示本發(fā)明的實施例3的處理器的指令發(fā)出控制部與其周邊電路結(jié)構(gòu)的圖。
圖24是表示包含條件執(zhí)行指令的程序的一部分的圖。
圖25是表示本發(fā)明的實施例4的編譯裝置的指令再配置部的處理步驟的程序流程圖。
圖26是表示匯編代碼的一個例子的圖。
下面簡要說明附圖符號。
10-并行執(zhí)行邊界信息(E);11-執(zhí)行條件信息(P);20-指令供給部(指令供給單元);21-指令取出部;22-指令緩存器;23-指令寄存器;231-A寄存器;232-B寄存器;233-C寄存器;234-D寄存器;30-解碼部;31-指令發(fā)出控制部(指令發(fā)出控制單元);311-條件標(biāo)志;312-條件標(biāo)志有效信息;313-執(zhí)行指令選擇控制部;314、315-邏輯電路;32-指令解碼器(解碼單元);33-第一指令解碼器;34-第二指令解碼器;35-第三指令解碼器;36-第四指令解碼器;371~374-指令執(zhí)行選擇器;38-指令無效化方法選擇部(指令無效化方法選擇單元);40-執(zhí)行部(執(zhí)行單元);41-執(zhí)行控制部;42-PC(程序計數(shù)器)部;43-寄存器文件;44-第一運算器;45-第二運算器;46-寫入控制部(執(zhí)行結(jié)果無效化單元);47-操作數(shù)訪問部;48、49-數(shù)據(jù)總線;100-編譯器上游部;101-匯編代碼生成部;102-指令安排部(指令安排單元);103-目標(biāo)代碼生成部;110-條件排他性解析部(條件排他性解析單元);111-依存關(guān)系解析部(依存關(guān)系解析單元);112-指令再配置部(指令再配置單元);113-執(zhí)行邊界附加部(執(zhí)行邊界附加單元);120-源代碼;130-目標(biāo)代碼;140-指令發(fā)出控制部(指令發(fā)出控制單元);141-執(zhí)行指令選擇控制部;142-指令結(jié)合部。
具體實施例方式
下面,參照附圖,詳細(xì)說明本發(fā)明的處理器、編譯裝置以及編譯方法的實施例。
實施例1處理器(指令格式和結(jié)構(gòu)的概要)首先,使用圖1(a)~(c),說明本發(fā)明的處理器解碼執(zhí)行的指令的結(jié)構(gòu)。圖1(a)~(c)是表示本處理器的指令格式的圖。本處理器的各指令是32位的固定長度,各指令保持1位的并行執(zhí)行邊界信息(Eend bit)10。該信息是表示該指令與它的后續(xù)指令之間是否存在并行執(zhí)行的邊界。具體而言,當(dāng)并行執(zhí)行邊界信息E為“1”時,該指令與它的后續(xù)指令之間存在并行執(zhí)行的邊界,當(dāng)并行執(zhí)行邊界信息E為“0”時,不存在并行執(zhí)行的邊界。后面將描述該信息的使用方法。
另外,各指令保持著三位的執(zhí)行條件信息(Ppredicate)11。該執(zhí)行條件信息P指定存儲了在后述的圖5中的八個條件標(biāo)志C0~C7(311)中是否執(zhí)行該指令的條件的條件標(biāo)志。當(dāng)用該執(zhí)行條件信息P指定的條件標(biāo)志的值為“1”時,執(zhí)行用該指令指定的操作,當(dāng)條件標(biāo)志的值為“0”時,不執(zhí)行操作。
在從各指令的長度中去掉并行執(zhí)行邊界信息E和執(zhí)行條件信息P后的28位的部分中,指定操作。具體而言,在“Op1”、“Op2”、“Op3”的字段中,指定表示操作的種類的操作碼,在“Rs”的區(qū)域中,指定成為源操作數(shù)的寄存器的寄存器號碼,在“Rd”的字段中,指定成為目標(biāo)操作數(shù)的寄存器的寄存器號碼。另外,在“imm”的字段中,指定運算用常數(shù)操作數(shù)。而且,在“disp”的區(qū)域中,指定位移(displacement)。
下面,使用圖2(a)和(b),就本處理器的結(jié)構(gòu)的概要加以說明。本處理器是以靜態(tài)并行調(diào)度為前提的處理器。
如圖2(a)所示,指令的供給是用每周期128位固定長度的指令供給單位(這里,稱作“信息包”)每次提供四個指令。而且,如圖2(b)所示,指令的執(zhí)行是在一個周期中,同時執(zhí)行并行執(zhí)行邊界前的指令(這里稱作“執(zhí)行單位”)。即在各周期中,并行執(zhí)行到并行執(zhí)行邊界信息E為“1”的指令為止的指令。已提供但卻未執(zhí)行的指令殘留在指令存儲器中,在接著的周期以后成為執(zhí)行的對象。
即在該結(jié)構(gòu)中,用固定長度的信息包單位提供指令,以靜態(tài)求出的信息為基礎(chǔ),在各周期中,發(fā)出與并行度相應(yīng)的適當(dāng)數(shù)量的指令。通過采用該手法,在通常固定長度指令的VLIW方式下發(fā)生的無動作指令(nop指令)完全沒有了,從而能削減代碼尺寸。
(處理器的硬件結(jié)構(gòu))圖3是表示本發(fā)明的處理器的硬件結(jié)構(gòu)的框圖。本處理器是具有兩個運算器的并行執(zhí)行處理器,大致來分,由指令供給部20、解碼部30、執(zhí)行部40構(gòu)成。
指令指令供給部20從圖中未顯示的外部存儲器提供指令群,輸出到解碼部30,其由指令取出部21和指令緩存器22及指令寄存器23構(gòu)成。指令取出部21通過32位的IA(指令地址)總線以及128位的ID(指令數(shù)據(jù))總線,從圖,從圖中未顯示的外部存儲器取出指令塊,保存在內(nèi)部的指令高速緩沖存儲器中,并且把從PC(程序計數(shù)器)部42輸出的相當(dāng)于地址的指令群提供給指令緩存器22。
指令緩存器22具有兩個128位的緩存器,用于存儲由指令取出部21提供的指令。從指令取出部21以128位的單位向指令緩存器22提供了信息包。存儲在指令緩存器22中的指令被輸出到指令寄存器23的適當(dāng)?shù)拇鎯ζ髦小?br> 指令寄存器23由四個32位存儲器231~234構(gòu)成,是用于保存從指令緩存器22傳來的指令。關(guān)于指令寄存器23的周邊,在別的附圖中,表示了更詳細(xì)的結(jié)構(gòu)。
解碼部30把保存在指令寄存器23中的指令解碼,把與該解碼結(jié)果對應(yīng)的控制信號輸出到執(zhí)行部40,大致來分,其由指令發(fā)出控制部31、指令解碼器32、指令無效化方法選擇部38構(gòu)成。
指令發(fā)出控制部31對于保存在指令寄存器23的四個寄存器231~234中的指令,通過參照指令內(nèi)的執(zhí)行條件信息P、與它對應(yīng)的條件標(biāo)志,對于條件標(biāo)志的值為假的指令,進(jìn)行實質(zhì)上消除該指令自身的處理??墒牵幌抻谟弥噶顭o效化方法選擇部38選擇了解碼部30時。另外,指令發(fā)出控制部31通過參照指令內(nèi)的并行執(zhí)行邊界信息E,對于超過并行執(zhí)行的邊界的指令,進(jìn)行使該指令的發(fā)出無效化的關(guān)于發(fā)出的控制。須指出的是,關(guān)于指令發(fā)出控制部31,在別的附圖中,進(jìn)行了更詳細(xì)的動作說明。
指令解碼器32是用于對存儲在指令寄存器23中有效的指令群解碼的裝置,由第一指令解碼器33、第二指令解碼器34、第三指令解碼器35、第四指令解碼器36構(gòu)成。這些解碼器33~36分別基本上是在一個周期中解碼一個指令,提供給執(zhí)行部40。另外,對于放在指令內(nèi)的常數(shù)操作數(shù),從各指令解碼器傳送到執(zhí)行部40的數(shù)據(jù)總線48。
指令無效化方法選擇部38選擇是用解碼部30使條件標(biāo)志為假即沒有必要執(zhí)行的指令無效化,還是用執(zhí)行部40使之無效化。具體而言,當(dāng)用后述的指令發(fā)出控制部31的條件標(biāo)志有效信息312(圖5)表示了該指令的條件標(biāo)志為有效即確定時,用解碼部30進(jìn)行無效指令的消除,不是這樣時,用執(zhí)行部40的寫入控制部46使該指令的執(zhí)行結(jié)果的寫入無效化。
執(zhí)行部40是根據(jù)解碼部30的解碼結(jié)果最多并行執(zhí)行兩個操作的電路單元,由執(zhí)行控制部41、PC部42、寄存器文件43、第一運算器44、第二運算器45、寫入控制部46、操作數(shù)訪問部47、數(shù)據(jù)總線48、49構(gòu)成。
執(zhí)行控制部41是根據(jù)解碼部30的解碼結(jié)果控制執(zhí)行部40的各構(gòu)成要素42~49的控制電路和布線的總稱,具有定時控制、動作允許禁止控制、狀態(tài)管理、中斷控制等電路。
PC部42把存放了接著應(yīng)該解碼執(zhí)行的指令的圖中未顯示的外部存儲器上的地址輸出到指令供給部20內(nèi)的指令取出部21。
寄存器文件43由64個32位寄存器(R0~R63)構(gòu)成。存儲在這些寄存器中的值根據(jù)指令解碼器32的解碼結(jié)果,經(jīng)由數(shù)據(jù)總線48,被傳送到第一運算器44和第二運算器45,在那里進(jìn)行運算,或者只在通過那里后,經(jīng)由數(shù)據(jù)總線49,傳送到寄存器文件43或操作數(shù)訪問部47。
第一運算器44和第二運算器45在內(nèi)部具有分別對兩個32位數(shù)據(jù)進(jìn)行算術(shù)邏輯運算的ALU或乘法器、和進(jìn)行移位運算的桶式移位器,在執(zhí)行控制部41的控制下,執(zhí)行運算。
寫入控制部46,只當(dāng)用指令無效化方法選擇部38選擇了用執(zhí)行部40使某指令無效化時,并且當(dāng)該指令的條件標(biāo)志的內(nèi)容為假時,才進(jìn)行控制使該指令的執(zhí)行結(jié)果不寫入寄存器文件43。由此,關(guān)于該指令,變?yōu)榕c執(zhí)行無動作指令(nop指令)時同等的結(jié)果。
操作數(shù)訪問部47是寄存器文件43和圖中未顯示的外部存儲器之間進(jìn)行操作數(shù)的傳送的電路。具體而言,例如,當(dāng)在指令內(nèi),放置了“l(fā)d”(load)作為操作碼時,放在外部存儲器中的一個字(32位)的數(shù)據(jù)經(jīng)過操作數(shù)訪問部47被輸入寄存器文件43的指定寄存器中,另外,當(dāng)放置了“st”(store)作為操作碼時,寄存器文件43的指定的寄存器的存儲值被存儲到外部存儲器中。
如圖所示,所述PC部42、寄存器文件43、第一運算器44、第二運算器45、寫入控制部46以及操作數(shù)訪問部47由數(shù)據(jù)總線48(L1總線、R1總線、L2總線、R2總線)以及數(shù)據(jù)總線49(D1總線、D2總線)連接。須指出的是,L1總線、R1總線分別連接在第一運算器44的兩個輸入端口上,L2總線、R2總線分別連接在第二運算器45的兩個輸入端口上,D1總線、D2總線分別連接在第一運算器44和第二運算器45的輸出端口上。
(指令寄存器23的周邊結(jié)構(gòu)和指令發(fā)出控制部31的動作)圖4是表示指令寄存器23的周邊的結(jié)構(gòu)的框圖。圖中,虛線箭頭表示控制信號。
指令寄存器23由A寄存器231、B寄存器232、C寄存器233、D寄存器234等四個32位寄存器構(gòu)成。從指令緩存器22向指令寄存器23提供了指令。
第一~第四指令解碼器33、34、35、36以各32位的指令為輸入,對其解碼,輸出與該指令的動作有關(guān)的控制信號,并且輸出配置在指令內(nèi)的常數(shù)操作數(shù)。圖4的59和51是各執(zhí)行確定了的指令常數(shù)操作數(shù)。
另外,在第二~第四指令解碼器34、35、36中輸入了一位的無動作指令標(biāo)志作為控制信號。如果把該標(biāo)志設(shè)置為“1”,則該解碼器輸出相當(dāng)于無動作指令的控制信號作為輸出。即通過設(shè)置無動作指令標(biāo)志,能使該指令解碼器的解碼無效化。
然后,指令發(fā)出控制部31參照存儲在指令寄存器23中的指令內(nèi)的信息,進(jìn)行用于使并行執(zhí)行的邊界以后的指令的解碼無效化的無動作指令標(biāo)志的生成,和對執(zhí)行指令選擇器371、372(用于選擇進(jìn)行執(zhí)行條件為真且應(yīng)該用執(zhí)行部40執(zhí)行操作的有效指令)和執(zhí)行指令選擇器373、374(用于選擇與前述選擇對應(yīng)的控制信號)進(jìn)行控制。
圖5表示了本處理器的指令發(fā)出控制部31和它的周邊電路的結(jié)構(gòu)。指令發(fā)出控制部31首先參照各指令內(nèi)的并行執(zhí)行邊界信息E,決定在該周期中發(fā)出的指令到哪為止。然后,通過把與該周期中不發(fā)出的指令所對應(yīng)的指令解碼器的無動作指令標(biāo)志設(shè)置為1,使該解碼器的輸出成為相當(dāng)于無動作指令的控制信號。該無動作指令標(biāo)志的生成能用圖5的指令發(fā)出控制部31的右半部表示的簡單的邏輯電路(OR門)314、315實現(xiàn)。與此同時,表示哪些指令未被發(fā)出而殘留下來的信息傳輸給指令緩存器22。
如果具體說明,則當(dāng)A寄存器231的指令的并行執(zhí)行邊界信息E為“1”時,使第二、第三以及第四指令解碼器34、35、36的解碼無效化。另外,當(dāng)B寄存器232的指令的并行執(zhí)行邊界信息E為“1”時,使第三以及第四指令解碼器35、36的解碼無效化。而且,當(dāng)C寄存器233的指令的并行執(zhí)行邊界信息E為“1”時,使第四指令解碼器36的解碼無效化。
指令發(fā)出控制部31參照各指令內(nèi)的執(zhí)行條件信息P,關(guān)于條件標(biāo)志為假的指令即沒有必要執(zhí)行的指令,控制圖4的執(zhí)行指令選擇器371~374,實質(zhì)地消除該指令自身。在本處理器中,各周期最多解碼四條指令,但是,實際執(zhí)行了操作的只有兩條指令。由此,當(dāng)執(zhí)行條件為假時,用執(zhí)行部40執(zhí)行了無動作指令,解決了運算器44、45的利用率變差的問題點。
為了實現(xiàn)它,指令發(fā)出控制部31具有執(zhí)行指令選擇控制部313。執(zhí)行指令選擇控制部313通過參照八個條件標(biāo)志(C0~C7)311中指令內(nèi)指定的執(zhí)行條件信息P所對應(yīng)的條件標(biāo)志,檢測沒有必要執(zhí)行的指令,控制執(zhí)行指令選擇器371~374,不選擇該指令,選擇后續(xù)的有效的指令。未選擇的指令自身被實質(zhì)地消除。條件標(biāo)志311由八個一位寄存器C0~C7構(gòu)成,并且通過對各指令內(nèi)的3位執(zhí)行條件信息P解碼指定??墒?,條件標(biāo)志C7的值總是“1”,經(jīng)常執(zhí)行的指令指定C7作為執(zhí)行條件。在程序中的記述中,能省略C7的指定。
但是,在更新條件標(biāo)志的指令中,確定條件標(biāo)志的是執(zhí)行階段即執(zhí)行部40,所以在前一周期中,當(dāng)執(zhí)行更新某條件標(biāo)志的指令時,接著的周期的解碼階段即解碼部30未確定該條件標(biāo)志,不能進(jìn)行指令的刪除可否的判斷。為了檢測該狀態(tài),設(shè)置了條件標(biāo)志有效信息312。
條件標(biāo)志有效信息312保持著表示各條件標(biāo)志的值是否有效的一位值,當(dāng)解碼部30判斷為執(zhí)行更新某條件標(biāo)志的指令時,把該條件標(biāo)志的有效信息設(shè)置為“0”,在執(zhí)行部40中,如果該條件標(biāo)志的更新結(jié)束,把該條件標(biāo)志的有效信息設(shè)置為“1”。
在指令發(fā)出控制部31中,參照了各指令的執(zhí)行條件信息P后,參照條件標(biāo)志有效信息312,檢測與各執(zhí)行條件對應(yīng)的條件標(biāo)志的值是否有效。然后,當(dāng)不是有效時,即條件標(biāo)志有效信息312的對應(yīng)位為“0”時,不進(jìn)行該指令自身的消除。把該指令直接發(fā)送給執(zhí)行部40,當(dāng)確定了條件標(biāo)志的時刻,如果必要,就使該指令的執(zhí)行結(jié)果的寫入無效化。
當(dāng)條件標(biāo)志的值為有效時,即條件標(biāo)志有效信息312的對應(yīng)位為“1”時,參照用該指令的執(zhí)行條件信息P指定的條件標(biāo)志311內(nèi)的1位,當(dāng)該值為“1”時,把該指令直接樣發(fā)送給執(zhí)行部40,當(dāng)值為“0”時,控制執(zhí)行指令選擇器371~374,實質(zhì)上刪除該指令自身。
即,當(dāng)某指令執(zhí)行條件信息P為“0”、上一指令中所對應(yīng)的條件標(biāo)志被更新時,在執(zhí)行部40使該指令執(zhí)行無效化,否則,在解碼部30實質(zhì)上刪除其指令本身。
圖6是表示執(zhí)行具體的指令列時的管道處理時序的圖。這里,假設(shè)從上開始按順序一次一個指令地執(zhí)行三個指令。最初的指令是這樣的比較指令比較寄存器R0的內(nèi)容和寄存器R1的內(nèi)容,如果一致,在條件標(biāo)志C0中設(shè)置“1”,如果不是,設(shè)置“0”。接著的指令是只當(dāng)條件標(biāo)志C0的內(nèi)容為“1”時從寄存器R3的內(nèi)容減去寄存器R2的內(nèi)容、把結(jié)果寫入寄存器R3的減法指令。最后的指令是只當(dāng)條件標(biāo)志C0的內(nèi)容為“1”時把寄存器R4的內(nèi)容和寄存器R5的內(nèi)容相加、把結(jié)果寫入寄存器R5的加法指令。
圖6中,在各指令的右側(cè)表示了各指令的指令取出階段(IF)、解碼階段(DEC)、執(zhí)行階段(EX)的時機(jī)。這里,假定最初的比較指令的結(jié)果為假即C0為“0”。
由圖6可知,在最初的比較指令的解碼階段(DEC)中,檢測到是更新C0的指令,C0的有效信息被設(shè)置為“0”,在執(zhí)行階段(EX)中,確定了比較結(jié)果后,C0的有效信息被設(shè)置為“1”。
后續(xù)的減法指令、加法指令雖然都是以C0為條件執(zhí)行的指令,但是關(guān)于比較指令之后的減法指令,在解碼階段(DEC)中,因為C0的值不是有效,所以不進(jìn)行指令自身的消除,發(fā)送到執(zhí)行階段(EX),在該階段,執(zhí)行結(jié)果被無效化。而關(guān)于加法指令,因為在解碼階段(DEC)的時刻,確定了C0的值,所以在解碼階段(DEC)中,指令自身被實質(zhì)地消除,不發(fā)送到執(zhí)行階段(EX)。這時,能在加法指令的后續(xù)指令中,充分利用空著的運算器。
在基于以上的控制的指令的無效化后,當(dāng)存在未發(fā)出的指令時,指令發(fā)出控制部31把剩下的指令的個數(shù)傳送給指令緩存器22,在指令緩存器22內(nèi),進(jìn)行控制,使這些指令不被無效化,在接著的周期中,再次傳送給指令寄存器23。
就這樣,通過采用圖1所示指令格式、圖4及圖5所示結(jié)構(gòu),就可以有效而靈活地利用運算器。
(處理器的動作)下面,說明解碼、執(zhí)行具體的指令時的本實施例的處理器的動作。
圖7是表示包含條件執(zhí)行的程序的一部分的圖。該程序由五個指令構(gòu)成,用助記符號表現(xiàn)了各指令的處理內(nèi)容。具體而言,助記符號“add”表示常數(shù)或寄存器的存儲值與寄存器的存儲值相加,助記符號“sub”表示從寄存器的存儲值減去常數(shù)或寄存器的存儲值,助記符號“st”表示把寄存器的存儲值傳送給存儲器,助記符號“mov”表示把常數(shù)或寄存器的存儲值傳送到寄存器。
另外,“Rn(n=0~63)表示寄存器文件43中的一個寄存器。而且,關(guān)于各指令的并行執(zhí)行邊界信息E,用“0”或“1”表示。關(guān)于用執(zhí)行條件信息P指定的條件標(biāo)志,在各指令的開頭,用“[]”圍起來記述。不記述的指令是經(jīng)常執(zhí)行的指令。
下面,按執(zhí)行單位來說明本處理器的動作。這里假設(shè),在最初的時刻,條件標(biāo)志C0的值為“1”,C1的值為“0”。
(執(zhí)行單位1)從外部存儲器提供了包含指令1、指令2、指令3、指令4的信息包,分別傳送給指令寄存器23。接著,指令發(fā)出控制部31參照各指令的并行執(zhí)行邊界信息E。這時,因為指令3的并行執(zhí)行邊界信息為“1”,所以使第四指令解碼器36的解碼結(jié)果無效化,即作為無動作指令。
接著,指令發(fā)出控制部31參照各指令的執(zhí)行條件信息P。指令1的執(zhí)行條件標(biāo)志是C0,因為C0的值確定為“1”,所以用執(zhí)行指令選擇器371控制操作數(shù)的選擇,把指令1作為第一指令執(zhí)行,控制執(zhí)行指令選擇器373,使其選擇解碼結(jié)果。接著,指令2的執(zhí)行條件標(biāo)志是C1,因為C1的值是“0”,所以實質(zhì)地消除指令2自身,不進(jìn)行操作的執(zhí)行。然后,因為后續(xù)的指令3是經(jīng)常執(zhí)行的指令,所以用執(zhí)行指令選擇器372控制操作數(shù)的選擇,把指令3作為第二指令執(zhí)行,控制執(zhí)行指令選擇器374,使其選擇解碼結(jié)果。結(jié)果,指令1和指令3被作為要執(zhí)行的指令傳送給執(zhí)行部40,不發(fā)出的指令4留在指令緩存器22中。
在執(zhí)行部40中,把寄存器R0的存儲值加1的值被存儲到寄存器R0,寄存器R1的存儲值與寄存器R2的存儲值相加得到的值被存儲到寄存器R2。
(執(zhí)行單位2)留在指令緩存器22中的指令4與新由外部存儲器提供的指令5按順序被傳送到指令寄存器23。接著,指令發(fā)出控制部31參照各指令的并行執(zhí)行邊界信息E。這時,指令5的并行執(zhí)行邊界信息為“1”,所以使第三指令解碼器35和第四指令解碼器36的解碼結(jié)果無效化,即作為無動作指令。
指令4和指令5是經(jīng)常執(zhí)行的指令,所以控制執(zhí)行指令選擇器371~374,把指令4作為第一個指令,把指令5作為第二個指令傳送給執(zhí)行部40。這里,發(fā)出了提供的全部指令。
在執(zhí)行部40中,存儲器R0的存儲值被傳送到外部存儲器內(nèi)的用寄存器R3表示的地址,存儲器R2的存儲值被傳送到寄存器R4。
如上所述,圖7所示的程序在本處理器中由兩個執(zhí)行單位執(zhí)行。在本處理器中,預(yù)先解碼比運算器44、45的個數(shù)多的指令,通過適當(dāng)刪除不要的指令,實現(xiàn)運算器44、45的高效利用。在該例子中,各周期都是在執(zhí)行部40中,執(zhí)行兩個操作,搭載的運算器44、45被高效利用。
(與以往的具有指令發(fā)出控制部的處理器的比較)下面,假定在作為以往的技術(shù)而舉例的把條件執(zhí)行指令全部發(fā)到執(zhí)行部,并且在該執(zhí)行部中適當(dāng)?shù)剡M(jìn)行無效化的處理器中進(jìn)行圖7所示的處理,與本發(fā)明的處理器的情形比較。
圖8是表示以往的處理器的指令寄存器的周邊結(jié)構(gòu)的框圖。作為以往的處理器,與本發(fā)明的處理器同樣,具有兩個運算器,指令格式與圖1的本發(fā)明的處理器的指令格式同樣。因為是雙并行處理器,所以指令寄存器23a具有A寄存器231a和B寄存器232a,指令解碼器32a具有第一指令解碼器33a和第二指令解碼器34a。50a、51a分別是常數(shù)操作數(shù)。在指令發(fā)出控制部31a中,按照存儲在A寄存器231a中的指令的并行執(zhí)行邊界信息e,進(jìn)行使第二指令解碼器34a的結(jié)果無效化的控制。
圖9是表示用具有以往的指令發(fā)出控制部31a的處理器運行圖7的程序的處理的程序的圖。圖9的程序中,并行執(zhí)行邊界信息E以外的部分與圖7的程序相同。并行執(zhí)行邊界信息E設(shè)置為最多同時發(fā)出兩個指令。
以下,說明各執(zhí)行單位的以往的處理器的動作。這里假設(shè),在最初的時刻,條件標(biāo)志的值確定為“1”,C1的值為“0”。
(執(zhí)行單位1)從外部存儲器提供了包含指令1、指令2、指令3以及指令4的信息包,把指令1和指令2按順序傳送給指令寄存器23a。接著,指令發(fā)出控制部31a參照存儲在A寄存器231a中的指令1的并行執(zhí)行邊界信息E。這時,指令1的并行執(zhí)行邊界信息E是“0”,所以第二指令解碼器34a的解碼結(jié)果不會無效化。因此,指令1和指令2都傳送到執(zhí)行部。未發(fā)出的指令3和指令4殘留在指令緩存器中。
在執(zhí)行部中,因為指令1的執(zhí)行條件標(biāo)志即C0為“1”,所以寄存器R0的存儲值加1的值被存儲到寄存器R0。然后,因為指令2的執(zhí)行條件標(biāo)志即C1為“0”,所以或者不執(zhí)行與指令2對應(yīng)的操作,或者把執(zhí)行后的結(jié)果無效化,結(jié)果與執(zhí)行了無動作指令是同樣的。
(執(zhí)行單位2)殘留在指令緩存器中的指令3和指令4按順序傳送到指令寄存器23a,新從外部存儲器提供了指令5。接著,指令發(fā)出控制部31a參照存儲在A寄存器231a中的指令3的并行執(zhí)行邊界信息E。這時,指令3的并行執(zhí)行邊界信息E是“0”,所以第二指令解碼器34a的解碼結(jié)果不會無效化。因此,指令3和指令4都傳送到執(zhí)行部。未發(fā)出的指令5殘留在指令緩存器22中。
在執(zhí)行部中,因為指令3和指令4都是經(jīng)常執(zhí)行的指令,所以執(zhí)行了與這兩個指令對應(yīng)的操作。具體而言,寄存器R1的存儲值和寄存器R2的存儲值相加的值被存儲在寄存器R2中,寄存器R0的存儲值被傳送到外部存儲器上用寄存器R3表示的地址。
(執(zhí)行單位3)殘留在指令緩存器中的指令5傳送到指令寄存器23a。接著,指令發(fā)出控制部31a參照存儲在A寄存器231a中的指令5的并行執(zhí)行邊界信息E。這時,因為指令5的并行執(zhí)行邊界信息E是“1”,所以使第二指令解碼器34a的解碼結(jié)果無效化。因此,只發(fā)出了指令5。到這里,發(fā)出了提供的全部指令。
在執(zhí)行部中,因為指令5是經(jīng)常執(zhí)行的指令,所以執(zhí)行了與指令5對應(yīng)的操作。具體而言,寄存器R2的存儲值被傳送到寄存器R4。
如上所述,圖9所示的程序在具有以往的指令發(fā)出控制部31a的處理器中,由三個執(zhí)行單位執(zhí)行,與本發(fā)明的處理器相比,多用了一個執(zhí)行單位執(zhí)行。這是因為在具有以往的指令發(fā)出控制部31a的處理器中,當(dāng)條件執(zhí)行指令的條件為加時,把該指令作為無動作指令執(zhí)行,徒勞地使用搭載的運算器。
實施例2編譯裝置下面,說明生成上述實施例1的處理器所執(zhí)行代碼的編譯裝置及其編譯方法的實施例。
(用語說明)首先,說明這里使用的用語。
目標(biāo)代碼——是指包含了可重定位信息的面向?qū)ο筇幚砥鞯臋C(jī)器語言程序。能通過進(jìn)行連接編輯,決定來確定地址,變換為執(zhí)行形式代碼。
預(yù)執(zhí)行指令——是指為了執(zhí)行某指令,在此之前,有必要預(yù)先執(zhí)行的某指令。
執(zhí)行組——是指通過編譯裝置,把能在同一周期中并行執(zhí)行的指令群組化的指令群。
基本塊——是指執(zhí)行從開頭開始到最后執(zhí)行的一連串指令列,在塊的途中,不會發(fā)生跳出塊或從塊的途中進(jìn)入塊。
(對象處理器)本編譯裝置視為對象的處理器是所述實施例1中說明的處理器。該處理器通過參照由編譯裝置提供的并行執(zhí)行邊界信息E,生成執(zhí)行組,在硬件中判斷是否能并行執(zhí)行。因此,在并行執(zhí)行邊界即執(zhí)行組內(nèi),編譯裝置保證正確地配置了能同時執(zhí)行的指令。對于在并行執(zhí)行邊界中能配置的指令的制約為(1)并行執(zhí)行組中的指令總數(shù)不超過4(指令解碼器的制約)(2)并行執(zhí)行組中的指令中,實際用執(zhí)行部執(zhí)行的操作的指令的個數(shù)不超過2(執(zhí)行指令數(shù)的制約)(3)并行執(zhí)行組中的指令中,實際在執(zhí)行部中使用的對象處理器資源的總和不超過2ALU單元、1存儲器訪問單元、1分支單元(運算器的制約)指令只當(dāng)滿足了這三個制約時,才能并行執(zhí)行。
圖12是表示本發(fā)明的實施例2的編譯裝置的結(jié)構(gòu)和相關(guān)數(shù)據(jù)的框圖。本編譯裝置是從用高級語言寫的源代碼120生成目標(biāo)代碼130的程序處理裝置,由編譯器上游部100、匯編代碼生成部101、指令安排部102、目標(biāo)代碼生成部103構(gòu)成。
編譯器上游部100讀入以文件形式保存的高級語言源代碼120,進(jìn)行語法分析和意思分析,生成內(nèi)部形式代碼。再按照需要,優(yōu)化內(nèi)部形式代碼,使最終生成的執(zhí)行形式代碼的尺寸和它的執(zhí)行時間變短。
匯編代碼生成部101從由編譯器上游部100生成并且優(yōu)化了的內(nèi)部形式代碼生成匯編代碼。
編譯器上游部100和匯編代碼生成部101的處理不是本發(fā)明的主要著眼點,而且,等同于以往的編譯裝置中進(jìn)行的處理,所以省略了詳細(xì)的說明。
(指令安排部102)指令安排部102對于用匯編代碼生成部101生成的匯編代碼,進(jìn)行附加在指令中的各條件間的排他性的解析、指令間的依存關(guān)系的解析、指令的再配置(指令順序的改變)以及并行執(zhí)行邊界的附加,把匯編代碼排列為面向?qū)ο筇幚砥?。指令安排?02由條件排他性解析部110、依存關(guān)系解析部111、指令再配置部112以及執(zhí)行邊界附加部113構(gòu)成。
在指令安排部102內(nèi),首先條件排他性解析部110工作。然后,在各基本塊中,依存關(guān)系解析部111、指令再配置部112以及執(zhí)行邊界附加部113工作。各部的具體動作如下。
條件排他性解析部110分析條件標(biāo)志的排他性,對于各基本塊的開頭和各條件標(biāo)志更新指令,生成條件排他信息表。條件排他信息表對于所有條件標(biāo)志的組合,是具有是否是排他的信息的排列。在后面表示了條件排他信息表的具體例子(圖16)。這里,把所有的條件標(biāo)志的組合不是排他的信息表稱作無排他表。
圖13是表示條件排他性解析部110的處理步驟的程序流程圖。在條件排他性解析部110中,向下檢索相當(dāng)于各指令的編譯裝置內(nèi)部的中間代碼,對于各基本塊的開頭和各條件標(biāo)志更新指令,設(shè)置條件排他信息表。
首先,用無排他表初始化在現(xiàn)在時刻有效的有效表Tv(步驟S11)。然后,關(guān)于各基本塊,向下檢索(步驟S12)。
當(dāng)關(guān)于某基本塊的判定(步驟S13)的結(jié)果為該基本塊的先行基本塊只有一個時,在該基本塊的開頭表中設(shè)置有效表Tv(步驟S14),不是這樣時,因為無法確定這時的排他關(guān)系,所以在該基本塊的開頭表中設(shè)置無排他表(步驟S15)。
接著,對于基本塊內(nèi)的各指令進(jìn)行檢索(步驟S16)。當(dāng)發(fā)現(xiàn)了更新比較指令等的條件標(biāo)志的指令時(步驟S17),判定該指令是否是設(shè)置同時排他條件的指令(步驟S18)。設(shè)置同時排他的條件的指令相當(dāng)于更新圖11的指令1的條件標(biāo)志C0、C1的比較指令。
當(dāng)是設(shè)置同時排他的條件的指令時,首先,把相當(dāng)于有效表Tv內(nèi)的用該指令更新的條件標(biāo)志的部分全部設(shè)置為假,然后把用該指令設(shè)置為排他的條件標(biāo)志的組設(shè)置為真。然后,在該指令用的排他信息表中設(shè)置有效表Tv(步驟S19)。
當(dāng)是不設(shè)置同時排他的條件的指令時,因為關(guān)于用該指令更新的條件標(biāo)志的排他性被破壞,所以把相當(dāng)于有效表Tv內(nèi)的用該指令更新的條件標(biāo)志的部分全部設(shè)置為假。然后,在該指令用的排他信息表中設(shè)置有效表Tv(步驟S20)。
對于各基本塊重復(fù)以上步驟(步驟S21、S22)。由此,關(guān)于設(shè)置所有基本塊的開頭和條件標(biāo)志的所有指令,能保持關(guān)于各時刻的條件標(biāo)志的排他性的信息。
依存關(guān)系解析部111分析處理對象中包含的指令間的依存關(guān)系,并以依存標(biāo)志加以表示。指令間的依存關(guān)系有三種。因為變更原來的指令順序,程序的意思就不同了,具有依存關(guān)系中的諸指令中無論哪一個,在指令的重新排列時也有必要遵守依存關(guān)系。
數(shù)據(jù)依存關(guān)系定義某資源的指令和參照相同資源的指令之間的依存關(guān)系。
逆依存關(guān)系參照某資源的指令和定義相同資源的指令之間的依存關(guān)系。
輸出依存關(guān)系定義某資源的指令和定義相同資源的指令之間的依存關(guān)系。
在依存關(guān)系解析部111中,對于處理對象中包含的各指令,生成與其對應(yīng)的節(jié)點,對于各依存關(guān)系,生成與其對應(yīng)的界限(箭頭),生成依存標(biāo)志。這時,即使是關(guān)于參照以及定義的資源,有依存的兩個指令之間,如果各指令的執(zhí)行條件是排他的,即保證了不同時成立,則這兩個指令不會都參照或定義資源,所以在這兩個指令間,不存在依存關(guān)系。因此,在與這兩個指令對應(yīng)的節(jié)點間,不生成界限。
為了實現(xiàn)它,關(guān)于先行的指令A(yù)和指令B,有必要使用用條件排它性解析部110設(shè)置的排他信息表,檢測兩個指令的執(zhí)行條件是否排他。在圖14中表示了檢測該排他性的算法。
首先,設(shè)指令A(yù)的執(zhí)行條件標(biāo)志為Cn(步驟S31)。然后,為了求出指令A(yù)的執(zhí)行時刻的有效排他信息,從指令A(yù)開始向上檢索,在發(fā)現(xiàn)更新條件標(biāo)志的指令或到達(dá)了基本塊的開頭的時刻,設(shè)對應(yīng)的排他信息表為有效表Tv(步驟S32)。
接著,沿到指令B的路線而行,從指令A(yù)向下檢索(步驟S33)。當(dāng)發(fā)現(xiàn)指令B時(步驟S34),參照該時刻的有效表Tv,求出條件標(biāo)志Cn和指令B的執(zhí)行條件的排他關(guān)系,之后結(jié)束(步驟S35)。當(dāng)發(fā)現(xiàn)更新Cn以外的條件標(biāo)志的指令時(步驟S36),用與該指令對應(yīng)的排他信息表更新有效表Tv,繼續(xù)(步驟S37)。當(dāng)發(fā)現(xiàn)更新條件標(biāo)志Cn的指令時(步驟S38),因為不能保證排他性,所以返送假(步驟S39)。重復(fù)以上步驟(步驟S40)。
這樣,對資源定義和參照關(guān)系、執(zhí)行條件的排他性這兩者進(jìn)行解析,建立各指令間的依存關(guān)系。
作為具體例,說明對于圖15所示的匯編代碼的條件排它性解析部110和依存關(guān)系解析部111的適用結(jié)果。
圖16是表示與圖15的匯編代碼的指令2(比較指令)對應(yīng)的條件排他信息表的圖。條件排他信息表是表示對于條件標(biāo)志C0~C7的全部組合的排他性的排列。這時,通過指令2,設(shè)置條件標(biāo)志C0和條件標(biāo)志C1為排他。
圖17是表示依存關(guān)系解析部111的輸出即依存圖表的圖。圖17中,實線表示數(shù)據(jù)依存關(guān)系,虛線表示逆依存關(guān)系。指令2(比較指令)因參照用指令1更新的寄存器R0,有數(shù)據(jù)依存,指令3和指令4因參照用指令2更新的條件標(biāo)志C0和C1,有數(shù)據(jù)依存關(guān)系。這里,因為在指令3更新寄存器R2,在指令4參照寄存器R2,所以乍一看,存在指令3到指令4的數(shù)據(jù)依存關(guān)系??墒?,各指令的執(zhí)行條件即C0、C1由指令2設(shè)置為排他條件,所以通過參照圖16所示的條件排他信息表,判斷出不會同時執(zhí)行兩個指令,這視為兩個指令間不存在依存關(guān)系。
返回圖12的說明,指令再配置部112使用由依存關(guān)系解析部111生成的依存圖表,重新排列處理對象的指令,生成面向?qū)ο筇幚砥鞯牟⑿械膮R編代碼。指令再配置部112的處理的細(xì)節(jié)如下所述。
圖18是表示指令再配置部112的處理步驟的程序流程圖。指令再配置部112對于依存關(guān)系解析部111生成的依存圖表的所有節(jié)點,重復(fù)以下的循環(huán)1(步驟S52~S60)的處理(步驟S51、S61)。
首先,從依存圖表中抽出在現(xiàn)在時刻能成為配置候補(bǔ)的節(jié)點,作為配置候補(bǔ)節(jié)點的集合(步驟S52)。這里,能成為配置候補(bǔ)的節(jié)點是指“預(yù)執(zhí)行指令都配置完了”的節(jié)點。
接著,指令再配置部112對于配置候補(bǔ)節(jié)點集合的所有候補(bǔ)節(jié)點,重復(fù)以下的循環(huán)2(步驟S54~S58)的處理(步驟S53、S59)。
首先,從配置候補(bǔ)節(jié)點集合取出被認(rèn)為是在現(xiàn)在時刻配置最佳的節(jié)點(以下,稱作“最佳節(jié)點”)(步驟S54)。后面,將描述關(guān)于最佳節(jié)點的決定方法。接著,判斷是否能實際配置最佳節(jié)點(步驟S55),當(dāng)可能時,假配置(步驟S56)。為了有效地利用所述的處理器的解碼階段的指令自身的消除的效果,在考慮已經(jīng)假配置的節(jié)點和最佳節(jié)點的執(zhí)行條件的排他性,并看一下是否滿足所述的運算器的制約、和執(zhí)行指令數(shù)的制約以及指令解碼器的制約決定的情況下,來確定該判斷。在考慮條件排他性時,使用條件排它性解析部110的結(jié)果??墒?,在更新執(zhí)行條件標(biāo)志的指令的下一周期中,也考慮到不刪除用該執(zhí)行條件執(zhí)行的指令自身。即這時,不考慮執(zhí)行條件的排他性,純粹用運算器和執(zhí)行指令數(shù)的制約判斷可配置性。
接著,調(diào)查現(xiàn)在時刻假配置的節(jié)點集合,判斷能否配置指令(步驟S57)。當(dāng)判斷為不能配置時,結(jié)束循環(huán)2,把處理轉(zhuǎn)移到步驟S60。
當(dāng)判斷為能配置時,再判斷一下是否通過配置了最佳節(jié)點產(chǎn)生了能新成為配置候補(bǔ)的節(jié)點,當(dāng)產(chǎn)生了新的配置候補(bǔ)時,把它追加到配置候補(bǔ)節(jié)點中(步驟S58)。在步驟S58中能成為配置候補(bǔ)的節(jié)點是“只具有(現(xiàn)在要配置的)最佳節(jié)點作為預(yù)執(zhí)行指令、并且與最佳節(jié)點的依存關(guān)系是逆依存或輸出依存”的節(jié)點。即在這里能成為新的配置候補(bǔ)的節(jié)點是能在與最佳節(jié)點相同的周期中執(zhí)行的、但是不能在最佳節(jié)點前的周期中執(zhí)行的節(jié)點。
循環(huán)2結(jié)束后,確定假配置節(jié)點集合中包含的節(jié)點(步驟S60)。具體而言,從原來的指令列中取出與假配置節(jié)點集合中包含的節(jié)點對應(yīng)的指令,再配置到用于傳給執(zhí)行邊界附加部113的新的指令列中。在該階段,配置候補(bǔ)節(jié)點的一部分被作為同時執(zhí)行的指令群匯集確定下來。
下面,描述步驟S54的最佳節(jié)點的決定方法。最佳節(jié)點是參照依存圖表、假配置區(qū)域,啟發(fā)式地選出大概能在最短的時間中執(zhí)行處理對象的指令全體的指令。這里,在現(xiàn)在時刻的依存圖表中,選擇到依存圖表的結(jié)束端的指令的執(zhí)行時間總和最長的。當(dāng)符合該條件的指令有多個時,把原來的指令順序中前面的指令作為最佳節(jié)點。
再回到圖12,執(zhí)行邊界附加部113在指令再配置部112的步驟S60中確定了配置的指令群的各末尾,設(shè)置并行執(zhí)行邊界信息E。
目標(biāo)代碼生成部103把指令安排部102輸出的匯編代碼變換為目標(biāo)代碼130,作為文件輸出。
(編譯裝置的動作)下面,使用具體的指令,說明本編譯裝置的特有的構(gòu)成要素的動作。
圖19是把源代碼輸入編譯器上游部100、通過匯編代碼生成部101生成的匯編代碼。指令安排部102接收圖19的代碼作為輸入。圖19中包含的各指令的意思如下。
指令1…比較寄存器R0的存儲值是否與常數(shù)0一致,在條件標(biāo)志C0中設(shè)置真假,把它的相反條件設(shè)置在條件標(biāo)志C1中。
指令2…只當(dāng)條件標(biāo)志C0的值為真時,把寄存器R1的存儲值和寄存器R2的存儲值相加,存儲到寄存器R2中。
指令3…只當(dāng)條件標(biāo)志C1的值為真時,把寄存器R2的存儲值和寄存器R3的存儲值相加,存儲到寄存器R3中。
指令4…只當(dāng)條件標(biāo)志C0的值為真時,把寄存器R1的存儲值和寄存器R3的存儲值相加,存儲到寄存器R3中。
指令5…只當(dāng)條件標(biāo)志C1的值為真時,把寄存器R3的存儲值和寄存器R4的存儲值相加,存儲到寄存器R4中。
指令6…只當(dāng)條件標(biāo)志C0的值為真時,把寄存器R2的存儲值和寄存器R4的存儲值相加,存儲到寄存器R4中。
指令7…只當(dāng)條件標(biāo)志C1的值為真時,把寄存器R3的存儲值和寄存器R5的存儲值相加,存儲到寄存器R5中。
下面,說明指令安排部102的動作。首先,啟動了條件排它性解析部110和依存關(guān)系解析部111,生成了依存圖表。在圖19的代碼例子中,考慮用指令1生成的條件標(biāo)志C0和C1在指令2以后是排他的,分析資源的定義和參照關(guān)系。在圖20中表示了生成的依存圖表。
接著,啟動了指令再配置部112。如果沿著圖18的程序流程圖進(jìn)行說明,則首先,在第一周期中,生成配置候補(bǔ)節(jié)點集合(步驟S52)。由圖20的依存圖表可知,這里只有指令1成為配置候補(bǔ)節(jié)點。接著,取出最佳節(jié)點(步驟S54)。這里,自動地選擇了指令1。然后,在可配置判定步驟(S55)中,判斷為可配置。在配置狀態(tài)判定步驟(S57)中,判斷為可配置,但是,因為在配置候補(bǔ)節(jié)點追加步驟(S58)中,不存在成為追加對象的指令,所以在配置節(jié)點確定步驟(S60)中,確定為第一周期只發(fā)出指令1。
在接著的周期中,指令2、指令3、指令4成為配置候補(bǔ)節(jié)點。如果按順序選擇了指令2、指令3作為最佳節(jié)點,就假配置。接著,如果選擇了指令4作為最佳節(jié)點,就進(jìn)入可配置判定步驟(S55)。這里,應(yīng)該進(jìn)行考慮了條件排他性的判定,但是,因為在之前的周期中,更新了執(zhí)行條件C0、C1的值,所以在該周期中,不進(jìn)行把C0、C1作為執(zhí)行條件的指令的解碼階段的消除。因此,由于不消除已經(jīng)假配置的指令2和指令3,所以根據(jù)搭載在硬件上的運算器的限制,判定為指令4是不能同時發(fā)出的即不能配置的。這樣,在第二周期中,確定為發(fā)出指令2和指令3。
在接著的周期中,指令4、指令5、指令6、指令7成為配置候補(bǔ)節(jié)點。如果按順序選擇了指令4、指令5作為最佳節(jié)點,就假配置。接著,如果選擇了指令6作為最佳節(jié)點,就進(jìn)入可配置判定步驟(S55)。這里,進(jìn)行考慮了排他性的判定。當(dāng)指令6實際執(zhí)行操作時,即當(dāng)指令6的執(zhí)行條件標(biāo)志C0為真時,因為條件標(biāo)志C1是假,所以以C1為執(zhí)行條件的指令5不執(zhí)行操作,不使用運算器。因此,在指令4和指令6的組合中,滿足了運算器的限制,所以判斷為可配置指令6。接著,如果選擇了指令7作為最佳節(jié)點,與所述同樣,當(dāng)指令7執(zhí)行操作時,因為消除了指令4和指令6,所以根據(jù)指令5和指令7的組合判定運算器的限制,判定為能配置指令7。這樣,在第三周期中,確定為能發(fā)出指令4、指令5、指令6、指令7。這里,因為沒有未配置的節(jié)點,所以指令再配置部112的處理結(jié)束。
最后,啟動了執(zhí)行邊界附加部113。這里,在由所述指令再配置部112配置指令群的末尾的指令中設(shè)置并行執(zhí)行邊界信息E。具體而言,在指令1、指令3、指令7的并行執(zhí)行邊界信息E中設(shè)置1,在剩下的指令的并行執(zhí)行邊界信息E中設(shè)置0。
到這里,指令安排部102的處理就結(jié)束了。接著,啟動了目標(biāo)代碼生成部103,輸出了目標(biāo)代碼。
圖21表示了最終的執(zhí)行形式代碼。實際的執(zhí)行形式代碼是總結(jié)為128位單位的位列。圖21所示的執(zhí)行形式代碼在本發(fā)明的具有兩個運算器的處理器中,在三個執(zhí)行組中執(zhí)行。
(與以往的編譯裝置的比較)下面,假設(shè)用不采用本發(fā)明編譯裝置結(jié)構(gòu)的以往的編譯裝置編譯圖19所示的匯編代碼,與本發(fā)明的編譯裝置比較。對象處理器與本發(fā)明的處理器同樣,為具有兩個運算器的處理器。
以往的編譯裝置在指令再配置部有所不同。首先,在最初的周期中,因為依存關(guān)系,只發(fā)出指令1。在接著的周期中,指令2、指令3、指令4成為候補(bǔ),但是,因為在一個周期中為2個這一運算器的限制,所以只發(fā)出指令2和指令4。在接著的周期中,指令4、指令5、指令6、指令7成為候補(bǔ),但是,因為運算器的限制,只發(fā)出指令4、指令5。在接著的周期中,指令6、指令7成為候補(bǔ),因為滿足運算器的限制,所以發(fā)出雙方的指令。這樣,指令再配置結(jié)束。在執(zhí)行邊界附加部中,具體而言,在指令1、指令3、指令5、指令7的并行執(zhí)行邊界信息E中設(shè)置“1”,在剩下的指令的并行執(zhí)行邊界信息E中設(shè)置“0”。到這里,指令安排處理結(jié)束。
圖22表示了作為結(jié)果而生成的執(zhí)行形式代碼。圖22所示的執(zhí)行形式代碼在具有兩個運算器的處理器中在四個執(zhí)行組中執(zhí)行。
如果比較圖21和圖22,則在以往的編譯裝置的生成代碼(圖22)中,與本發(fā)明的編譯裝置的生成代碼(圖21)相比,執(zhí)行組增加了一個。即執(zhí)行周期增加了一個周期。執(zhí)行組數(shù)之所以增加,是因為未采用本發(fā)明的指令安排部102那樣的結(jié)構(gòu),把所有的指令都作為發(fā)到執(zhí)行階段的指令處理,只能配置以硬件上搭載的運算器的個數(shù)為上限的指令。而在本發(fā)明的編譯裝置中,考慮到指令自身的無效化,能在一個周期中配置硬件上搭載的運算器的個數(shù)以上的數(shù)量的指令,從而能有效利用運算器。
須指出的是,通過把本實施例所示的編譯裝置的處理步驟存入軟盤、硬盤、CD-ROM、MO、DVD等存儲介質(zhì),就能用計算機(jī)實現(xiàn)本實施例中表示的編譯裝置。
另外,也能把用本實施例的編譯裝置生成的執(zhí)行形式代碼存入軟盤、硬盤、CD-ROM、MO、DVD、半導(dǎo)體存儲器等存儲介質(zhì)。
實施例3處理器下面,說明擴(kuò)充了所述的實施例1的處理器的處理器的實施例。
關(guān)于本處理器的硬件結(jié)構(gòu),大部分與所述的實施例1的處理器相同,但是在執(zhí)行組內(nèi)配置的指令群的執(zhí)行條件信息的配置中加了限制。具體而言,是在一個執(zhí)行組內(nèi),具有同一執(zhí)行條件的指令必須連續(xù)配置的限制。后述的實施例4的編譯裝置根據(jù)該限制生成代碼。由此,作為處理器,指令發(fā)出控制部的結(jié)構(gòu)不同。
(指令發(fā)出控制部的結(jié)構(gòu)和動作)圖23表了本實施例的處理器的指令發(fā)出控制部140和它的周邊電路的結(jié)構(gòu)。圖23中的指令發(fā)出控制部140的大部分與圖5所示的實施例1的處理器的相同。不同之處在于執(zhí)行指令選擇控制部141的控制方法和在執(zhí)行指令選擇控制部141的后段追加了指令結(jié)合部142。
首先,執(zhí)行指令選擇控制部141與實施例1所示的同樣,對于執(zhí)行條件為假的指令,進(jìn)行實質(zhì)地消除指令自身的控制,但是,如上所述,與實施例1不同,在指令的配置順序中加了限制,所以積極地利用了它。具體而言,在指令的配置順序中,因為有連續(xù)配置具有相同執(zhí)行條件的信息的指令限制,所以首先把解碼后的指令群按各執(zhí)行條件分類。根據(jù)指令的配置順序的限制,能容易地進(jìn)行該分類。
接著,按分類的各執(zhí)行條件,檢查執(zhí)行條件標(biāo)志的值是否確定為“0”。進(jìn)行控制,消除已確定為“0”的條件標(biāo)志為執(zhí)行條件的指令群,決定實際應(yīng)發(fā)給執(zhí)行部40的指令群。由此,條件標(biāo)志的檢查次數(shù)停留在最小,能同時檢測多個指令的消除可能性,能高速并且簡單地進(jìn)行應(yīng)發(fā)給執(zhí)行部40的指令的檢測。
接著,在基于執(zhí)行指令選擇控制部141的指令的消除后,指令群被傳給指令結(jié)合部142。這里,對于確定了實際用執(zhí)行部40執(zhí)行操作的指令群,檢測是否能把多個指令結(jié)合為一個復(fù)合指令,當(dāng)能結(jié)合時,把該指令的控制信號變更為新復(fù)合指令,進(jìn)行操作數(shù)的結(jié)合,進(jìn)行控制,與執(zhí)行指令選擇控制部同樣,消除后續(xù)的指令。這樣,從指令結(jié)合部142輸出與作為硬件搭載的運算器的個數(shù)相應(yīng)的兩個指令所對應(yīng)的控制信號和操作數(shù)數(shù)據(jù),傳送到執(zhí)行部40。這些指令分別有可能是多個指令的復(fù)合指令。
(處理器的動作)下面,使用圖24,就本處理器的具體的動作加以說明。圖24是表示包含條件執(zhí)行指令的程序的一個例子的圖。該程序由四個指令構(gòu)成,表示語言與圖9的程序相同。助記符號“l(fā)sr”表示寄存器的存儲值的邏輯右移。
下面,說明各執(zhí)行單位的本處理器的動作。在這里,在最初的時刻,條件標(biāo)志C0的值確定為“0”,C1的值為“1”。
(執(zhí)行單位1)從外部存儲器提供了包含指令1、指令2、指令3、指令4的信息包,分別傳送給指令寄存器23。接著,指令發(fā)出控制部140參照各指令的并行執(zhí)行邊界信息E。這時,因為指令1、指令2、指令3的并行執(zhí)行邊界信息E都是“0”,所以不進(jìn)行指令解碼器的解碼結(jié)果的無效化。
接著,指令發(fā)出控制部140參照各指令的執(zhí)行條件信息P,用執(zhí)行指令選擇控制部141選擇執(zhí)行操作的指令。指令1是經(jīng)常執(zhí)行的指令。指令2的執(zhí)行條件標(biāo)志是C0,C0的值確定為“0”,所以實質(zhì)地消除指令2自身,不執(zhí)行操作。因為后續(xù)的指令3和指令4的執(zhí)行條件標(biāo)志都是C1,所以只參照一次條件標(biāo)志C1,因為C1的值確定為“1”,所以把指令3和指令4都作為執(zhí)行對象。這樣,指令1、指令3和指令4被送到指令結(jié)合部142。
在指令結(jié)合部142,對于輸入的指令群的全部組合,判定能否生成復(fù)合指令。這時,檢測出把指令1(移位)和指令4(加法指令)結(jié)合,能生成移位加法指令。于是,作為第一個指令,與移位加法對應(yīng)的控制信號和操作數(shù)被傳給執(zhí)行部40;作為第二個指令,與指令3對應(yīng)的控制信號和操作數(shù)被傳給執(zhí)行部40。
在執(zhí)行部40中,把寄存器R3的存儲值邏輯右移寄存器R1的存儲值后得到的值加上寄存器R2的存儲值,把得到的值存儲在寄存器R2中,把寄存器R0的存儲值加1得到的值存儲在寄存器R0中。
如上所述,圖24所示的程序在處理機(jī)器中在一個執(zhí)行單位中執(zhí)行。在本處理器中,基于確定的執(zhí)行條件的指令自身的消除后,嘗試把指令彼此結(jié)合為一個復(fù)合指令。由此,能提高實質(zhì)的運算效率。另外,利用連續(xù)配置具有同一執(zhí)行條件的指令的限制,使在解碼階段選擇實際執(zhí)行操作的指令的處理高速化。
實施例4編譯裝置下面,說明生成上述實施例3的處理器所執(zhí)行的代碼的編譯裝置及其編譯方法的實施例。
關(guān)于本編譯裝置的結(jié)構(gòu),大部分與所述的實施例2的編譯裝置相同,但是不同之處在于關(guān)于一個執(zhí)行組內(nèi)的指令,按照各自的執(zhí)行條件,在配置上有限制;考慮了處理器的解碼階段的指令的結(jié)合。具體而言,指令安排部的結(jié)構(gòu)不同。
(指令安排部)本實施例的編譯裝置的指令安排部與實施例2的指令安排部102同樣,由條件排他性解析部、依存關(guān)系解析部、指令再配置部、以及執(zhí)行邊界附加部構(gòu)成,但是,不同點只在于指令再配置部的再配置方法。
圖25表示了本實施例的編譯裝置的指令再配置部的程序流程圖。本實施例的編譯裝置的指令再配置部的處理步驟與實施例2的編譯裝置的指令再配置部112的處理步驟大部分相同,但是不同點在于判定能否配置的部分;在確定了配置節(jié)點后,調(diào)整配置順序。具體而言,圖25的步驟S71~S82中,可配置判定(步驟S75)和配置順序調(diào)整(步驟S81)與圖18所示的流程不同。
與實施例2的編譯裝置同樣,通過條件排他性解析部、依存關(guān)系解析部,生成了依存標(biāo)志,移到指令再配置部。然后,根據(jù)考慮了條件排他性的依存標(biāo)志,應(yīng)該進(jìn)行指令的再配置,但是,在步驟S74選擇了最佳節(jié)點后,當(dāng)在步驟S75中,進(jìn)行可配置判定時,關(guān)于進(jìn)行了假配置的節(jié)點群和最佳節(jié)點,不只是考慮執(zhí)行條件的排他性,也考慮關(guān)于所有組合的指令結(jié)合的可能性,進(jìn)行可配置判定。即當(dāng)某兩個節(jié)點有可能結(jié)合時,把這兩個節(jié)點結(jié)合,作為一個指令處理,進(jìn)行可配置判定。
當(dāng)在步驟S80中,確定為在該周期中可配置的節(jié)點后,在步驟S81中,進(jìn)行配置順序的調(diào)整。具體而言,把在該周期中可配置的節(jié)點群分別按各執(zhí)行條件分類,調(diào)整節(jié)點的配置順序,使具有同一執(zhí)行條件的節(jié)點必須連續(xù)配置。由此,實現(xiàn)了硬件的控制的簡單化。
(編譯裝置的動作)下面,參照圖26,使用具體的指令,就本編譯裝置的特征構(gòu)成要素的動作加以說明。圖26是通過編譯器上游部以及匯編代碼生成部生成的匯編代碼的一個例子。指令安排部接收圖26的代碼作為輸入。圖26中包含的各指令的意思如下。在此,假設(shè)條件標(biāo)志C0和C1根據(jù)指令1以前的指令變?yōu)榕潘年P(guān)系。
指令1…把寄存器R3的存儲值邏輯右移寄存器R1的存儲值。
指令2…只當(dāng)條件標(biāo)志C1的值為真時,把寄存器R0的存儲值加1,存儲到寄存器R0。
指令3…只當(dāng)條件標(biāo)志C0的值為真時,把寄存器R0的存儲值減1,存儲到寄存器R0。
指令4…只當(dāng)條件標(biāo)志C1的值為真時,把寄存器R1的存儲值和寄存器R2的存儲值相加后,存儲到寄存器R2。
下面,就指令安排部的動作加以說明。首先,啟動了條件排它性解析部和依存關(guān)系解析部,生成了依存圖表。在例子中,考慮條件標(biāo)志C0和C1是排他的,分析資源的定義和參照關(guān)系。
接著,啟動了指令再配置部。如果沿著圖25的程序流程圖進(jìn)行說明,則首先生成配置候補(bǔ)節(jié)點集合(步驟S72)。這里,只有指令1成為配置候補(bǔ)節(jié)點。接著,取出最佳節(jié)點(步驟S74)。這里,自動地選擇了指令1。然后,在可配置判定(步驟S75)中,判斷為可配置。在配置狀態(tài)判定(步驟S77)中,判斷為可配置。然后,在配置候補(bǔ)節(jié)點追加(步驟S78)中在配置候補(bǔ)節(jié)點中追加了指令2、指令3、指令4作為成為追加對象的指令。
然后,再次返回,取出最佳節(jié)點(步驟S74)。這里,首先選擇了指令2,判斷為可配置(步驟S75)。
然后,再次返回,取出最佳節(jié)點(步驟S74)。這里,選擇了指令3。而且,因為指令2和指令3的執(zhí)行條件為排他的,所以滿足2個這一運算器的限制,判斷為可配置(步驟S75)。
再次返回,取出最佳節(jié)點(步驟S74)。這里,自動地選擇了剩下的指令4。然后,進(jìn)行可配置判定(步驟S75),但是當(dāng)假定執(zhí)行條件C0為真時,只有指令1和指令3有效,所以滿足了運算器的限制。而當(dāng)假定執(zhí)行條件C1為真時,指令1、指令2、指令4等三個指令有效。于是,對于其間所有組合,調(diào)查指令的結(jié)合可能性。這里,判斷為能把指令1和指令4結(jié)合,當(dāng)成硬件上設(shè)置的移位加法指令,結(jié)果,因為兩個指令變?yōu)橛行?,所以判定為可配置?br> 在上述步驟中,在第一周期中配置了全部指令,確定配置節(jié)點(步驟S80)。接著,按執(zhí)行條件把各節(jié)點分類,進(jìn)行配置順序的調(diào)整(步驟S81)。具體而言,因為指令2和指令4的執(zhí)行條件C1相同,所以把配置順序重新排列為指令1、指令2、指令4、指令3,使指令2和指令4繼續(xù)配置。到此結(jié)束了指令再配置部的處理。
最后,啟動了執(zhí)行邊界附加部。這里,在由所述指令再配置部配置的指令群的末尾的指令中設(shè)置并行執(zhí)行邊界信息。具體而言,在指令3的并行執(zhí)行邊界信息中設(shè)置“1”,在剩下的指令的并行執(zhí)行邊界信息中設(shè)置“0”。到此結(jié)束了指令安排部的處理。
如上所述,在本實施例的編譯裝置中,在編譯中要做到使圖26所示的指令列在一個執(zhí)行組中執(zhí)行。這里,在可配置判定(步驟S75)中,體現(xiàn)了考慮了在處理器的解碼階段的指令結(jié)合的效果。通過調(diào)整使具有相同執(zhí)行條件的指令連續(xù)配置,能簡化在處理器的解碼階段選擇有效指令時的控制。
須指出的是,通過把本實施例所示的編譯裝置的處理步驟存入軟盤、硬盤、CD-ROM、MO、DVD等存儲介質(zhì),就能用計算機(jī)實現(xiàn)本實施例中表示的編譯裝置。
另外,也能把用本實施例的編譯裝置生成的執(zhí)行形式代碼存入軟盤、硬盤、CD-ROM、MO、DVD、半導(dǎo)體存儲器等存儲介質(zhì)。
以上,根據(jù)實施例說明了本發(fā)明的處理器和編譯裝置,但是本發(fā)明當(dāng)然并不局限于這些實施例。下面,列舉變形例。
(1)在所述實施例的處理器和編譯裝置中,假設(shè)執(zhí)行固定長度的指令,但是本發(fā)明不局限于這樣的指令格式。本發(fā)明也適用于可變長度的指令格式。
(2)在所述實施例的處理器和編譯裝置中,假定為具有兩個運算器,但是本發(fā)明并不局限于該運算器數(shù)。本發(fā)明也適用于具有1一個運算器或三個以上運算器的處理器。
(3)在所述實施例的處理器和編譯裝置中,假設(shè)編譯裝置靜態(tài)地抽出指令并行性,但是本發(fā)明并不局限于該指令并行處理方式。例如本發(fā)明也適用于用硬件動態(tài)抽出指令并行性的超標(biāo)量體系結(jié)構(gòu)方式。這時,從本發(fā)明的指令格式除去并行執(zhí)行邊界信息E,一邊用指令發(fā)出控制部動態(tài)地檢測與該信息依存的處理,一邊實施就可以了。
(4)在所述實施例的處理器和編譯裝置中,作為圖18中的步驟S54的最佳節(jié)點的決定方法,使用了到依存標(biāo)志的結(jié)束端的執(zhí)行時間的總和,但是,本發(fā)明并不局限于該選擇基準(zhǔn)。例如,也可以在多個執(zhí)行流程中,優(yōu)先選擇特定的路徑。這時,在取出最佳節(jié)點(步驟S54)時,提高具有某特定的執(zhí)行條件的指令的優(yōu)先級。由此,能進(jìn)行特化為執(zhí)行頻率高的路徑等特定的執(zhí)行路徑的安排。
(5)在所述實施例的處理器的指令發(fā)出控制部中,必須使最初出現(xiàn)的并行執(zhí)行邊界信息E為“1”的指令以后的指令的解碼結(jié)果無效化,但是也不一定要這樣。當(dāng)用指令發(fā)出控制部內(nèi)的執(zhí)行指令選擇控制部判斷為傳給執(zhí)行部的指令在所述最初出現(xiàn)的并行執(zhí)行邊界信息E為“1”的指令以前一個也沒有時,可刪除該周期全體,把接著出現(xiàn)的并行執(zhí)行邊界信息E為“1”的指令之前的指令群作為該周期的發(fā)出對象。即,當(dāng)并行執(zhí)行邊界信息E為“1”的指令之前只要存在一個判定為應(yīng)該執(zhí)行有效操作的指令時,把該指令作為并行執(zhí)行的邊界,使以后的指令的解碼結(jié)果無效化,當(dāng)不是這樣時,可忽略該指令的并行執(zhí)行邊界信息E,通過參照后續(xù)的指令的并行執(zhí)行邊界信息E,檢測新的并行執(zhí)行邊界。由此,能進(jìn)一步削減執(zhí)行周期數(shù)。
如上所述,根據(jù)本發(fā)明,能提供出實現(xiàn)硬件的有效利用、性能提高的處理器、編譯裝置與編譯方法、存儲介質(zhì)。
權(quán)利要求
1.一種處理器,其中,包括如下各單元指令提供單元——用于提供多個指令,和解碼單元——用于分別把所述多個指令進(jìn)行解碼,和指令發(fā)出控制單元——參照用執(zhí)行條件信息指定的條件,決定執(zhí)行有效操作的指令或指令的集合,執(zhí)行條件信息是在所述多個指令中指定表示是否執(zhí)行各指令的信息,及執(zhí)行單元——根據(jù)指定執(zhí)行一個或多個操作,所述指定是指在所述多個指令中指定各指令的動作;指令發(fā)出控制單元具有以下功能通過參照用執(zhí)行條件信息指定的條件,判斷是有必要執(zhí)行的有效指令還是沒有必要執(zhí)行的無效指令,對于判斷為是無效指令的指令,通過控制使得該指令在被向所述執(zhí)行單元發(fā)出前被刪除,并且還通過控制使得該指令被該指令的后續(xù)有效指令所取代,向所述執(zhí)行單元發(fā)出。
2.根據(jù)權(quán)利要求1所述的處理器,其特征在于所述執(zhí)行單元具有在執(zhí)行與所述指令對應(yīng)的操作后用于使執(zhí)行結(jié)果無效化的執(zhí)行結(jié)果無效化單元,還包括指令無效化方法選擇單元——對于各指令,選擇是在向所述執(zhí)行單元發(fā)出前刪除該指令自身,還是用所述執(zhí)行結(jié)果無效化單元使執(zhí)行結(jié)果無效。
3.根據(jù)權(quán)利要求2所述的處理器,其特征在于所述指令無效化方法選擇單元通過參照表示各條件標(biāo)志的值是否確定的條件標(biāo)志有效信息,決定選擇哪個指令無效化方法;所述條件標(biāo)志有效信息中,當(dāng)所述解碼單元解碼為是更新條件標(biāo)志的指令時,該條件標(biāo)志的確定性設(shè)置為假,而當(dāng)用所述執(zhí)行單元執(zhí)行該指令、該條件標(biāo)志的值確定了時,設(shè)置為真。
4.根據(jù)權(quán)利要求1所述的處理器,其特征在于所述指令發(fā)出控制單元還具有以下功能檢測能用單一的指令實現(xiàn)多個指令的功能的指令組合,從而進(jìn)行結(jié)合,把這些個指令作為單一的指令處理。
5.根據(jù)權(quán)利要求4所述的處理器,其特征在于所述多個指令的結(jié)合適用于向所述執(zhí)行單元發(fā)出前刪除指令以后才被適用。
6.根據(jù)權(quán)利要求1所述的處理器,其特征在于所述指令發(fā)出控制單元,當(dāng)在各周期中連續(xù)配置了具有相同的所述執(zhí)行條件信息的指令時,預(yù)先把由所述解碼單元解碼的多個指令按各執(zhí)行條件分類,按該分類參照條件標(biāo)志來判斷是有必要執(zhí)行的有效指令還是沒有必要執(zhí)行的無效指令。
7.根據(jù)權(quán)利要求1所述的處理器,其特征在于在所述多個指令中,指定了表示是否為各指令并行執(zhí)行的邊界的并行執(zhí)行邊界信息,所述指令發(fā)出控制單元還具有如是功能參照各指令的所述并行執(zhí)行邊界信息,檢測出在當(dāng)前周期中為執(zhí)行對象的指令群。
8.根據(jù)權(quán)利要求7所述的處理器,其特征在于所述指令發(fā)出控制單元,當(dāng)用指令內(nèi)的并行執(zhí)行邊界信息檢測的邊界指令以前的所有指令作為沒有必要執(zhí)行的無效指令被刪除時,使該邊界指令的并行執(zhí)行邊界信息無效化,通過參照該邊界指令以后的并行執(zhí)行邊界信息,檢測當(dāng)前周期的新的并行執(zhí)行邊界。
9.一種處理器,其中,包括如下各單元指令提供單元——用于提供多個指令,和解碼單元——用于分別把所述多個指令進(jìn)行解碼,和指令發(fā)出控制單元——決定執(zhí)行有效操作的指令或指令的集合,及執(zhí)行單元——根據(jù)指定執(zhí)行一個或多個操作,所述指定是指在所述多個指令中指定各指令的動作;指令發(fā)出控制單元具有以下功能從用所述解碼單元解碼的指令群中,檢測出能用單一的指令實現(xiàn)多個指令的功能的指令組合,進(jìn)行結(jié)合,把這些個指令作為單一的指令處理。
10.根據(jù)權(quán)利要求9所述的處理器,其特征在于所述指令發(fā)出控制單元還具有以下功能檢測出在當(dāng)前周期中未成為執(zhí)行對象、刪除對象、結(jié)合對象而剩下的指令群,進(jìn)行控制使這些指令群在下一周期以后成為發(fā)出對象。
11.一種編譯裝置,用于把用高級語言記述的程序的源代碼變換為執(zhí)行形式代碼,其中,具有用于把所述源代碼中的指令重新排列、使應(yīng)該并行執(zhí)行的指令相鄰的多個指令安排單元;所述指令安排單元包括如下各單元條件排他性解析單元——對于執(zhí)行附加在各指令中的有效操作的條件,解析各條件可否同時成立,及指令再配置單元——進(jìn)行指令的重新配置,使得可按周期中區(qū)分并行執(zhí)行的指令的集合;所述指令再配置單元,判定一下配置在當(dāng)前周期中的指令中執(zhí)行有效操作的指令使用的運算資源是否超出搭載在對象儀器上的運算器的限制,并且當(dāng)判定為配置在當(dāng)前周期中的兩個指令的執(zhí)行條件在所述條件排他解析單元中不能同時成立時,在一定的條件下,只把任意一方的指令作為使用運算資源的指令處理。
12.根據(jù)權(quán)利要求11所述的編譯裝置,其特征在于所述指令再配置單元,即使當(dāng)配置在當(dāng)前周期中的兩個指令的執(zhí)行條件在所述條件排他性解析單元中判定為不會同時成立時,只要所述指令中的至少一方指令的執(zhí)行條件所對應(yīng)的條件標(biāo)志的內(nèi)容不確定,也作為所述兩個指令雙方使用運算資源處理。
13.根據(jù)權(quán)利要求12所述的編譯裝置,其特征在于所述指令再配置單元根據(jù)當(dāng)前周期的前一周期中,是否配置了更新所述兩個指令的至少一方指令的執(zhí)行條件所對應(yīng)的條件標(biāo)志的指令,判定條件標(biāo)志的內(nèi)容是否確定。
14.根據(jù)權(quán)利要求11所述的編譯裝置,其特征在于所述指令再配置單元,根據(jù)所述條件排他性解析單元的分析結(jié)果,對于執(zhí)行條件不會同時成立的指令,處理為只有一方使用運算資源,并且檢測出能用單一的指令實現(xiàn)使用運算資源的多個指令的功能的指令組合,把這些多個指令結(jié)合,作為單一指令處理。
15.根據(jù)權(quán)利要求11所述的編譯裝置,其特征在于所述指令再配置單元還具有以下功能對于在當(dāng)前周期中判定為可配置的指令的集合,調(diào)整配置順序,使具有相同的執(zhí)行條件的指令連續(xù)配置。
16.根據(jù)權(quán)利要求11所述的編譯裝置,其特征在于所述指令再配置單元,當(dāng)選擇當(dāng)前周期中配置的指令時,優(yōu)先選擇多個執(zhí)行條件中具有特定的執(zhí)行條件的指令。
17.一種編譯裝置,用于把用高級語言記述的程序的源代碼變換為執(zhí)行形式代碼,其中,具有把所述源代碼中的指令重新排列、使應(yīng)該并行執(zhí)行的多個指令相鄰的指令安排單元;所述指令安排單元具有進(jìn)行指令的重新配置、使得可以按周期區(qū)分可并行執(zhí)行的指令的集合的指令再配置單元;所述指令再配置單元檢測能用單一的指令實現(xiàn)多個指令的功能的指令組合,把這些多個指令結(jié)合,作為單一指令處理,判定能否在當(dāng)前周期中配置。
18.根據(jù)權(quán)利要求17所述的編譯裝置,其特征在于所述指令安排單元還具有執(zhí)行邊界附加單元,該執(zhí)行邊界附加單元根據(jù)所述指令再配置單元的結(jié)果,在指令內(nèi)附加表示是否為并行執(zhí)行的邊界的并行執(zhí)行邊界信息。
19.一種編譯裝置,用于把用高級語言記述的程序的源代碼變換為執(zhí)行形式代碼,其中,具有用于把所述源代碼中的指令重新排列、使應(yīng)該并行執(zhí)行的指令相鄰的多個指令安排單元;所述指令安排單元包括如下各單元條件排他性解析單元——對于執(zhí)行附加在各指令中的有效操作的條件,解析各條件可否同時成立,及指令再配置單元——進(jìn)行指令的重新配置,使得可按周期中區(qū)分并行執(zhí)行的指令的集合;所述條件排他性解析單元,對于各基本塊開頭的指令和更新與操作執(zhí)行的有效性相關(guān)的某一條件標(biāo)志的指令,生成表示在各時刻的各條件標(biāo)志間的同時成立可能性的表。
20.根據(jù)權(quán)利要求19所述的編譯裝置,其特征在于所述指令安排單元還具有用于分析指令間的依存關(guān)系的依存關(guān)系解析單元;所述依存關(guān)系解析單元,根據(jù)用所述條件排他性解析單元生成的表,檢索各指令的在執(zhí)行時刻是有效的條件標(biāo)志間的同時成立可能性,分析兩個指令能否同時執(zhí)行。
21.一種編譯方法,用于把用高級語言記述的程序的源代碼變換為執(zhí)行形式代碼,其中,具有把所述源代碼中的指令重新排列、使應(yīng)該并行執(zhí)行的多個指令相鄰的指令安排步驟;所述指令安排步驟包括如下各步驟條件排他性解析步驟——對于執(zhí)行附加在各指令中的有效操作的條件,解析各條件可否同時成立,及指令再配置步驟——進(jìn)行指令的重新配置,使得可按周期中區(qū)分并行執(zhí)行的指令的集合;所述指令再配置單元具有如是可配置判定步驟判定一下配置在當(dāng)前周期中的指令中執(zhí)行有效操作的指令使用的運算資源是否超出搭載在對象儀器上的運算器的限制,并且當(dāng)判定為配置在當(dāng)前周期中的兩個指令的執(zhí)行條件在所述條件排他解析步驟中不能同時成立時,只把任意一方的指令作為使用運算資源的指令處理。
22.一種記錄了程序的存儲介質(zhì),記錄了把用高級語言記述的程序的源代碼變換為執(zhí)行形式代碼的程序,其中,所述程序具有把所述源代碼中的指令重新排列、使應(yīng)該并行執(zhí)行的多個指令相鄰的指令安排步驟;所述指令安排步驟包括如下各步驟條件排他性解析步驟——對于執(zhí)行附加在各指令中的有效操作的條件,解析各條件可否同時成立,及指令再配置步驟——進(jìn)行指令的重新配置,使得可按周期中區(qū)分并行執(zhí)行的指令的集合;所述指令再配置單元具有如是可配置判定步驟判定一下配置在當(dāng)前周期中的指令中執(zhí)行有效操作的指令使用的運算資源是否超出搭載在對象儀器上的運算器的限制,并且當(dāng)判定為配置在當(dāng)前周期中的兩個指令的執(zhí)行條件在所述條件排他解析步驟中不能同時成立時,只把任意一方的指令作為使用運算資源的指令處理。
全文摘要
處理器在執(zhí)行階段以前,用指令發(fā)出控制部31對超過搭載的運算器個數(shù)的指令解碼,進(jìn)行執(zhí)行條件的判定,對于條件為假的指令,使該指令自身無效化,進(jìn)行分配,使后續(xù)的有效指令有效地使用運算器(硬件)。編譯裝置進(jìn)行安排,使執(zhí)行條件為真的指令的個數(shù)不超過硬件并行度的上限。在各周期中,并行配置的指令個數(shù)自身可以超過硬件并行度。克服了以下問題在條件執(zhí)行指令中,當(dāng)條件不成立時,作為無動作指令執(zhí)行,使硬件的利用率低,有效性能下降。
文檔編號G06F9/45GK1409210SQ02142499
公開日2003年4月9日 申請日期2002年9月20日 優(yōu)先權(quán)日2001年9月20日
發(fā)明者瓶子岳人, 高山秀一, 田中哲也, 小川一, 檜垣信生 申請人:松下電器產(chǎn)業(yè)株式會社
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
新巴尔虎左旗| 平江县| 章丘市| 巴楚县| 灵宝市| 陕西省| 平罗县| 扎赉特旗| 晋中市| 那坡县| 平谷区| 蒙城县| 周宁县| 卫辉市| 迁安市| 彰武县| 仁寿县| 灵台县| 聊城市| 泸州市| 郧西县| 滦平县| 抚松县| 蒙城县| 合阳县| 江川县| 邵东县| 潞城市| 无棣县| 昌都县| 登封市| 泰顺县| 庄河市| 甘德县| 蛟河市| 双牌县| 洛隆县| 青州市| 汝城县| 额尔古纳市| 白山市|