一種面向可變粒度內(nèi)存系統(tǒng)的二進(jìn)制文件重寫方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及編譯器優(yōu)化技術(shù)領(lǐng)域,更具體地,涉及一種面向可變粒度內(nèi)存系統(tǒng)的 二進(jìn)制文件重寫方法。
【背景技術(shù)】
[0002] 計算機(jī)的內(nèi)存系統(tǒng)是影響計算機(jī)體系結(jié)構(gòu)和軟件執(zhí)行效率的重要因素。傳統(tǒng)的內(nèi) 存訪問的數(shù)據(jù)粒度是固定不變的,而且有增大的趨勢。但是在真實程序中,實際每次數(shù)據(jù)訪 問的粒度是變化的,對于數(shù)據(jù)訪問是無局部性且粒度很小的應(yīng)用,每次訪問采用固定的大 數(shù)據(jù)粒度必然會造成浪費;而一些需要大量連續(xù)數(shù)據(jù)讀寫的應(yīng)用,又需要將整個數(shù)據(jù)訪問 分割成多個內(nèi)存事務(wù)進(jìn)行,從而增加了協(xié)議上的開銷??梢?,固定粒度的訪存模式無法有效 利用訪存帶寬。隨著云計算、大數(shù)據(jù)應(yīng)用的興起,程序?qū)?shù)據(jù)的訪問帶寬和容量要求越來越 高,傳統(tǒng)內(nèi)存系統(tǒng)遇到延遲、帶寬、效率、容量、功耗的挑戰(zhàn),從而出現(xiàn)了新型的內(nèi)存系統(tǒng),可 變粒度內(nèi)存系統(tǒng)是其一??勺兞6葍?nèi)存系統(tǒng)是能夠支持不同粒度訪存請求的內(nèi)存系統(tǒng),其 合理地合并訪存請求,能夠減少訪存總開銷并提高有效帶寬利用率。
[0003] 對于可變粒度內(nèi)存系統(tǒng)來說,新的結(jié)構(gòu)特征往往涉及訪存方式的一些變化。例如, 需要顯式地增加指令來移入/移出數(shù)據(jù)、合理合并訪存請求,以減少訪存次數(shù)及開銷并提 高有效帶寬利用率。由于大量的面向傳統(tǒng)內(nèi)存系統(tǒng)的二進(jìn)制形式的應(yīng)用程序代碼(下文簡 稱二進(jìn)制文件)不適用于可變粒度內(nèi)存系統(tǒng),因此如何將該二進(jìn)制形式的應(yīng)用程序代碼平 滑地移植到可變粒度內(nèi)存系統(tǒng)上,同時無需應(yīng)用程序的源碼且無需修改編譯器源碼,是目 前需要解決的問題。
【發(fā)明內(nèi)容】
[0004] 針對上述問題,根據(jù)本發(fā)明的一個實施例,提供一種面向可變粒度內(nèi)存系統(tǒng)的二 進(jìn)制文件重寫方法,包括:
[0005] 步驟1)、在二進(jìn)制文件的中間表示中找到熱循環(huán)區(qū)域,其中,熱循環(huán)區(qū)域是執(zhí)行次 數(shù)超過預(yù)定閾值的循環(huán)的代碼區(qū)域;
[0006] 步驟2)、對于訪存行為符合可變粒度訪存模式的熱循環(huán)區(qū)域,合并該區(qū)域內(nèi)的訪 存信息,并且在該區(qū)域之前插入頭語句;其中,一個訪存信息指示一條訪存指令且包括訪存 所訪問的地址信息,所述頭語句用于實現(xiàn)從可變粒度內(nèi)存系統(tǒng)讀取的功能;
[0007] 步驟3)、根據(jù)修改后的熱循環(huán)區(qū)域生成目標(biāo)機(jī)器代碼。
[0008] 上述方法中,在步驟2)中,合并訪存行為符合可變粒度訪存模式的熱循環(huán)區(qū)域內(nèi) 的訪存信息包括:
[0009] 合并該區(qū)域內(nèi)的訪存信息,使得合并后的訪存信息對應(yīng)的效益大于構(gòu)成該合并的 每個訪存信息對應(yīng)的效益之和并且合并后該區(qū)域的訪存行為符合可變粒度訪存模式;其 中,所述效益與資源占用率及性能相關(guān)聯(lián)。
[0010] 上述方法中,所述效益表示如下:
【主權(quán)項】
1. 一種面向可變粒度內(nèi)存系統(tǒng)的二進(jìn)制文件重寫方法,包括: 步驟1)、在二進(jìn)制文件的中間表示中找到熱循環(huán)區(qū)域,其中,熱循環(huán)區(qū)域是執(zhí)行次數(shù)超 過預(yù)定閾值的循環(huán)的代碼區(qū)域; 步驟2)、對于訪存行為符合可變粒度訪存模式的熱循環(huán)區(qū)域,合并該區(qū)域內(nèi)的訪存信 息,并且在該區(qū)域之前插入頭語句;其中,一個訪存信息指示一條訪存指令且包括訪存所訪 問的地址信息,所述頭語句用于實現(xiàn)從可變粒度內(nèi)存系統(tǒng)讀取的功能; 步驟3)、根據(jù)修改后的熱循環(huán)區(qū)域生成目標(biāo)機(jī)器代碼。
2. 根據(jù)權(quán)利要求1所述的方法,在步驟2)中,合并訪存行為符合可變粒度訪存模式的 熱循環(huán)區(qū)域內(nèi)的訪存信息包括: 合并該區(qū)域內(nèi)的訪存信息,使得合并后的訪存信息對應(yīng)的效益大于構(gòu)成該合并的每個 訪存信息對應(yīng)的效益之和并且合并后該區(qū)域的訪存行為符合可變粒度訪存模式;其中,所 述效益與資源占用率及性能相關(guān)聯(lián)。
3. 根據(jù)權(quán)利要求2所述的方法,其中,所述效益表示如下:
其中,F(xiàn)ACTORS = 3, factor1表示effect 1的意愿因子,取值在O到1之間,并 且
β 1為參數(shù);effect 1= size (data) /time (data access), size (data)表示合并的訪存信息的數(shù)據(jù)總長度,time (data access)表示合并的訪存信息 對應(yīng)的可變粒度內(nèi)存系統(tǒng)的訪問次數(shù)與一次訪問內(nèi)存的開銷之積;effect2 = size (data) / size (transfer_data),size (transfer_data)表示合并的訪存信息對應(yīng)的可變粒度內(nèi)存系 統(tǒng)的訪問操作的總數(shù)據(jù)傳輸量;effect3= size (data)/size (getin_data),size (getin_ data)表示合并的訪存信息對應(yīng)的可變粒度內(nèi)存系統(tǒng)訪問操作所存入高速緩存的總數(shù)據(jù) 量。
4. 根據(jù)權(quán)利要求1所述的方法,其中,步驟1)之前還包括: 選擇動態(tài)地執(zhí)行二進(jìn)制文件重寫或者靜態(tài)地執(zhí)行二進(jìn)制文件重寫。
5. 根據(jù)權(quán)利4所述的方法,其中,人為選擇二進(jìn)制文件重寫的動態(tài)或靜態(tài)執(zhí)行方式;或 者如果不存在人為選擇,則對于運行時間大于預(yù)定時間閾值且系統(tǒng)資源滿足其資源需求的 二進(jìn)制文件,選擇動態(tài)地執(zhí)行二進(jìn)制文件重寫,否則選擇靜態(tài)地執(zhí)行二進(jìn)制文件重寫。
6. 根據(jù)權(quán)利要求4或5所述的方法,其中,步驟1)還包括: 如果靜態(tài)地執(zhí)行二進(jìn)制文件重寫,則將所述二進(jìn)制文件翻譯成中間表示; 如果動態(tài)地執(zhí)行二進(jìn)制文件重寫,則將已執(zhí)行的并且未翻譯過的二進(jìn)制文件代碼翻譯 成中間表示。
7. 根據(jù)權(quán)利要求4或5所述的方法,其中,步驟2)包括對于訪存行為符合可變粒度訪 存模式的熱循環(huán)區(qū)域執(zhí)行以下步驟: 步驟21)、提取訪存信息,按順序記錄該訪存信息;其中,一個訪存信息指示一條訪存 指令且包括訪存所訪問的地址信息; 步驟22)、如果動態(tài)地執(zhí)行二進(jìn)制文件重寫,則采用預(yù)定的方式合并該區(qū)域內(nèi)的訪存信 息;如果靜態(tài)地執(zhí)行二進(jìn)制文件重寫,則對該區(qū)域內(nèi)的訪存信息根據(jù)地址信息進(jìn)行聚類,在 每個類內(nèi)采用預(yù)定的方式合并訪存信息; 步驟23)、合并后,在該區(qū)域之前插入頭語句,該頭語句用于實現(xiàn)從可變粒度內(nèi)存系統(tǒng) 讀取的功能。
8. 根據(jù)權(quán)利要求7所述的方法,在步驟22)中,采用預(yù)定的方式合并區(qū)域內(nèi)的訪存信息 包括: 從該區(qū)域的初始訪存信息開始依次嘗試合并訪存信息,直到遇到一個訪存信息m使得 合并后該區(qū)域的訪存行為不符合可變粒度訪存模式或者合并后的訪存信息對應(yīng)的效益不 大于構(gòu)成該合并的每個訪存信息對應(yīng)的效益之和,合并初始訪存信息到該訪存信息m之前 的訪存信息;將該訪存信息m作為初始訪存信息重復(fù)以上過程,直到處理完該區(qū)域的最后 一個訪存信息。
9. 根據(jù)權(quán)利要求4或5所述的方法,其中,步驟3)還包括: 如果靜態(tài)地執(zhí)行二進(jìn)制文件重寫,則根據(jù)生成的目標(biāo)機(jī)器代碼得到新的二進(jìn)制文件并 輸出; 如果動態(tài)地執(zhí)行二進(jìn)制文件重寫,則將生成的目標(biāo)機(jī)器代碼存放到指定的內(nèi)存區(qū)域并 且更新相應(yīng)前驅(qū)基本塊的相關(guān)跳轉(zhuǎn)指令,如果源二進(jìn)制文件未處理完則返回步驟1)。
10. 根據(jù)權(quán)利要求1-5中任何一個所述的方法,其中,步驟2)還包括: 合并后,在該區(qū)域之后插入尾語句,該尾語句用于實現(xiàn)向可變粒度內(nèi)存系統(tǒng)寫回的功 能。
11. 根據(jù)權(quán)利要求1-5中任何一個所述的方法,其中,對于采用用戶可編程的片上存儲 器作為片上高速緩存的可變粒度內(nèi)存系統(tǒng),步驟2)還包括 : 建立內(nèi)存虛擬地址與對應(yīng)的片上存儲器虛擬地址的映射關(guān)系,并且修改相應(yīng)指令。
12. 根據(jù)權(quán)利要求1-5中任何一個所述的方法,其中,將具有連續(xù)訪問大塊數(shù)據(jù)的特征 或者固定步長地非連續(xù)訪問大塊數(shù)據(jù)的特征的熱循環(huán)區(qū)域作為訪存行為符合可變粒度訪 存模式的熱循環(huán)區(qū)域。
【專利摘要】本發(fā)明提供一種面向可變粒度內(nèi)存系統(tǒng)的二進(jìn)制文件重寫方法,包括:在二進(jìn)制文件的中間表示中找到熱循環(huán)區(qū)域;對于訪存行為符合可變粒度訪存模式的熱循環(huán)區(qū)域,合并該區(qū)域內(nèi)的訪存信息,并且在該區(qū)域之前插入頭語句;以及,根據(jù)修改后的熱循環(huán)區(qū)域生成目標(biāo)機(jī)器代碼。本發(fā)明能夠自動完成在二進(jìn)制文件上支持可變粒度內(nèi)存系統(tǒng)的訪存操作;通過自動分析應(yīng)用程序特征以及可變粒度內(nèi)存系統(tǒng)的核心特征,選擇合適的重寫方式,兼顧了二進(jìn)制文件重寫過程的效率和二進(jìn)制文件的執(zhí)行性能。
【IPC分類】G06F9-30
【公開號】CN104679477
【申請?zhí)枴緾N201510082216
【發(fā)明人】呂方, 王晨曦, 黃磊, 馮曉兵, 崔慧敏, 王蕾
【申請人】中國科學(xué)院計算技術(shù)研究所
【公開日】2015年6月3日
【申請日】2015年2月15日