專利名稱:一種基于x86指令集的軟件動態(tài)能耗統(tǒng)計方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式軟件能耗統(tǒng)計技術(shù)領(lǐng)域,尤其是涉及建立一種基于X86指令集的軟件動態(tài)能耗統(tǒng)計方法。
背景技術(shù):
嵌入式系統(tǒng)是一種以應用為中心,以計算機技術(shù)為基礎(chǔ),軟硬件可剪裁,由專用的處理器、外圍支持硬件、操作系統(tǒng)以及用戶應用程序等四部分組成的特定計算機系統(tǒng),被大量使用在網(wǎng)絡(luò)通信、消費電子、軍事電子、傳感網(wǎng)絡(luò)和交通管理等許多領(lǐng)域。據(jù)相關(guān)統(tǒng)計數(shù)據(jù)顯示,2010年全球嵌入式系統(tǒng)設(shè)備已超過160億臺,全年消耗的能源已達5000億千瓦時,到2020年嵌入式系統(tǒng)設(shè)備數(shù)量將超過350億臺,消耗的能源將超過9000億千瓦時。在當前全球都提倡“低碳經(jīng)濟”的背景下,嵌入式系統(tǒng)設(shè)備的能耗問題已經(jīng)成為人們關(guān)注的一個熱點問題。嵌入式系統(tǒng)的能耗按軟硬件體系結(jié)構(gòu)分為硬件能耗和軟件能耗兩部分,其中硬件的電路活動直接產(chǎn)生的能耗叫硬件能耗,而軟件的指令執(zhí)行和數(shù)據(jù)存取等操作驅(qū)動底層硬件的電路活動間接產(chǎn)生的能耗叫軟件能耗。由于當前嵌入式硬件能耗統(tǒng)計和優(yōu)化方法的成熟運用,使得嵌入式軟件能耗的統(tǒng)計和優(yōu)化成為當前嵌入式系統(tǒng)在能耗統(tǒng)計和優(yōu)化的關(guān)鍵之處。嵌入式軟件能耗統(tǒng)計和優(yōu)化的研究始于二十世紀90年代,主要包括指令級、算法級以及源程序結(jié)構(gòu)級的低能耗研究。1994年Vivek Tiwari等人首先提出了嵌入式軟件低能耗研究的概念,提出了基于Intel 486和SPARC 934處理器的指令級能耗統(tǒng)計模型。2002年T.K.Tan等人在Tiwari等人的基礎(chǔ)上構(gòu)建了一個基于StrongARM處理器的指令級能耗模擬器 EMSIM (Embedded StrongARM Energy Simulator)。2002 年陳偷等人構(gòu)建了一個在嵌入式操作系統(tǒng)上能夠?qū)τ脩舫绦蛟创a進行能耗分析和優(yōu)化的模擬器SkyEye。Intel Atom處理器自2008年開始在嵌入式系統(tǒng)中逐步得到廣泛應用,在參考EMSM和SkyEye等模擬器有點的基礎(chǔ)上,設(shè)計并實現(xiàn)了基于X86指令集的軟件動態(tài)能耗統(tǒng)計方法。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種基于X86指令集的軟件動態(tài)能耗統(tǒng)計方法。本發(fā)明解決其技術(shù)難題所采用的技術(shù)方案的步驟如下:
Dlntel X86體系結(jié)構(gòu)中CPU的每條指令都是由前綴(Pref ixes),操作碼(opcode),操作數(shù)地址(ModR/M),刻度基準(SIB),位移(Displacement),立即數(shù)(I_ediate)組成。指令能耗的處理過程,是對X86指令的關(guān)鍵域值的識別、分類、能耗統(tǒng)計的過程。Intel X86體系結(jié)構(gòu)CPU有4類前綴,分別是總線加鎖/重復前綴、段超越前綴、操作數(shù)長度超越前綴和地址長度超越前綴。X86指令的前綴由上述4類前綴構(gòu)成,每種前綴只能出現(xiàn)一次,但其順序沒有規(guī)定,可以自由排列。前綴的識別過程就是將傳入的指令前綴與X86前綴集中的前綴進行比對,偽代碼過程如下所示:
權(quán)利要求
1.一種基于X86指令集的軟件動態(tài)能耗統(tǒng)計方法,其特征在于該方法的步驟如下:Dlntel X86體系結(jié)構(gòu)中CPU的每條指令都是由前綴(Pref ixes),操作碼(opcode),操作數(shù)地址(ModR/M),刻度基準(SIB),位移(Displacement),立即數(shù)(I_ediate)組成,指令能耗的處理過程,是對X86指令的關(guān)鍵域值的識別、分類、能耗統(tǒng)計的過程,Intel X86體系結(jié)構(gòu)CPU有4類前綴,分別是總線加鎖/重復前綴、段超越前綴、操作數(shù)長度超越前綴和地址長度超越前綴,X86指令的前綴由上述4類前綴構(gòu)成,每種前綴只能出現(xiàn)一次,但其順序沒有規(guī)定,可以自由排列,前綴的識別過程是將傳入的指令前綴與X86前綴集中的前綴進行對比; 2) Intel X86指令中有幾千個操作碼,并且操作碼一直呈現(xiàn)增長趨勢,同時每個操作碼對應的操作數(shù)個數(shù)不一樣,操作數(shù)的尋址方式也不相同,操作碼的編碼采用的是哈夫曼算法,利用這個特性,實現(xiàn)對操作碼和操作數(shù)的識別,操作碼的識別采用的是比對的方法,使用一個二維表來存放所有的X86指令的操作碼信息,然后通過將當前待識別的操作碼和二維表中的操作碼對比來確定待識別的操作碼,在開始對操作碼進行識別之前,需要先設(shè)定指令操作碼的信息,然后設(shè)定二維表,即查找對照表,二維表中有91個成員,每個成員都是cmddata類型,這91個成員分成32種類型,用來表示X86指令中最常用到的32類指令,每個操作碼最多只有三個字節(jié),如果不夠3個字節(jié),則將這幾個字節(jié)直接拷貝到(char*) &opcode處,如果機器碼中有repeat prefixes前綴,則將操作碼右移8位與repeatprefixes前綴按位或,最后將當前傳進來待識別的操作碼與二維表中每一項進行比對,確定當前指令的操作碼; 3)通過一個統(tǒng)計函數(shù)來獲得該條指令的指令周期數(shù),然后將各條指令的電流值、電壓值、頻率值的倒數(shù)、周期數(shù)等相乘,得該條指令的能耗值,最后將所有出現(xiàn)的指令的能耗值相加,得到整個軟件系統(tǒng)的能耗值。
全文摘要
本發(fā)明公布了一種基于X86指令集的軟件動態(tài)能耗統(tǒng)計方法。該方法首先識別X86指令的前綴,然后識別X86指令的操作碼和操作數(shù),最后得出X86指令的執(zhí)行周期數(shù),計算得到整個系統(tǒng)的能耗值。分別從C語言程序和匯編語言程序2個方面對本發(fā)明進行了驗證,驗證使用的C語言程序分別是冒泡排序(Bubble)、矩陣乘法(Matrix)、約瑟夫環(huán)算法(Josephus)、迷宮問題和八皇后問題(Queen),驗證使用的7個匯編語言程序都包含了32類X86匯編指令。實驗結(jié)果表明,本發(fā)明提出的方法對匯編語言程序和C語言程序的能耗統(tǒng)計值與同樣的程序在開發(fā)板上運行的能耗值的誤差在13%以內(nèi),這說明了本發(fā)明提出的基于X86 指令集的軟件動態(tài)能耗統(tǒng)計方法是準確的。
文檔編號G06F11/36GK103106136SQ20111035772
公開日2013年5月15日 申請日期2011年11月14日 優(yōu)先權(quán)日2011年11月14日
發(fā)明者沈艷, 巨輝, 郭兵, 劉云本, 鄧勤林, 陳曉豐 申請人:成都信息工程學院