国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種基于采樣剖析的輕量級程序代碼重排方法

      文檔序號:9524040閱讀:190來源:國知局
      一種基于采樣剖析的輕量級程序代碼重排方法
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及計算機(jī)技術(shù)領(lǐng)域,更具體地說,本發(fā)明涉及一種基于采樣剖析的輕量級程序代碼重排方法。
      【背景技術(shù)】
      [0002]Cache (高速緩存)失效是影響Cache性能進(jìn)而影響處理器性能的一個重要因素?,F(xiàn)代高性能處理器都采用每拍多發(fā)射的體系結(jié)構(gòu),快速的指令發(fā)射要求快速的指令讀取。因此,如何減少Cache失效,提高指令Cache命中率成了優(yōu)化技術(shù)關(guān)注的一個焦點。
      [0003]Cache失效可以分為強(qiáng)制失效、容量失效和沖突失效三類,采用軟件實現(xiàn)的代碼重排技術(shù)可以很大程度上降低Cache容量失效和沖突失效的頻率。代碼重排是指以提高Cache命中率為目的,根據(jù)一定規(guī)則改變代碼排列次序的技術(shù)。當(dāng)前,代碼重排可以分為兩類:一類是靜態(tài)排序法,即在程序編譯優(yōu)化或鏈接時實現(xiàn)的代碼重排;另一類是動態(tài)重排法,即在程序運(yùn)行過程中根據(jù)程序運(yùn)行時的動態(tài)信息實現(xiàn)代碼重排。
      [0004]然而,現(xiàn)有的靜態(tài)排序法和動態(tài)重排法都存在自身的缺陷。
      [0005]靜態(tài)排序法通過程序中分支的轉(zhuǎn)移頻率計算代碼的調(diào)用頻率,指導(dǎo)代碼的排序。分支的轉(zhuǎn)移頻率和代碼執(zhí)行頻率既可以在編譯時根據(jù)啟發(fā)信息預(yù)測,也可以通過程序以往的運(yùn)行信息而獲得。前者預(yù)測的準(zhǔn)確率不如后者。后者需要兩遍編譯,第一遍在程序中插粧并運(yùn)行一個小的數(shù)據(jù)集來收集程序運(yùn)行時輪廓(profile)信息,第二遍編譯則根據(jù)反饋的輪廓信息指導(dǎo)優(yōu)化。靜態(tài)排序法的缺點是對編譯器的改動較大,編譯開銷較大。
      [0006]動態(tài)重排法是在程序運(yùn)行過程中借助于其他工具,根據(jù)程序運(yùn)行的動態(tài)信息實現(xiàn)代碼的重排。該技術(shù)的缺點是程序運(yùn)行時開銷較大。

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

      [0007]本發(fā)明所要解決的技術(shù)問題是針對現(xiàn)有技術(shù)中存在上述缺陷,提供一種能夠優(yōu)化程序局部性、提高指令Cache命中率以提升程序性能的基于采樣剖析的輕量級程序代碼重排方法。
      [0008]為了實現(xiàn)上述技術(shù)目的,根據(jù)本發(fā)明,提供了一種基于采樣剖析的輕量級程序代碼重排方法,包括:
      [0009]第一步驟:編譯鏈接程序,其中預(yù)留一段代碼空間;
      [0010]第二步驟:加載器讀入目標(biāo)程序;
      [0011]第三步驟:使得目標(biāo)程序運(yùn)行一遍,加載器收集目標(biāo)程序運(yùn)行時運(yùn)行信息;
      [0012]第四步驟:利用收集到的運(yùn)行信息指導(dǎo)代碼重排;
      [0013]第五步驟:對代碼執(zhí)行墊塞優(yōu)化;
      [0014]第六步驟:將墊塞優(yōu)化后的代碼寫進(jìn)新的目標(biāo)程序。
      [0015]優(yōu)選地,在第二步驟中,加載器讀入程序信息。
      [0016]優(yōu)選地,程序信息包括目標(biāo)程序的文件頭、代碼段和數(shù)據(jù)段。
      [0017]優(yōu)選地,在第三步驟中,加載器通過插粧手段收集程序運(yùn)行時各函數(shù)代碼段的運(yùn)行信息。
      [0018]優(yōu)選地,運(yùn)行信息包括調(diào)用頻率、調(diào)用關(guān)系和運(yùn)行時間。
      [0019]優(yōu)選地,在第四步驟中,根據(jù)收集到的運(yùn)行信息進(jìn)行分析以獲知程序熱點函數(shù)信息,進(jìn)而拷貝熱點函數(shù)代碼至預(yù)留的代碼空間,相應(yīng)地更新代碼空間中的熱點函數(shù)的符號表與全局變量表信息,調(diào)整指令跳轉(zhuǎn)地址。
      [0020]優(yōu)選地,在第五步驟中,將代碼空間中的熱點函數(shù)代碼在代碼空間中進(jìn)行多份拷貝并對拷貝的副本進(jìn)行偏移。
      [0021]本發(fā)明結(jié)合靜態(tài)排序法和動態(tài)重排法兩者的特點,提出一種基于采樣剖析的輕量級程序代碼重排裝置,通過加載器實現(xiàn),加載器讀入目標(biāo)程序,在第一遍程序運(yùn)行時采用插粧采樣的方式動態(tài)收集程序運(yùn)行時信息并用于指導(dǎo)代碼重排與墊塞優(yōu)化,生成優(yōu)化的目標(biāo)程序,達(dá)到優(yōu)化程序局部性、提高指令cache命中率以提升程序性能的目的。
      【附圖說明】
      [0022]結(jié)合附圖,并通過參考下面的詳細(xì)描述,將會更容易地對本發(fā)明有更完整的理解并且更容易地理解其伴隨的優(yōu)點和特征,其中:
      [0023]圖1示意性地示出了根據(jù)本發(fā)明優(yōu)選實施例的基于采樣剖析的輕量級程序代碼重排方法的流程圖。
      [0024]需要說明的是,附圖用于說明本發(fā)明,而非限制本發(fā)明。注意,表示結(jié)構(gòu)的附圖可能并非按比例繪制。并且,附圖中,相同或者類似的元件標(biāo)有相同或者類似的標(biāo)號。
      【具體實施方式】
      [0025]為了使本發(fā)明的內(nèi)容更加清楚和易懂,下面結(jié)合具體實施例和附圖對本發(fā)明的內(nèi)容進(jìn)行詳細(xì)描述。
      [0026]本發(fā)明提出一種基于采樣剖析的輕量級程序代碼重排裝置,結(jié)合靜態(tài)排序法和動態(tài)重排法兩者的特點,實現(xiàn)流程如圖1所示。首先,在編譯鏈接程序時預(yù)留一段代碼空間用于代碼重排與墊塞;然后,加載器讀入文件頭、代碼段、數(shù)據(jù)段等程序信息,在程序第一遍運(yùn)行時通過插粧手段收集程序運(yùn)行時各函數(shù)代碼段的調(diào)用頻率、調(diào)用關(guān)系、運(yùn)行時間等信息,并將收集的信息用于指導(dǎo)代碼重排,將頻繁調(diào)用的熱點函數(shù)代碼段提取出來并排列在一起拷貝到預(yù)留的代碼空間,同時對熱點函數(shù)的符號表和got表做相應(yīng)的拷貝或修改;最后,將拷貝的熱點函數(shù)代碼段寫入到新的目標(biāo)代碼。
      [0027]單靠代碼重排并不能完全避免指令Cache沖突不命中,存在調(diào)用關(guān)系的兩個熱點函數(shù)經(jīng)過代碼重排后映射到Cache行時仍有可能發(fā)生沖突不命中的情況,如果這兩個熱點函數(shù)存在循環(huán)調(diào)用的關(guān)系,則會導(dǎo)致連續(xù)的指令Cache不命中,大大降低程序的運(yùn)行性能,針對這種情況我們在代碼重排的基礎(chǔ)上增加墊塞優(yōu)化。墊塞優(yōu)化是將拷貝重排后的熱點函數(shù)代碼繼續(xù)進(jìn)行多份拷貝并做一定的偏移,使得程序調(diào)用時的跳轉(zhuǎn)地址可以有多種選擇,從中選擇最優(yōu)的一份拷貝進(jìn)行跳轉(zhuǎn),以此達(dá)到最大可能地避免指令Cache沖突不命中的發(fā)生。
      [0028]圖1示意性地示出了根據(jù)本發(fā)明優(yōu)選實施例的基于采樣剖析的輕量級程序代碼重排方法的流程圖。
      [0029]如圖1所示,根據(jù)本發(fā)明優(yōu)選實施例的基于采樣剖析的輕量級程序代碼重排方法包括:
      [0030]第一步驟S1:編譯鏈接程序,其中預(yù)留一段代碼空間;具體地,代碼重排與墊塞優(yōu)化需用到一段代碼空間,編譯鏈接程序為其預(yù)留。
      [0031]第二步驟S2:加載器讀入目標(biāo)程序;具體地,在第二步驟中,加載器讀入目標(biāo)程序的文件頭、代碼段、數(shù)據(jù)段等程序信息。
      [0032]第三步驟S3:使得目標(biāo)程序運(yùn)行一遍,加載器收集目標(biāo)程序運(yùn)行時運(yùn)行信息;具體地,在第三步驟中,加載器通過插粧手段收集程序運(yùn)行時各函數(shù)代碼段的調(diào)用頻率、調(diào)用關(guān)系、運(yùn)行時間等運(yùn)行信息。
      [0033]第四步驟S4:用收集到的運(yùn)行信息指導(dǎo)代碼重排;具體地,在第四步驟中,根據(jù)收集到的運(yùn)行信息進(jìn)行分析以獲知程序熱點函數(shù)信息,進(jìn)而拷貝熱點函數(shù)代碼至預(yù)留的代碼空間,相應(yīng)地更新代碼空間中的熱點函數(shù)的符號表與全局變量(GOT,Global OffsetTable)表信息,調(diào)整指令跳轉(zhuǎn)地址(即重排)。
      [0034]第五步驟S5:對代碼執(zhí)行墊塞優(yōu)化;優(yōu)選地,在第五步驟中,將代碼空間中的熱點函數(shù)代碼在代碼空間中進(jìn)行多份拷貝并對拷貝的副本進(jìn)行偏移,這樣程序調(diào)用時的跳轉(zhuǎn)地址可以有多種選擇,可以有利地從中選擇指令Cache沖突最小的一份拷貝進(jìn)行跳轉(zhuǎn),調(diào)整指令跳轉(zhuǎn)地址。
      [0035]第六步驟S6:將墊塞優(yōu)化后的代碼寫進(jìn)新的目標(biāo)程序。
      [0036]本發(fā)明結(jié)合采用動態(tài)獲取程序運(yùn)行時信息和靜態(tài)排序的方式,實現(xiàn)代碼重排。而且本發(fā)明針對存在調(diào)用關(guān)系的兩個函數(shù)有可能發(fā)生指令Cache沖突不命中的情況,采用墊塞優(yōu)化處理。
      [0037]本發(fā)明針對用戶程序執(zhí)行時的指令Cache失效問題,結(jié)合采用動態(tài)獲取程序運(yùn)行時信息和靜態(tài)排序的方式實現(xiàn)代碼重排和墊塞優(yōu)化,能夠有效避免靜態(tài)排序法帶來的編譯開銷和動態(tài)重排法帶來的運(yùn)行時開銷。同時本發(fā)明在目標(biāo)碼級進(jìn)行優(yōu)化,能夠完全獲得程序指令的虛地址與指令Cache的映射關(guān)系,在此基礎(chǔ)上可以進(jìn)行更有針對性的優(yōu)化。本發(fā)明以增加少量代碼空間的代價達(dá)到了優(yōu)化程序局部性提高指令Cache命中率的目的,提升了程序的性能。
      [0038]此外,需要說明的是,除非特別說明或者指出,否則說明書中的術(shù)語“第一”、“第二”、“第三”等描述僅僅用于區(qū)分說明書中的各個組件、元素、步驟等,而不是用于表示各個組件、元素、步驟之間的邏輯關(guān)系或者順序關(guān)系等。
      [0039]可以理解的是,雖然本發(fā)明已以較佳實施例披露如上,然而上述實施例并非用以限定本發(fā)明。對于任何熟悉本領(lǐng)域的技術(shù)人員而言,在不脫離本發(fā)明技術(shù)方案范圍情況下,都可利用上述揭示的技術(shù)內(nèi)容對本發(fā)明技術(shù)方案作出許多可能的變動和修飾,或修改為等同變化的等效實施例。因此,凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明的技術(shù)實質(zhì)對以上實施例所做的任何簡單修改、等同變化及修飾,均仍屬于本發(fā)明技術(shù)方案保護(hù)的范圍內(nèi)。
      【主權(quán)項】
      1.一種基于采樣剖析的輕量級程序代碼重排方法,其特征在于包括:第一步驟:編譯鏈接程序,其中預(yù)留一段代碼空間;第二步驟:加載器讀入目標(biāo)程序;第三步驟:使得目標(biāo)程序運(yùn)行一遍,加載器收集目標(biāo)程序運(yùn)行時運(yùn)行信息;第四步驟:利用收集到的運(yùn)行信息指導(dǎo)代碼重排;第五步驟:對代碼執(zhí)行墊塞優(yōu)化;第六步驟:將墊塞優(yōu)化后的代碼寫進(jìn)新的目標(biāo)程序。2.根據(jù)權(quán)利要求1所述的基于采樣剖析的輕量級程序代碼重排方法,其特征在于,在第二步驟中,加載器讀入程序信息。3.根據(jù)權(quán)利要求1或2所述的基于采樣剖析的輕量級程序代碼重排方法,其特征在于,程序信息包括目標(biāo)程序的文件頭、代碼段和數(shù)據(jù)段。4.根據(jù)權(quán)利要求1或2所述的基于采樣剖析的輕量級程序代碼重排方法,其特征在于,在第三步驟中,加載器通過插粧手段收集程序運(yùn)行時各函數(shù)代碼段的運(yùn)行信息。5.根據(jù)權(quán)利要求1或2所述的基于采樣剖析的輕量級程序代碼重排方法,其特征在于,運(yùn)行信息包括調(diào)用頻率、調(diào)用關(guān)系和運(yùn)行時間。6.根據(jù)權(quán)利要求1或2所述的基于采樣剖析的輕量級程序代碼重排方法,其特征在于,在第四步驟中,根據(jù)收集到的運(yùn)行信息進(jìn)行分析以獲知程序熱點函數(shù)信息,進(jìn)而拷貝熱點函數(shù)代碼至預(yù)留的代碼空間,相應(yīng)地更新代碼空間中的熱點函數(shù)的符號表與全局變量表信息,調(diào)整指令跳轉(zhuǎn)地址。7.根據(jù)權(quán)利要求1或2所述的基于采樣剖析的輕量級程序代碼重排方法,其特征在于,在第五步驟中,將代碼空間中的熱點函數(shù)代碼在代碼空間中進(jìn)行多份拷貝并對拷貝的副本進(jìn)行偏移。
      【專利摘要】本發(fā)明提供了一種基于采樣剖析的輕量級程序代碼重排方法,包括:編譯鏈接程序,其中預(yù)留一段代碼空間;加載器讀入目標(biāo)程序;使得目標(biāo)程序運(yùn)行一遍,加載器收集目標(biāo)程序運(yùn)行時運(yùn)行信息;利用收集到的運(yùn)行信息指導(dǎo)代碼重排;對代碼執(zhí)行墊塞優(yōu)化;將墊塞優(yōu)化后的代碼寫進(jìn)新的目標(biāo)程序。
      【IPC分類】G06F9/445, G06F12/0802
      【公開號】CN105279004
      【申請?zhí)枴緾N201510830299
      【發(fā)明人】錢宏, 王飛, 吳偉, 李中升, 尉紅梅, 漆鋒濱
      【申請人】無錫江南計算技術(shù)研究所
      【公開日】2016年1月27日
      【申請日】2015年11月24日
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1