[發(fā)明專利]一種消除冗余的內(nèi)存訪問操作的編譯優(yōu)化方法有效
| 申請?zhí)枺?/td> | 201410129958.0 | 申請日: | 2014-04-02 |
| 公開(公告)號: | CN103942082B | 公開(公告)日: | 2017-03-29 |
| 發(fā)明(設計)人: | 楊磊;王萍;肖東岳;韓峰;胡可 | 申請(專利權(quán))人: | 南陽理工學院 |
| 主分類號: | G06F9/45 | 分類號: | G06F9/45 |
| 代理公司: | 鄭州紅元帥專利代理事務所(普通合伙)41117 | 代理人: | 秦舜生 |
| 地址: | 473000*** | 國省代碼: | 河南;41 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 消除 冗余 內(nèi)存 訪問 操作 編譯 優(yōu)化 方法 | ||
技術(shù)領(lǐng)域
本發(fā)明涉及計算機技術(shù)領(lǐng)域,一種消除冗余的內(nèi)存訪問操作的編譯優(yōu)化方法。
背景技術(shù)
計算機訪存指令將存放在內(nèi)存中的數(shù)據(jù)加載到物理寄存器中,它的執(zhí)行時間往往是一條普通指令的十幾至幾十倍。編譯器在為程序生成二進制代碼時,總是盡量產(chǎn)生最少的訪存指令,這會減少程序的訪存時間,提升程序的執(zhí)行效率。但隨著別名和指針在現(xiàn)代程序語言中的廣泛使用,編譯器在執(zhí)行訪存優(yōu)化時,往往缺乏足夠的別名信息。為了保證二進制代碼的正確性,編譯器往往會基于保守的別名分析,產(chǎn)生較多的訪存指令,這嚴重增加了程序的訪存時間,降低了程序的性能。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提出一種消除冗余的內(nèi)存訪問操作的編譯優(yōu)化方法,利用該編譯優(yōu)化方法,可消除冗余的訪存指令,減少程序的訪存時間,從而提高程序的執(zhí)行性能。
為解決上述技術(shù)問題,本發(fā)明所采取的技術(shù)方案是:一種消除冗余的內(nèi)存訪問操作的編譯優(yōu)化方法,該方法用于別名信息不精確且訪存采用Load/Store架構(gòu)的系統(tǒng)中,包括以下步驟:
⑴.以基本塊為單位對程序進行簡單的數(shù)據(jù)流分析,得到數(shù)據(jù)訪問的使用-定義鏈;
⑵.以基本塊為單位對指令鏈進行前向遍歷,如果檢測到內(nèi)存加載Load指令,那么訪問使用-定義鏈找到它的定義指令,如果該指令和當前指令的訪存地址具有別名關(guān)系,那么進入步驟⑶;如果該指令和當前指令的訪存地址具有包含關(guān)系,那么進入步驟⑷;如果該指令和當前指令的訪存地址相同,那么進入步驟⑸;否則進入步驟⑹;?
⑶.記錄定義指令為op1,繼續(xù)訪問該指令的前繼定義指令op2,根據(jù)別名信息,分別比較三條指令的基址寄存器、偏移量寄存器內(nèi)容關(guān)系,并將當前的加載指令轉(zhuǎn)換為相應形式的拷貝指令,然后進入步驟⑹;
⑷.如果前繼定義指令為內(nèi)存存儲Store指令,將加載指令轉(zhuǎn)化為相應的比特提取指令,然后進入步驟⑹;
⑸.刪除加載指令,并插入拷貝指令,然后進入步驟⑹;
⑹.執(zhí)行步驟⑵,直到程序所有的基本塊處理完畢。
本發(fā)明采用上述技術(shù)方案所設計的一種消除冗余的內(nèi)存訪問操作的編譯優(yōu)化方法,是基于輕量的數(shù)據(jù)流分析方法,在代碼生成階段,通過特定的存儲-加載指令序列特點,判斷其中的加載指令是否冗余,對于冗余的Load指令,依據(jù)前繼指令的特點,可以對其進行刪除,或轉(zhuǎn)換為代價較小的拷貝指令或者是比特位提取指令。本發(fā)明能夠消除冗余的訪存指令,大大減少程序的訪存時間,提高程序性能,同時暴露了更多的程序優(yōu)化機會,提高了程序性能。
附圖說明
圖1表示本發(fā)明一種消除冗余的內(nèi)存訪問操作的編譯優(yōu)化方法的流程圖。
具體實施方式
下面結(jié)合附圖和具體實施方式對本發(fā)明一種消除冗余的內(nèi)存訪問操作的編譯優(yōu)化方法進行詳細的說明。
本發(fā)明一種消除冗余的內(nèi)存訪問操作的編譯優(yōu)化方法,參見圖1,該方法用于別名信息不精確且訪存采用Load/Store架構(gòu)的系統(tǒng)中,是一種可以消除多余的加載指令的優(yōu)化方法,該方法包括以下步驟:
⑴.以基本塊為單位對程序進行簡單的數(shù)據(jù)流分析,得到數(shù)據(jù)訪問的使用-定義鏈,即U-D鏈;
⑵.以基本塊為單位對指令鏈進行前向遍歷,如果檢測到內(nèi)存加載Load指令,那么訪問使用-定義鏈找到它的定義指令,如果該指令和當前指令的訪存地址具有別名關(guān)系,且具有干涉關(guān)系,那么進入步驟⑶;如果該指令和當前指令的訪存地址具有包含關(guān)系,那么進入步驟⑷;如果該指令和當前指令的訪存地址相同,并且不會修改額外的機器狀態(tài)位,那么進入步驟⑸;否則進入步驟⑹;?
⑶.記錄干涉指令op1,繼續(xù)訪問該指令的前繼定義指令op2(不限于內(nèi)存存儲或加載指令)。如果有精確的別名信息,則判斷當前指令使用的是干涉指令op1結(jié)果還是前繼定義指令op2結(jié)果,轉(zhuǎn)化當前的加載指令為相應的拷貝指令;如果沒有精確的別名信息,那么分別比較這三條指令的基址寄存器、偏移量寄存器的關(guān)系:如果相同,那么使用結(jié)果相同的寄存器號,并轉(zhuǎn)化當前的加載指令為相應的拷貝指令;然后進入步驟⑹;
⑷.如果前繼定義指令為內(nèi)存存儲Store指令,那么計算訪存地址的偏移值,并將加載指令轉(zhuǎn)化為相應的比特位提取指令,然后進入步驟⑹;
⑸.刪除加載指令,并插入拷貝指令,將定義指令的目標寄存器作為源寄存器,加載指令的目標寄存器作為目標寄存器,然后進入步驟⑹.
⑹.執(zhí)行步驟⑵,直到程序所有的基本塊處理完畢。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于南陽理工學院,未經(jīng)南陽理工學院許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410129958.0/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





