本發(fā)明涉及計算機技術(shù)領(lǐng)域,尤其涉及一種用于安卓設(shè)備的能耗分析方法。
背景技術(shù):
以智能手機為代表的智能設(shè)備如今越來越成為日常生活中不可缺少的一部分,其中安卓系統(tǒng)占據(jù)了智能設(shè)備中超過80%的份額。對安卓設(shè)備的能耗的有效分析能夠幫助開發(fā)者了解應(yīng)用的能耗行為并進而提升用戶體驗。
然而,對安卓應(yīng)用的能耗進行量化分析在工程實踐上有相當?shù)碾y度,這主要是由于:第一,安卓應(yīng)用有可能基于多個層次的api進行開發(fā),例如,可基于第三方庫api,也可基于安卓framework層的api,還可基于linux層的api;第二,安卓應(yīng)用存在尾電耗的行為,所謂尾電耗是指使用wi-fi、flash、lte等硬件模塊的過程中,例程使這些硬件模塊進入一個高電耗的狀態(tài),而當例程執(zhí)行完畢時,其使用的硬件模塊仍將保持相當長一段時間的高電耗狀態(tài);第三,單個硬件模塊的能耗經(jīng)常受到其它硬件模塊的影響,例如,與顯示相關(guān)的gpu、cpu、顯示屏等模塊有很強的相關(guān)性。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)的缺陷,提供一種用于安卓設(shè)備的能耗分析方法。該方法包括以下步驟:
步驟1:獲取待測安卓設(shè)備中部件的能耗特征數(shù)據(jù)集;
步驟2:以所述能耗特征數(shù)據(jù)集作為輸入,利用基于lstm(長短期記憶網(wǎng)絡(luò))的神經(jīng)網(wǎng)絡(luò)模型獲得所述待測安卓設(shè)備的能耗數(shù)據(jù),其中,所述基于lstm的神經(jīng)網(wǎng)絡(luò)模型通過訓練獲得的,訓練數(shù)據(jù)集是以已知的能耗特征數(shù)據(jù)集為輸入,以相應(yīng)時刻的安卓設(shè)備的實際能耗為輸出。
在本發(fā)明的方法中,所述部件包括cpu、gpu、wi-fi模塊、lte模塊、flash、顯示屏中的至少一項。
在本發(fā)明的發(fā)明中,所述能耗特征數(shù)據(jù)集包括cpu的核心頻率、cpu的使用率、gpu的核心電壓級別、gpu的使用率、wi-fi的接收字節(jié)數(shù)和發(fā)送字節(jié)數(shù),lte的接收字節(jié)數(shù)和發(fā)送字節(jié)數(shù)、flash的讀字節(jié)數(shù)和寫字節(jié)數(shù)、顯示屏的亮度值中的至少一項。
在本發(fā)明的方法中,當所述能耗特征數(shù)據(jù)集包括顯示屏的亮度值時,將所述顯示屏的亮度值歸一化到[0,1]區(qū)間。
在本發(fā)明的方法中,所述能耗特征數(shù)據(jù)集通過采集所述部件發(fā)生驅(qū)動調(diào)用事件時的內(nèi)核級的能耗特征值而獲得。
在本發(fā)明的方法中,所述驅(qū)動調(diào)用事件包括wi-fi的數(shù)據(jù)發(fā)送函數(shù)的調(diào)用、wi-fi的數(shù)據(jù)接收函數(shù)的調(diào)用、cpu頻率變化事件、cpu上下文切換事件、gpu核心電壓級別變換事件、gpu統(tǒng)計數(shù)據(jù)更新事件、lte的數(shù)據(jù)發(fā)送事件、lte的數(shù)據(jù)接收事件、flash的數(shù)據(jù)讀取事件或flash的數(shù)據(jù)寫入事件、顯示屏亮度變化事件中的至少一項。
在本發(fā)明的方法中,所述基于lstm的神經(jīng)網(wǎng)絡(luò)模型包括lstm單元層網(wǎng)絡(luò)、dense層網(wǎng)絡(luò)和線性回歸層。
在本發(fā)明的方法中,所述安卓設(shè)備的實際能耗是耗電量。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點在于:可實現(xiàn)基于內(nèi)核的能耗特征采集,追蹤包括cpu、gpu、flash、lte、wi-fi、顯示屏在內(nèi)的硬件驅(qū)動的關(guān)鍵狀態(tài)變換事件,并從中提取用于能耗模型訓練的能耗特征;基于lstm神經(jīng)網(wǎng)絡(luò)的安卓設(shè)備能耗建模方法,利用設(shè)備實際使用過程中產(chǎn)生的硬件模塊能耗特征數(shù)據(jù)和相應(yīng)時刻的設(shè)備實際能耗數(shù)據(jù)作為模型的訓練參數(shù),在能耗分析中充分考慮了硬件模塊尾電耗和模塊之間復(fù)雜的相關(guān)性對能耗量化結(jié)果準確性的影響。
附圖說明
以下附圖僅對本發(fā)明作示意性的說明和解釋,并不用于限定本發(fā)明的范圍,其中:
圖1示出了根據(jù)本發(fā)明一個實施例的訓練能耗模型的整體流程圖。
圖2示出了根據(jù)本發(fā)明一個實施例的用于訓練能耗模型的硬件連接圖。
圖3示出了根據(jù)本發(fā)明一個實施例的實際能耗數(shù)據(jù)采集的模塊化示意圖。
圖4示出了根據(jù)本發(fā)明一個實施例的安卓設(shè)備驅(qū)動能耗特征數(shù)據(jù)采集的模塊化示意圖。
圖5示出了根據(jù)本發(fā)明一個實施例的pc端能耗特征數(shù)據(jù)采集的模塊化示意圖。
圖6示出了根據(jù)本發(fā)明一個實施例的用于能耗模型訓練的模塊化示意圖。
圖7示出可根據(jù)本發(fā)明的一個實施例的用于預(yù)測安卓設(shè)備能耗的方法的流程圖。
圖8示出了根據(jù)本發(fā)明一個實施例的使用pc分析安卓設(shè)備能耗的硬件連接示意圖。
圖9示出了根據(jù)本發(fā)明一個實施例的使用pc分析安卓設(shè)備能耗的模塊化示意圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案、設(shè)計方法及優(yōu)點更加清楚明了,以下結(jié)合附圖通過具體實施例對本發(fā)明進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
圖1示出了根據(jù)本發(fā)明一個實施例的總體工作流程圖。包括:
s101,前期準備階段;
s102,采集能耗模型訓練數(shù)據(jù);
s103,根據(jù)訓練數(shù)據(jù)訓練lstm能耗模型。
下面將參見圖1具體描述各個步驟的實施例。
(1)步驟s101,前期準備階段
步驟s101屬于訓練能耗模型的準備階段,主要完成是使用的軟件平臺搭建和硬件平臺搭建。
首先,準備好安卓系統(tǒng)和對應(yīng)linux內(nèi)核的源碼,并完成安卓源碼的編譯。然后,打開支持systemtap和ftrace的必要編譯選項并編譯linux內(nèi)核,接著制作基于該內(nèi)核的安卓rom,利用刷寫工具刷入安卓設(shè)備。最后,進行systemtap移植,包括確定內(nèi)核版本支持的systemtap版本和交叉編譯systemtap需要的elfutils版本,下載對應(yīng)systemtap和elfutils源碼,利用安卓源碼中提供的gcc編譯器靜態(tài)交叉編譯systemtap,將得到的可執(zhí)行文件上傳到安卓設(shè)備linux中,設(shè)置好調(diào)用systamtap的靜態(tài)鏈接等。
其次,完成硬件平臺的搭建,圖2示意了本發(fā)明一個實施例的硬件連接圖,其中實線表示數(shù)據(jù)傳輸,虛線表示電流傳輸。具體地,用于數(shù)據(jù)解析的pc201和用作驅(qū)動調(diào)用事件來源的安卓設(shè)備202用usb線205相連,安卓設(shè)備202和設(shè)備電池203用導(dǎo)線連接正負極。usb的電源線、安卓設(shè)備與設(shè)備電池的導(dǎo)線間接入電流測量電路204和205,它們采集到的電流數(shù)據(jù)輸出到pc201。該示例的硬件平臺能夠滿足通過usb線控制安卓設(shè)備內(nèi)核驅(qū)動調(diào)用事件追蹤和能耗特征數(shù)據(jù)傳輸?shù)耐瑫r,通過電流測量電路測定的電流計算安卓設(shè)備的實時能耗,并和能耗特征數(shù)據(jù)進行某個時刻的匹配,由某個時刻的能耗特征和該時刻對應(yīng)的實時能耗組成能耗模型的訓練數(shù)據(jù)的需求。
應(yīng)當理解,步驟s101只是為了以下清楚描述本發(fā)明的內(nèi)容,所示意的軟件平臺和硬件平臺的實施例,并不用于限制本發(fā)明。本領(lǐng)域的技術(shù)人員也可采用其它的方式來追蹤內(nèi)核驅(qū)動調(diào)用事件追蹤和獲得能耗特征數(shù)據(jù),并且隨著安卓系統(tǒng)的升級或更新?lián)Q代,可對上述方法作適當?shù)淖冃汀?/p>
(2)步驟s102,采集能耗模型訓練數(shù)據(jù)
步驟s102包括采集模型訓練數(shù)據(jù),可采集兩種數(shù)據(jù),設(shè)備實際能耗數(shù)據(jù)和設(shè)備驅(qū)動能耗特征數(shù)據(jù)。
采集設(shè)備實際能耗數(shù)據(jù)的原理是:
利用圖2所示的硬件連接,設(shè)備的實際能耗可采用下式計算:
p設(shè)備=uusbiusb+u電池i電池
其中,uusb和u電池分別表示usb和電池的電壓,iusb和i電池分別表示usb和電池上供電的電流。在pc采用標準usb2.0的情況下,工作電流最大為500ma,這個公式分為如下兩種情況:1)當安卓設(shè)備只處理低能耗任務(wù)時,pc給安卓設(shè)備供電的電能完全可以滿足安卓設(shè)備能耗需求,多出部分能耗流向電池進行充電,此時公式中的u電池i電池為負,這是大多數(shù)情況下的能耗場景;2)當安卓設(shè)備執(zhí)行高能耗任務(wù)時,由于pc供電無法滿足安卓設(shè)備能耗需求,需要pc和設(shè)備電池同時給安卓設(shè)備供電,此時公式中u電池i電池為正。
為了清楚的理解設(shè)備能耗數(shù)據(jù)采集的方法,圖3以功能模塊的方式示意了數(shù)據(jù)采集過程,其中,實線表示數(shù)據(jù)流,虛線表示控制流。設(shè)備能耗數(shù)據(jù)采集模塊310的輸入是來自電流測量電路204的usb電流數(shù)據(jù)301和來自電流測量電路206的電池電流數(shù)據(jù)302。設(shè)備實際能耗采集控制單元308控制電流數(shù)據(jù)解析和能耗計算單元303和304是否進行數(shù)據(jù)解析。當308使能數(shù)據(jù)解析時,電流數(shù)據(jù)301經(jīng)過usb電流數(shù)據(jù)解析與能耗計算單元303的數(shù)據(jù)解析得到實時電流,再根據(jù)204的采樣間隔tusb,由wusb=uusbiusbtusb計算204采樣間隔期間的耗電量wusb,添加到usb能耗數(shù)據(jù)緩沖隊列305。類似的,對電池電流數(shù)據(jù)302的處理也是經(jīng)過數(shù)據(jù)解析與能耗計算單元304得到電流測量電路206采樣間隔的耗電量w電池,添加到電池能耗數(shù)據(jù)緩沖隊列306。應(yīng)注意,此處計算的wusb和w電池是矢量,分充電和放電過程。數(shù)據(jù)緩沖隊列305和306是為了同步測量電路204和206采樣的數(shù)據(jù)和調(diào)節(jié)設(shè)備能耗采樣頻率而設(shè)計的。設(shè)備能耗數(shù)據(jù)的采樣頻率統(tǒng)一由設(shè)備實際能耗采集控制單元308調(diào)節(jié),按照設(shè)置的采樣頻率定時向設(shè)備能耗計算單元307發(fā)出采樣信號,307接收到信號后,將數(shù)據(jù)隊列305和306中的耗電量分別加和,得到wusb總和w電池總,根據(jù)w設(shè)備=wusb總+w電池總,基于設(shè)備能耗采樣間隔t設(shè)備根據(jù)w設(shè)備=p設(shè)備t設(shè)備計算實時單位時間設(shè)備能耗p設(shè)備,也就是309表示的設(shè)備的實際能耗數(shù)據(jù)。
進一步地,現(xiàn)在將詳細描述采集設(shè)備驅(qū)動能耗特征數(shù)據(jù)的基本原理。首先,介紹涉及的2個術(shù)語,即驅(qū)動調(diào)用事件和驅(qū)動能耗特征,前者表示對驅(qū)動關(guān)鍵函數(shù)的調(diào)用,后者表示驅(qū)動關(guān)鍵函數(shù)所影響到能耗的參數(shù)。
根據(jù)本發(fā)明的一個實施例,對wi-fi捕捉的一個驅(qū)動調(diào)用事件是數(shù)據(jù)發(fā)送函數(shù)的調(diào)用,對應(yīng)的驅(qū)動能耗特征是發(fā)送字節(jié)數(shù)。采集能耗特征數(shù)據(jù)可采用事件驅(qū)動的方式,即只有在發(fā)生驅(qū)動調(diào)用事件時才采集一次能耗特征。與傳統(tǒng)的周期性采樣的數(shù)據(jù)采集方式相比,事件驅(qū)動方式的特征數(shù)據(jù)采集的計算和能耗開銷更小,采集的數(shù)據(jù)精度更高,同時也不會丟失時間粒度。每一條能耗特征數(shù)據(jù)的格式可按照“事件類別:[參數(shù)列表]”的形式記錄,參數(shù)列表以空格來間隔以便后續(xù)分析。
類似的,可采集其他模塊的能耗特征數(shù)據(jù),根據(jù)本發(fā)明的一個實施例,采集的硬件模塊和對應(yīng)的能耗特征如下表所示:
具體而言,對于cpu模塊,主要是運行l(wèi)inux的應(yīng)用處理器,本發(fā)明采集每個cpu核心頻率和使用率,捕捉的驅(qū)動調(diào)用事件包括cpu頻率變化事件和上下文切換事件等。當cpu頻率變化事件發(fā)生時,相應(yīng)函數(shù)參數(shù)會指定需要調(diào)節(jié)的cpu核心號和頻率值,記錄的能耗特征可為“cpu_freq:核心號頻率值”;當cpu上下文切換事件發(fā)生時,cpu的使用率一般發(fā)生變化。通過內(nèi)核函數(shù)可以得到事件發(fā)生的cpu核心號,再由參數(shù)數(shù)據(jù)結(jié)構(gòu)的域分析可以分別采集到cpu執(zhí)行內(nèi)核代碼、用戶空間代碼和空閑狀態(tài)的時間t內(nèi)核、t用戶空間和t空閑,cpu的使用率可以表示為:使用率cpu核心=(t內(nèi)核+t用戶空間)/(t內(nèi)核+t用戶空間+t空閑),為使事件捕捉的計算能耗代價最小化,該計算過程可不在事件捕捉階段進行,而是上傳到pc上再進行計算,記錄的能耗特征可表示為:“cpu_utilization:核心號t內(nèi)核t用戶空間t空閑[調(diào)用者信息]”,此處和下文中的[調(diào)用者信息]表示函數(shù)調(diào)用者的基本信息,包括“進程號線程組號用戶號”3個linux系統(tǒng)字段,可以由systemtap內(nèi)置函數(shù)獲取,用來做后續(xù)app能耗從屬分析,由于在進程切換時才會發(fā)生cpu核心調(diào)用者的更替,而cpu頻率變化由驅(qū)動代碼能耗策略觸發(fā),故無須記錄調(diào)用者信息。
對于gpu模塊,安卓系統(tǒng)中的驅(qū)動一般基于由第三方提供的硬件驅(qū)動層hal(hardwareabstractionlayer),和cpu不同的是,由于第三方提供的接口不唯一,具體捕捉的函數(shù)需要根據(jù)實際使用的gpu廠商和型號調(diào)整。本發(fā)明采集gpu核心的電壓級別和使用率,捕捉的驅(qū)動調(diào)用事件對應(yīng)為gpu核心電壓級別變化事件和gpu統(tǒng)計數(shù)據(jù)更新事件。當gpu核心電壓級別變化事件發(fā)生時,相關(guān)參數(shù)會指定需要調(diào)節(jié)的電壓級別,記錄的能耗特征為“gpu_level:電壓級別”。當gpu統(tǒng)計數(shù)據(jù)更新事件發(fā)生時,可以通過參數(shù)數(shù)據(jù)結(jié)構(gòu)的域分析采集到gpu核心有效執(zhí)行代碼的時間t有效和gpu上進程執(zhí)行的總時間t總,gpu的使用率表示為:使用率gpu核心=t有效/t總,為使事件捕捉的計算能耗代價最小化,該計算過程同樣可后移到pc上執(zhí)行,記錄的能耗特征可表示為“gpu_utilization:t有效t總”。和cpu類似,gpu調(diào)用者切換也是在gpu上下文切換事件時發(fā)生,故在能耗特征捕捉時不需要記錄調(diào)用者信息。
對于wi-fi和lte模塊,本發(fā)明采集這2個模塊的發(fā)送和接收字節(jié)數(shù),對應(yīng)的驅(qū)動調(diào)用事件為數(shù)據(jù)發(fā)送事件和數(shù)據(jù)接收事件。發(fā)送和接收事件相應(yīng)的函數(shù)入口在這兩個模塊中是一致的,而函數(shù)執(zhí)行過程是同步的,模塊的能耗與實際傳輸?shù)臄?shù)據(jù)量有關(guān),故本發(fā)明在函數(shù)返回時進行事件捕捉。當數(shù)據(jù)發(fā)送事件發(fā)生時,相關(guān)返回值表示實際發(fā)送的字節(jié)數(shù),通過參數(shù)數(shù)據(jù)結(jié)構(gòu)域分析還可以獲得發(fā)送數(shù)據(jù)的模塊設(shè)備名稱,在能耗特征解析時根據(jù)設(shè)備名稱區(qū)分wi-fi和lte模塊,記錄的能耗特征可表示為“network_send:發(fā)送字節(jié)數(shù)設(shè)備名[調(diào)用者信息]”。同理,數(shù)據(jù)對接收事件中記錄的能耗特征為“network_recv:接收字節(jié)數(shù)設(shè)備名[調(diào)用者信息]”。
對于flash模塊,本發(fā)明采集讀取和接收字節(jié)數(shù),對應(yīng)的驅(qū)動調(diào)用事件為數(shù)據(jù)讀取事件和數(shù)據(jù)寫入事件,和wi-fi、lte模塊處理類似,也是在函數(shù)返回時進行事件捕捉以記錄實際讀寫字節(jié)數(shù)。由于緩存和回寫等技術(shù)在持久化中的作用,在讀寫小數(shù)據(jù)量時能耗是非常小的,因此,本發(fā)明以1024字節(jié)作為flash讀寫特征記錄的最小閥值,每次捕捉到的讀寫事件只有在讀寫數(shù)據(jù)量超過閥值才進行能耗特征記錄。相應(yīng)的能耗特征可記錄為“flash_read:發(fā)送字節(jié)數(shù)[調(diào)用者信息]”以及“flash_write:接收字節(jié)數(shù)[調(diào)用者信息]”。
對于顯示屏模塊,本發(fā)明采集的能耗特征為亮度值,對應(yīng)驅(qū)動調(diào)用事件為屏幕亮度變化事件,當事件發(fā)生時,通過參數(shù)數(shù)據(jù)結(jié)構(gòu)域分析得到指定的亮度值,能耗特征可表示為“display:亮度值”。
本領(lǐng)域的技術(shù)人員應(yīng)理解的是,盡管本文具體針對gpu、cpu等模塊進行描述,但本發(fā)明所采集的能耗特征數(shù)據(jù)并不限于上述模塊,例如,還可包括gps模塊。
為了清楚的理解安卓設(shè)備驅(qū)動能耗數(shù)據(jù)的采集方法,圖4以功能模塊的方式示意了數(shù)據(jù)采集過程,其中,實線表示數(shù)據(jù)流,虛線表示控制流。linux運行時內(nèi)存分為用戶空間401和內(nèi)核空間402,用戶空間中的進程/線程403通過系統(tǒng)調(diào)用接口404來調(diào)用內(nèi)核代碼。前述的關(guān)鍵內(nèi)核驅(qū)動函數(shù)接口統(tǒng)一指代為409,406表示函數(shù)調(diào)用入口,前述的cpu、gpu、顯示屏模塊的驅(qū)動調(diào)用事件在406進行捕捉,407則是函數(shù)返回出口,前述的wi-fi、lte、flash模塊的驅(qū)動調(diào)用事件在407進行捕捉。驅(qū)動事件捕捉單元408是systemtap內(nèi)核模塊,由圖5的pc端驅(qū)動能耗特征數(shù)據(jù)采集控制單元503通過adb模塊412控制安裝或卸載,驅(qū)動事件捕捉單元408捕捉到調(diào)用事件后通過ftrace將驅(qū)動能耗特征數(shù)據(jù)輸出到內(nèi)核驅(qū)動能耗數(shù)據(jù)鏈表410中。內(nèi)核驅(qū)動能耗特征數(shù)據(jù)讀取單元411同樣由503通過adb模塊412控制,按設(shè)定頻率從410中讀取驅(qū)動能耗特征數(shù)據(jù),并通過adb模塊412上傳到pc端進行后續(xù)解析。
圖5示出了在pc端分析驅(qū)動能耗特征數(shù)據(jù)方法的示意圖,同樣以功能模塊的方式示意,其中,實線表示數(shù)據(jù)流,虛線表示控制流。驅(qū)動能耗特征數(shù)據(jù)采集控制單元503通過adb模塊412控制圖4中的安卓設(shè)備端能耗特征數(shù)據(jù)采集模塊按設(shè)定頻率上傳原始數(shù)據(jù)501,它是ftrace記錄的數(shù)據(jù),除了驅(qū)動能耗數(shù)據(jù)外還有其他模塊可以使用ftrace記錄的數(shù)據(jù),需要能耗特征過濾解析單元502進行過濾解析,以得到不同特征的累積數(shù)據(jù)504。在進行進一步解析之前,對wi-fi、lte模塊收發(fā)字節(jié)數(shù)以及flash模塊讀寫字節(jié)數(shù)分別作累加處理,其他能耗特征直接替換成最新數(shù)據(jù)。接著503按照與設(shè)備實際能耗采集控制單元308一樣的頻率控制能耗模型訓練數(shù)據(jù)生成模塊505重置能耗特征累積數(shù)據(jù)504,并將能耗特征累積數(shù)據(jù)504和實時設(shè)備能耗309整合成“[能耗特征數(shù)據(jù)]設(shè)備能耗”形式的單條能耗訓練數(shù)據(jù),存入能耗特征數(shù)據(jù)集506。由于數(shù)據(jù)309和504可能是不同步的,所以訓練數(shù)據(jù)生成模塊505的工作方式也是異步的,每次都會異步等待能耗數(shù)據(jù)309的更新之后再生成單條能耗訓練數(shù)據(jù)。
(3)步驟s103,根據(jù)訓練數(shù)據(jù)訓練lstm能耗模型
步驟s103涉及能耗模型的結(jié)構(gòu)和訓練過程。
首先,介紹能耗模型的原理:
不同于現(xiàn)有技術(shù)中需要使用基準測試程序分別對不同硬件模塊建模的方法,本發(fā)明設(shè)計的能耗模型訓練數(shù)據(jù)由安卓設(shè)備的日常使用產(chǎn)生,這使得模型更具泛化能力。為了對尾電耗建模,并防止誤差向后傳遞中可能出現(xiàn)的梯度消失和梯度爆炸的現(xiàn)象,本發(fā)明的能耗模型基于lstm神經(jīng)網(wǎng)絡(luò),lstm單元能夠記憶能耗特征在過去事件點上發(fā)生的事件。每個單元的計算過程如下:
其中,
sigm函數(shù):
tanh函數(shù):
sigm的值域范圍為[0,1],tanh的值域范圍為[-1,1],它們的求導(dǎo)結(jié)果簡潔,方便在誤差向后傳遞時計算歸并和約簡,主要作為激活函數(shù)使用。為了對模塊之間能耗的相對影響進行建模,本發(fā)明引入了dense層網(wǎng)絡(luò),即節(jié)點的全連接層。能耗模型屬于回歸模型,最后需要將多參數(shù)輸入整合成單值輸出,本發(fā)明采用線性回歸層進行預(yù)測能耗輸出,具體即對e預(yù)測=wtx+b的中間結(jié)果向量x的計算權(quán)重w和偏移b進行回歸學習。能耗模型中l(wèi)stm單元層網(wǎng)絡(luò)、dense層網(wǎng)絡(luò)和線性回歸層的調(diào)節(jié)參數(shù)不能初始化為同一值,因為神經(jīng)網(wǎng)絡(luò)需要不對稱性去實現(xiàn)自身的自我調(diào)整。
圖6示出了本發(fā)明一個實施例的能耗模型訓練模塊示意圖。實線表示數(shù)據(jù)流,箭頭607表示dropout連接,箭頭608表示全連接。數(shù)據(jù)預(yù)處理單元601將能耗模型訓練數(shù)據(jù)集506分成能耗模型驗證數(shù)據(jù)集602和能耗模型訓練數(shù)據(jù)集603(其中,訓練數(shù)據(jù)集603占大部分),分別對應(yīng)著訓練過程和驗證過程,每隔一定數(shù)量的訓練迭代進行一次模型驗證。接下來的處理由能耗模型訓練單元618完成,在每次訓練迭代時,數(shù)據(jù)預(yù)處理單元604從能耗模型訓練數(shù)據(jù)集603獲取訓練數(shù)據(jù)進行預(yù)處理,包括數(shù)據(jù)歸一化和數(shù)據(jù)打包操作。歸一化操作是對上述采集的屏幕亮度數(shù)據(jù)進行的,將亮度范圍歸一化到[0,1]區(qū)間,這樣有助于模型參數(shù)更快的修正。數(shù)據(jù)打包可以使模型訓練進行更少的數(shù)據(jù)讀寫和數(shù)據(jù)交換工作,使訓練過程得以加速。在預(yù)處理完成之后,訓練數(shù)據(jù)拆分成由“[特征數(shù)據(jù)]”和“實際能耗”組成的能耗特征數(shù)據(jù)集605和設(shè)備實際能耗數(shù)據(jù)集612,其中,[特征數(shù)據(jù)]是由上述采集的各個特征的數(shù)值數(shù)據(jù),可由空格間隔。打包好的數(shù)據(jù)進入能耗模型結(jié)構(gòu)611進行單次訓練。能耗模型包括一定數(shù)量由dropout操作607連接的lstm單元層606和少量由全連接608相連的dense層609組成,lstm單元層606和dense層609按參數(shù)規(guī)模和具體需求不同調(diào)整層內(nèi)節(jié)點數(shù)。在輸出前經(jīng)過一個線性回歸層610輸出打包訓練數(shù)據(jù)對應(yīng)的預(yù)測能耗數(shù)據(jù)集613。將612和613通過誤差計算單元614計算得到誤差數(shù)據(jù)615。在單次訓練迭代中,誤差向后傳遞單元616選用適當?shù)奶荻认陆捣ㄓ嬎隳P椭懈鱾€參數(shù)的誤差值進行誤差調(diào)節(jié)。每隔一定次數(shù)的訓練迭代進行一次能耗模型驗證,處理流程和訓練過程類似,不同之處在于,誤差計算單元614計算出誤差數(shù)據(jù)615之后不作誤差向后傳遞,而是將驗證的數(shù)據(jù)誤差變化儲存到驗證數(shù)據(jù)誤差變化數(shù)據(jù)617中,并通過該數(shù)據(jù)分析訓練過程是否收斂,即誤差變化是否在一個較小的誤差值附近平穩(wěn),若收斂可停止訓練過程。
能耗模型結(jié)構(gòu)611可用于與訓練設(shè)備202相同或相似型號的安卓設(shè)備的能耗分析。圖7示出了根據(jù)本發(fā)明的一個實施例的分析待測安卓設(shè)備能耗的方法的流程圖。該方法包括:
s710:獲得待測安卓設(shè)備的能耗特征數(shù)據(jù);
s720:以所述能耗特征數(shù)據(jù)為輸入,利用訓練好的基于lstm的能耗模型獲得待測安卓設(shè)備的能耗。
安卓設(shè)備的能耗預(yù)測可在pc中進行,以不影響安卓設(shè)備的性能,如圖8所示,pc101安裝有能耗量化分析軟件并搭載s101得到的軟件平臺,安卓設(shè)備702與訓練過程使用的設(shè)備202是相同的品牌型號,703是連接使用的usb線,用作數(shù)據(jù)流和控制流傳輸。此外,安卓設(shè)備本身也可安裝能耗量化分析軟件以實施的監(jiān)測能耗。
參見圖9所示的例子,具體訓練過程是:
安卓設(shè)備702上部署的安卓端驅(qū)動能耗特征數(shù)據(jù)采集模塊801的結(jié)構(gòu)如圖4所示,采集的原始能耗特征經(jīng)過pc端驅(qū)動數(shù)據(jù)能耗特征采集模塊802處理得到解析后的能耗特征數(shù)據(jù)集803,802的結(jié)構(gòu)類似于圖5,在利用模型進行能耗預(yù)測的階段不需要采集設(shè)備能耗數(shù)據(jù),只需生成能耗特征數(shù)據(jù)集803,獲得能耗特征數(shù)據(jù)的過程可參見步驟s102的內(nèi)容。能耗特征數(shù)據(jù)預(yù)處理單元804從803中逐條取出能耗特征數(shù)據(jù)并對其中的顯示屏能耗特征歸一化,之后輸入訓練好的能耗模型611,得到單條能耗預(yù)測數(shù)據(jù)805,最后由預(yù)測能耗可視化單元806進行數(shù)據(jù)可視化。
本發(fā)明的方法可應(yīng)用于安卓設(shè)備的能耗分析,例如,分析一段時間內(nèi)或某個app運行過程的耗電量。經(jīng)過驗證,本發(fā)明的量化誤差可保持在11.3%以下,同時開銷較低,例如,將本發(fā)明方法應(yīng)用于nexus4,能耗特征采集的運行能耗為30.3mw,cpu運行占用率為1.6%。
應(yīng)理解的是,盡管為了清楚起見,圖3、圖4、圖5、圖6和圖8以功能模塊的形式示例了基于本發(fā)明的安卓設(shè)備的能耗分析方法,在不違背本發(fā)明的精神和范圍的情況下,本領(lǐng)域的技術(shù)人員可進行適當?shù)淖冃突蚋淖儭?/p>
本發(fā)明可以是系統(tǒng)、方法和/或計算機程序產(chǎn)品。計算機程序產(chǎn)品可以包括計算機可讀存儲介質(zhì),其上載有用于使處理器實現(xiàn)本發(fā)明的各個方面的計算機可讀程序指令。
計算機可讀存儲介質(zhì)可以是保持和存儲由指令執(zhí)行設(shè)備使用的指令的有形設(shè)備。計算機可讀存儲介質(zhì)例如可以包括但不限于電存儲設(shè)備、磁存儲設(shè)備、光存儲設(shè)備、電磁存儲設(shè)備、半導(dǎo)體存儲設(shè)備或者上述的任意合適的組合。計算機可讀存儲介質(zhì)的更具體的例子(非窮舉的列表)包括:便攜式計算機盤、硬盤、隨機存取存儲器(ram)、只讀存儲器(rom)、可擦式可編程只讀存儲器(eprom或閃存)、靜態(tài)隨機存取存儲器(sram)、便攜式壓縮盤只讀存儲器(cd-rom)、數(shù)字多功能盤(dvd)、記憶棒、軟盤、機械編碼設(shè)備、例如其上存儲有指令的打孔卡或凹槽內(nèi)凸起結(jié)構(gòu)、以及上述的任意合適的組合。
以上已經(jīng)描述了本發(fā)明的各實施例,上述說明是示例性的,并非窮盡性的,并且也不限于所披露的各實施例。在不偏離所說明的各實施例的范圍和精神的情況下,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說許多修改和變更都是顯而易見的。本文中所用術(shù)語的選擇,旨在最好地解釋各實施例的原理、實際應(yīng)用或?qū)κ袌鲋械募夹g(shù)改進,或者使本技術(shù)領(lǐng)域的其它普通技術(shù)人員能理解本文披露的各實施例。