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

計(jì)算機(jī)程序中熱點(diǎn)函數(shù)、變量的匯聚方法、裝置及系統(tǒng)的制作方法

文檔序號(hào):6526980閱讀:237來(lái)源:國(guó)知局
計(jì)算機(jī)程序中熱點(diǎn)函數(shù)、變量的匯聚方法、裝置及系統(tǒng)的制作方法
【專利摘要】本發(fā)明實(shí)施例公開(kāi)了一種計(jì)算機(jī)程序中熱點(diǎn)函數(shù)、變量的匯聚方法、裝置及系統(tǒng),其中計(jì)算機(jī)程序中熱點(diǎn)函數(shù)的匯聚方法,包括:獲取待處理的源程序;模擬執(zhí)行所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息,以生成關(guān)鍵路徑文件,所述關(guān)鍵路徑文件包括:執(zhí)行所述源程序時(shí)的一條或多條函數(shù)關(guān)鍵路徑;其中,函數(shù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)函數(shù),以及熱點(diǎn)函數(shù)間的調(diào)用順序;根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一函數(shù)關(guān)鍵路徑上的熱點(diǎn)函數(shù)依照調(diào)用順序進(jìn)行編譯后鏈接在同一代碼段內(nèi)。本發(fā)明實(shí)施例能夠有效降低指令Cache?Miss和數(shù)據(jù)Cache?Miss。
【專利說(shuō)明】計(jì)算機(jī)程序中熱點(diǎn)函數(shù)、變量的匯聚方法、裝置及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù),尤其涉及一種計(jì)算機(jī)程序中熱點(diǎn)函數(shù)、變量的匯聚方法、裝置及系統(tǒng)。
【背景技術(shù)】
[0002]在計(jì)算機(jī)程序軟件開(kāi)發(fā)過(guò)程中,程序設(shè)計(jì)人員一般以功能模塊為單位部署函數(shù)代碼及變量,在源程序編譯鏈接后,函數(shù)對(duì)應(yīng)的二進(jìn)制代碼和全局變量也是按照其在源程序文件內(nèi)的順序排列,因此當(dāng)函數(shù)和/或變量調(diào)用相鄰或較近時(shí),程序執(zhí)行中不會(huì)發(fā)生訪問(wèn)跳變,而當(dāng)函數(shù)或全局變量調(diào)用較遠(yuǎn)時(shí),程序執(zhí)行中將會(huì)發(fā)生訪問(wèn)跳變,從而處理器在訪問(wèn)緩存時(shí)易出現(xiàn)較多的未命中(Cache Miss)現(xiàn)象。
[0003]為降低程序執(zhí)行中由于訪問(wèn)跳變而引起的Cache Mi ss現(xiàn)象,現(xiàn)有技術(shù)中一般采用插樁統(tǒng)計(jì)技術(shù),即首先在程序的每個(gè)函數(shù)的入口插入執(zhí)行統(tǒng)計(jì)代碼以統(tǒng)計(jì)該函數(shù)的執(zhí)行次數(shù),其次獲取程序運(yùn)行后的函數(shù)調(diào)用次數(shù)排序,接著修改源代碼,以在調(diào)用次數(shù)較高的函數(shù)聲明處增加修飾代碼,最后使用編譯器重新編譯源碼并鏈接,其中調(diào)用頻率較高的函數(shù)會(huì)被歸并到熱點(diǎn)函數(shù)段中,因此,采用插樁統(tǒng)計(jì)的方法可降低這些調(diào)用頻率較高函數(shù)的執(zhí)行時(shí)產(chǎn)生的指令跳變,從而降低指令Cache Miss。
[0004]圖1為軟件系統(tǒng)源程序文件中函數(shù)及全局變量的代碼結(jié)構(gòu)示意圖,該軟件系統(tǒng)的熱點(diǎn)業(yè)務(wù)對(duì)應(yīng)的關(guān)鍵路徑中函數(shù)調(diào)用順序?yàn)?funcD — funcB — funcF — funcA — funcP — funcG,圖2為采用插樁統(tǒng)計(jì)技術(shù)獲取的可執(zhí)行文件代碼段及數(shù)據(jù)段的結(jié)構(gòu)示意圖,圖中有向箭頭線表示運(yùn)行可執(zhí)行文件時(shí)指令跳轉(zhuǎn)的方向,由圖2可知,對(duì)于上述關(guān)鍵路徑中的函數(shù)被匯聚在了熱點(diǎn)函數(shù)段中,從圖中可以看到,盡管熱點(diǎn)函數(shù)被匯聚在一起了,但函數(shù)調(diào)用跳轉(zhuǎn)仍存在且發(fā)生了 5次,全局變量訪問(wèn)跳轉(zhuǎn)發(fā)生了 6次,因此,系統(tǒng)運(yùn)行時(shí)仍會(huì)出現(xiàn)較多的指令Cache Miss和數(shù)據(jù)Cache Miss,從而采用插樁統(tǒng)計(jì)方法仍未能有效提高系統(tǒng)性能。

【發(fā)明內(nèi)容】

