两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

基于cpu硬件性能監(jiān)控計數(shù)器的cpi精確測量方法

文檔序號:6422922閱讀:249來源:國知局
專利名稱:基于cpu硬件性能監(jiān)控計數(shù)器的cpi精確測量方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機(jī)軟件性能分析技術(shù)領(lǐng)域,特別涉及一種基于CPU硬件性能監(jiān)控計數(shù)器的CPI精確測量方法。
背景技術(shù)
每條指令所耗費的時鐘周期數(shù)(Cycle Per Instruction, CPI)是程序性能分析過程中一個重要的觀測指標(biāo)。這個指標(biāo)能直觀的展示程序中每條指令平均所需的時鐘周期數(shù)。如果這個指標(biāo)較大,則表明程序中存在性能問題。這同時也意味著該程序有較大的性 能優(yōu)化機(jī)會。在傳統(tǒng)的程序優(yōu)化流程中,CPI往往是程序員進(jìn)行性能調(diào)優(yōu)時觀測的第一個指標(biāo)。當(dāng)程序員得到了具體CPI數(shù)值后,他們會通過程序性能計數(shù)器,將其劃分成CPI堆棧,具體標(biāo)定出構(gòu)成執(zhí)行一條指令時各個事件所消耗的平均時鐘周期數(shù)。之后,程序員根據(jù)具體的事件來推測導(dǎo)致程序性能低下的原因,并對代碼進(jìn)行優(yōu)化。CPI根據(jù)其針對的對象不同,可以進(jìn)一步分成粗粒度CPI和細(xì)粒度CPI。粗粒度CPI 一般是針對整個程序而言的。具體來說,對于一個特定的程序,粗粒度CPI就是一個數(shù)值,其大小取決于程序花費的總時鐘周期數(shù)和動態(tài)執(zhí)行的指令次數(shù)的比值。細(xì)粒度CPI是針對具體的單位而言的。例如,函數(shù)級CPI指的是每個函數(shù)花費的總時鐘周期數(shù)和動態(tài)執(zhí)行的指令次數(shù)的比值。因此,對于一個程序而言,每個函數(shù)都有一個獨立的函數(shù)級CPI。而粗粒度CPI可以認(rèn)為是這些細(xì)粒度CPI的加權(quán)平均。正是因為CPI在程序性能分析和優(yōu)化中起了非常重要的作用,因此,很多性能分析工具,如Intel的Vtune,都能直接向用戶展示各種粒度的CPI。傳統(tǒng)的CPI獲取方法都基于程序性能計數(shù)器技術(shù)?,F(xiàn)代處理器廠商都在處理器中設(shè)計了獨立的性能計數(shù)器模塊。通過這個模塊,用戶可以在程序開始的時候配置某個特定事件,對執(zhí)行的程序進(jìn)行計數(shù)和采樣。不同的處理器所提供的事件集往往不同,但是有一些基礎(chǔ)的事件是大多數(shù)處理器都具備的。例如計算CPI所需要的兩個事件時鐘周期事件以和指令執(zhí)行事件,在大多數(shù)處理器上都可以直接獲取。于是,要計算程序的CPI值,就將性能計數(shù)器對應(yīng)的事件設(shè)置成以上兩個事件分別進(jìn)行計數(shù)、采樣。然后將得到的數(shù)據(jù)相除,就可以得到CPI數(shù)據(jù)。如果程序性能計數(shù)器僅是用來計數(shù)(沒有中斷),那么整個程序執(zhí)行結(jié)束的時候可以得到總的時鐘周期數(shù)和指令執(zhí)行次數(shù),從而得到整個程序的CPI。通過這種方式,可以相對精確的得到粗粒度的CPI。從細(xì)粒度角度來看,每條指令都有其對應(yīng)的時鐘周期頻率和指令執(zhí)行頻率。傳統(tǒng)方法使用程序性能計數(shù)器對時鐘周期事件和指令執(zhí)行事件進(jìn)行采樣,從而對每條指令都計算其CPI值。要獲得函數(shù)級CPI,可以將該函數(shù)內(nèi)的所有時鐘周期采樣和指令執(zhí)行采樣累力口,并將兩個采樣的累加值相除獲得函數(shù)級CPI。通過采樣得到CPI的好處在于由于采樣周期可調(diào),程序員可以根據(jù)需求將采樣所帶來的開銷控制在一個合理范圍。實驗證明,當(dāng)采樣周期在一百萬的數(shù)量級時,采樣所帶來的性能損失已經(jīng)可以忽略不計。然而,上述采樣方法獲得的細(xì)粒度CPI的精確性難以保證。這主要是因為決定細(xì)粒度CPI的兩個單獨剖析(指令頻率剖析和時鐘周期剖析)過程的不精確性導(dǎo)致的。對于CPI剖析中的指令頻率,其細(xì)粒度精確性是相當(dāng)差的。對于CPI剖析中的時鐘周期,其精確性在很多情況下也難以得到保證。因此,CPI的精確性在細(xì)粒度范圍內(nèi)難以得到保證。CPI的精確性很大程度上決定了程序員優(yōu)化程序的效率。尤其對于細(xì)粒度CPI而言,它能幫助程序員快速定位到程序中有性能問題的部位。例如,根據(jù)函數(shù)級CPI信息,程序員能夠首先選擇那些具有較大CPI的函數(shù)作為突破口進(jìn)行調(diào)優(yōu),因為這些函數(shù)往往優(yōu)化空間很大;而對于那些本身CPI已經(jīng)很小的函數(shù),程序員就不需要花費太多的精力,因為這些函數(shù)的實現(xiàn)已經(jīng)相當(dāng)優(yōu)化。因此,精確的細(xì)粒度CPI能使程序員的性能優(yōu)化工作事半功倍,而不精確的細(xì)粒度CPI甚至?xí)档统绦騿T的效率,因為錯誤的信息會給性能優(yōu)化工作 造成誤導(dǎo)。在Intel Vtune等性能分析工具中,都使用了上述方法來獲取程序CPI。它們獲得的粗粒度CPI具有較好的精確性。然而細(xì)粒度CPI的精確性卻很差。即使是函數(shù)級別的CPI,其誤差已足以給程序員的調(diào)優(yōu)工作造成誤導(dǎo)。而對于更細(xì)粒度的CPI (例如基本塊(所述基本塊是指一個連續(xù)的程序語句序列,控制流從它的開始進(jìn)入,并從它的末尾離開,中間沒有中斷或者分支)級CPI和指令級CPI),由于其精確性太差,在實際調(diào)優(yōu)過程中已經(jīng)完全無法使用。

