本發(fā)明涉及計算機軟件領域,具體涉及一種面向混合指令集架構的指令選擇優(yōu)化方法。
背景技術:
::1、在計算機領域,指令集架構(instruction?set?architecture,isa)是軟件和硬件之間的接口,規(guī)定了軟件可以執(zhí)行哪些操作以及硬件如何執(zhí)行這些操作。指令集架構好比是一種語言,直接將相關硬件和軟件劃分為不同的生態(tài)系統(tǒng)。使用同一個指令集架構的硬件和軟件屬于同一個生態(tài)系統(tǒng),使用不同指令集架構的硬件和軟件屬于不同的生態(tài)系統(tǒng),面向一個生態(tài)系統(tǒng)編譯的二進制應用程序無法在另一個生態(tài)系統(tǒng)的硬件平臺上運行?;旌现噶罴軜嬍且环N解決實際應用二進制應用程序跨平臺運行需求的技術,在特權態(tài)支持arm指令集架構,用戶態(tài)同時支持arm和risc-v兩種指令集架構,即支持arm和risc-v兩種指令集架構應用的運行。2、混合指令集架構采用基于基礎算子的執(zhí)行流水線設計技術,主要以arm64的指令執(zhí)行流水線為基礎來實現rv64g的指令,有些rv64g的指令直接映射到功能等同的arm64指令,而有些rv64g指令則由多個arm64指令的組合來完成,甚至還存在兩條連續(xù)的rv64g指令被融合成一條arm64指令執(zhí)行的情況。這種處理器微架構實現導致完成同等功能的不同rv64g指令組合在混合指令集架構處理器上的運行效率會有較大差別,在編譯rv64g應用時,如何選擇指令對編譯生成的可執(zhí)行代碼的性能有著非常重要的影響。3、指令選擇是編譯器后端代碼生成的關鍵一步,編譯器通常將高級語言程序轉換成中間表示(intermediate?representation,ir),在ir上完成一系列分析與優(yōu)化之后,編譯器后端把經過優(yōu)化的ir轉換成目標指令集的匯編代碼。指令選擇完成將ir映射為最優(yōu)目標指令集匯編代碼的工作,對于生成高效、優(yōu)化的機器代碼至關重要。當前對于優(yōu)化編譯器的指令選擇方法有較多研究,不過還沒有直接針對混合指令集架構的指令選擇方法的研究。在混合指令集架構中,rv64g指令會被映射成arm64指令執(zhí)行,增加了rv64g應用生成過程中指令選擇的難度。已有的編譯器在面向混合指令集架構編譯rv64g應用時無法生成性能最優(yōu)的代碼,不能滿足當前混合指令集架構的應用需求。因此,面向混合指令集架構的指令選擇優(yōu)化方法對混合指令集架構的推廣應用有著重要的意義。技術實現思路1、本發(fā)明要解決的技術問題:針對現有技術的上述問題,提供一種面向混合指令集架構的指令選擇優(yōu)化方法,采用樹遍歷映射的方法開展指令選擇優(yōu)化,采用樹的中間表示形式進行代碼變換,通過局部選擇最優(yōu)指令組合來生成全局最優(yōu)代碼。2、為了解決上述技術問題,本發(fā)明采用的技術方案為:3、一種面向混合指令集架構的指令選擇優(yōu)化方法,包括以下步驟:4、獲取源應用程序的ir樹;5、遍歷所述ir樹,在節(jié)點代價表costtable中記錄以每個節(jié)點為根的子樹的最小代價;6、遍歷所述ir樹,在指令表instructiontable中記錄每個節(jié)點的指令值;7、遍歷所述ir樹,將每個節(jié)點匹配目標平臺指令的模式patten,根據匹配結果更新節(jié)點代價表costtable每個節(jié)點對應的最小代價,并更新指令表instructiontable中每個節(jié)點對應的指令值;8、遍歷所述ir樹,根據指令表instructiontable中每個節(jié)點更新后的指令值生成目標代碼,得到源應用程序的目標平臺指令。9、進一步的,在節(jié)點代價表costtable中記錄以每個節(jié)點為根的子樹的最小代價時,具體包括:10、判斷當前節(jié)點是否為空,如果不為空則執(zhí)行下一步;11、在節(jié)點代價表costtable中新增當前節(jié)點對應的項;12、獲取當前節(jié)點的所有子節(jié)點,依次選取每個子節(jié)點并計算對應的代價;13、根據每個節(jié)點的代價分別計算以每個節(jié)點為根的子樹的最小代價,將每個節(jié)點對應的項更新為對應的最小代價。14、進一步的,在指令表instructiontable中記錄每個節(jié)點的指令值時,具體包括:15、判斷當前節(jié)點是否為空,如果不為空則執(zhí)行下一步;16、在指令表instructiontable中新增當前節(jié)點對應的項;17、獲取當前節(jié)點的所有子節(jié)點,依次選取每個子節(jié)點并計算對應的指令值;18、將每個節(jié)點對應的項更新為對應的指令值。19、進一步的,依次選取每個子節(jié)點并計算對應的指令值時,具體是計算以被選取的子節(jié)點為根的子樹代價最小時所對應的機器指令。20、進一步的,將每個節(jié)點匹配目標平臺指令的模式patten,根據匹配結果更新節(jié)點代價表costtable每個節(jié)點對應的最小代價,并更新指令表instructiontable中每個節(jié)點對應的指令值時,包括:21、判斷當前節(jié)點是否為空,如果不為空則執(zhí)行下一步;22、獲取當前節(jié)點所匹配的所有模式patten;23、依次選取每一個模式patten,將被選取模式patten的子節(jié)點匹配節(jié)點代價表costtable,得到被選取模式patten的子節(jié)點的代價;24、將被選取模式patten的所有子節(jié)點的代價與被選取模式patten的代價相加,得到被選取模式patten的總代價totalcost;25、若總代價totalcost小于當前節(jié)點對應的最小代價,將節(jié)點代價表costtable中當前節(jié)點對應的最小代價更新為總代價totalcost,同時根據被選取模式patten和當前節(jié)點生成新的指令,并將指令表instructiontable中當前節(jié)點對應的指令值更新為新的指令。26、進一步的,根據指令表instructiontable中每個節(jié)點更新后的指令值生成目標代碼時,包括:27、判斷當前節(jié)點是否為空,如果不為空則執(zhí)行下一步;28、從指令表instructiontable中獲取當前節(jié)點的指令值,并寫入目標代碼文件。29、進一步的,遍歷所述ir樹具體是采用指定的搜索算法,從根節(jié)點開始自底向上遍歷所述ir樹。30、進一步的,指定的搜索算法具體是指深度優(yōu)先搜索算法。31、本發(fā)明還提出一種面向混合指令集架構的指令選擇優(yōu)化系統(tǒng),包括互相連接的微處理器和計算機可讀存儲介質,所述微處理器被編程或者配置以執(zhí)行任一項所述的面向混合指令集架構的指令選擇優(yōu)化方法。32、本發(fā)明還提出一種計算機可讀存儲介質,所述計算機可讀存儲介質中存儲有計算機程序,所述計算機程序用于被微處理器被編程或者配置以執(zhí)行任一項所述的面向混合指令集架構的指令選擇優(yōu)化方法。33、與現有技術相比,本發(fā)明的優(yōu)點在于:34、本發(fā)明采用動態(tài)規(guī)劃的方法通過遞歸地方式將整棵ir樹的映射問題分解成更小的子樹映射問題,并保存每棵子樹的最優(yōu)解,通過自底向上的計算方式,每個子問題的最優(yōu)解被逐層合并,從而得到整個問題的最優(yōu)解。通過局部選擇最優(yōu)指令組合來生成全局最優(yōu)代碼,每個子樹的最優(yōu)選擇保證了整體代碼的效率。當前第1頁12當前第1頁12