• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      采用機器學習算法的軟件能耗感知模型及其應用

      2018-12-12 13:32:22傅翠嬌錢德沛欒鐘治
      西安交通大學學報 2018年12期
      關鍵詞:誤差率功耗能耗

      傅翠嬌,錢德沛,2,欒鐘治

      (1.北京航空航天大學計算機學院,100191,北京;2.中山大學數(shù)據(jù)科學與計算機學院,510275,廣州)

      隨著通信網(wǎng)絡、個人計算機以及數(shù)據(jù)中心規(guī)模的快速增長,它們消耗的能量也越來越多,2012年個人和商業(yè)計算機的能耗已超過470 TW·h[1]。在計算機硬件方面已經(jīng)采取了一些節(jié)能技術(shù),主要有根據(jù)系統(tǒng)中的負載來調(diào)節(jié)操作狀態(tài)的動態(tài)電源管理技術(shù)[2]和根據(jù)計算能力的不同需要來動態(tài)調(diào)節(jié)電壓和頻率的技術(shù)[3]。然而,在軟件方面,軟件開發(fā)者一般不確定一段代碼的具體能耗和如何減少能耗。雖然借助于某些測量工具可以直接讀出軟件的能耗,但是它不能解釋能耗變化的原因以及定位程序能耗較高的代碼段。本文提出了一種基于機器學習算法的能耗模型,軟件開發(fā)者可以通過該模型來評估代碼的能耗,而不需要用測量的能耗數(shù)據(jù)訓練自己的模型。該能耗模型是基于性能事件工具測量的性能數(shù)據(jù)建立的,這些性能事件本身可以反映出程序運行時的行為,所以可以解釋能耗變化的原因。實驗數(shù)據(jù)表明,以測量的能耗為基準,該模型的平均能耗預測誤差小于9%。程序員可以利用該模型對自己所編寫的程序的能耗進行預測,而不需要專門對程序再進行能耗測量和訓練;也可以利用該模型準確地估計一些重復使用率高的代碼能耗,以便為優(yōu)化這些代碼提供依據(jù)。

      1 軟件能耗模型的研究現(xiàn)狀

      現(xiàn)有的關于軟件能耗的研究工作主要包括:CPU級、功能部件級、進程級、分布式系統(tǒng)的應用程序以及基于系統(tǒng)調(diào)用的能耗模型等。

      CPU的能耗是計算機系統(tǒng)能耗中的重要部分。CPU級能耗模型的研究主要集中在周期級和指令級兩個抽象的級別。周期級體系結(jié)構(gòu)模擬器是在每一個執(zhí)行周期通過激活微體系結(jié)構(gòu)級單元或者塊來估測模擬處理器的能耗[4],David等對處理器各部分分別進行模擬然后計算出最后的能耗值[5]。指令級的能耗模型是用來估計程序中所有指令執(zhí)行的總能耗,Seo等提出了基于Java編程語言的能耗模型[6]。

      在通過收集和使用實時部件能耗信息建立功能部件級能耗模型方面,Chen等提出了計算機系統(tǒng)主要功能部件的能耗模型[7];Shye等發(fā)現(xiàn)整個計算機能耗的主要部分是屏幕和CPU功耗[8];Gurumurthi等發(fā)現(xiàn)最耗能的部件是硬盤[9];Zhang等研究了部件利用率的能耗模型[10]。

      進程級能耗模型是一種更加細粒度的方法,它根據(jù)實時的能耗信息作出節(jié)省能耗的關鍵決策。Chen等把進程的能耗定義為進程對所有功能部件使用的能耗之和[7]。

      Feng等在文獻[11]中提出了分布式系統(tǒng)應用程序的能耗測量和分析框架;Seo等則提出了基于Java編程語言的分布式系統(tǒng)能耗模型[6]。

      Pathak等提出了基于系統(tǒng)調(diào)用的有限狀態(tài)機能耗模型[12],有限狀態(tài)機的每個狀態(tài)代表一個特定部件的功率使用模式。Aggarwal等提出了基于系統(tǒng)調(diào)用計數(shù)的模型[13],該模型不適用于新的應用軟件,它只能預測能耗的變化,并不能給出具體的能耗情況。

      2 軟件能耗模型的建模準備

      本文采用機器學習算法建立能耗模型,該模型以軟件的性能事件為特征。在建立軟件能耗模型的過程中,首先采集用作訓練樣本的性能和能耗數(shù)據(jù),然后根據(jù)相應的算法進行特征選擇,通過有監(jiān)督的機器學習算法建立與性能相關的能耗模型,再根據(jù)模型預測測試程序的能耗,最后根據(jù)預測的能耗結(jié)果,通過修改程序代碼來達到優(yōu)化程序能效的目的。

      2.1 性能事件

      本文以性能事件作為模型的特征是因為性能事件與程序的行為和特征有關。Perf工具[14]是Linux下的性能分析工具。它支持多種性能事件,主要包含7個硬件事件、8個軟件事件和26個硬件高速緩存事件。軟件事件實際上是與硬件無關的內(nèi)核計數(shù)器。硬件事件和高速緩存事件依賴于CPU架構(gòu)[4]。我們應用Perf工具采集了41個性能事件,這些性能事件是cycles、instructions等。

      2.2 訓練樣本數(shù)據(jù)的收集

      為了建立一個健壯的能耗模型揭示能耗與性能的關系,需要收集大量的訓練數(shù)據(jù)(即軟件性能數(shù)據(jù)與軟件能耗數(shù)據(jù))。為了方便數(shù)據(jù)的采集,本研究團隊專門研制了Marcher服務器,該服務器提供了能耗采集的基本功能。我們在Marcher服務器上運行大量的樣本軟件,采集軟件運行的性能和能耗相關的數(shù)據(jù)。軟件的性能數(shù)據(jù)是利用Perf工具采集的程序運行過程中的數(shù)據(jù)。能耗數(shù)據(jù)是在Marcher服務器讀取的運行程序的功耗數(shù)據(jù)。用作訓練的程序主要是C、C++、Python以及Java程序,這些程序中有100多個程序是本研究團隊自己編寫的程序,有300多個程序來自編程任務網(wǎng)站[15],此外還包括OMP2012[16]、SPEC2006[17]、FFT和Nbody等程序[18]。用做測試的程序是Bhomp[18]和NPB3.0[19]。為了使測試集中于計算等基本的操作,去掉了程序中所有與輸入輸出相關的代碼部分。

      為了獲取實驗所需的訓練樣本數(shù)據(jù),專門設計了腳本程序。在服務器上運行這些腳本程序,自動實時記錄能耗數(shù)據(jù)。從可測功率的高性能計算機(Marcher服務器)上實時讀取程序運行時的功率數(shù)據(jù)并求其平均值,為了避免由于其他因素造成的干擾,每個程序運行3次,取3次功率數(shù)據(jù)的平均值。本文還設計了一些腳本用于記錄從性能工具獲取的性能事件數(shù)據(jù),分別記錄了多個點的性能數(shù)據(jù)。對于性能數(shù)據(jù)沒有采取平均值而是采用了中位數(shù)。采用中位數(shù)是因為它不受極端數(shù)據(jù)的影響,可以避免數(shù)據(jù)相差較大。

      2.3 影響程序能耗的運行特征選擇

      為了減少特征集中的特征數(shù),需要進行特征選擇。選擇出的特征可以更好地解釋模型并提高模型預測的準確性。

      由于不同性能事件數(shù)據(jù)的取值是不同的,有的數(shù)值差距較大,所以將性能數(shù)據(jù)標準化到0~1的范圍內(nèi)。標準化的數(shù)據(jù)使機器學習算法運行的更快更準確[12]。

      本文選用了Perman相關性分析、主成分分析法以及隨機森林算法進行特征選擇。根據(jù)機器學習算法和相關性分析算法選擇了排名前22的特征,它們分別是:cycles、instructions、cache-references、cache-misses、bus-cycles、branches、branch-misses、ref-cycles、stalled-cycles-backend、stalled-cycles-frontend、L1-dcache-loads、L1-dcache-load-misses、dTLB-loads、LLC-loads、LLC-load-misses、LLC-stores、cpu-clock、cs、migrations、L1-dcache-prefetch-misses、branch-load-misses和branch-loads。其中隨機森林算法在選擇這22個特征時,預測的得分為96.06,這些特征主要與系統(tǒng)時鐘、訪問高速緩存以及執(zhí)行指令的順序有關。

      不同類型的軟件可選擇出不同的特征。首先選擇采集自程序Nbody的數(shù)據(jù)來訓練模型,只選擇LLC-stores和migrations特征時,預測的得分可達86.1,模型的系數(shù)是[16.861,71.254],常數(shù)是72.814。當選擇bus-cycles、branch-misses、ref-cycles、LLC-stores、LLC-prefetches和migrations這6個特征時,預測得分高達94.77,模型的系數(shù)是[-5.554,3.005,-5.545,17.113,6.026,72.042],常數(shù)是72.490。Nbody程序是典型的并行程序。對于并行程序,在開始運行時需要把任務分派到各個處理器上,Migrations參數(shù)反映了程序的并行執(zhí)行程度。對于計算密集型的程序來說,由于存在較多的寫回操作,因此LLC-stores反映了最后一級高速緩存寫回的次數(shù)。

      2.4 用于能耗建模的機器學習算法

      本文分別采用了線性回歸、隨機森林、嶺回歸和套索回歸4種不同的機器學習算法建立預測能耗的模型,之所以選擇這些算法是因為它們使用簡單、預測準確。

      (1)

      2.5 預測誤差率

      本文將預測誤差率定義為測量的功耗與預測的功耗差的絕對值除以測量的功耗

      ε=|y-p|/y

      (2)

      式中:ε為軟件預測誤差率;y為測量的功耗;p為預測的功耗。

      2.6 軟件分類方法

      根據(jù)樹型隨機分類算法選擇性能特征cache_miss對測試的程序進行分類。運行Weka軟件的分類功能,根據(jù)實驗數(shù)據(jù)得到cache_miss的閾值。在實驗中,根據(jù)程序性能的cache_miss數(shù)值將軟件分為兩類,一類是cache_miss數(shù)值大于或等于2×107的軟件,這類軟件具有計算密集型和訪存密集型的特征;一類是cache_miss數(shù)值小于2×107的軟件。對于每個內(nèi)存訪問請求,處理器查找主緩存以檢索數(shù)據(jù),若找不到數(shù)據(jù),則將其視為高速緩存缺失。cache_miss是軟件的一個重要性能指標,非常適合對軟件進行分類,然后根據(jù)類別分別建立能耗模型。

      3 軟件能耗模型的建立與實驗分析

      本節(jié)首先介紹了實驗所用服務器的配置和測試程序,然后驗證了實驗的預測準確率,并以預測準確率較高的嶺回歸算法建立了能耗模型,最后根據(jù)模型分析了能耗產(chǎn)生的原因。

      3.1 Marcher服務器系統(tǒng)配置

      在美國國家科學基金會資助的可測功率的高性能計算機(代號Marcher)上進行實驗。每一個服務器包含兩個英特爾Xeon E5-2600處理器,每個處理器有16個內(nèi)核、一個32 GB的DRAM、一個K20 GPU和一個英特爾Xeon Phi協(xié)處理器,以及硬盤和SSD的混合存儲。在服務器上已開發(fā)了一個易于使用的API,它可以從多個來源來讀取功率數(shù)值,包括英特爾RAPL接口[21]、NVIDIA管理庫(NVML)接口[22]、英特爾micaccess API[23]和電力數(shù)據(jù)采集卡(PODAC)。通過這個API,可以很容易地在運行時收集所有主要部件(例如CPU、內(nèi)存、硬盤、GPU和Xeon Phi)的細粒度的功率數(shù)據(jù)。由于測試樣本程序不使用GPU和Xeon Phi,而磁盤的功率在大多數(shù)時候是相同的,所以在實驗中只計算CPU功率數(shù)據(jù)。關于服務器系統(tǒng)更多的細節(jié)可參見文獻[24]。

      3.2 測試程序說明

      在測試實驗中使用的基準測試程序主要包括NPB3.0和Bhomp,共有27個獨立的程序運行形式。其中,程序BT的S類型的可執(zhí)行程序的形式是“BT.S”,Bhomp中的程序是不同的輸入數(shù)據(jù)集下的Bhomp程序的獨立運行結(jié)果。例如Nhome(5)是指Nhome(200 000,10,5),其中200 000、10、5 是程序運行時的輸入?yún)?shù),其他程序類似。這些程序主要是CPU計算密集型和內(nèi)存訪問密集型程序。

      3.3 預測結(jié)果的驗證

      預測的誤差率越小說明預測準確率越高。表1給出了不同機器學習算法下能耗測量數(shù)據(jù)和預測數(shù)據(jù)之間的差異。由實驗結(jié)果得到,這些程序能耗預測的平均預測誤差率為6.80%。嶺回歸算法的平均預測誤差率最小為5.70%。隨機森林算法、套索回歸和線性回歸算法的平均預測誤差率分別為6.5%、8.18%和6.81%??梢钥闯?所得到的預測數(shù)據(jù)基本上是準確的。由于嶺回歸算法的誤差最小,所以在建立能耗模型時選取嶺回歸算法。

      3.4 軟件能耗模型

      本文首先建立了軟件平均能耗模型,然后在此基礎上建立了實時能耗模型,并對二者的預測誤差率進行了比較。

      3.4.1 平均能耗模型 通過對4種機器學習算法的實驗比較,選擇嶺回歸算法作為模型所用的算法,建立了預測平均功耗的模型p=cx+b,其中c為模型的系數(shù)向量,c=[c1,c2,…,cn];b為常數(shù)。程序能耗的公式是E=pt,p為CPU的功耗,t為程序的運行時間。代入p得到能耗公式

      E=(cx+b)t

      (3)

      當性能參數(shù)cache_miss值大于等于2×107時,能耗模型E1=(c1x+b1)t。當cache_miss值小于2×107時,能耗模型E2=(c2x+b2)t。根據(jù)嶺回歸機器學習算法可以得到模型的系數(shù),其中

      b1=109.74

      b2=63.2

      c1=[-3.97,-2.64,-8.13,-3.41,3.76,-6.7,-0.97,3.77,-11.14,2.46,-8.7,0.74,-8.7,-9.64,3.12,-11.66,3.85,9.64,3.76,3.54,-0.94,-6.31]

      表1 不同機器學習算法軟件能耗的預測誤差率

      c2=[2.45,-1.93,-1.64,1.51,2.44,-3.73,-0.78,2.44,0.1,8.2,1.3,-3.04,1.3,-2.81,1.55,1.69,2.45,2.34,21.51,-0.4,-0.8,-3.71]

      3.4.2 實時能耗模型 建立上述能耗模型時,選取性能數(shù)據(jù)中位數(shù)作為訓練數(shù)據(jù),雖然中位數(shù)可以規(guī)避數(shù)值差異較大帶來的問題,但是它不能實時地反映系統(tǒng)的實際運行功率,所以需要建立實時的能耗模型。根據(jù)實時的性能信息實時預測出能耗的值。當cache_miss的值大于等于2×107時程序的j時刻(在0.02 s的一段時間內(nèi))的實時功耗模型為p1=c1x+b1;當cache_miss的值小于2×107時程序的功耗模型為p2=c2x+b2,對應j時刻的實時能耗模型分別為E1j和E2j,即

      E1j=(c1xj+b1)t/N,E2j=(c2xj+b2)t/N

      (4)

      Perf工具的采樣頻率為N,程序運行的時間為T,那么在時間T內(nèi),Perf工具共采樣了TN次。兩類程序的平均能耗分別為E1和E2,即

      (5)

      表2給出了以Bhomp基準測試程序為測試程序的預測誤差率結(jié)果,從表2可以看出,實時能耗模型預測誤差率平均值僅為0.79%,比平均能耗模型預測誤差率降低了17%。

      表2 不同應用程序的平均能耗模型和實時能耗模型預測誤差率比較

      3.5 程序能耗的原因分析

      從3.4.1節(jié)的能耗模型可以看出,和功耗相關的主要性能特征可以分為以下幾類。

      (1)與CPU的執(zhí)行周期有關的參數(shù)為cycles、bus_cycles、ref-cycles以及cpu-clock,這些都是和時間相關的參數(shù)。這些參數(shù)的值越大,程序的執(zhí)行時間越長,CPU的能耗也越高。

      (2)與分支預測相關的參數(shù)為branches、branch-misses、branch-loads和branch-load-misses。如果分支預測正確,指令的執(zhí)行沿最短時間的路線前進,程序的執(zhí)行時間較短。但是如果這些數(shù)值變大,說明程序在分支預測上花費了更多的時間,會延長整個程序的執(zhí)行時間。

      (3)與高速緩存訪問相關的參數(shù)為cache-references、cache-misses、L1-dcache-loads、L1-dcache-load-misses、dTLB-loads、LLC-loads、LLC-load-misses、LLC-stores、L1-dcache-prefetch-misses。其中cache-references是高速緩存的訪問次數(shù),cache-misses是高速緩存訪問不命中的次數(shù)。一般假定所有的存儲器停頓都是由高速緩存缺失引起的,把命中時鐘周期數(shù)包含在CPU執(zhí)行時鐘周期數(shù)中。最后一級高速緩存的讀寫、TLB的讀取、L1數(shù)據(jù)高速緩存的讀取、讀取失敗的次數(shù)以及預測失敗的次數(shù)都對高速緩存的缺失率起重要作用。CPU頻率越高,CPU滿載時的功率也越高,每次缺失會需要較多的時鐘周期數(shù),從而導致存儲器停頓時間延長、性能降低、能耗增加。

      (4)與程序的切換有關的參數(shù)為cs、migrations。cs是上下文切換的次數(shù),migrations是線程從一個CPU的核轉(zhuǎn)移到另一個核上執(zhí)行的次數(shù)。在計算量較大的情況下,CPU會把一些計算任務轉(zhuǎn)移到空閑的核上去執(zhí)行。

      (5)與程序執(zhí)行指令條數(shù)相關的參數(shù)為instructions。指令數(shù)是獨立于硬件的,一般用來評價性能,在時鐘周期不變的情況下,執(zhí)行的指令越多,程序的執(zhí)行時間越長。

      通過性能參數(shù)對CPU的功耗建模,可以揭示功耗產(chǎn)生的原因。當通過調(diào)節(jié)CPU的功率來降低能耗時,從模型上可以看出調(diào)節(jié)功耗影響了程序的性能,進而延長了程序的執(zhí)行時間,從而增加了程序能耗,所以不能為了降低能耗而盲目地降低或者增加CPU的功率。

      4 基于能耗預測的能效優(yōu)化

      能效優(yōu)化可以通過對采用不同方法編寫的相同功能的程序?qū)Ρ葘嶒瀬碚f明。實驗中實際測量與預測的CPU功耗基本一致。實驗中所有程序都運行了3次,實驗數(shù)據(jù)取平均值。在第1組遞歸和非遞歸程序?qū)Ρ葘嶒炛?遞歸程序運行了6.798 s,CPU的功耗實際測量值為378.994 W,預測值為382.549 W;非遞歸程序運行了0.201 s,CPU的功耗實際測量值為8.085 W,預測值為7.444 W,可以看出遞歸程序的能耗較大,原因在于遞歸程序因為要保護現(xiàn)場占用了太多的資源,因此在編寫程序時不建議采用遞歸方法。本實驗的第2組數(shù)據(jù)是重載和未采用重載操作的程序。采用重載操作的程序運行了58.419 s,CPU的功耗測量值為77.826 W,預測值為78.257 W;而未采用重載操作的程序運行了28.817 s,CPU的功耗測量值為80.522 W,預測值為79.280 W,可以看出采用重載操作的程序運行時間較長,因為帶有多個重載操作符的表達式可能會導致臨時對象創(chuàng)建中間結(jié)果。通過兩組程序的能耗對比,為程序員編寫高能效的程序提供了依據(jù)。

      5 結(jié) 論

      本文提出了一種利用機器學習算法預測軟件能耗的方法,并建立了以軟件性能事件為特征的能耗模型。在實驗中使用了4種機器學習算法,通過預測誤差對比實驗選取了最適合的嶺回歸機器學習算法。實驗結(jié)果表明,以測量能耗為基準的能耗預測誤差率低于9%,并且根據(jù)模型更容易分析能耗產(chǎn)生的原因?;谀P偷哪芎念A測方法避免了采用程序代碼插樁方式測量能耗會影響程序性能的缺點。本文還提出了一種基于性能特征的軟件分類方法,即根據(jù)cache_miss的閾值將軟件分類并分別建模。本模型對計算密集型和內(nèi)存訪問密集型程序的能耗有更精確的預測。下一步我們將基于神經(jīng)網(wǎng)絡和深度學習等算法,結(jié)合更大規(guī)模的程序數(shù)據(jù)訓練樣本,建立更為準確的能耗模型。

      猜你喜歡
      誤差率功耗能耗
      120t轉(zhuǎn)爐降低工序能耗生產(chǎn)實踐
      昆鋼科技(2022年2期)2022-07-08 06:36:14
      能耗雙控下,漲價潮再度來襲!
      探討如何設計零能耗住宅
      生化檢驗全程中質(zhì)量控制管理方式及應用意義
      健康大視野(2020年1期)2020-03-02 11:33:53
      降低評吸人員單料煙感官評分誤差率探討
      日本先進的“零能耗住宅”
      華人時刊(2018年15期)2018-11-10 03:25:26
      無線傳感器網(wǎng)絡定位算法在環(huán)境監(jiān)測中的應用研究
      揭開GPU功耗的面紗
      個人電腦(2016年12期)2017-02-13 15:24:40
      數(shù)字電路功耗的分析及優(yōu)化
      電子制作(2016年19期)2016-08-24 07:49:54
      電工儀表測量中容易忽略的幾個問題
      利津县| 电白县| 汉沽区| 沅江市| 千阳县| 凤城市| 延川县| 棋牌| 昌黎县| 务川| 武宁县| 府谷县| 万载县| 西畴县| 天水市| 霍林郭勒市| 盐城市| 麻城市| 武鸣县| 和平区| 丰台区| 西乡县| 五家渠市| 都安| 伽师县| 东乡| 抚松县| 栖霞市| 桐城市| 南陵县| 临沂市| 大丰市| 平果县| 石屏县| 杭锦旗| 罗城| 琼海市| 西峡县| 青河县| 延安市| 灌阳县|