發(fā)明內(nèi)容
(一)要解決的技術(shù)問題本發(fā)明要解決的技術(shù)問題是如何提高對程序進(jìn)行細(xì)粒度CPI的精確性。(二)技術(shù)方案為解決上述技術(shù)問題,本發(fā)明提供了一種基于CPU硬件性能監(jiān)控計數(shù)器的CPI精確測量方法,包括以下步驟SI :對跳轉(zhuǎn)歷史記錄進(jìn)行采樣,獲取跳轉(zhuǎn)頻率,并根據(jù)跳轉(zhuǎn)頻率獲得細(xì)粒度指令頻率;S2 :使用隨機(jī)采樣時鐘周期的方式得到細(xì)粒度時鐘周期;S3 :所述細(xì)粒度指令頻率除以細(xì)粒度時鐘周期,得到細(xì)粒度CPI。其中,所述步驟SI具體包括選擇采樣事件發(fā)生在跳轉(zhuǎn)指令執(zhí)行并完成執(zhí)行的時刻對歷史跳轉(zhuǎn)寄存器進(jìn)行采樣;構(gòu)建每個函數(shù)的控制流圖,采樣中記錄的每一條跳轉(zhuǎn),都在控制流圖中有一條邊與之對應(yīng),遍歷每個控制流圖,計算出每個函數(shù)中所有基本塊的頻率和邊的頻率,所述基本塊的頻率為其中每條指令的指令頻率。其中,所述步驟SI具體包括記錄著若干個連續(xù)的跳轉(zhuǎn)指令,兩條連續(xù)跳轉(zhuǎn)指令中間的所有指令的頻率都加1,則每條指令最后獲得的頻率即為該指令的指令頻率。其中,所述步驟S2中隨機(jī)采樣時鐘周期的方式為
在時鐘周期采樣時,在采樣周期常數(shù)P上加上一個隨機(jī)數(shù)R,使得等效的采樣周期為P+R+S-A,其中,S表示從硬件計數(shù)器溢出到真正進(jìn)入中斷需要若干個周期的中斷偏移;當(dāng)硬件計數(shù)器在中斷處理程序中復(fù)位之后,中斷處理程序返回到用戶程序,在這個過程中,處理器需要A個周期去填充指令流水線使其達(dá)到完全開放的狀態(tài)。其中,所述R為255。(三)有益效果
本發(fā)明通過對存儲跳轉(zhuǎn)歷史記錄得到寄存器進(jìn)行采樣,獲得精確的細(xì)粒度指令頻率,并且采樣方法的資源開銷低;通過使用隨機(jī)采樣方法,獲得精確的細(xì)粒度時鐘周期。結(jié)合細(xì)粒度指令頻率和細(xì)粒度時鐘周期,可以得到精確的細(xì)粒度CPI。


