專利名稱:基于模調(diào)度實(shí)現(xiàn)循環(huán)指令調(diào)度的編譯方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及現(xiàn)代處理器代碼編譯優(yōu)化方法,尤其涉及基于模調(diào)度實(shí)現(xiàn)循環(huán)指令調(diào)度的編譯方法及編譯器裝置。
背景技術(shù):
在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,通過(guò)編譯器各種優(yōu)化方法來(lái)挖掘處理器指令級(jí)并行性,是提高處理器性能的有效手段。軟件流水是編譯器中一種常見的優(yōu)化方法,它通過(guò)在循環(huán)級(jí)別進(jìn)行指令調(diào)度來(lái)挖掘指令級(jí)并行性,以提高處理器的性能。軟件流水的基本思想是通過(guò)重疊執(zhí)行不同循環(huán)體指令來(lái)挖掘指令級(jí)并行性。編譯器以C/C++/Java等高級(jí)語(yǔ)言源程序作為輸入,從高級(jí)語(yǔ)言源程序中提取循環(huán)相關(guān)的代碼作為調(diào)度對(duì)象,首先為這些循環(huán)建立控制流圖(CFG,Control-Flow Graph)和數(shù)據(jù)依賴圖 (DDG, Data-Dependence Graph),然后將處理器中指令的延時(shí)和資源占用情況進(jìn)行抽象,得到整個(gè)循環(huán)的控制依賴約束、數(shù)據(jù)依賴約束和資源約束?;谀U{(diào)度的這些約束條件,軟件流水使用自頂向下、自底向上或者雙向調(diào)度方法,對(duì)循環(huán)中的指令進(jìn)行調(diào)度,使其重組成為新的循環(huán)。重組之后的循環(huán)包括入口代碼(prologue)、核心代碼(kernel)以及排空代碼 (epilogue)三部分;其中入口代碼和出口代碼都是為了保持程序語(yǔ)義的正確性設(shè)置的,而核心代碼則是循環(huán)的主體部分。在重組之后的循環(huán)中,循環(huán)核心的指令數(shù)目基本上和原來(lái)的循環(huán)保持一致,但是指令順序發(fā)生了變化,尤其是相鄰指令之間的依賴數(shù)量大大降低,從而減小指令之間由于依賴關(guān)系而導(dǎo)致的指令延時(shí),并進(jìn)一步減小程序運(yùn)行時(shí)間。目前已有的軟件流水技術(shù)一般采用“表調(diào)度”等啟發(fā)式策略,在循環(huán)重組過(guò)程中需要始終遵循所有的控制依賴約束、數(shù)據(jù)依賴約束和系統(tǒng)資源約束。若調(diào)度過(guò)程發(fā)生違反約束的沖突,則調(diào)度過(guò)程可能會(huì)失敗,從而導(dǎo)致重組循環(huán)的性能降低。隨著現(xiàn)代處理器中指令發(fā)射寬度的增加和指令類型的增多,以上這種由于約束條件沖突引起的指令調(diào)度過(guò)程失敗情況也越來(lái)越常見。調(diào)度過(guò)程的失敗一方面可能導(dǎo)致完全無(wú)法挖掘指令級(jí)并行性,另一方面也可能引發(fā)循環(huán)執(zhí)行時(shí)間較長(zhǎng)和寄存器壓力較大等問題,從而導(dǎo)致應(yīng)用程序的性能較低。因此,有效地解決現(xiàn)有技術(shù)中由于約束條件沖突引起的軟件流水調(diào)度失敗問題, 從而提高循環(huán)重組之后的代碼性能,對(duì)提高處理器性能乃至整個(gè)計(jì)算機(jī)系統(tǒng)性能都有著重要作用。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種基于模調(diào)度實(shí)現(xiàn)循環(huán)指令調(diào)度的編譯方法及裝置,能夠有效地避免由于模調(diào)度約束條件沖突弓I起的指令調(diào)度失敗。為了解決上述技術(shù)問題,本發(fā)明提供了一種基于模調(diào)度實(shí)現(xiàn)循環(huán)指令調(diào)度的編譯方法,包括由編譯器執(zhí)行的下列步驟讀入并解析源程序,獲取控制流圖信息;
建立循環(huán)體結(jié)構(gòu)的數(shù)據(jù)依賴約束和資源依賴約束;在對(duì)循環(huán)體結(jié)構(gòu)執(zhí)行模調(diào)度過(guò)程中,針對(duì)檢測(cè)指令調(diào)度結(jié)果發(fā)生的數(shù)據(jù)依賴沖突和/或資源沖突根據(jù)符合相應(yīng)約束的回溯模型解決。進(jìn)一步地,讀入并解析源程序,獲取控制流圖信息,具體包括讀入高級(jí)語(yǔ)言源程序,并通過(guò)控制流分析技術(shù)對(duì)高級(jí)語(yǔ)言的前端進(jìn)行解析,獲取基本塊,并獲取表述基本塊的程序結(jié)構(gòu)的控制流圖信息。進(jìn)一步地,針對(duì)循環(huán)體結(jié)構(gòu)建立數(shù)據(jù)依賴約束和資源依賴約束,具體包括根據(jù)控制流圖信息建立所述數(shù)據(jù)依賴約束,根據(jù)目標(biāo)處理器的資源信息建立資源依賴約束。進(jìn)一步地,在對(duì)循環(huán)體結(jié)構(gòu)執(zhí)行模調(diào)度過(guò)程中,針對(duì)檢測(cè)指令調(diào)度結(jié)果發(fā)生的數(shù)據(jù)依賴沖突和/或資源沖突根據(jù)符合相應(yīng)約束的回溯模型解決,具體包括根據(jù)預(yù)先對(duì)處理器執(zhí)行可執(zhí)行程序時(shí)采用典型輸入數(shù)據(jù)收集的剖視信息指導(dǎo)對(duì)循環(huán)指令的模調(diào)度;針對(duì)循環(huán)體中每一條需要調(diào)度指令當(dāng)前節(jié)點(diǎn)的調(diào)度結(jié)果進(jìn)行數(shù)據(jù)依賴沖突的檢測(cè)和/或資源沖突的檢測(cè);針對(duì)檢測(cè)到調(diào)度結(jié)果會(huì)發(fā)生數(shù)據(jù)依賴沖突和/或資源沖突,則相應(yīng)地使用符合數(shù)據(jù)依賴約束的回溯模型和符合資源約束的回溯模型消除。進(jìn)一步地,其中該方法中各步驟具體為根據(jù)剖視信息中的值剖視信息識(shí)別循環(huán)體結(jié)構(gòu),并初始化數(shù)據(jù)依賴沖突和資源沖突;根據(jù)剖視信息中的路徑剖視信息指導(dǎo)從控制依賴到數(shù)據(jù)依賴的轉(zhuǎn)換過(guò)程;在假定啟動(dòng)間距條件下,采用擺動(dòng)模調(diào)度算法選擇對(duì)當(dāng)前指令的調(diào)度位置,并設(shè)置相應(yīng)的調(diào)度優(yōu)先級(jí);若檢測(cè)選擇的當(dāng)前指令的調(diào)度位置會(huì)產(chǎn)生數(shù)據(jù)依賴沖突,則依據(jù)符合數(shù)據(jù)依賴約束的回溯模型中的回溯節(jié)點(diǎn)選擇目標(biāo)和約束條件選取部分指令節(jié)點(diǎn)作為回溯節(jié)點(diǎn),取消對(duì)回溯節(jié)點(diǎn)選擇的調(diào)度位置,并更新回溯節(jié)點(diǎn)的調(diào)度優(yōu)先級(jí);若檢測(cè)選擇的當(dāng)前指令的調(diào)度位置會(huì)產(chǎn)生資源沖突,則依據(jù)符合資源約束的回溯模型中的回溯節(jié)點(diǎn)選擇目標(biāo)和約束條件選取部分指令節(jié)點(diǎn)作為回溯節(jié)點(diǎn),取消所有與該回溯節(jié)點(diǎn)發(fā)生資源沖突的節(jié)點(diǎn),并更新回溯節(jié)點(diǎn)的調(diào)度優(yōu)先級(jí)。進(jìn)一步地,該方法還包括重組循環(huán)體結(jié)構(gòu),編譯生成可執(zhí)行程序,具體包括根據(jù)剖釋信息分析模調(diào)度收益,若判斷模調(diào)度收益能保證調(diào)度結(jié)果有效,則根據(jù)調(diào)度優(yōu)先級(jí)將相應(yīng)指令調(diào)度到選擇的調(diào)度位置上,并依據(jù)產(chǎn)生的循環(huán)入口代碼和循環(huán)出口代碼重組所述循環(huán)體結(jié)構(gòu),將源程序編譯成可執(zhí)行程序。為了解決上述技術(shù)問題,本發(fā)明提供了一種基于模調(diào)度實(shí)現(xiàn)循環(huán)指令調(diào)度的編譯器裝置,其特征在于,包括依次連接的控制流信息獲取模塊、約束建立模塊以及模調(diào)度執(zhí)行模塊,其中控制流信息獲取模塊,用于通過(guò)讀入并解析源程序獲取基本塊,并獲取表述基本塊的程序結(jié)構(gòu)的控制流圖信息;約束建立模塊,用于根據(jù)控制流圖信息和目標(biāo)處理器的資源信息建立循環(huán)體結(jié)構(gòu)的數(shù)據(jù)依賴約束和資源約束;
模調(diào)度執(zhí)行模塊,用于在對(duì)循環(huán)體結(jié)構(gòu)執(zhí)行模調(diào)度過(guò)程中,針對(duì)檢測(cè)指令調(diào)度結(jié)果發(fā)生的數(shù)據(jù)依賴沖突和/或資源沖突,根據(jù)符合相應(yīng)約束的回溯模型解決。進(jìn)一步地,該編譯器裝置還包括與模調(diào)度執(zhí)行模塊連接的剖視信息收集模塊,其中剖視信息收集模塊,用于在處理器執(zhí)行可執(zhí)行程序時(shí)根據(jù)典型輸入數(shù)據(jù)收集并向模調(diào)度執(zhí)行模塊反饋剖視信息,其中包括值剖視信息和路徑剖視信息;模調(diào)度執(zhí)行模塊根據(jù)剖視信息指導(dǎo)模調(diào)度,包括根據(jù)值剖視信息識(shí)別循環(huán)體結(jié)構(gòu),并初始化模調(diào)度對(duì)應(yīng)的約束,根據(jù)路徑剖視信息指導(dǎo)從控制依賴到數(shù)據(jù)依賴的轉(zhuǎn)換;在假定啟動(dòng)間距的條件下進(jìn)行指令調(diào)度位置的選擇,并設(shè)置相應(yīng)的調(diào)度優(yōu)先級(jí);若檢測(cè)到所選擇的指令調(diào)度位置會(huì)發(fā)生數(shù)據(jù)依賴沖突,則使用符合數(shù)據(jù)依賴約束的回溯模型消除該沖突;若檢測(cè)到所選擇的指令調(diào)度位置會(huì)發(fā)生資源沖突,則使用符合所述資源約束的回溯模型消除該沖突。進(jìn)一步地,模調(diào)度執(zhí)行模塊針對(duì)調(diào)度位置會(huì)產(chǎn)生數(shù)據(jù)依賴沖突,依據(jù)符合數(shù)據(jù)依賴約束的回溯模型中的回溯節(jié)點(diǎn)選擇目標(biāo)和約束條件選取部分指令節(jié)點(diǎn)作為回溯節(jié)點(diǎn),取消對(duì)回溯節(jié)點(diǎn)選擇的調(diào)度位置,并更新回溯節(jié)點(diǎn)的調(diào)度優(yōu)先級(jí);針對(duì)調(diào)度位置會(huì)產(chǎn)生資源沖突,依據(jù)符合資源約束的回溯模型中的回溯節(jié)點(diǎn)選擇目標(biāo)和約束條件選取部分指令節(jié)點(diǎn)作為回溯節(jié)點(diǎn),取消所有與回溯節(jié)點(diǎn)發(fā)生資源沖突的節(jié)點(diǎn),并更新回溯節(jié)點(diǎn)的調(diào)度優(yōu)先級(jí)。進(jìn)一步地,該編譯器裝置還包括與模調(diào)度執(zhí)行模塊連接的循環(huán)結(jié)構(gòu)重組模塊,其中模調(diào)度執(zhí)行模塊還根據(jù)值剖視信息分析模調(diào)度收益,若判斷模調(diào)度收益保證調(diào)度結(jié)果有效,則根據(jù)調(diào)度優(yōu)先級(jí)將相應(yīng)指令調(diào)度到選擇的調(diào)度位置上;循環(huán)結(jié)構(gòu)重組模塊,用于依據(jù)模調(diào)度執(zhí)行模塊執(zhí)行的模調(diào)度結(jié)果產(chǎn)生循環(huán)入口代碼和循環(huán)出口代碼,重組循環(huán)體結(jié)構(gòu),將源程序編譯成可執(zhí)行程序。本發(fā)明所采用的軟件流水模調(diào)度方法及裝置,通過(guò)建立的數(shù)據(jù)依賴約束回溯模型和資源約束回溯模型分別解決指令調(diào)度過(guò)程中的數(shù)據(jù)依賴沖突和資源沖突,并通過(guò)使用可執(zhí)行程序執(zhí)行中的剖視信息指導(dǎo)指令調(diào)度,并最終完成循環(huán)重組;由此,可避免循環(huán)體中相鄰指令的數(shù)據(jù)相關(guān),減小生成代碼的執(zhí)行時(shí)間,從而有效地挖掘指令級(jí)并行性,提高處理器系統(tǒng)乃至計(jì)算機(jī)系統(tǒng)性能。
圖1是本發(fā)明的基于模調(diào)度實(shí)現(xiàn)循環(huán)指令調(diào)度的編譯方法實(shí)施例流程圖;圖2是圖1中對(duì)循環(huán)指令的模調(diào)度過(guò)程實(shí)施例流程圖;圖3是本發(fā)明用于實(shí)現(xiàn)循環(huán)指令調(diào)度建立回溯模型實(shí)施例流程圖;圖4是本發(fā)明的基于模調(diào)度實(shí)現(xiàn)循環(huán)指令調(diào)度的編譯器裝置實(shí)施例結(jié)構(gòu)框圖。
具體實(shí)施例方式下面結(jié)合附圖和優(yōu)選實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)地描述。以下例舉的實(shí)施例僅用于說(shuō)明和解釋本發(fā)明,而不構(gòu)成對(duì)本發(fā)明技術(shù)方案的限制。
如圖1所示,是本發(fā)明提供的基于模調(diào)度實(shí)現(xiàn)循環(huán)指令調(diào)度的編譯方法實(shí)施例, 其流程包括如下步驟110 在處理器執(zhí)行可執(zhí)行程序時(shí),編譯器根據(jù)典型輸入數(shù)據(jù)收集剖視信息;剖視信息表示的是目標(biāo)可執(zhí)行程序在給定典型輸入條件下執(zhí)行的狀態(tài),包括值剖視信息和路徑剖視信息,其中,值剖視信息主要包括部分變量的典型值,尤其是循環(huán)邊界典型值,可用于計(jì)算軟件流水模調(diào)度所能帶來(lái)的收益,從而決定是否要放棄當(dāng)前指令節(jié)點(diǎn)的調(diào)度結(jié)果;路徑剖視信息主要包括控制依賴發(fā)生的頻率,用于指導(dǎo)控制依賴到數(shù)據(jù)依賴的轉(zhuǎn)換過(guò)程。120 編譯器讀入并解析源程序,獲取控制流圖信息;編譯器讀入高級(jí)語(yǔ)言源程序,并通過(guò)控制流分析技術(shù)對(duì)高級(jí)語(yǔ)言的前端進(jìn)行解析,獲取基本塊(指沒有分支的一串順序執(zhí)行的指令),并獲取表述基本塊程序結(jié)構(gòu)的控制流圖信息。130 建立數(shù)據(jù)依賴約束和資源依賴約束;編譯器根據(jù)控制流圖信息中所表述的指令間數(shù)據(jù)依賴信息建立循環(huán)體結(jié)構(gòu)的數(shù)據(jù)依賴圖,用于描述循環(huán)體中的數(shù)據(jù)依賴關(guān)系;根據(jù)處理器的資源信息建立對(duì)處理器資源約束的描述,具體表示為資源使用表或者有限狀態(tài)自動(dòng)機(jī)。140:根據(jù)剖視信息指導(dǎo)針對(duì)循環(huán)的模調(diào)度過(guò)程,在調(diào)度過(guò)程中檢測(cè)指令調(diào)度結(jié)果出現(xiàn)的數(shù)據(jù)依賴沖突和/或資源沖突,并采用符合相應(yīng)約束的回溯模型來(lái)消解沖突;基于模調(diào)度方法,在假定啟動(dòng)間距(II,Initiation Internal)的條件下對(duì)循環(huán)指令進(jìn)行調(diào)度,根據(jù)剖視信息中的循環(huán)邊界典型值,判斷是否需要繼續(xù)進(jìn)行當(dāng)前循環(huán)的指令調(diào)度,并通過(guò)計(jì)算軟件流水模調(diào)度帶來(lái)的收益,判斷是否取消當(dāng)前節(jié)點(diǎn)的調(diào)度結(jié)果;根據(jù)路徑剖視信息中的控制依賴發(fā)生的頻率來(lái)指導(dǎo)從控制依賴到數(shù)據(jù)依賴的轉(zhuǎn)換過(guò)程。對(duì)于循環(huán)體中每一條需要調(diào)度的指令,均針對(duì)其調(diào)度的結(jié)果進(jìn)行數(shù)據(jù)依賴沖突檢測(cè)和資源沖突檢測(cè),并消除檢測(cè)出的相應(yīng)沖突,具體包括若檢測(cè)到要調(diào)度指令的當(dāng)前節(jié)點(diǎn)會(huì)發(fā)生數(shù)據(jù)依賴沖突,則使用符合數(shù)據(jù)依賴約束條件的回溯模型消除沖突,即取消當(dāng)前節(jié)點(diǎn)的部分前驅(qū)和/或后繼節(jié)點(diǎn)指令,削弱當(dāng)前節(jié)點(diǎn)的數(shù)據(jù)依賴約束以完成對(duì)其的指令調(diào)度,并重新設(shè)置被取消節(jié)點(diǎn)的調(diào)度優(yōu)先級(jí)。若檢測(cè)到要調(diào)度指令的當(dāng)前節(jié)點(diǎn)會(huì)發(fā)生了資源沖突,則使用符合資源約束條件的回溯模型消除沖突,即取消與當(dāng)前節(jié)點(diǎn)發(fā)生資源沖突的部分節(jié)點(diǎn)指令,削弱當(dāng)前節(jié)點(diǎn)的資源約束以完成對(duì)其的指令調(diào)度,并重新設(shè)置被取消節(jié)點(diǎn)的調(diào)度優(yōu)先級(jí)。150 重組循環(huán)體,編譯生成可執(zhí)行程序。在上述方法是實(shí)例中,步驟140所表述的編譯器對(duì)循環(huán)指令的模調(diào)度過(guò)程實(shí)施例的流程如圖2所示,包括如下步驟141 根據(jù)剖視信息識(shí)別循環(huán)體結(jié)構(gòu),并初始化對(duì)應(yīng)的模調(diào)度約束;編譯器根據(jù)剖視信息對(duì)目標(biāo)循環(huán)結(jié)構(gòu)進(jìn)行識(shí)別和解析,并初始化該循環(huán)結(jié)構(gòu)對(duì)應(yīng)的模調(diào)度約束,主要包括數(shù)據(jù)依賴約束和資源約束。142:在假定啟動(dòng)間距條件下,采用擺動(dòng)模調(diào)度算法選擇指令的調(diào)度位置,并設(shè)置相應(yīng)的調(diào)度優(yōu)先級(jí);對(duì)寄存器壓力敏感的循環(huán)體指令進(jìn)行調(diào)度,其過(guò)程采用“先假設(shè)啟動(dòng)間距后調(diào)度”的模調(diào)度思想,即在假定啟動(dòng)間距條件下,采用擺動(dòng)模調(diào)度算法進(jìn)行指令調(diào)度位置的選擇。143 檢測(cè)選擇的調(diào)度位置是否會(huì)產(chǎn)生沖突,是則執(zhí)行步驟144,否則執(zhí)行步驟 145 ;將選擇的調(diào)度位置作為調(diào)度結(jié)果分別進(jìn)行數(shù)據(jù)依賴沖突檢測(cè)和資源沖突檢測(cè)。數(shù)據(jù)依賴沖突是指所選擇的調(diào)度位置無(wú)法滿足循環(huán)指令內(nèi)部的數(shù)據(jù)依賴關(guān)系,其檢測(cè)方法基于表示當(dāng)前循環(huán)數(shù)據(jù)依賴關(guān)系的數(shù)據(jù)依賴圖(DDG)。當(dāng)前指令的調(diào)度位置必須滿足兩個(gè)條件1)對(duì)于數(shù)據(jù)依賴圖中該指令所對(duì)應(yīng)節(jié)點(diǎn)的所有前驅(qū)節(jié)點(diǎn),所選擇的調(diào)度位置必須使得當(dāng)前節(jié)點(diǎn)開始執(zhí)行的時(shí)刻晚于所有前驅(qū)節(jié)點(diǎn)完成執(zhí)行的時(shí)刻;2)對(duì)于數(shù)據(jù)依賴圖中該指令所對(duì)應(yīng)節(jié)點(diǎn)的所有后繼節(jié)點(diǎn),所選擇的調(diào)度位置必須使得當(dāng)前節(jié)點(diǎn)完成執(zhí)行的時(shí)刻早于所有后繼節(jié)點(diǎn)開始執(zhí)行的時(shí)刻。若當(dāng)前節(jié)點(diǎn)的調(diào)度位置無(wú)法滿足上述兩個(gè)條件的任意一個(gè)條件,則可以判定發(fā)生了的數(shù)據(jù)依賴沖突。資源依賴沖突是指由于處理器中運(yùn)算單元、訪存單元等硬件資源的有限性,造成當(dāng)前節(jié)點(diǎn)在所選擇的位置中無(wú)法獲得有效資源的情況,其檢測(cè)方法依賴于處理器資源約束的表示形式。對(duì)于資源向量表(Resource-Reservation Table,參考Alfred V. Aho的著作 ((Compilers :Principles, Techniques, & Tools. Second Edition)))的資源約束描述形式, 若調(diào)度位置所對(duì)應(yīng)資源向量表項(xiàng)中的資源可用數(shù)量為0,則可以判定發(fā)生了資源沖突。對(duì)于有限狀態(tài)自動(dòng)機(jī)(參考 DM Lavery 的論文《Modulo Scheduling for Control-intensive General-purpose Programs)))的資源約束描述形式,若調(diào)度位置使得自動(dòng)機(jī)無(wú)法轉(zhuǎn)移到下一個(gè)有效狀態(tài),則可以判定發(fā)生了資源沖突。144:針對(duì)檢測(cè)出的數(shù)據(jù)依賴沖突采用數(shù)據(jù)依賴約束回溯模型消除,針對(duì)檢測(cè)出的資源沖突采用資源約束回溯模型消除;上述針對(duì)數(shù)據(jù)依賴沖突和/或資源沖突,根據(jù)當(dāng)前指令節(jié)點(diǎn)相應(yīng)的依賴約束條件從以下三個(gè)方面進(jìn)行處理,其流程可參見圖3,包括1441 根據(jù)依賴約束的特點(diǎn)判斷對(duì)當(dāng)前指令節(jié)點(diǎn)是否需要進(jìn)行回溯;1442:根據(jù)回溯節(jié)點(diǎn)選擇目標(biāo)和約束條件選取部分指令節(jié)點(diǎn)作為回溯節(jié)點(diǎn),取消對(duì)回溯節(jié)點(diǎn)的調(diào)度結(jié)果;回溯節(jié)點(diǎn)的選擇,是提高用回溯模型消除相應(yīng)沖突有效性的關(guān)鍵。在數(shù)據(jù)依賴約束回溯模型中,將“回溯節(jié)點(diǎn)盡量少”、“調(diào)度窗口盡量大”作為回溯節(jié)點(diǎn)選擇目標(biāo),將“回溯節(jié)點(diǎn)被取消后仍然可調(diào)度”、“回溯過(guò)程不引起顛簸”等作為約束條件,來(lái)選擇回溯節(jié)點(diǎn),取消對(duì)這些回溯節(jié)點(diǎn)的調(diào)度結(jié)果,即取消選擇的調(diào)度位置。在資源約束回溯模型中,將“取消節(jié)點(diǎn)盡量少”、“回溯節(jié)點(diǎn)所占用的關(guān)鍵資源盡量少”或者“引起的資源沖突最少”作為回溯節(jié)點(diǎn)選擇目標(biāo);將“回溯過(guò)程不引起顛簸”、“回溯過(guò)程不增加寄存器壓力”作為約束條件,來(lái)選擇回溯節(jié)點(diǎn),并取消所有與回溯節(jié)點(diǎn)發(fā)生資源沖突的節(jié)點(diǎn)。1443 更新回溯節(jié)點(diǎn)的調(diào)度優(yōu)先級(jí)。選擇好回溯節(jié)點(diǎn)后,重新設(shè)置回溯節(jié)點(diǎn)的調(diào)度優(yōu)先級(jí)。145 149 根據(jù)剖釋信息分析模調(diào)度收益,若判斷該模調(diào)度收益能保證調(diào)度結(jié)果有效,則根據(jù)調(diào)度優(yōu)先級(jí)將相應(yīng)指令調(diào)度到選擇的調(diào)度位置上,并產(chǎn)生循環(huán)入口代碼和循環(huán)出口代碼;否則報(bào)告模調(diào)度失敗,重新執(zhí)行步驟142,從選擇指令的調(diào)度位置開始重新進(jìn)行模調(diào)度。根據(jù)剖釋信息分析模調(diào)度收益,其中包括分析是否減弱了寄存器壓力。當(dāng)順利地完成了所有指令的調(diào)度后,輸出重組后的循環(huán),并生成相應(yīng)循環(huán)入口代碼和出口代碼。本發(fā)明針對(duì)上述方法實(shí)施例,相應(yīng)地還提供了基于模調(diào)度實(shí)現(xiàn)循環(huán)指令調(diào)度的編譯器裝置實(shí)施例,其結(jié)構(gòu)如圖4所示,包括依次連接的控制流信息獲取模塊、約束建立模塊以及模調(diào)度執(zhí)行模塊,其中控制流信息獲取模塊,用于讀入并解析源程序,獲取控制流圖信息;約束建立模塊,用于根據(jù)控制流圖信息和目標(biāo)處理器的資源信息建立數(shù)據(jù)依賴約束和資源約束;模調(diào)度執(zhí)行模塊,用于在執(zhí)行模調(diào)度過(guò)程中針對(duì)檢測(cè)指令調(diào)度結(jié)果發(fā)生的數(shù)據(jù)依賴沖突和/或資源沖突,根據(jù)符合相應(yīng)約束的回溯模型解決。上述編譯器裝置實(shí)施例還包括與模調(diào)度執(zhí)行模塊連接的剖視信息收集模塊,其中剖視信息收集模塊,用于在處理器執(zhí)行可執(zhí)行程序時(shí)根據(jù)典型輸入數(shù)據(jù)收集并反饋剖視信息,其中包括值剖視信息和路徑剖視信息;模調(diào)度執(zhí)行模塊通過(guò)剖視信息收集模塊反饋的剖視信息指導(dǎo)對(duì)循環(huán)指令的模調(diào)度,包括在假定啟動(dòng)間距的條件下對(duì)循環(huán)指令進(jìn)行調(diào)度,根據(jù)剖視信息中的循環(huán)邊界典型值,指導(dǎo)指令調(diào)度的各階段;通過(guò)計(jì)算軟件流水模調(diào)度帶來(lái)的收益,判斷是否取消當(dāng)前節(jié)點(diǎn)的調(diào)度結(jié)果;根據(jù)路徑剖視信息中的控制依賴發(fā)生的頻率來(lái)指導(dǎo)從控制依賴到數(shù)據(jù)依賴的轉(zhuǎn)換過(guò)程。在上述編譯器裝置實(shí)施例中,控制流信息獲取模塊讀入高級(jí)語(yǔ)言源程序,并通過(guò)控制流分析技術(shù)對(duì)高級(jí)語(yǔ)言的前端進(jìn)行解析,獲取基本塊,并獲取表述基本塊程序結(jié)構(gòu)的控制流圖信息;約束建立模塊根據(jù)控制流圖信息中所表述的指令間數(shù)據(jù)依賴信息建立數(shù)據(jù)依賴圖,以描述循環(huán)體中的數(shù)據(jù)依賴關(guān)系,其中,部分?jǐn)?shù)據(jù)依賴關(guān)系是通過(guò)IF指令-轉(zhuǎn)換技術(shù)從部分控制依賴關(guān)系轉(zhuǎn)化而來(lái);建立的目標(biāo)處理器資源約束具體表示為資源使用記錄或者有限狀態(tài)自動(dòng)機(jī);模調(diào)度執(zhí)行模塊根據(jù)剖視信息識(shí)別循環(huán)體結(jié)構(gòu),并初始化對(duì)應(yīng)的模調(diào)度約束;在假定啟動(dòng)間距條件下,采用擺動(dòng)模調(diào)度算法進(jìn)行指令調(diào)度位置的選擇,并設(shè)置相應(yīng)的調(diào)度優(yōu)先級(jí);若檢測(cè)到選擇的指令調(diào)度位置會(huì)發(fā)生數(shù)據(jù)依賴沖突,則使用符合數(shù)據(jù)依賴約束的回溯模型消除沖突;若檢測(cè)到選擇的指令調(diào)度位置會(huì)會(huì)發(fā)生了資源沖突,則使用符合資源約束的回溯模型消除沖突。模調(diào)度執(zhí)行模塊在數(shù)據(jù)依賴約束回溯模型中,以“回溯節(jié)點(diǎn)盡量少”、“調(diào)度窗口盡量大”作為回溯節(jié)點(diǎn)選擇目標(biāo),以“回溯節(jié)點(diǎn)被取消后仍然可調(diào)度”、“回溯過(guò)程不引起顛簸” 作為約束條件,選取部分指令節(jié)點(diǎn)作為回溯節(jié)點(diǎn),取消對(duì)這些回溯節(jié)點(diǎn)的調(diào)度結(jié)果(即取消選擇的調(diào)度位置),并重新設(shè)置回溯節(jié)點(diǎn)的調(diào)度優(yōu)先級(jí);在資源約束回溯模型中,以“取消節(jié)點(diǎn)盡量少”、“回溯節(jié)點(diǎn)所占用的關(guān)鍵資源盡量少”或者“引起的資源沖突最少”作為回溯節(jié)點(diǎn)選擇目標(biāo),以“回溯過(guò)程不引起顛簸”、“回溯過(guò)程不增加寄存器壓力”作為約束條件,取消所有與回溯節(jié)點(diǎn)發(fā)生資源沖突的節(jié)點(diǎn),并重新設(shè)置回溯節(jié)點(diǎn)的調(diào)度優(yōu)先級(jí)。上述編譯器裝置實(shí)施例還包括與模調(diào)度執(zhí)行模塊連接的循環(huán)結(jié)構(gòu)重組模塊,其中模調(diào)度執(zhí)行模塊還根據(jù)所述剖視信息中的值剖視信息分析模調(diào)度收益,若判斷所述模調(diào)度收益能保證調(diào)度結(jié)果有效,則根據(jù)調(diào)度優(yōu)先級(jí)將相應(yīng)指令調(diào)度到選擇的調(diào)度位置上;循環(huán)結(jié)構(gòu)重組模塊,用于依據(jù)模調(diào)度執(zhí)行模塊執(zhí)行的模調(diào)度結(jié)果產(chǎn)生循環(huán)入口代碼和循環(huán)出口代碼,重組循環(huán)體結(jié)構(gòu),將所述源程序編譯成可執(zhí)行程序。對(duì)于本領(lǐng)域的專業(yè)人員來(lái)說(shuō),在了解了本發(fā)明內(nèi)容和原理后,能夠在不背離本發(fā)明的原理和范圍的情況下,根據(jù)本發(fā)明的方法進(jìn)行形式和細(xì)節(jié)上的各種修正和改變,但是這些基于本發(fā)明的修正和改變?nèi)栽诒景l(fā)明的權(quán)利要求保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種基于模調(diào)度實(shí)現(xiàn)循環(huán)指令調(diào)度的編譯方法,包括由編譯器執(zhí)行的下列步驟讀入并解析源程序,獲取控制流圖信息;建立循環(huán)體結(jié)構(gòu)的數(shù)據(jù)依賴約束和資源依賴約束;在對(duì)所述循環(huán)體結(jié)構(gòu)執(zhí)行模調(diào)度過(guò)程中,針對(duì)檢測(cè)指令調(diào)度結(jié)果發(fā)生的數(shù)據(jù)依賴沖突和/或資源沖突根據(jù)符合相應(yīng)約束的回溯模型解決。
2.按照權(quán)利要求1所述的方法,其特征在于,所述讀入并解析源程序,獲取控制流圖信息,具體包括讀入高級(jí)語(yǔ)言源程序,并通過(guò)控制流分析技術(shù)對(duì)高級(jí)語(yǔ)言的前端進(jìn)行解析,獲取基本塊,并獲取表述所述基本塊的程序結(jié)構(gòu)的所述控制流圖信息。
3.按照權(quán)利要求1所述的方法,其特征在于,所述針對(duì)循環(huán)體結(jié)構(gòu)建立數(shù)據(jù)依賴約束和資源依賴約束,具體包括根據(jù)所述控制流圖信息建立所述數(shù)據(jù)依賴約束,根據(jù)目標(biāo)處理器的資源信息建立所述資源依賴約束。
4.按照權(quán)利要求1至3任一項(xiàng)所述的方法,其特征在于,在對(duì)所述循環(huán)體結(jié)構(gòu)執(zhí)行模調(diào)度過(guò)程中,針對(duì)檢測(cè)指令調(diào)度結(jié)果發(fā)生的數(shù)據(jù)依賴沖突和/或資源沖突根據(jù)符合相應(yīng)約束的回溯模型解決,具體包括根據(jù)預(yù)先對(duì)處理器執(zhí)行可執(zhí)行程序時(shí)采用典型輸入數(shù)據(jù)收集的剖視信息指導(dǎo)對(duì)循環(huán)指令的模調(diào)度;針對(duì)循環(huán)體中每一條需要調(diào)度指令當(dāng)前節(jié)點(diǎn)的調(diào)度結(jié)果進(jìn)行所述數(shù)據(jù)依賴沖突的檢測(cè)和/或所述資源沖突的檢測(cè);針對(duì)檢測(cè)到所述調(diào)度結(jié)果會(huì)發(fā)生所述數(shù)據(jù)依賴沖突和/或所述資源沖突,則相應(yīng)地使用符合所述數(shù)據(jù)依賴約束的回溯模型和符合所述資源約束的回溯模型消除。
5.按照權(quán)利要求4所述的方法,其特征在于,其中各步驟具體為根據(jù)所述剖視信息中的值剖視信息識(shí)別循環(huán)體結(jié)構(gòu),并初始化所述數(shù)據(jù)依賴沖突和所述資源沖突;根據(jù)所述剖視信息中的路徑剖視信息指導(dǎo)從控制依賴到數(shù)據(jù)依賴的轉(zhuǎn)換過(guò)程;在假定啟動(dòng)間距條件下,采用擺動(dòng)模調(diào)度算法選擇對(duì)當(dāng)前指令的調(diào)度位置,并設(shè)置相應(yīng)的調(diào)度優(yōu)先級(jí);若檢測(cè)選擇的所述當(dāng)前指令的調(diào)度位置會(huì)產(chǎn)生所述數(shù)據(jù)依賴沖突,則依據(jù)所述符合數(shù)據(jù)依賴約束的回溯模型中的回溯節(jié)點(diǎn)選擇目標(biāo)和約束條件選取部分指令節(jié)點(diǎn)作為回溯節(jié)點(diǎn),取消對(duì)所述回溯節(jié)點(diǎn)選擇的調(diào)度位置,并更新所述回溯節(jié)點(diǎn)的調(diào)度優(yōu)先級(jí);若檢測(cè)選擇的所述當(dāng)前指令的調(diào)度位置會(huì)產(chǎn)生所述資源沖突,則依據(jù)所述符合資源約束的回溯模型中的回溯節(jié)點(diǎn)選擇目標(biāo)和約束條件選取部分指令節(jié)點(diǎn)作為回溯節(jié)點(diǎn),取消所有與所述回溯節(jié)點(diǎn)發(fā)生資源沖突的節(jié)點(diǎn),并更新所述回溯節(jié)點(diǎn)的調(diào)度優(yōu)先級(jí)。
6.按照權(quán)利要求5所述的方法,其特征在于,還包括重組循環(huán)體結(jié)構(gòu),編譯生成可執(zhí)行程序,具體包括根據(jù)所述剖釋信息分析模調(diào)度收益,若判斷所述模調(diào)度收益能保證調(diào)度結(jié)果有效,則根據(jù)調(diào)度優(yōu)先級(jí)將相應(yīng)指令調(diào)度到選擇的調(diào)度位置上,并依據(jù)產(chǎn)生的循環(huán)入口代碼和循環(huán)出口代碼重組所述循環(huán)體結(jié)構(gòu),將所述源程序編譯成可執(zhí)行程序。
7.一種基于模調(diào)度實(shí)現(xiàn)循環(huán)指令調(diào)度的編譯器裝置,其特征在于,包括依次連接的控制流信息獲取模塊、約束建立模塊以及模調(diào)度執(zhí)行模塊,其中控制流信息獲取模塊,用于通過(guò)讀入并解析源程序獲取基本塊,并獲取表述所述基本塊的程序結(jié)構(gòu)的所述控制流圖信息;約束建立模塊,用于根據(jù)所述控制流圖信息和目標(biāo)處理器的資源信息建立循環(huán)體結(jié)構(gòu)的數(shù)據(jù)依賴約束和資源約束;模調(diào)度執(zhí)行模塊,用于在對(duì)所述循環(huán)體結(jié)構(gòu)執(zhí)行模調(diào)度過(guò)程中,針對(duì)檢測(cè)指令調(diào)度結(jié)果發(fā)生的數(shù)據(jù)依賴沖突和/或資源沖突,根據(jù)符合相應(yīng)約束的回溯模型解決。
8.按照權(quán)利要求7所述的編譯器裝置,其特征在于,還包括與所述模調(diào)度執(zhí)行模塊連接的剖視信息收集模塊,其中剖視信息收集模塊,用于在處理器執(zhí)行可執(zhí)行程序時(shí)根據(jù)典型輸入數(shù)據(jù)收集并向所述模調(diào)度執(zhí)行模塊反饋剖視信息,其中包括值剖視信息和路徑剖視信息;所述模調(diào)度執(zhí)行模塊根據(jù)所述剖視信息指導(dǎo)所述模調(diào)度,包括根據(jù)所述值剖視信息識(shí)別所述循環(huán)體結(jié)構(gòu),并初始化所述模調(diào)度對(duì)應(yīng)的所述約束,根據(jù)所述路徑剖視信息指導(dǎo)從控制依賴到數(shù)據(jù)依賴的轉(zhuǎn)換;在假定啟動(dòng)間距的條件下進(jìn)行指令調(diào)度位置的選擇,并設(shè)置相應(yīng)的調(diào)度優(yōu)先級(jí);若檢測(cè)到所選擇的指令調(diào)度位置會(huì)發(fā)生數(shù)據(jù)依賴沖突,則使用符合所述數(shù)據(jù)依賴約束的回溯模型消除該沖突;若檢測(cè)到所選擇的指令調(diào)度位置會(huì)發(fā)生資源沖突,則使用符合所述資源約束的回溯模型消除該沖突。
9.按照權(quán)利要求8所述的編譯器裝置,其特征在于,所述模調(diào)度執(zhí)行模塊針對(duì)所述調(diào)度位置會(huì)產(chǎn)生所述數(shù)據(jù)依賴沖突,依據(jù)所述符合數(shù)據(jù)依賴約束的回溯模型中的回溯節(jié)點(diǎn)選擇目標(biāo)和約束條件選取部分指令節(jié)點(diǎn)作為回溯節(jié)點(diǎn), 取消對(duì)所述回溯節(jié)點(diǎn)選擇的調(diào)度位置,并更新所述回溯節(jié)點(diǎn)的調(diào)度優(yōu)先級(jí);針對(duì)所述調(diào)度位置會(huì)產(chǎn)生所述資源沖突,依據(jù)所述符合資源約束的回溯模型中的回溯節(jié)點(diǎn)選擇目標(biāo)和約束條件選取部分指令節(jié)點(diǎn)作為回溯節(jié)點(diǎn),取消所有與所述回溯節(jié)點(diǎn)發(fā)生資源沖突的節(jié)點(diǎn), 并更新所述回溯節(jié)點(diǎn)的調(diào)度優(yōu)先級(jí)。
10.按照權(quán)利要求9所述的編譯器裝置,其特征在于,還包括與所述模調(diào)度執(zhí)行模塊連接的循環(huán)結(jié)構(gòu)重組模塊,其中所述模調(diào)度執(zhí)行模塊還根據(jù)所述值剖視信息分析模調(diào)度收益,若判斷所述模調(diào)度收益保證調(diào)度結(jié)果有效,則根據(jù)所述調(diào)度優(yōu)先級(jí)將相應(yīng)指令調(diào)度到選擇的調(diào)度位置上;循環(huán)結(jié)構(gòu)重組模塊,用于依據(jù)模調(diào)度執(zhí)行模塊執(zhí)行的模調(diào)度結(jié)果產(chǎn)生循環(huán)入口代碼和循環(huán)出口代碼,重組循環(huán)體結(jié)構(gòu),將所述源程序編譯成可執(zhí)行程序。
全文摘要
本發(fā)明披露了基于模調(diào)度實(shí)現(xiàn)循環(huán)指令調(diào)度的編譯方法及裝置,其中方法包括由編譯器執(zhí)行的下列步驟讀入并解析源程序,獲取控制流圖信息;建立循環(huán)體結(jié)構(gòu)的數(shù)據(jù)依賴約束和資源依賴約束;在對(duì)循環(huán)體結(jié)構(gòu)執(zhí)行模調(diào)度過(guò)程中,針對(duì)檢測(cè)指令調(diào)度結(jié)果發(fā)生的數(shù)據(jù)依賴沖突和/或資源沖突根據(jù)符合相應(yīng)約束的回溯模型解決。本發(fā)明可避免循環(huán)體中相鄰指令的數(shù)據(jù)相關(guān),減小生成代碼的執(zhí)行時(shí)間,從而有效地挖掘指令級(jí)并行性,提高處理器系統(tǒng)乃至計(jì)算機(jī)系統(tǒng)性能。
文檔編號(hào)G06F9/45GK102200924SQ20111012805
公開日2011年9月28日 申請(qǐng)日期2011年5月17日 優(yōu)先權(quán)日2011年5月17日
發(fā)明者劉先華, 張吉豫, 程旭, 譚明星 申請(qǐng)人:北京北大眾志微系統(tǒng)科技有限責(zé)任公司