[0005]本發(fā)明實(shí)施例提供一種計(jì)算機(jī)程序中熱點(diǎn)函數(shù)、變量的匯聚方法、裝置及系統(tǒng),用以降低程序執(zhí)行時(shí)的指令Cache Miss或者數(shù)據(jù)Cache Miss,提高系統(tǒng)性能。
[0006]本發(fā)明的第一個(gè)方面是提供一種計(jì)算機(jī)程序中熱點(diǎn)函數(shù)的匯聚方法,包括:
[0007]獲取待處理的源程序;
[0008]模擬執(zhí)行所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息,以生成關(guān)鍵路徑文件,所述關(guān)鍵路徑文件包括:執(zhí)行所述源程序時(shí)的一條或多條函數(shù)關(guān)鍵路徑;其中,函數(shù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)函數(shù),以及熱點(diǎn)函數(shù)間的調(diào)用順序;
[0009]根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一函數(shù)關(guān)鍵路徑上的熱點(diǎn)函數(shù)依照調(diào)用順序進(jìn)行編譯后鏈接在同一代碼段內(nèi)。
[0010]結(jié)合第一個(gè)方面的計(jì)算機(jī)程序中熱點(diǎn)函數(shù)的匯聚方法,在第一種實(shí)現(xiàn)方式中,在所述源程序的執(zhí)行過(guò)程中還收集所述源程序中每個(gè)全局變量的訪問(wèn)信息,所述關(guān)鍵路徑文件還包括:執(zhí)行所述源程序時(shí)的一條或多條數(shù)據(jù)關(guān)鍵路徑;其中,數(shù)據(jù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)全局變量,以及熱點(diǎn)全局變量的訪問(wèn)順序;
[0011]所述匯聚方法,還包括:根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一數(shù)據(jù)段內(nèi)。
[0012]結(jié)合第一個(gè)方面的計(jì)算機(jī)程序中熱點(diǎn)函數(shù)的匯聚方法的第一種實(shí)現(xiàn)方式,在第二種實(shí)現(xiàn)方式中,模擬執(zhí)行所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息以及每個(gè)全局變量的訪問(wèn)信息,以生成關(guān)鍵路徑文件,包括:
[0013]分析所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息以及每個(gè)全局變量的訪問(wèn)信息,以生成原始路徑信息;其中,所述原始路徑信息包括:所述源程序中每個(gè)函數(shù)所在的函數(shù)路徑、每個(gè)函數(shù)在函數(shù)路徑中的層數(shù)、每個(gè)函數(shù)的調(diào)用次數(shù)以及用于記錄每個(gè)函數(shù)路徑中所有函數(shù)調(diào)用次數(shù)之和的路徑計(jì)數(shù),以及,所述源程序中每個(gè)全局變量所在的數(shù)據(jù)路徑、每個(gè)全局變量在數(shù)據(jù)路徑中的層數(shù)、每個(gè)全局變量的訪問(wèn)次數(shù)以及用于記錄每個(gè)數(shù)據(jù)路徑中所有全局變量的訪問(wèn)次數(shù)之和的路徑計(jì)數(shù);
[0014]按照所述原始路徑信息中每個(gè)函數(shù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)函數(shù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的函數(shù)路徑作為函數(shù)關(guān)鍵路徑,以及按照所述原始路徑信息中每個(gè)數(shù)據(jù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)數(shù)據(jù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的數(shù)據(jù)路徑作為數(shù)據(jù)關(guān)鍵路徑。
[0015]結(jié)合第一個(gè)方面的計(jì)算機(jī)程序中熱點(diǎn)函數(shù)的匯聚方法的第二種實(shí)現(xiàn)方式,在第三種實(shí)現(xiàn)方式中,分析所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息以及每個(gè)全局變量的訪問(wèn)信息,以生成原始路徑信息,包括:
[0016]逐條翻譯并執(zhí)行所述源程序中的語(yǔ)句,對(duì)于每一條語(yǔ)句,若確定該語(yǔ)句為函數(shù)調(diào)用或全局變量訪問(wèn),則記錄該語(yǔ)句中的函數(shù)名或全局變量名以及該函數(shù)名被調(diào)用或全局變量名被訪問(wèn)時(shí)所在的層數(shù),生成原始路徑信息。
[0017]結(jié)合第一個(gè)方面的計(jì)算機(jī)程序中熱點(diǎn)函數(shù)的匯聚方法的第二或第三種實(shí)現(xiàn)方式,在第四種實(shí)現(xiàn)方式中,按照所述原始路徑信息中每個(gè)函數(shù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)函數(shù)路徑進(jìn)行排序,獲取路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的函數(shù)路徑作為函數(shù)關(guān)鍵路徑,包括:
[0018]去除每條函數(shù)路徑中調(diào)用次數(shù)占所在函數(shù)路徑的路徑計(jì)數(shù)比例小于預(yù)設(shè)比例的函數(shù)以簡(jiǎn)化函數(shù)路徑,合并簡(jiǎn)化后的相同函數(shù)路徑;
[0019]將合并的函數(shù)路徑的路徑計(jì)數(shù)進(jìn)行疊加,并按照合并后的每個(gè)函數(shù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)各條函數(shù)路徑進(jìn)行排序,獲取路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的函數(shù)路徑作為函數(shù)關(guān)鍵路徑;
[0020]按照所述原始路徑信息中每個(gè)數(shù)據(jù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)數(shù)據(jù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的數(shù)據(jù)路徑作為函數(shù)關(guān)鍵路徑,包括:
[0021]去除每條數(shù)據(jù)路徑中訪問(wèn)次數(shù)占所在數(shù)據(jù)路徑的路徑計(jì)數(shù)比例小于預(yù)設(shè)比例的全局變量以簡(jiǎn)化數(shù)據(jù)路徑,合并簡(jiǎn)化后的相同數(shù)據(jù)路徑;
[0022]將合并的數(shù)據(jù)路徑的路徑計(jì)數(shù)進(jìn)行疊加,并按照合并后的每個(gè)數(shù)據(jù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)各條數(shù)據(jù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的數(shù)據(jù)路徑作為數(shù)據(jù)關(guān)鍵路徑。
[0023]結(jié)合第一個(gè)方面的計(jì)算機(jī)程序中熱點(diǎn)函數(shù)的匯聚方法、第一、第二、第三或第四種實(shí)現(xiàn)方式,在第五種實(shí)現(xiàn)方式中,根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一函數(shù)關(guān)鍵路徑上的熱點(diǎn)函數(shù)依照調(diào)用順序進(jìn)行編譯后鏈接在同一代碼段內(nèi),包括:
[0024]將所述源程序中位于所述關(guān)鍵路徑文件中同一函數(shù)關(guān)鍵路徑上的函數(shù)配置同一代碼段標(biāo)識(shí),并依照同一函數(shù)關(guān)鍵路徑上函數(shù)的調(diào)用順序配置函數(shù)在同一代碼段中的位置信息;
[0025]根據(jù)所述函數(shù)對(duì)應(yīng)的代碼段標(biāo)識(shí)及位置信息將所述源程序中對(duì)應(yīng)的函數(shù)進(jìn)行編譯后鏈接在一起。
[0026]結(jié)合第一個(gè)方面的計(jì)算機(jī)程序中熱點(diǎn)函數(shù)的匯聚方法的第五種實(shí)現(xiàn)方式,在第六種實(shí)現(xiàn)方式中,若兩個(gè)函數(shù)關(guān)鍵路徑中存在對(duì)同一函數(shù)的調(diào)用,則為該函數(shù)配置調(diào)用次數(shù)較多的函數(shù)關(guān)鍵路徑對(duì)應(yīng)的代碼段標(biāo)識(shí)。
[0027]本發(fā)明的第二個(gè)方面是提供一種計(jì)算機(jī)程序中熱點(diǎn)全局變量的匯聚方法,包括:
[0028]獲取待處理的源程序;
[0029]模擬執(zhí)行所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)全局變量的訪問(wèn)信息,以生成關(guān)鍵路徑文件,所述關(guān)鍵路徑文件包括:執(zhí)行所述源程序時(shí)的一條或多條數(shù)據(jù)關(guān)鍵路徑;其中,數(shù)據(jù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)全局變量,以及熱點(diǎn)全局變量的訪問(wèn)順序;
[0030]根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一數(shù)據(jù)段內(nèi)。
[0031]結(jié)合第二個(gè)方面的計(jì)算機(jī)程序中熱點(diǎn)全局變量的匯聚方法,在第一種實(shí)現(xiàn)方式中,根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一數(shù)據(jù)段內(nèi),包括:
[0032]將所述源程序中位于所述關(guān)鍵路徑文件中同一數(shù)據(jù)關(guān)鍵路徑上的全局變量配置同一數(shù)據(jù)段標(biāo)識(shí),并依照同一數(shù)據(jù)關(guān)鍵路徑上全局變量的訪問(wèn)順序配置全局變量在同一數(shù)據(jù)段中的位置信息;
[0033]根據(jù)所述全局變量對(duì)應(yīng)的數(shù)據(jù)段標(biāo)識(shí)及位置信息將所述源程序中對(duì)應(yīng)的全局變量進(jìn)行編譯后鏈接在一起。
[0034]結(jié)合第二個(gè)方面的計(jì)算機(jī)程序中熱點(diǎn)全局變量的匯聚方法的第一種實(shí)現(xiàn)方式,在第二種實(shí)現(xiàn)方式中,若兩個(gè)數(shù)據(jù)關(guān)鍵路徑中存在對(duì)同一全局變量的訪問(wèn),則為該全局變量配置訪問(wèn)次數(shù)較多的數(shù)據(jù)關(guān)鍵路徑對(duì)應(yīng)的段標(biāo)識(shí)。
[0035]本發(fā)明的第三個(gè)方面是提供一種編譯裝置,包括:
[0036]獲取模塊,用于獲取待處理的源程序;
[0037]路徑分析模塊,用于模擬執(zhí)行所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息,以生成關(guān)鍵路徑文件,所述關(guān)鍵路徑文件包括:執(zhí)行所述源程序時(shí)的一條或多條函數(shù)關(guān)鍵路徑;其中,函數(shù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)函數(shù),以及熱點(diǎn)函數(shù)間的調(diào)用順序;
[0038]函數(shù)匯聚模塊,用于根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一函數(shù)關(guān)鍵路徑上的熱點(diǎn)函數(shù)依照調(diào)用順序進(jìn)行編譯后鏈接在同一代碼段內(nèi)。
[0039]結(jié)合第三個(gè)方面的編譯裝置,在第一種實(shí)現(xiàn)方式中,所述路徑分析模塊,還用于在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)全局變量的訪問(wèn)信息,所述關(guān)鍵路徑文件還包括:執(zhí)行所述源程序時(shí)的一條或多條數(shù)據(jù)關(guān)鍵路徑;其中,數(shù)據(jù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)全局變量,以及熱點(diǎn)全局變量的訪問(wèn)順序;
[0040]所述編譯裝置,還包括:
[0041]變量匯聚模塊,用于根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一數(shù)據(jù)段內(nèi)。
[0042]結(jié)合第三個(gè)方面的編譯裝置的第一種實(shí)現(xiàn)方式,在第二種實(shí)現(xiàn)方式中,所述路徑分析模塊包括:
[0043]原始路徑生成單元,用于分析所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息以及每個(gè)全局變量的訪問(wèn)信息,以生成原始路徑信息;其中,所述原始路徑信息包括:所述源程序中每個(gè)函數(shù)所在的函數(shù)路徑、每個(gè)函數(shù)在函數(shù)路徑中的層數(shù)、每個(gè)函數(shù)的調(diào)用次數(shù)以及用于記錄每個(gè)函數(shù)路徑中所有函數(shù)調(diào)用次數(shù)之和的路徑計(jì)數(shù),以及,所述源程序中每個(gè)全局變量所在的數(shù)據(jù)路徑、每個(gè)全局變量在數(shù)據(jù)路徑中的層數(shù)、每個(gè)全局變量的訪問(wèn)次數(shù)以及用于記錄每個(gè)數(shù)據(jù)路徑中所有全局變量的訪問(wèn)次數(shù)之和的路徑計(jì)數(shù);
[0044]關(guān)鍵路徑生成單元,用于按照所述原始路徑信息中每個(gè)函數(shù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)函數(shù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的函數(shù)路徑作為函數(shù)關(guān)鍵路徑,以及按照所述原始路徑信息中每個(gè)數(shù)據(jù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)數(shù)據(jù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的數(shù)據(jù)路徑作為數(shù)據(jù)關(guān)鍵路徑。
[0045]結(jié)合第三個(gè)方面的編譯裝置的第二種實(shí)現(xiàn)方式,在第三種實(shí)現(xiàn)方式中,所述原始路徑生成單元,具體用于逐條翻譯并執(zhí)行所述源程序中的語(yǔ)句,對(duì)于每一條語(yǔ)句,若確定該語(yǔ)句為函數(shù)調(diào)用或全局變量訪問(wèn),則記錄該語(yǔ)句中的函數(shù)名或全局變量名以及該函數(shù)名被調(diào)用或全局變量名被訪問(wèn)時(shí)所在的層數(shù),生成原始路徑信息。
[0046]結(jié)合第三個(gè)方面的編譯裝置的第一或第二種實(shí)現(xiàn)方式,在第三種實(shí)現(xiàn)方式中,所述關(guān)鍵路徑生成單元,具體用于去除每條函數(shù)路徑中調(diào)用次數(shù)占所在函數(shù)路徑的路徑計(jì)數(shù)比例小于預(yù)設(shè)比例的函數(shù)以簡(jiǎn)化函數(shù)路徑,合并簡(jiǎn)化后的相同函數(shù)路徑;將合并的函數(shù)路徑的路徑計(jì)數(shù)進(jìn)行疊加,并按照合并后的每個(gè)函數(shù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)各條函數(shù)路徑進(jìn)行排序,獲取路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的函數(shù)路徑作為函數(shù)關(guān)鍵路徑;以及具體用于去除每條數(shù)據(jù)路徑中訪問(wèn)次數(shù)占所在數(shù)據(jù)路徑的路徑計(jì)數(shù)比例小于預(yù)設(shè)比例的全局變量以簡(jiǎn)化數(shù)據(jù)路徑,合并簡(jiǎn)化后的相同數(shù)據(jù)路徑;將合并的數(shù)據(jù)路徑的路徑計(jì)數(shù)進(jìn)行疊加,并按照合并后的每個(gè)數(shù)據(jù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)各條數(shù)據(jù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的數(shù)據(jù)路徑作為數(shù)據(jù)關(guān)鍵路徑。
[0047]結(jié)合第三個(gè)方面的編譯裝置的第一、第二或第三種實(shí)現(xiàn)方式,在第四種實(shí)現(xiàn)方式中,所述函數(shù)匯聚模塊,具體用于將所述源程序中位于所述關(guān)鍵路徑文件中同一函數(shù)關(guān)鍵路徑上的函數(shù)配置同一代碼段標(biāo)識(shí),并依照同一函數(shù)關(guān)鍵路徑上函數(shù)的調(diào)用順序配置函數(shù)在同一代碼段中的位置信息;根據(jù)所述函數(shù)對(duì)應(yīng)的代碼段標(biāo)識(shí)及位置信息將所述源程序中對(duì)應(yīng)的函數(shù)進(jìn)行編譯后鏈接在一起。
[0048]本發(fā)明的第四個(gè)方面是提供一種編譯裝置,包括:
[0049]獲取模塊,用于獲取待處理的源程序;
[0050]路徑分析模塊,用于模擬執(zhí)行所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)全局變量的訪問(wèn)信息,以生成關(guān)鍵路徑文件,所述關(guān)鍵路徑文件包括:執(zhí)行所述源程序時(shí)的一條或多條數(shù)據(jù)關(guān)鍵路徑;其中,數(shù)據(jù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)全局變量,以及熱點(diǎn)全局變量的訪問(wèn)順序;
[0051]變量匯聚模塊,用于根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一數(shù)據(jù)段內(nèi)。
[0052]結(jié)合第四個(gè)方面的編譯裝置,在第一種實(shí)現(xiàn)方式中,所述變量匯聚模塊,具體用于將所述源程序中位于所述關(guān)鍵路徑文件中同一數(shù)據(jù)關(guān)鍵路徑上的全局變量配置同一數(shù)據(jù)段標(biāo)識(shí),并依照同一數(shù)據(jù)關(guān)鍵路徑上全局變量的訪問(wèn)順序配置全局變量在同一數(shù)據(jù)段中的位置信息;根據(jù)所述全局變量對(duì)應(yīng)的數(shù)據(jù)段標(biāo)識(shí)及位置信息將所述源程序中對(duì)應(yīng)的全局變量進(jìn)行編譯后鏈接在一起。
[0053]本發(fā)明的第五個(gè)方面是提供一種計(jì)算機(jī)程序處理系統(tǒng),包括:程序執(zhí)行裝置和上述的編譯裝置,所述程序執(zhí)行裝置用于執(zhí)行處理所述編譯裝置編譯后鏈接生成的可執(zhí)行文件。
[0054]本發(fā)明實(shí)施例通過(guò)模擬執(zhí)行源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息,生成關(guān)鍵路徑文件,再根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一函數(shù)關(guān)鍵路徑上的函數(shù)依照調(diào)用順序進(jìn)行編譯后鏈接在同一代碼段內(nèi),使得編譯鏈接后生成的可執(zhí)行文件中處于同一代碼段中的函數(shù)編碼對(duì)應(yīng)于與熱點(diǎn)業(yè)務(wù)對(duì)應(yīng)的同一函數(shù)關(guān)鍵路徑上的函數(shù)調(diào)用,從而使得執(zhí)行可執(zhí)行文件時(shí)可有效降低函數(shù)調(diào)用產(chǎn)生的指令跳變,降低指令Cache Miss,提高系統(tǒng)性能。
【專利附圖】

【附圖說(shuō)明】
[0055]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0056]圖1為軟件系統(tǒng)源程序文件中函數(shù)及全局變量的代碼結(jié)構(gòu)示意圖;
[0057]圖2為采用插樁統(tǒng)計(jì)技術(shù)獲取的可執(zhí)行文件代碼段及數(shù)據(jù)段的結(jié)構(gòu)示意圖;
[0058]圖3為本發(fā)明實(shí)施例提供的計(jì)算機(jī)程序中熱點(diǎn)函數(shù)的匯聚方法的流程圖;
[0059]圖4為本發(fā)明實(shí)施例提供的生成關(guān)鍵路徑文件的流程圖;
[0060]圖5為圖4中源程序模擬執(zhí)行過(guò)程的流程圖;
[0061]圖6為圖5中模擬執(zhí)行過(guò)程中生成原始路徑信息的流程圖;
[0062]圖7為圖6中生成的原始路徑信息中函數(shù)路徑的列表;
[0063]圖8為本發(fā)明實(shí)施例提供的簡(jiǎn)化合并路徑的流程圖;
[0064]圖9為本發(fā)明實(shí)施例提供的路徑合并簡(jiǎn)化后得到的關(guān)鍵路徑文件;
[0065]圖10為本發(fā)明實(shí)施例提供的對(duì)源程序中熱點(diǎn)函數(shù)進(jìn)行匯聚的流程圖;[0066]圖11為圖10中對(duì)熱點(diǎn)函數(shù)進(jìn)行段劃分的分配結(jié)果示意圖;
[0067]圖12為依照本發(fā)明實(shí)施例的方法匯聚后形成的可執(zhí)行文件中代碼段和數(shù)據(jù)段的結(jié)構(gòu)示意圖;
[0068]圖13為本發(fā)明實(shí)施例提供的計(jì)算機(jī)程序中熱點(diǎn)全局變量的匯聚方法的流程圖;
[0069]圖14為本發(fā)明提供的編譯裝置實(shí)施例一的結(jié)構(gòu)示意圖;
[0070]圖15為本發(fā)明提供的編譯裝置實(shí)施例二的結(jié)構(gòu)示意圖;
[0071]圖16為本發(fā)明提供的編譯裝置實(shí)施例三的結(jié)構(gòu)示意圖;
[0072]圖17為本發(fā)明提供的編譯裝置實(shí)施例四的結(jié)構(gòu)示意圖;
[0073]圖18本發(fā)明提供的編譯裝置應(yīng)用實(shí)施例的結(jié)構(gòu)示意圖;
[0074]圖19為本發(fā)明提供的計(jì)算機(jī)程序處理系統(tǒng)實(shí)施例的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0075]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0076]圖3為本發(fā)明實(shí)施例提供的計(jì)算機(jī)程序中熱點(diǎn)函數(shù)的匯聚方法的流程圖,如圖3所示,本實(shí)施例的方法的執(zhí)行主體可以為編譯裝置,計(jì)算機(jī)程序在執(zhí)行之前,需要由編譯裝置將程序設(shè)計(jì)人員編寫(xiě)的程序代 碼進(jìn)行編譯生成機(jī)器可識(shí)別的二進(jìn)制可執(zhí)行文件,本實(shí)施例的方法就是編譯裝置在編譯過(guò)程中執(zhí)行的操作步驟,其操作步驟,包括:
[0077]步驟101、獲取待處理的源程序。
[0078]步驟102、模擬執(zhí)行所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息,以生成關(guān)鍵路徑文件,所述關(guān)鍵路徑文件包括:執(zhí)行所述源程序時(shí)的一條或多條函數(shù)關(guān)鍵路徑。
[0079]其中,函數(shù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)函數(shù),以及熱點(diǎn)函數(shù)間的調(diào)用順序。
[0080]本實(shí)施例中,根據(jù)源程序執(zhí)行程序模擬,由于程序模擬過(guò)程類似于源程序執(zhí)行過(guò)程,其包括各個(gè)函數(shù)的調(diào)用過(guò)程,因此在程序模擬過(guò)程中可獲取源程序中函數(shù)的調(diào)用順序。實(shí)際應(yīng)用中,軟件系統(tǒng)內(nèi)的函數(shù)和全局變量通常不是平均被調(diào)用的,那些頻繁被調(diào)用的函數(shù)和全局變量分別稱為是軟件系統(tǒng)的熱點(diǎn)函數(shù)和熱點(diǎn)全局變量,在本發(fā)明所有實(shí)施例中,分別將被調(diào)用或訪問(wèn)的頻率超過(guò)閾值的函數(shù)和全局變量作為熱點(diǎn)函數(shù)和熱點(diǎn)全局變量(需要說(shuō)明的是,本發(fā)明并不具體限定閾值的具體數(shù)值,本領(lǐng)域技術(shù)人員可以根據(jù)經(jīng)驗(yàn)靈活設(shè)定),這些熱點(diǎn)函數(shù)間的調(diào)用順序?qū)?yīng)著軟件系統(tǒng)的熱點(diǎn)業(yè)務(wù),在計(jì)算機(jī)程序軟件中,通常使用路徑(Path)如:a — b —…一d表示程序在執(zhí)行過(guò)程中調(diào)用函數(shù)或訪問(wèn)全局變量的先后順序軌跡,關(guān)鍵路徑(Critical Path)為指定的路徑計(jì)數(shù)最大的N條路徑,函數(shù)關(guān)鍵路徑反映了程序執(zhí)行時(shí)的某些熱點(diǎn)業(yè)務(wù),以及執(zhí)行這些熱點(diǎn)業(yè)務(wù)時(shí)的函數(shù)調(diào)用順序,數(shù)據(jù)關(guān)鍵路徑反映了程序執(zhí)行時(shí)的某些熱點(diǎn)業(yè)務(wù),以及執(zhí)行這些熱點(diǎn)業(yè)務(wù)時(shí)的全局變量訪問(wèn)順序。由于熱點(diǎn)業(yè)務(wù)對(duì)應(yīng)的函數(shù)關(guān)鍵路徑并非與源程序中函數(shù)的編寫(xiě)順序完全一致,因此,依照源程序中函數(shù)編寫(xiě)順序編譯后鏈接形成可執(zhí)行文件時(shí),由于函數(shù)關(guān)鍵路徑中函數(shù)調(diào)用順序與源程序中函數(shù)編寫(xiě)順序的不一致,而使執(zhí)行該可執(zhí)行文件時(shí)會(huì)出現(xiàn)較多的指令跳變,從而出現(xiàn)指令Cache Miss。
[0081]為有效降低指令跳變,本步驟中通過(guò)對(duì)源程序中與熱點(diǎn)業(yè)務(wù)對(duì)應(yīng)的函數(shù)關(guān)鍵路徑分析,提取熱點(diǎn)業(yè)務(wù)中包含的熱點(diǎn)函數(shù),并依照收集的函數(shù)調(diào)用信息獲取包含函數(shù)關(guān)鍵路徑的關(guān)鍵路徑文件,以便于后續(xù)根據(jù)該關(guān)鍵路徑文件中的函數(shù)關(guān)鍵路徑將源程序中與熱點(diǎn)業(yè)務(wù)相關(guān)的熱點(diǎn)函數(shù)依照函數(shù)在函數(shù)關(guān)鍵路徑中的調(diào)用順序編譯后鏈接在一起。
[0082]步驟103、根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一函數(shù)關(guān)鍵路徑上的熱點(diǎn)函數(shù)依照調(diào)用順序進(jìn)行編譯后鏈接在同一代碼段內(nèi)。
[0083]上述對(duì)函數(shù)關(guān)鍵路徑進(jìn)行分析提取,形成關(guān)鍵路徑文件后,本步驟執(zhí)行編譯鏈接生成可執(zhí)行文件時(shí),能夠根據(jù)函數(shù)關(guān)鍵路徑將熱點(diǎn)業(yè)務(wù)中包含的函數(shù)依照其之間調(diào)用順序進(jìn)行,而且處于同一函數(shù)關(guān)鍵路徑上的函數(shù)編譯鏈接后被匯聚于同一機(jī)器可識(shí)別代碼區(qū)域,由于通過(guò)這種關(guān)鍵路徑分析方法生成的可執(zhí)行文件中對(duì)應(yīng)的函數(shù)編碼順序與熱點(diǎn)業(yè)務(wù)對(duì)應(yīng)的函數(shù)關(guān)鍵路徑一致,即可執(zhí)行文件中被鏈接匯聚在同一代碼段的二進(jìn)制編碼對(duì)應(yīng)于同一函數(shù)關(guān)鍵路徑上的函數(shù)調(diào)用,即對(duì)應(yīng)于熱點(diǎn)業(yè)務(wù),相比插樁統(tǒng)計(jì)方法不僅將調(diào)用次數(shù)較多的熱點(diǎn)函數(shù)聚集在一起,而且在匯聚時(shí)還考慮到各個(gè)函數(shù)之間的調(diào)用先后順序,因此,當(dāng)軟件系統(tǒng)運(yùn)行時(shí),可有效降低函數(shù)調(diào)用產(chǎn)生的指令跳變,降低指令Cache Miss,提高系統(tǒng)性能。本發(fā)明實(shí)施例通過(guò)模擬執(zhí)行源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息,生成關(guān)鍵路徑文件,再根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一函數(shù)關(guān)鍵路徑上的函數(shù)依照調(diào)用順序進(jìn)行編譯后鏈接在同一代碼段內(nèi),使得編譯鏈接后生成的可執(zhí)行文件中處于同一代碼段中的函數(shù)編碼對(duì)應(yīng)于與熱點(diǎn)業(yè)務(wù)對(duì)應(yīng)的同一函數(shù)關(guān)鍵路徑上的函數(shù)調(diào)用,從而使得執(zhí)行可執(zhí)行文件時(shí)可有效降低函數(shù)調(diào)用產(chǎn)生的指令跳變,降低指令Cache Miss,提高系統(tǒng)性能。
[0084]為進(jìn)一步提高系統(tǒng)性能,在上述實(shí)施例的基礎(chǔ)上,還可以通過(guò)降低全局變量訪問(wèn)跳變以減少數(shù)據(jù)Cache Miss0具體來(lái)說(shuō),在所述源程序的執(zhí)行過(guò)程中還收集所述源程序中每個(gè)全局變量的訪問(wèn)信息,從而所述關(guān)鍵路徑文件還包括:執(zhí)行所述源程序時(shí)的一條或多條數(shù)據(jù)關(guān)鍵路徑;其中,數(shù)據(jù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)全局變量,以及熱點(diǎn)全局變量的訪問(wèn)順序,因此,上述實(shí)施例在進(jìn)行源程序編譯鏈接形成可執(zhí)行文件過(guò)程中,還可以包括:根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一數(shù)據(jù)段內(nèi),在源程序的模擬過(guò)程中,可分析出全局變量的訪問(wèn)順序,同上述函數(shù)調(diào)用類似,全局變量的訪問(wèn)也是不均勻的,經(jīng)常被訪問(wèn)的全局變量及其訪問(wèn)順序?qū)?yīng)著軟件系統(tǒng)的熱點(diǎn)業(yè)務(wù),因此通過(guò)提取熱點(diǎn)業(yè)務(wù)中包含的熱點(diǎn)全局變量并依照其訪問(wèn)順序形成數(shù)據(jù)關(guān)鍵路徑,當(dāng)對(duì)源程序進(jìn)行編譯鏈接后能夠?qū)⑼粩?shù)據(jù)關(guān)鍵路徑上的全局變量匯聚到賦初值的數(shù)據(jù)段,因此,當(dāng)軟件系統(tǒng)運(yùn)行時(shí),同樣可有效降低全局變量訪問(wèn)產(chǎn)生的數(shù)據(jù)跳變,降低數(shù)據(jù)Cache Miss,提高系統(tǒng)性能。
[0085]圖4為本發(fā)明實(shí)施例提供的生成關(guān)鍵路徑文件的流程圖,圖5為圖4中源程序模擬執(zhí)行過(guò)程的流程圖,圖6為圖5中模擬執(zhí)行過(guò)程中生成原始路徑信息的流程圖,圖7為圖6中生成的原始路徑信息中函數(shù)路徑的列表,如圖4至圖7所示,在源程序模擬生成關(guān)鍵路徑文件過(guò)程的操作步驟包括:
[0086]步驟201、分析所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息,以生成原始路徑信息。
[0087]圖7所示的是函數(shù)路徑信息,全局變量對(duì)應(yīng)的數(shù)據(jù)路徑信息與圖7所示的列表類似,即原始路徑信息包括:所述源程序中每個(gè)函數(shù)所在的函數(shù)路徑、每個(gè)函數(shù)在函數(shù)路徑中的層數(shù)、每個(gè)函數(shù)的調(diào)用次數(shù)以及用于記錄每個(gè)函數(shù)路徑中所有函數(shù)調(diào)用次數(shù)之和的路徑計(jì)數(shù),以及,所述源程序中每個(gè)全局變量所在的數(shù)據(jù)路徑、每個(gè)全局變量在數(shù)據(jù)路徑中的層數(shù)、每個(gè)全局變量的訪問(wèn)次數(shù)以及用于記錄每個(gè)數(shù)據(jù)路徑中所有全局變量的訪問(wèn)次數(shù)之和的路徑計(jì)數(shù)。如表中路徑編號(hào)為I的函數(shù)路徑中其函數(shù)調(diào)用順序?yàn)閒uncE(5) — funcD(56)—funcB (78) — funcF(76) — funcA (1000) — funcP (8767) — funcG (8972)—…,其中,函數(shù)funcE的調(diào)用次數(shù)為5次,該路徑總的路徑計(jì)數(shù)為各個(gè)函數(shù)調(diào)用的次數(shù)總和29879,形成的該原始路徑信息列表可以存儲(chǔ)在存儲(chǔ)器中。
[0088]如圖5所示,在編譯裝置執(zhí)行程序模擬,分析程序代碼生成原始路徑信息過(guò)程中,具體操作包括:
[0089]步驟301、獲取源程序中的一個(gè)語(yǔ)句。
[0090]步驟302、模擬執(zhí)行該語(yǔ)句。在模擬執(zhí)行中可通過(guò)將獲取的語(yǔ)句提交給翻譯執(zhí)行器進(jìn)行執(zhí)行。
[0091]步驟303、判斷該語(yǔ)句是否為函數(shù)調(diào)用或全局變量引用,若是函數(shù)調(diào)用或者全局變量引用,則執(zhí)行步驟304,否則執(zhí)行步驟301獲取下一個(gè)語(yǔ)句。
[0092]步驟304、記錄函數(shù)或全局變量信息,生成原始路徑信息。函數(shù)或全局變量信息包括語(yǔ)句中的函數(shù)名/全局變量名以及該函數(shù)名/全局變量名被引用時(shí)所在的層數(shù)。
`[0093]通過(guò)圖5所示的方法可遍歷源程序中每個(gè)語(yǔ)句,獲取源程序中每個(gè)函數(shù)及全局變量的調(diào)用信息。為使記錄的原始路徑中相同的路徑進(jìn)行路徑計(jì)數(shù)合并,便于后續(xù)提取關(guān)鍵路徑,在記錄語(yǔ)句中的函數(shù)名或全局變量信息生成原始路徑信息過(guò)程中,本發(fā)明中一方面將重復(fù)出現(xiàn)的函數(shù)調(diào)用或全局變量引用的路徑進(jìn)行路徑計(jì)數(shù)合并,另一方面還將源程序中出現(xiàn)函數(shù)調(diào)用跳轉(zhuǎn)的函數(shù)連接到同一路徑中相鄰的位置,使得后續(xù)根據(jù)路徑計(jì)數(shù)獲取關(guān)鍵路徑后,對(duì)關(guān)鍵路徑進(jìn)行編譯鏈接時(shí)源程序中發(fā)生函數(shù)調(diào)用跳轉(zhuǎn)的函數(shù)也能夠匯聚到同一代碼段的相鄰位置,因此減少了因函數(shù)調(diào)用跳轉(zhuǎn)而產(chǎn)生的指令跳變。記錄語(yǔ)句中的函數(shù)名或全局變量名以及該函數(shù)名或全局變量名被引用時(shí)所在的層數(shù),生成原始路徑信息,具體可包括:確定語(yǔ)句中的函數(shù)名或全局變量名以及該函數(shù)名或全局變量名被引用時(shí)所在的層數(shù);若該函數(shù)名或全局變量名被引用時(shí)所在的層數(shù)大于等于活動(dòng)路徑的深度,則確定該函數(shù)名或全局變量名是否與活動(dòng)路徑末節(jié)點(diǎn)所表示的函數(shù)名或全局變量名相同,若相同,則將活動(dòng)路徑的深度更新為與該函數(shù)名或全局變量名被引用時(shí)所在的層數(shù)相等,并將活動(dòng)路徑的路徑計(jì)數(shù)加一,否則將該活動(dòng)路徑的末節(jié)點(diǎn)表示的函數(shù)名或全局變量名更新為該函數(shù)名或全局變量名,將活動(dòng)路徑的深度更新為與該函數(shù)名或全局變量名被引用時(shí)所在的層數(shù)相等,并將活動(dòng)路徑的路徑計(jì)數(shù)加一,所述活動(dòng)路徑為路徑分析過(guò)程中的當(dāng)前路徑,所述活動(dòng)路徑的深度為活動(dòng)路徑末節(jié)點(diǎn)所在的層數(shù);若該函數(shù)名或全局變量名被引用時(shí)所在的層數(shù)小于活動(dòng)路徑的深度,則確定活動(dòng)路徑是否為原始路徑信息中已知路徑的子集,若是則將該已知路徑的路徑計(jì)數(shù)加上活動(dòng)路徑的路徑計(jì)數(shù),并創(chuàng)建新路徑,所述新路徑的首節(jié)點(diǎn)和末節(jié)點(diǎn)設(shè)置為該函數(shù)名或全局變量名,新路徑的深度設(shè)置為該函數(shù)名或全局變量名被引用時(shí)所在的層數(shù),新路徑的路徑計(jì)數(shù)設(shè)置為1,設(shè)置所述新路徑為新的活動(dòng)路徑,否則,存儲(chǔ)該活動(dòng)路徑于原始路徑信息,并創(chuàng)建新路徑,所述新路徑的首節(jié)點(diǎn)和末節(jié)點(diǎn)設(shè)置為該函數(shù)名或全局變量名,新路徑的深度設(shè)置為該函數(shù)名或全局變量名被引用時(shí)所在的層數(shù),新路徑的路徑計(jì)數(shù)設(shè)置為1,設(shè)置所述新路徑為新的活動(dòng)路徑,所述路徑計(jì)數(shù)為函數(shù)路徑上所有節(jié)點(diǎn)表示的函數(shù)名或數(shù)據(jù)路徑上所有節(jié)點(diǎn)表示的全局變量名被引用的次數(shù)之和。[0094]具體實(shí)施中,記錄函數(shù)或全局變量調(diào)用信息生成原始路徑信息的過(guò)程可如圖6所示,其操作步驟包括:
[0095]步驟401、獲取函數(shù)名或全局變量名A及其所在的層數(shù)L。函數(shù)或全局變量所在的層數(shù)為其被引用時(shí)所在路徑上的深度,例如存在路徑a — b — c — d — e — f,則函數(shù)c位于第3層,f位于第5層,如果在函數(shù)c內(nèi)引用了全局變量varlOO,那么varlOO也具有層數(shù)3。
[0096]步驟402、判斷L是否大于等于活動(dòng)路徑的深度AP.L,若是則執(zhí)行步驟403,以進(jìn)行源程序中函數(shù)或全局變量調(diào)用跳轉(zhuǎn)時(shí)的路徑連接,否則執(zhí)行步驟406,以合并相同路徑或路徑的子集的路徑計(jì)數(shù),并重置活動(dòng)路徑。
[0097]活動(dòng)路徑為在路徑分析過(guò)程中標(biāo)識(shí)為當(dāng)前分析中的路徑,活動(dòng)路徑的深度AP.L為路徑分析過(guò)程中標(biāo)識(shí)為當(dāng)前路徑的末節(jié)點(diǎn)所在的層數(shù)。
[0098]步驟403、A是否與活動(dòng)路徑末節(jié)點(diǎn)AP.Last相同,若相同,則執(zhí)行步驟404,否則,將A作為活動(dòng)路徑的末節(jié)點(diǎn)后再執(zhí)行步驟404,也就是說(shuō),將源程序中發(fā)生函數(shù)或全局變量調(diào)用跳轉(zhuǎn)的A連接到當(dāng)前活動(dòng)路徑AP中,使得后續(xù)依照存儲(chǔ)的活動(dòng)路徑AP對(duì)源程序進(jìn)行編譯鏈接時(shí)能夠?qū)匯聚在路徑AP所對(duì)應(yīng)的段中,且避免了發(fā)生指令跳變。
[0099]步驟404、將A所在的層數(shù)賦給活動(dòng)路徑的深度AP.L。將函數(shù)或全局變量A加入當(dāng)前的活動(dòng)路徑AP中。
[0100]步驟405、活動(dòng)路徑的路徑計(jì)數(shù)加1,更新當(dāng)前活動(dòng)路徑的路徑計(jì)數(shù),返回步驟401獲取下一個(gè)函數(shù)或全局變量及其所在的層數(shù)進(jìn)行處理。
[0101]步驟406、活動(dòng)路徑AP是否為已知路徑P的子集,若是則執(zhí)行步驟407進(jìn)行路徑合并,否則保存當(dāng)前的活動(dòng)路徑AP后執(zhí)行步驟408創(chuàng)建新路徑
[0102]步驟407、將已知路徑的路徑計(jì)數(shù)P.Cnt加上活動(dòng)路徑的路徑計(jì)數(shù)AP.Cnt,由于活動(dòng)路徑AP是否為已知路徑P的子集,將活動(dòng)路徑AP合并到已知路徑P中。
[0103]步驟408、創(chuàng)建新路徑NP,并將新路徑的首節(jié)點(diǎn)NP.Head和末節(jié)點(diǎn)NP.Last設(shè)置為該函數(shù)名/全局變量名A,新路徑的深度NP.L設(shè)置為該函數(shù)名/全局變量名A被引用時(shí)所在的層數(shù)L,新路徑的路徑計(jì)數(shù)NP.Cnt設(shè)置為I。
[0104]步驟409、設(shè)置所述新路徑為新的活動(dòng)路徑,返回步驟401獲取新的函數(shù)或全局變量及其層數(shù)進(jìn)行處理。
[0105]通過(guò)如圖6所示的操作過(guò)程可以遍歷源程序中所有函數(shù)及全局變量的調(diào)用信息,使得記錄的原始路徑中相同的路徑進(jìn)行路徑計(jì)數(shù)合并,有利于根據(jù)路徑計(jì)數(shù)進(jìn)行排序并提取關(guān)鍵路徑。圖7所示原始路徑信息列表中顯示的即為根據(jù)上述方法遍歷合并后的各個(gè)函數(shù)路徑的原始路徑信息,根據(jù)該路徑信息可以對(duì)各個(gè)路徑進(jìn)行排序,獲取源程序中熱點(diǎn)業(yè)務(wù)包含的熱點(diǎn)函數(shù)對(duì)應(yīng)的函數(shù)關(guān)鍵路徑,如路徑編號(hào)為I的路徑由于其路徑計(jì)數(shù)總數(shù)最多,為 29879,其路徑 funcE (5) — funcD (56) — funcB (78) — funcF (76) — funcA (1000) — funcP(8767) - funcG(8972)—…對(duì)應(yīng)著源程序中的熱點(diǎn)業(yè)務(wù)中函數(shù)的調(diào)用順序。表中某些路徑在前面幾層是空白的,表示他們繼承了路徑編號(hào)更靠前的路徑的上層調(diào)用信息,如路徑I的關(guān)系是:
[0106]funcE — funcD — funcB — funcF —…,路徑2繼承了路徑I的前置調(diào)用關(guān)系,即路徑2為:
[0107]funcE — funcD — funcH — fund —…
[0108]路徑3繼承了路徑2的前置調(diào)用關(guān)系,路徑3為:
[0109]funcE — funcD — funcH — fund — funcj — funcK — funcCD
[0110]通過(guò)在路徑編號(hào)靠后的路徑上留出空白可保證對(duì)于同一函數(shù)或全局變量的引用次數(shù)不出現(xiàn)重復(fù)統(tǒng)計(jì)。
[0111]步驟202、按照所述原始路徑信息中每個(gè)函數(shù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)函數(shù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的函數(shù)路徑作為函數(shù)關(guān)鍵路徑。
[0112]上述圖4所示為函數(shù)關(guān)鍵路徑的獲取過(guò)程,數(shù)據(jù)關(guān)鍵路徑的獲取過(guò)程與函數(shù)關(guān)鍵路徑的獲取過(guò)程類似。
[0113]實(shí)際應(yīng)用中,在路徑計(jì)數(shù)排序后,可根據(jù)需要提取路徑計(jì)數(shù)較多的一個(gè)或多個(gè)路徑作為關(guān)鍵路徑,生成關(guān)鍵路徑文件,使得后續(xù)可根據(jù)這些關(guān)鍵路徑中的函數(shù)或全局變量的調(diào)用順序?qū)υ闯绦蛑械暮瘮?shù)或全局變量進(jìn)行編譯后鏈接在可執(zhí)行文件中的同一段內(nèi),從而在軟件系統(tǒng)運(yùn)行時(shí)同一段內(nèi)的代碼運(yùn)行時(shí)不會(huì)發(fā)生指令跳變或數(shù)據(jù)跳變。
[0114]上述圖7所示的原始路徑信息列表包括全部函數(shù)的路徑信息表,在實(shí)際應(yīng)用中,還可以通過(guò)忽略掉路徑中引用次數(shù)所占比例較小的函數(shù)或全局變量,以進(jìn)一步簡(jiǎn)化合并路徑。圖8為本發(fā)明實(shí)施例提供的簡(jiǎn)化合并路徑的流程圖,圖9為本發(fā)明實(shí)施例提供的路徑合并簡(jiǎn)化后得到的關(guān)鍵路徑文件,如圖8所示,簡(jiǎn)化合并路徑操作包括:
[0115]步驟601、去除每條函數(shù)路徑中調(diào)用次數(shù)占所在函數(shù)路徑的路徑計(jì)數(shù)比例小于預(yù)設(shè)比例的函數(shù)以簡(jiǎn)化函數(shù)路徑,合并簡(jiǎn)化后的相同函數(shù)路徑。
[0116]在獲取原始路徑信息后,編譯裝置對(duì)存儲(chǔ)的原始路徑信息進(jìn)行分析,忽略每個(gè)路徑下引用所占百分比低于預(yù)設(shè)比例,如0.1%的節(jié)點(diǎn)對(duì)應(yīng)的函數(shù)或全局變量。例如對(duì)于圖5所不的表中路徑 I,funcE(5) — funcD(56) — funcB (78) — funcF(76) — funcA(1000) — funcP (8767)—…,由于funcE引用次數(shù)占整個(gè)路徑的百分比僅為5/29879* 100%=0.016%,因此路徑 I 將簡(jiǎn)化為:funcD(56) — funcB (78) — funcF(76) — funcA(1000) — funcP (8767)—…,對(duì)所有路徑進(jìn)行簡(jiǎn)化之后,合并存在的相同路徑。
[0117]步驟602、將合并的函數(shù)路徑的路徑計(jì)數(shù)進(jìn)行疊加,并按照合并后的每個(gè)函數(shù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)各條函數(shù)路徑進(jìn)行排序,獲取路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的函數(shù)路徑作為函數(shù)關(guān)鍵路徑。
[0118]對(duì)原始路徑信息列表中的路徑進(jìn)行簡(jiǎn)化合并后,重新計(jì)算合并之后的路徑計(jì)數(shù),最后對(duì)路徑按照其計(jì)數(shù)從高到低排列,得到路徑計(jì)數(shù)排序靠前的N條函數(shù)路徑作為函數(shù)關(guān)鍵路徑,生成關(guān)鍵路徑文件,其文件格式如圖9所示,輸出的關(guān)鍵路徑文件以ASCII碼的格式存儲(chǔ),開(kāi)發(fā)人員還可以 進(jìn)行檢視并二次編輯,編輯好的關(guān)鍵路徑文件可用于后續(xù)的源程序中函數(shù)與數(shù)據(jù)重組。
[0119]上述圖8所示為關(guān)鍵路徑文件中函數(shù)關(guān)鍵路徑的形成過(guò)程,關(guān)鍵路徑文件中數(shù)據(jù)關(guān)鍵路徑的形成過(guò)程與函數(shù)關(guān)鍵路徑的形成過(guò)程類似。
[0120]為使生成的關(guān)鍵路徑文件記錄的信息用于源程序中的函數(shù)或全局變量匯聚,需要將上述關(guān)鍵路徑文件記錄的信息與源程序中的函數(shù)或全局變量關(guān)聯(lián)起來(lái),生成段表信息,從而使得軟件運(yùn)行時(shí),能夠根據(jù)關(guān)鍵路徑文件記錄的信息進(jìn)行編譯后鏈接在一起。
[0121]圖10為本發(fā)明實(shí)施例提供的對(duì)源程序中熱點(diǎn)函數(shù)進(jìn)行匯聚的流程圖,圖11為圖10中對(duì)熱點(diǎn)函數(shù)進(jìn)行段劃分的分配結(jié)果示意圖。如圖10所示,對(duì)源程序中熱點(diǎn)函數(shù)進(jìn)行匯聚的過(guò)程包括:
[0122]步驟801、將所述源程序中位于所述關(guān)鍵路徑文件中同一函數(shù)關(guān)鍵路徑上的函數(shù)配置同一代碼段標(biāo)識(shí),并依照同一函數(shù)關(guān)鍵路徑上函數(shù)的調(diào)用順序配置函數(shù)在同一代碼段中的位置信息。
[0123]根據(jù)上述描述可知位于同一函數(shù)關(guān)鍵路徑上的函數(shù)對(duì)應(yīng)于熱點(diǎn)業(yè)務(wù)中的熱點(diǎn)函數(shù)調(diào)用,其在路徑上的順序表示其調(diào)用順序,為使位于同一函數(shù)關(guān)鍵路徑上的函數(shù)能夠在源程序編譯鏈接時(shí)依照路徑上的調(diào)用順序配置代碼段中的位置,本發(fā)明中將位于同一函數(shù)關(guān)鍵路徑上的函數(shù)配置同一代碼段標(biāo)識(shí),并設(shè)置相應(yīng)的位置信息,即配置偏移位置,從而根據(jù)代碼段標(biāo)識(shí)和偏移位置可在編譯鏈接時(shí)將源程序中的函數(shù)配置到相應(yīng)的代碼段及段中的位置。如圖11所示,段表信息的第一列源文件名指明源文件,第二列符號(hào)指明該源文件內(nèi)的函數(shù)或全局變量,第三列段標(biāo)識(shí)指明該函數(shù)或全局變量應(yīng)在編譯時(shí)放在哪個(gè)段,如text_00表明在編譯器在編譯file0.c時(shí)需要將函數(shù)funcA編譯成單獨(dú)的段,并在鏈接時(shí)將該段放在段標(biāo)識(shí)為text_00的段內(nèi),段偏移指明段內(nèi)偏移,表明鏈接器需要將編譯后的funcA放置在段text_00的第3個(gè)位置處。
[0124]在實(shí)際應(yīng)用中,若兩個(gè)函數(shù)關(guān)鍵路徑中存在對(duì)同一函數(shù)的調(diào)用,則為該函數(shù)配置調(diào)用次數(shù)較多的函數(shù)關(guān)鍵路徑對(duì)應(yīng)的代碼段標(biāo)識(shí)。例如若存在兩個(gè)函數(shù)關(guān)鍵路徑,路徑 I:funcD(56) —` funcB(78) — funcF(76) — funcA(1000) — funcP(8767) — funcG(8972)—…,路徑2:funcH(98) —funcl (99) — funcj(1000) — funcK(1534) — funcL(3877)—funcB(800)…,由于funcB存在于路徑I和路徑2,funcB被2引用的次數(shù)800大于被I引用的次數(shù)78,因此在鏈接時(shí)將funcB聚合到路徑2所對(duì)應(yīng)的段內(nèi),即將funcH、fund,funcj、funcK、funcL、funcB 聚合在一起。
[0125]為避免關(guān)鍵路徑文件生成過(guò)程中引入的錯(cuò)誤,在生成的段表信息之前,還需對(duì)關(guān)鍵路徑文件的格式進(jìn)行檢測(cè),確定其格式合法后再與源文件進(jìn)行比較,以進(jìn)一步確定內(nèi)容合法,即關(guān)鍵路徑文件中的函數(shù)及全局變量應(yīng)為源程序中的函數(shù)及全局變量,如上述任一檢測(cè)過(guò)程中出現(xiàn)不合格的情況,則表明生成的關(guān)鍵路徑文件過(guò)程中出現(xiàn)了錯(cuò)誤,需重新生成關(guān)鍵路徑文件。
[0126]步驟802、根據(jù)所述函數(shù)對(duì)應(yīng)的代碼段標(biāo)識(shí)及位置信息將所述源程序中對(duì)應(yīng)的函數(shù)進(jìn)行編譯后鏈接在一起。
[0127]將源程序中的函數(shù)配置好代碼段標(biāo)識(shí)及段中的位置信息后,根據(jù)這些信息對(duì)源程序進(jìn)行編譯鏈接時(shí)能夠自動(dòng)將相應(yīng)的函數(shù)編譯成的目標(biāo)文件鏈接在相應(yīng)的段中,形成可執(zhí)行的二進(jìn)制文件,該二進(jìn)制文件中對(duì)應(yīng)于熱點(diǎn)業(yè)務(wù)的函數(shù)得到了匯聚,且其調(diào)用順序也得到了有效配置。
[0128]上述描述的是對(duì)函數(shù)關(guān)鍵路徑上熱點(diǎn)函數(shù)的匯聚過(guò)程,對(duì)數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量的匯聚過(guò)程與對(duì)函數(shù)關(guān)鍵路徑上熱點(diǎn)函數(shù)的匯聚過(guò)程類似。
[0129]以下以具體事例進(jìn)行說(shuō)明。
[0130]圖12為依照本發(fā)明實(shí)施例的方法匯聚后形成的可執(zhí)行文件中代碼段和數(shù)據(jù)段的結(jié)構(gòu)不意圖,由圖12可知,調(diào)用順序?yàn)閒uncD — funcB — funcF — funcA — funcP — funcG的關(guān)鍵路徑涉及的函數(shù)被匯聚在同一代碼段中,相比圖2所示的現(xiàn)有技術(shù)中采用的插樁統(tǒng)計(jì)技術(shù)得到的可執(zhí)行文件,各函數(shù)之間的調(diào)用不再出現(xiàn)調(diào)用跳轉(zhuǎn),全局變量引用也沒(méi)有跳轉(zhuǎn),從而在系統(tǒng)運(yùn)行時(shí)極大降低了指令Cache Miss和數(shù)據(jù)Cache Miss,系統(tǒng)性能得到有效地提聞。
[0131]圖13為本發(fā)明實(shí)施例提供的計(jì)算機(jī)程序中熱點(diǎn)全局變量的匯聚方法的流程圖,如圖13所示,本實(shí)施例的方法的執(zhí)行主體可以為編譯裝置,計(jì)算機(jī)程序在執(zhí)行之前,需要由編譯裝置將程序設(shè)計(jì)人員編寫(xiě)的程序代碼進(jìn)行編譯生成機(jī)器可識(shí)別的二進(jìn)制可執(zhí)行文件,本實(shí)施例的方法就是編譯裝置在編譯過(guò)程中執(zhí)行的操作步驟,其操作步驟,包括:
[0132]步驟901、獲取待處理的源程序。
[0133]步驟902、模擬執(zhí)行所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)全局變量的訪問(wèn)信息,以生成關(guān)鍵路徑文件,所述關(guān)鍵路徑文件包括:執(zhí)行所述源程序時(shí)的一條或多條數(shù)據(jù)關(guān)鍵路徑。
[0134]其中,數(shù)據(jù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)全局變量,以及熱點(diǎn)全局變量的訪問(wèn)順序。
[0135]步驟903、根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一數(shù)據(jù)段內(nèi)。
[0136]為降低軟件系統(tǒng)中訪問(wèn)全局變量時(shí)引起的數(shù)據(jù)跳變,本發(fā)明實(shí)施例中通過(guò)對(duì)源程序中與熱點(diǎn)業(yè)務(wù)對(duì)應(yīng)的數(shù)據(jù)關(guān)鍵路徑分析,提取熱點(diǎn)業(yè)務(wù)中包含的熱點(diǎn)全局變量,并依照收集的全局變量訪問(wèn)信息獲取包含數(shù)據(jù)關(guān)鍵路徑的關(guān)鍵路徑文件,再根據(jù)該關(guān)鍵路徑文件中的數(shù)據(jù)關(guān)鍵路徑將源程序中與熱點(diǎn)業(yè)務(wù)相關(guān)的熱點(diǎn)全局變量依照全局變量在數(shù)據(jù)關(guān)鍵路徑中的訪問(wèn)順序編譯后鏈接在一起。由于通過(guò)這種關(guān)鍵路徑分析方法生成的可執(zhí)行文件中對(duì)應(yīng)的數(shù)據(jù)編碼順序與熱點(diǎn)業(yè)務(wù)對(duì)應(yīng)的數(shù)據(jù)關(guān)鍵路徑一致,即可執(zhí)行文件中被鏈接匯聚在同一數(shù)據(jù)段的二進(jìn)制編碼對(duì)應(yīng)于同一數(shù)據(jù)關(guān)鍵路徑上的全局變量訪問(wèn),即對(duì)應(yīng)于熱點(diǎn)業(yè)務(wù),因此,當(dāng)軟件系統(tǒng)運(yùn)行時(shí),可有效降低全局變量訪問(wèn)產(chǎn)生的數(shù)據(jù)跳變,降低數(shù)據(jù)CacheMiss,提聞系統(tǒng)性能。
[0137]本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過(guò)程序指令相關(guān)的硬件來(lái)完成,前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),處理器,如中央處理單元(Central Processing Unit, CPU),執(zhí)行包括上述方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:只讀存儲(chǔ)器(read-only memory, ROM)、隨機(jī)存儲(chǔ)器(random access memory, RAM)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
[0138]圖14為本發(fā)明提供的編譯裝置實(shí)施例一的結(jié)構(gòu)示意圖,如圖14所示,本實(shí)施例的裝置包括:獲取模塊10、路徑分析模塊20和函數(shù)匯聚模塊30,獲取模塊10,用于獲取待處理的源程序;路徑分析模塊20,用于模擬執(zhí)行所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息,以生成關(guān)鍵路徑文件,所述關(guān)鍵路徑文件包括:執(zhí)行所述源程序時(shí)的一條或多條函數(shù)關(guān)鍵路徑;其中,函數(shù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)函數(shù),以及熱點(diǎn)函數(shù)間的調(diào)用順序;函數(shù)匯聚模塊30,用于根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一函數(shù)關(guān)鍵路徑上的熱點(diǎn)函數(shù)依照調(diào)用順序進(jìn)行編譯后鏈接在同一代碼段內(nèi)。
[0139]本實(shí)施例中,路徑分析模塊20根據(jù)獲取模塊10獲取的源程序進(jìn)行程序模擬,獲取關(guān)鍵路徑文件,函數(shù)匯聚模塊30根據(jù)關(guān)鍵路徑文件中的函數(shù)關(guān)鍵路徑將源程序中位于同一函數(shù)關(guān)鍵路徑上的熱點(diǎn)函數(shù)依照調(diào)用順序進(jìn)行編譯后鏈接在同一代碼段內(nèi),使得生成的可執(zhí)行文件中熱點(diǎn)業(yè)務(wù)包含的熱點(diǎn)函數(shù)調(diào)用不再發(fā)生指令跳變,從而減少了軟件系統(tǒng)運(yùn)行時(shí)的指令Cache Miss。
[0140]本發(fā)明實(shí)施例可用于執(zhí)行上述圖3所示方法實(shí)施例的技術(shù)方案,其工作原理及達(dá)到的技術(shù)效果類似,不再詳細(xì)贅述。
[0141]在上述編譯裝置實(shí)施例中,所述路徑分析模塊,還可用于在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)全局變量的訪問(wèn)信息,所述關(guān)鍵路徑文件還包括:執(zhí)行所述源程序時(shí)的一條或多條數(shù)據(jù)關(guān)鍵路徑;其中,數(shù)據(jù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)全局變量,以及熱點(diǎn)全局變量的訪問(wèn)順序,以使編譯裝置在編譯時(shí)根據(jù)所述關(guān)鍵路徑文件中數(shù)據(jù)關(guān)鍵路徑將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一段內(nèi),以實(shí)現(xiàn)降低全局變量引用的數(shù)據(jù)跳變,從而減少數(shù)據(jù)Cache Miss,進(jìn)一步提高了系統(tǒng)性能。
[0142]圖15為本發(fā)明提供的編譯裝置實(shí)施例二的結(jié)構(gòu)示意圖,如圖15所示,本實(shí)施例的裝置在上述圖14所示實(shí)施例的基礎(chǔ)上,還進(jìn)一步包括:變量匯聚模塊40,用于根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一數(shù)據(jù)段內(nèi)。本實(shí)施例中路徑分析模塊20可具體包括:原始路徑生成單元210,用于分析所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息以及每個(gè)全局變量的訪問(wèn)信息,以生成原始路徑信息;其中,所述原始路徑信息包括:所述源程序中每個(gè)函數(shù)所在的函數(shù)路徑、每個(gè)函數(shù)在函數(shù)路徑中的層數(shù)、每個(gè)函數(shù)的調(diào)用次數(shù)以及用于記錄每個(gè)函數(shù)路徑中所有函數(shù)調(diào)用次數(shù)之和的路徑計(jì)數(shù),以及,所述源程序中每個(gè)全局變量所在的數(shù)據(jù)路徑、每個(gè)全局變量在數(shù)據(jù)路徑中的層數(shù)、每個(gè)全局變量的訪問(wèn)次數(shù)以及用于記錄每個(gè)數(shù)據(jù)路徑中所有全局變量的訪問(wèn)次數(shù)之和的路徑計(jì)數(shù);關(guān)鍵路徑生成單元220,用于按照所述原始路徑信息中每個(gè)函數(shù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)函數(shù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的函數(shù)路徑作為函數(shù)關(guān)鍵路徑,以及按照所述原始路徑信息中每個(gè)數(shù)據(jù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)數(shù)據(jù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的數(shù)據(jù)路徑作為數(shù)據(jù)關(guān)鍵路徑。
[0143]本實(shí)施例中原始路徑生成單元210可對(duì)源程序進(jìn)行分析,根據(jù)各個(gè)函數(shù)和/或全局變量的調(diào)用關(guān)系生成原始路徑信息,關(guān)鍵路徑生成單元220對(duì)原始路徑信息進(jìn)行處理,提取函數(shù)關(guān)鍵路徑和/或數(shù)據(jù)關(guān)鍵路徑,生成關(guān)鍵路徑文件,從而函數(shù)匯聚模塊30可根據(jù)關(guān)鍵路徑文件在對(duì)源程序進(jìn)行編譯鏈接時(shí)實(shí)現(xiàn)熱點(diǎn)函數(shù)調(diào)用的匯聚,降低指令CacheMiss,而變量匯聚模塊40可根據(jù)關(guān)鍵路徑文件對(duì)源程序進(jìn)行編譯鏈接時(shí)實(shí)現(xiàn)熱點(diǎn)全局變量訪問(wèn)的匯聚,降低數(shù)據(jù)Cache Miss。
[0144]在上述圖15所示實(shí)施例中,關(guān)鍵路徑生成單元220還可對(duì)原始路徑信息中各個(gè)路徑進(jìn)行簡(jiǎn)化合并處理,以進(jìn)一步匯聚關(guān)鍵路徑中的函數(shù)或全局變量,具體來(lái)說(shuō),關(guān)鍵路徑生成單元220具體用于去除每條函數(shù)路徑中調(diào)用次數(shù)占所在函數(shù)路徑的路徑計(jì)數(shù)比例小于預(yù)設(shè)比例的函數(shù)以簡(jiǎn)化函數(shù)路徑,合并簡(jiǎn)化后的相同函數(shù)路徑;將合并的函數(shù)路徑的路徑計(jì)數(shù)進(jìn)行疊加,并按照合并后的每個(gè)函數(shù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)各條函數(shù)路徑進(jìn)行排序,獲取路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的函數(shù)路徑作為函數(shù)關(guān)鍵路徑;以及具體用于去除每條數(shù)據(jù)路徑中訪問(wèn)次數(shù)占所在數(shù)據(jù)路徑的路徑計(jì)數(shù)比例小于預(yù)設(shè)比例的全局變量以簡(jiǎn)化數(shù)據(jù)路徑,合并簡(jiǎn)化后的相同數(shù)據(jù)路徑;將合并的數(shù)據(jù)路徑的路徑計(jì)數(shù)進(jìn)行疊加,并按照合并后的每個(gè)數(shù)據(jù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)各條數(shù)據(jù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的數(shù)據(jù)路徑作為數(shù)據(jù)關(guān)鍵路徑。
[0145]在上述實(shí)施例中,函數(shù)匯聚模塊30在實(shí)現(xiàn)函數(shù)調(diào)用匯聚過(guò)程中,函數(shù)匯聚模塊30將所述源程序中位于所述關(guān)鍵路徑文件中同一函數(shù)關(guān)鍵路徑上的函數(shù)配置同一代碼段標(biāo)識(shí),并依照同一函數(shù)關(guān)鍵路徑上函數(shù)的調(diào)用順序配置函數(shù)在同一代碼段中的位置信息;根據(jù)所述函數(shù)對(duì)應(yīng)的代碼段標(biāo)識(shí)及位置信息將所述源程序中對(duì)應(yīng)的函數(shù)進(jìn)行編譯后鏈接在一起。
[0146]本發(fā)明實(shí)施例通過(guò)變量匯聚模塊根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一數(shù)據(jù)段內(nèi),使得降低全局變量訪問(wèn)跳變,從而減少數(shù)據(jù)Cache Miss。
[0147]圖16為本發(fā)明提供的編譯裝置實(shí)施例三的結(jié)構(gòu)示意圖,如圖16所示,本實(shí)施例的編譯裝置包括CPU50、存儲(chǔ)器52、通信接口 54以及總線53,其中CPU50可用于執(zhí)行上述計(jì)算機(jī)程序中熱點(diǎn)函數(shù)的匯聚方法實(shí)施例或者計(jì)算機(jī)程序中熱點(diǎn)全局變量的匯聚方法實(shí)施例中的操作步驟,存儲(chǔ)器52可用于存儲(chǔ)與上述方法實(shí)施例中操作步驟對(duì)應(yīng)的程序指令,通信接口 54可用于發(fā)送或接收相應(yīng)的程序指令和數(shù)據(jù),總線53用于編譯裝置內(nèi)部各個(gè)功能單元之間的通信。
[0148]圖17為本發(fā)明提供的編譯裝置實(shí)施例四的結(jié)構(gòu)示意圖,如圖17所示,本實(shí)施例的裝置包括:獲取模塊10,用于獲取待處理的源程序;路徑分析模塊20,用于模擬執(zhí)行所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)全局變量的訪問(wèn)信息,以生成關(guān)鍵路徑文件,所述關(guān)鍵路徑文件包括:執(zhí)行所述源程序時(shí)的一條或多條數(shù)據(jù)關(guān)鍵路徑;其中,數(shù)據(jù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)全局變量,以及熱點(diǎn)全局變量的訪問(wèn)順序;變量匯聚模塊40,用于根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一數(shù)據(jù)段內(nèi)。
[0149]本實(shí)施例的編譯裝置可實(shí)現(xiàn)對(duì)源程序中熱點(diǎn)全局變量的匯聚,其工作原理及達(dá)到的技術(shù)效果與上述圖13所示方法實(shí)施例類似,不再詳細(xì)贅述。
[0150]圖18本發(fā)明提供的編譯裝置應(yīng)用實(shí)施例的結(jié)構(gòu)示意圖,如圖18所示,本實(shí)施例的編譯裝置包括:關(guān)鍵路徑分析器以及函數(shù)、數(shù)據(jù)重組器,其中關(guān)鍵路徑分析器用于生成關(guān)鍵路徑文件,函數(shù)、數(shù)據(jù)重組器用于根據(jù)關(guān)鍵路徑分析器生成的關(guān)鍵路徑文件對(duì)源程序中的熱點(diǎn)函數(shù)及熱點(diǎn)全局變量進(jìn)行編譯后鏈接在一起,生成可執(zhí)行文件,以使計(jì)算機(jī)程序執(zhí)行器執(zhí)行時(shí)減少指令跳變和數(shù)據(jù)跳變。其中,關(guān)鍵路徑分析器的工作過(guò)程為:待處理的源程序文件和業(yè)務(wù)參數(shù)作為輸入被送到預(yù)處理器,預(yù)處理器對(duì)源程序進(jìn)行分析,建立函數(shù)與數(shù)據(jù)在源文件間的調(diào)用關(guān)系,并找到程序的執(zhí)行入口,將入口信息提交給模擬執(zhí)行器;模擬執(zhí)行器進(jìn)行程序模擬執(zhí)行并收集每個(gè)全局變量的訪問(wèn)信息以及每個(gè)函數(shù)的調(diào)用信息,分析變量與函數(shù)的路徑,并將生成的原始路徑信息記錄到存儲(chǔ)器中;路徑分析器從存儲(chǔ)器中讀取原始路徑信息,并忽略其中占比較小的節(jié)點(diǎn),同時(shí)依據(jù)從高到低的順序重排關(guān)鍵路徑,并生成關(guān)鍵路徑文件。函數(shù)、數(shù)數(shù)據(jù)重組器的工作過(guò)程為:輸入關(guān)鍵路徑文件和源程序文件被輸入到路徑文件識(shí)別器,進(jìn)行合法性判斷,并生成段表信息,如圖11所示,路徑文件識(shí)別器將段表信息和源文件提交給編譯器,編譯器按照段表信息內(nèi)對(duì)指定的符號(hào)排列對(duì)源文件進(jìn)行編譯,生成目標(biāo)文件;編譯器將目標(biāo)文件與段表信息傳給鏈接器,鏈接器按照段表信息指定的函數(shù)與全局變量引用順序合理安排它們?cè)诖a段或數(shù)據(jù)段的位置,生成可執(zhí)行文件。
[0151]圖19為本發(fā)明提供的計(jì)算機(jī)程序處理系統(tǒng)實(shí)施例的結(jié)構(gòu)示意圖,如圖19所示,本實(shí)施例的系統(tǒng),包括:程序執(zhí)行裝置200和如上述圖14至圖18中任一圖示的編譯裝置100,所述程序執(zhí)行裝置200用于執(zhí)行處理所述編譯裝置100編譯后鏈接生成的可執(zhí)行文件。
[0152]本發(fā)明實(shí)施例的計(jì)算機(jī)程序處理系統(tǒng)可執(zhí)行上述任一實(shí)施例的技術(shù)方案,其工作原理及達(dá)到的技術(shù)效果類似,不再詳細(xì)贅述。
[0153]最后應(yīng)說(shuō)明的是:以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案而非對(duì)其進(jìn)行限制,盡管參照較佳實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,而這些修改或者等同替換亦不能使修改后的技術(shù)方案脫離本發(fā)明技術(shù)方案的精神和范圍。
【權(quán)利要求】
1.一種計(jì)算機(jī)程序中熱點(diǎn)函數(shù)的匯聚方法,其特征在于,包括: 獲取待處理的源程序; 模擬執(zhí)行所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息,以生成關(guān)鍵路徑文件,所述關(guān)鍵路徑文件包括:執(zhí)行所述源程序時(shí)的一條或多條函數(shù)關(guān)鍵路徑;其中,函數(shù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)函數(shù),以及熱點(diǎn)函數(shù)間的調(diào)用順序; 根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一函數(shù)關(guān)鍵路徑上的熱點(diǎn)函數(shù)依照調(diào)用順序進(jìn)行編譯后鏈接在同一代碼段內(nèi)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述源程序的執(zhí)行過(guò)程中還收集所述源程序中每個(gè)全局變量的訪問(wèn)信息,所述關(guān)鍵路徑文件還包括:執(zhí)行所述源程序時(shí)的一條或多條數(shù)據(jù)關(guān)鍵路徑;其中,數(shù)據(jù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)全局變量,以及熱點(diǎn)全局變量的訪問(wèn)順序; 所述方法,還包括:根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一數(shù)據(jù)段內(nèi)。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,模擬執(zhí)行所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息以及每個(gè)全局變量的訪問(wèn)信息,以生成關(guān)鍵路徑文件,包括: 分析所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息以及每個(gè)全局變量的訪問(wèn)信 息,以生成原始路徑信息;其中,所述原始路徑信息包括:所述源程序中每個(gè)函數(shù)所在的函數(shù)路徑、每個(gè)函數(shù)在函數(shù)路徑中的層數(shù)、每個(gè)函數(shù)的調(diào)用次數(shù)以及用于記錄每個(gè)函數(shù)路徑中所有函數(shù)調(diào)用次數(shù)之和的路徑計(jì)數(shù),以及,所述源程序中每個(gè)全局變量所在的數(shù)據(jù)路徑、每個(gè)全局變量在數(shù)據(jù)路徑中的層數(shù)、每個(gè)全局變量的訪問(wèn)次數(shù)以及用于記錄每個(gè)數(shù)據(jù)路徑中所有全局變量的訪問(wèn)次數(shù)之和的路徑計(jì)數(shù); 按照所述原始路徑信息中每個(gè)函數(shù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)函數(shù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的函數(shù)路徑作為函數(shù)關(guān)鍵路徑,以及按照所述原始路徑信息中每個(gè)數(shù)據(jù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)數(shù)據(jù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的數(shù)據(jù)路徑作為數(shù)據(jù)關(guān)鍵路徑。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,分析所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息以及每個(gè)全局變量的訪問(wèn)信息,以生成原始路徑信息,包括: 逐條翻譯并執(zhí)行所述源程序中的語(yǔ)句,對(duì)于每一條語(yǔ)句,若確定該語(yǔ)句為函數(shù)調(diào)用或全局變量訪問(wèn),則記錄該語(yǔ)句中的函數(shù)名或全局變量名以及該函數(shù)名被調(diào)用或全局變量名被訪問(wèn)時(shí)所在的層數(shù),生成原始路徑信息。
5.根據(jù)權(quán)利要求3或4所述的方法,其特征在于,按照所述原始路徑信息中每個(gè)函數(shù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)函數(shù)路徑進(jìn)行排序,獲取路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的函數(shù)路徑作為函數(shù)關(guān)鍵路徑,包括: 去除每條函數(shù)路徑中調(diào)用次數(shù)占所在函數(shù)路徑的路徑計(jì)數(shù)比例小于預(yù)設(shè)比例的函數(shù)以簡(jiǎn)化函數(shù)路徑,合并簡(jiǎn)化后的相同函數(shù)路徑; 將合并的函數(shù)路徑的路徑計(jì)數(shù)進(jìn)行疊加,并按照合并后的每個(gè)函數(shù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)各條函數(shù)路徑進(jìn)行排序,獲取路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的函數(shù)路徑作為函數(shù)關(guān)鍵路徑; 按照所述原始路徑信息中每個(gè)數(shù)據(jù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)數(shù)據(jù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的數(shù)據(jù)路徑作為函數(shù)關(guān)鍵路徑,包括: 去 除每條數(shù)據(jù)路徑中訪問(wèn)次數(shù)占所在數(shù)據(jù)路徑的路徑計(jì)數(shù)比例小于預(yù)設(shè)比例的全局變量以簡(jiǎn)化數(shù)據(jù)路徑,合并簡(jiǎn)化后的相同數(shù)據(jù)路徑; 將合并的數(shù)據(jù)路徑的路徑計(jì)數(shù)進(jìn)行疊加,并按照合并后的每個(gè)數(shù)據(jù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)各條數(shù)據(jù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的數(shù)據(jù)路徑作為數(shù)據(jù)關(guān)鍵路徑。
6.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的方法,其特征在于,根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一函數(shù)關(guān)鍵路徑上的熱點(diǎn)函數(shù)依照調(diào)用順序進(jìn)行編譯后鏈接在同一代碼段內(nèi),包括: 將所述源程序中位于所述關(guān)鍵路徑文件中同一函數(shù)關(guān)鍵路徑上的函數(shù)配置同一代碼段標(biāo)識(shí),并依照同一函數(shù)關(guān)鍵路徑上函數(shù)的調(diào)用順序配置函數(shù)在同一代碼段中的位置信息; 根據(jù)所述函數(shù)對(duì)應(yīng)的代碼段標(biāo)識(shí)及位置信息將所述源程序中對(duì)應(yīng)的函數(shù)進(jìn)行編譯后鏈接在一起。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,若兩個(gè)函數(shù)關(guān)鍵路徑中存在對(duì)同一函數(shù)的調(diào)用,則為該函數(shù)配置調(diào)用次數(shù)較多的函數(shù)關(guān)鍵路徑對(duì)應(yīng)的代碼段標(biāo)識(shí)。
8.一種計(jì)算機(jī)程序中熱點(diǎn)全局變量的匯聚方法,其特征在于,包括: 獲取待處理的源程序; 模擬執(zhí)行所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)全局變量的訪問(wèn)信息,以生成關(guān)鍵路徑文件,所述關(guān)鍵路徑文件包括:執(zhí)行所述源程序時(shí)的一條或多條數(shù)據(jù)關(guān)鍵路徑;其中,數(shù)據(jù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)全局變量,以及熱點(diǎn)全局變量的訪問(wèn)順序; 根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一數(shù)據(jù)段內(nèi)。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一數(shù)據(jù)段內(nèi),包括: 將所述源程序中位于所述關(guān)鍵路徑文件中同一數(shù)據(jù)關(guān)鍵路徑上的全局變量配置同一數(shù)據(jù)段標(biāo)識(shí),并依照同一數(shù)據(jù)關(guān)鍵路徑上全局變量的訪問(wèn)順序配置全局變量在同一數(shù)據(jù)段中的位置信息; 根據(jù)所述全局變量對(duì)應(yīng)的數(shù)據(jù)段標(biāo)識(shí)及位置信息將所述源程序中對(duì)應(yīng)的全局變量進(jìn)行編譯后鏈接在一起。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,若兩個(gè)數(shù)據(jù)關(guān)鍵路徑中存在對(duì)同一全局變量的訪問(wèn),則為該全局變量配置訪問(wèn)次數(shù)較多的數(shù)據(jù)關(guān)鍵路徑對(duì)應(yīng)的段標(biāo)識(shí)。
11.一種編譯裝置,其特征在于,包括: 獲取模塊,用于獲取待處理的源程序;路徑分析模塊,用于模擬執(zhí)行所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息,以生成關(guān)鍵路徑文件,所述關(guān)鍵路徑文件包括:執(zhí)行所述源程序時(shí)的一條或多條函數(shù)關(guān)鍵路徑;其中,函數(shù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)函數(shù),以及熱點(diǎn)函數(shù)間的調(diào)用順序; 函數(shù)匯聚模塊,用于根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一函數(shù)關(guān)鍵路徑上的熱點(diǎn)函數(shù)依照調(diào)用順序進(jìn)行編譯后鏈接在同一代碼段內(nèi)。
12.根據(jù)權(quán)利要求11所述的編譯裝置,其特征在于,所述路徑分析模塊,還用于在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)全局變量的訪問(wèn)信息,所述關(guān)鍵路徑文件還包括:執(zhí)行所述源程序時(shí)的一條或多條數(shù)據(jù)關(guān)鍵路徑;其中,數(shù)據(jù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)全局變量,以及熱點(diǎn)全局變量的訪問(wèn)順序; 所述編譯裝置,還包括: 變量匯聚模塊,用于根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一數(shù)據(jù)段內(nèi)。
13.根據(jù)權(quán)利要求12所述的編譯裝置,其特征在于,所述路徑分析模塊包括: 原始路徑生成單元,用于分析所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)函數(shù)的調(diào)用信息以及每個(gè)全局變量的訪問(wèn)信息,以生成原始路徑信息;其中,所述原始路徑信息包括:所述源程序中每個(gè)函數(shù)所在的函數(shù)路徑、每個(gè)函數(shù)在函數(shù)路徑中的層數(shù)、每個(gè)函數(shù)的調(diào)用次數(shù)以及用于記錄每個(gè)函數(shù)路徑中所有函數(shù)調(diào)用次數(shù)之和的路徑計(jì)數(shù),以及,所述源程序中每個(gè)全局變量所在的數(shù)據(jù)路徑、每個(gè)全局變量在數(shù)據(jù)路徑中的層數(shù)、每個(gè)全局變量的訪問(wèn)次數(shù)以及用于記錄每個(gè)數(shù)據(jù)路徑中所有全局變量的訪問(wèn)次數(shù)之和的路徑計(jì)數(shù); 關(guān)鍵路徑生成單元,用于按照所述原始路徑信息中每個(gè)函數(shù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)函數(shù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的函數(shù)路徑作為函數(shù)關(guān)鍵路徑,以及按照所述原始路徑信息中每個(gè)數(shù)據(jù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)數(shù)據(jù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的數(shù)據(jù)路徑作為數(shù)據(jù)關(guān)鍵路徑。
14.根據(jù)權(quán)利要求13所述的編譯裝置,其特征在于,所述原始路徑生成單元,具體用于逐條翻譯并執(zhí)行所述源程序中的語(yǔ)句,對(duì)于每一條語(yǔ)句,若確定該語(yǔ)句為函數(shù)調(diào)用或全局變量訪問(wèn),則記錄該語(yǔ)句中的函數(shù)名或全局變量名以及該函數(shù)名被調(diào)用或全局變量名被訪問(wèn)時(shí)所在的層數(shù),生成原始路徑信息。
15.根據(jù)權(quán)利要求13或14所述的編譯裝置,其特征在于,所述關(guān)鍵路徑生成單元,具體用于去除每條函數(shù)路徑中調(diào)用次數(shù)占所在函數(shù)路徑的路徑計(jì)數(shù)比例小于預(yù)設(shè)比例的函數(shù)以簡(jiǎn)化函數(shù)路徑,合并簡(jiǎn)化后的相同函數(shù)路徑;將合并的函數(shù)路徑的路徑計(jì)數(shù)進(jìn)行疊加,并按照合并后的每個(gè)函數(shù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)各條函數(shù)路徑進(jìn)行排序,獲取路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的函數(shù)路徑作為函數(shù)關(guān)鍵路徑;以及具體用于去除每條數(shù)據(jù)路徑中訪問(wèn)次數(shù)占所在數(shù)據(jù)路徑的路徑計(jì)數(shù)比例小于預(yù)設(shè)比例的全局變量以簡(jiǎn)化數(shù)據(jù)路徑,合并簡(jiǎn)化后的相同數(shù)據(jù)路徑;將合并的數(shù)據(jù)路徑的路徑計(jì)數(shù)進(jìn)行疊加,并按照合并后的每個(gè)數(shù)據(jù)路徑對(duì)應(yīng)的路徑計(jì)數(shù)由大到小對(duì)各條數(shù)據(jù)路徑進(jìn)行排序,將獲取的路徑計(jì)數(shù)排序靠前的預(yù)定數(shù)目或比例的數(shù)據(jù)路徑作為數(shù)據(jù)關(guān)鍵路徑。
16.根據(jù)權(quán)利要求11至14中任一項(xiàng)所述的編譯裝置,其特征在于,所述函數(shù)匯聚模塊,具體用于將所述源程序中位于所述關(guān)鍵路徑文件中同一函數(shù)關(guān)鍵路徑上的函數(shù)配置同一代碼段標(biāo)識(shí),并依照同一函數(shù)關(guān)鍵路徑上函數(shù)的調(diào)用順序配置函數(shù)在同一代碼段中的位置信息;根據(jù)所述函數(shù)對(duì)應(yīng)的代碼段標(biāo)識(shí)及位置信息將所述源程序中對(duì)應(yīng)的函數(shù)進(jìn)行編譯后鏈接在一起。
17.—種編譯裝置,其特征在于,包括: 獲取模塊,用于獲取待處理的源程序; 路徑分析模塊,用于模擬執(zhí)行所述源程序,并在所述源程序的執(zhí)行過(guò)程中收集所述源程序中每個(gè)全局變量的訪問(wèn)信息,以生成關(guān)鍵路徑文件,所述關(guān)鍵路徑文件包括:執(zhí)行所述源程序時(shí)的一條或多條數(shù)據(jù)關(guān)鍵路徑;其中,數(shù)據(jù)關(guān)鍵路徑用于描述執(zhí)行所述源程序時(shí)的一個(gè)或多個(gè)熱點(diǎn)全局變量,以及熱點(diǎn)全局變量的訪問(wèn)順序; 變量匯聚模塊,用于根據(jù)所述關(guān)鍵路徑文件將所述源程序中位于同一數(shù)據(jù)關(guān)鍵路徑上的熱點(diǎn)全局變量依照訪問(wèn)順序進(jìn)行編譯后鏈接在同一數(shù)據(jù)段內(nèi)。
18.根據(jù)權(quán)利要求17所述的編譯裝置,其特征在于,所述變量匯聚模塊,具體用于將所述源程序中位于所述關(guān)鍵路徑文件中同一數(shù)據(jù)關(guān)鍵路徑上的全局變量配置同一數(shù)據(jù)段標(biāo)識(shí),并依照同一數(shù)據(jù)關(guān)鍵路徑上全局變量的訪問(wèn)順序配置全局變量在同一數(shù)據(jù)段中的位置信息;根據(jù)所述全局變量對(duì)應(yīng)的數(shù)據(jù)段標(biāo)識(shí)及位置信息將所述源程序中對(duì)應(yīng)的全局變量進(jìn)行編譯后鏈接在一起。
19.一種計(jì)算機(jī)程序處理系統(tǒng),其特征在于,包括:程序執(zhí)行裝置和如權(quán)利要求11至18中任一項(xiàng)所述的編譯裝置,所述程序執(zhí)行裝置用于執(zhí)行處理所述編譯裝置編譯后鏈接生成的可執(zhí)行文件。
【文檔編號(hào)】G06F9/45GK103713933SQ201310752005
【公開(kāi)日】2014年4月9日 申請(qǐng)日期:2013年12月31日 優(yōu)先權(quán)日:2013年12月31日
【發(fā)明者】謝江帆, 李繼忠, 張凱敏 申請(qǐng)人:華為技術(shù)有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
上虞市| 民和| 利川市| 桃园县| 察隅县| 新宾| 徐闻县| 延长县| 勐海县| 喀什市| 肇庆市| 西和县| 剑阁县| 唐河县| 丰县| 石家庄市| 清镇市| 闽清县| 德钦县| 巴彦县| 胶南市| 惠州市| 翁源县| 昭平县| 甘谷县| 南部县| 穆棱市| 庆安县| 托克逊县| 望城县| 仙居县| 海兴县| 尼玛县| 睢宁县| 应用必备| 普格县| 鄯善县| 双江| 平安县| 高台县| 德保县|