圖I是本發(fā)明實施例的一種基于CPU硬件性能監(jiān)控計數(shù)器的CPI精確測量方法流程圖;圖2是本發(fā)明的方法和傳統(tǒng)方法實驗對比圖。
具體實施例方式下面結(jié)合附圖和實施例,對本發(fā)明的具體實施方式
作進(jìn)一步詳細(xì)描述。以下實施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。細(xì)粒度CPI由細(xì)粒度指令頻率和細(xì)粒度時鐘周期共同獲得。本發(fā)明使用的方法仍然是對細(xì)粒度指令頻率和細(xì)粒度時鐘周期分別進(jìn)行采樣,然后結(jié)合兩個采樣,獲得細(xì)粒度CPI0但在獲取細(xì)粒度指令頻率時,本發(fā)明對跳轉(zhuǎn)歷史記錄進(jìn)行采樣,并通過一定的變換獲得精確的細(xì)粒度指令頻率。在獲取細(xì)粒度時鐘周期時,本發(fā)明使用隨機(jī)采樣的方式,克服采樣過程中可能引起的系統(tǒng)誤差,從而得到精確的時鐘周期。最后將兩種精確的相結(jié)合,得到精確的細(xì)粒度CPI。具體步驟如圖I所示,包括步驟SlOl,對跳轉(zhuǎn)歷史記錄進(jìn)行采樣,獲取跳轉(zhuǎn)頻率,并根據(jù)跳轉(zhuǎn)頻率獲得細(xì)粒度指令頻率。很多處理器上都提供一種記錄跳轉(zhuǎn)歷史記錄的寄存器。例如在最新的Intel x86處理器上,有若干個LBR(Last Branch Register,歷史跳轉(zhuǎn)寄存器)寄存器,這些寄存器的作用,是記錄系統(tǒng)中前幾個跳轉(zhuǎn)的指令。在Intel Core2處理器中,共有4條最新的跳轉(zhuǎn)指令被記錄;而在最新的Intel Core i7處理器中,共有16條最新的跳轉(zhuǎn)指令被記錄。這些記錄不僅包含了每條跳轉(zhuǎn)指令的地址,也包含了跳轉(zhuǎn)指令的目的地址。這些寄存器的值可以被系統(tǒng)程序讀出,同時,硬件支持在系統(tǒng)進(jìn)入中斷時將這些寄存器的值凍結(jié),從而實現(xiàn)控制被記錄的程序范圍?;诔绦蛐阅苡嫈?shù)器的采樣技術(shù),同樣可以實現(xiàn)對LBR寄存器進(jìn)行采樣在程序開始時配置硬件,讓其在進(jìn)入中斷時對LBR寄存器進(jìn)行凍結(jié);同時,在中斷處理程序中記錄下LBR寄存器的值,從而實現(xiàn)了對LBR寄存器的采樣。在對LBR進(jìn)行采樣的過程中,通過設(shè)置特定的采樣事件,可以實現(xiàn)跳轉(zhuǎn)頻率的采樣。直觀上,選擇的采樣事件發(fā)生在跳轉(zhuǎn)指令執(zhí)行并完成執(zhí)行的時刻。也就是說,每當(dāng)跳轉(zhuǎn)指令執(zhí)行完成執(zhí)行的時候,性能計數(shù)器的值就會自增。要驗證選擇這個事件進(jìn)行采樣的正確性,首先假定采樣周期為Q ;整個程序執(zhí)行過程中總共有N條指令執(zhí)行完成執(zhí)行,而實際采樣得到的跳轉(zhuǎn)指令個數(shù)為M ;同時,每次計數(shù)器溢出,中斷處理函數(shù)中總共記錄最后的$L$條跳轉(zhuǎn)指令。如果某條指令b實際執(zhí)行了 B次,而在采樣中實際被采到了 T次。于是,實際就是要驗證B/N與T/M相等。首先,可以直觀的將M表示為(NXL)/Q。其次,不難推出以下兩個事件是等價的Ii出現(xiàn)在LBR記錄的第k個位置,和Ii_k觸發(fā)了寄存器溢出。因為每當(dāng)一次跳轉(zhuǎn)發(fā)生時計數(shù)器都加一,每一條跳轉(zhuǎn)都有均等的概率觸發(fā)溢出,這個概率可以表示成1/Q。因此可以得到pik = l/Q,Pi = L/Q,因此可推出,T = BXpi = (BXL)/Q,于是可以推導(dǎo)出B/N = T/M。在Intel Core2處理器中,有一個事件叫做BR_INST_RETIRED: TAKEN,正好可以達(dá)到以上目的。然而,在IntelCore i7上,這個事件被取消了。但是,可以通過另外一個事件BR_INST_EXEC:TAKEN來代替。這個事件還記錄了那些因跳轉(zhuǎn)預(yù)測錯誤而誤執(zhí)行的跳轉(zhuǎn)指令。為了去除這些指令的干擾,同時使用了 BR_MISP_EXEC = TAKEN事件來濾除這些誤操作的跳轉(zhuǎn)。通過這兩個事件,可以達(dá)到與BR_INST_RETIRED = TAKEN相同的效果。通過以上的采樣方法,已經(jīng)通過LBR采樣計算出了跳轉(zhuǎn)頻率。CPI無法直接使用跳轉(zhuǎn)頻率獲得,而必須使用指令頻率。使用采樣到的跳轉(zhuǎn)頻率,計算出指令頻率。為了實現(xiàn)這個目標(biāo),首先構(gòu)建每個函數(shù)的控制流圖。值得注意的是,采樣中記錄的每一條跳轉(zhuǎn),都在控制流圖中有一條邊與之對應(yīng)。然而,并不是控制流圖中的每一條邊都會有一個跳轉(zhuǎn)記錄與之對應(yīng)。因為連續(xù)執(zhí)行的邊是沒有被采樣的。使用表I所示算法來獲取連續(xù)執(zhí)行的邊的執(zhí)行頻率。也使用這個算法來計算各個基本塊執(zhí)行的頻率,從而計算出指令頻率。 表I使用間接方法從LBR獲取指令頻率的算法
權(quán)利要求
1.一種基于CPU硬件性能監(jiān)控計數(shù)器的CPI精確測量方法,其特征在于,包括以下步驟 Si:對跳轉(zhuǎn)歷史記錄進(jìn)行采樣,獲取跳轉(zhuǎn)頻率,并根據(jù)跳轉(zhuǎn)頻率獲得細(xì)粒度指令頻率; 52:使用隨機(jī)采樣時鐘周期的方式得到細(xì)粒度時鐘周期; 53:所述細(xì)粒度指令頻率除以細(xì)粒度時鐘周期,得到細(xì)粒度CPI。
2.如權(quán)利要求I所述的基于CPU硬件性能監(jiān)控計數(shù)器的CPI精確測量方法,其特征在于,所述步驟SI具體包括 選擇采樣事件發(fā)生在跳轉(zhuǎn)指令執(zhí)行并完成執(zhí)行的時刻對歷史跳轉(zhuǎn)寄存器進(jìn)行采樣;構(gòu)建每個函數(shù)的控制流圖,采樣中記錄的每一條跳轉(zhuǎn),都在控制流圖中有一條邊與之對應(yīng),遍歷每個控制流圖,計算出每個函數(shù)中所有基本塊的頻率和邊的頻率,所述基本塊的頻率為其中每條指令的指令頻率。
3.如權(quán)利要求I所述的基于CPU硬件性能監(jiān)控計數(shù)器的CPI精確測量方法,其特征在于,所述步驟Si具體包括 記錄著若干個連續(xù)的跳轉(zhuǎn)指令,兩條連續(xù)跳轉(zhuǎn)指令中間的所有指令的頻率都加1,則每條指令最后獲得的頻率即為該指令的指令頻率。
4.如權(quán)利要求I所述的基于CPU硬件性能監(jiān)控計數(shù)器的CPI精確測量方法,其特征在于,所述步驟S2中隨機(jī)采樣時鐘周期的方式為 在時鐘周期采樣時,在采樣周期常數(shù)P上加上一個隨機(jī)數(shù)R,使得等效的采樣周期為P+R+S-A,其中,S表示從硬件計數(shù)器溢出到真正進(jìn)入中斷需要若干個周期的中斷偏移;當(dāng)硬件計數(shù)器在中斷處理程序中復(fù)位之后,中斷處理程序返回到用戶程序,在這個過程中,處理器需要A個周期去填充指令流水線使其達(dá)到完全開放的狀態(tài)。
5.如權(quán)利要求4所述的基于CPU硬件性能監(jiān)控計數(shù)器的CPI精確測量方法,其特征在于,所述R為255。
全文摘要
本發(fā)明公開了一種基于CPU硬件性能監(jiān)控計數(shù)器的CPI精確測量方法,包括S1對跳轉(zhuǎn)歷史記錄進(jìn)行采樣,獲取跳轉(zhuǎn)頻率,并根據(jù)跳轉(zhuǎn)頻率獲得細(xì)粒度指令頻率;S2使用隨機(jī)采樣時鐘周期的方式得到時鐘周期;S3所述細(xì)粒度指令頻率除以細(xì)粒度時鐘周期,得到細(xì)粒度CPI。本發(fā)明通過對存儲跳轉(zhuǎn)歷史記錄得到寄存器進(jìn)行采樣,獲得精確的細(xì)粒度指令頻率,并且采樣方法的資源開銷低;通過使用隨機(jī)采樣方法,獲得精確的細(xì)粒度時鐘周期。結(jié)合細(xì)粒度指令頻率和細(xì)粒度時鐘周期,可以得到精確的細(xì)粒度CPI。
文檔編號G06F11/36GK102750219SQ201110102079
公開日2012年10月24日 申請日期2011年4月22日 優(yōu)先權(quán)日2011年4月22日
發(fā)明者鄭緯民, 陳德顥, 陳文光 申請人:清華大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
深州市| 漾濞| 周口市| 南投市| 安阳县| 黑水县| 乌鲁木齐市| 南宁市| 宣城市| 集安市| 曲沃县| 丰都县| 阳原县| 来宾市| 民丰县| 五指山市| 博湖县| 偏关县| 湖北省| 平昌县| 临潭县| 敦煌市| 巩留县| 白银市| 临海市| 定州市| 遂溪县| 鄂州市| 罗平县| 陵水| 嘉禾县| 遂川县| 玉屏| 鄄城县| 津南区| 湟源县| 清徐县| 婺源县| 鄱阳县| 丰都县| 双牌县|