李君科,郭 兵,沈 艷,李德光,黃彥輝,戚正偉
?
GPU內(nèi)置傳感器的功耗數(shù)據(jù)矯正方法研究
李君科1,郭 兵1,沈 艷2,李德光1,黃彥輝1,戚正偉3
(1. 四川大學計算機學院 成都 610065; 2. 成都信息工程大學控制工程學院 成都 610225;3. 上海交通大學軟件學院 上海 閔行區(qū) 200030)
功耗數(shù)據(jù)采集是綠色計算的前提,也是軟件能耗測量的基礎工作。在功耗數(shù)據(jù)采集中,通常內(nèi)置功率傳感器采集軟件能耗面臨功率遲滯、程序能耗受啟動時間影響等問題,產(chǎn)生的原因在于內(nèi)置傳感器的硬件構成及其使用的功耗算法。該文針對內(nèi)置傳感器的功耗算法問題,提出了一種基于逼近函數(shù)的功率數(shù)據(jù)矯正方法。該方法根據(jù)程序運行時間長短,分別采用數(shù)據(jù)擬合方法和基于誤差方向的逼近函數(shù)進行矯正。最后,在代表性的K20系列GPU實驗平臺上進行驗證,實驗結果表明該方法能較好地解決傳感器采集功耗數(shù)據(jù)存在的問題,且使用該方法和經(jīng)驗參數(shù)法獲得的能耗數(shù)據(jù)相比誤差小于1%,具有較高的精度。
內(nèi)置功率傳感器; 數(shù)據(jù)矯正; 綠色計算; 軟件能耗
在提倡節(jié)能減排的當今世界,用電設備尤其是科學計算設備的能耗問題日益突出,越來越受到軟硬件開發(fā)商、科研機構和政府的重視[1-2]。
在工業(yè)界有一句名言“如果你不能度量它,那么你就不能改進它”,這句話蘊含了度量是后續(xù)工作的基礎[2]。能耗度量方式主要有間接和直接兩種方式。間接方式是利用能耗模型、利用硬件性能計數(shù)器或硬件事件和能耗之間的關聯(lián)模型進行估測軟件運行能耗。文獻[3-4]基于部件訪問率提出了一種功率模型,用來估測部件的功率和整個程序的功率消耗;文獻[5-6]通過估算指令能耗提出了嵌入式軟件能耗計算方法和操作系統(tǒng)內(nèi)核能耗估算模型;文獻[7]基于神經(jīng)網(wǎng)絡的訓練結果提出了GPU的功耗模型。間接方式方便了用戶獲得功率或能耗數(shù)據(jù),但這些數(shù)據(jù)通常誤差較大且在硬件環(huán)境改變的情況下模型的參數(shù)必須重新進行訓練。軟件能耗測量最直接的方式是使用功率測量儀器,但它在能耗測量上存在和設備連接困難的缺點。目前,利用內(nèi)置傳感器進行功率采集測量已經(jīng)成為一種趨勢,如NVIDIA的Tesla系列顯卡[1,8]。內(nèi)置傳感器測量方式帶來了很大的方便,同時也引起了諸如功率遲滯、程序能耗受其啟動時間影響等問題[9-10]。文獻[9]通過引入經(jīng)驗參數(shù)進行解決,但它的計算需要顯卡內(nèi)部電路器件組成,要求較高。為此,本文提出了一種無需了解顯卡內(nèi)部電路器件組成的基于逼近函數(shù)的數(shù)據(jù)采集矯正方法。通過實驗驗證,該方法能夠很好地解決此類問題。
使用內(nèi)置功率傳感器采集功耗數(shù)據(jù)時會產(chǎn)生功率遲滯、程序能耗受其啟動時間影響等問題[9-10]。這些問題影響了程序能耗測量的準確性以及破環(huán)了軟件功耗不受啟動時間影響的特性。
1) 傳感器采集功率遲滯問題。功率遲滯問題表現(xiàn)為內(nèi)置功率傳感器在程序運行階段和結束階段采集的功率數(shù)據(jù)未能實時地反映設備實際功率使用情況,采集的功率往往遲滯于GPU內(nèi)核程序驅動硬件活動狀況。它們所表現(xiàn)出的共同特征是傳感器采集的數(shù)據(jù)逐漸接近真實功率。遲滯問題會造成在程序運行時間內(nèi)對功率數(shù)據(jù)的積分所得到軟件能耗數(shù)據(jù)不準確。由于無法明確遲滯時間,且遲滯時間難以在采集到的功率曲線中體現(xiàn)出來,因此通過延長采樣時間的方法來獲得程序真實能耗的方法是不可行的。用量化的方式來描述這種現(xiàn)象即為:
2) 程序能耗受啟動時間影響。上述遲滯現(xiàn)象所造成的另一個問題是兩個相同程序在相差一段時間內(nèi)運行,后者所消耗的能耗顯著增加,即程序啟動時間間隔影響其后程序的能耗。從軟件能耗產(chǎn)生本質原因來看,兩個相同的程序在相同的硬件上運行的能耗是相同的或由于程序運行的局部性原理而造成的后者能耗的降低;并且軟件能耗與軟件的啟動時間無關,但由于遲滯現(xiàn)象的出現(xiàn)使得相同程序所消耗的能耗和啟動的時間相關。這種現(xiàn)象明顯與軟件能耗產(chǎn)生的本質[2,4]不符。用量化的方式來描述這種現(xiàn)象即為:
式(1)和式(2)中的表示軟件能耗;三元組下標分別表示程序開始時間、程序結束時間、運行的軟件;D為兩個程序啟動時間間隔;上標Sensor和Actual分別表示使用功率傳感器測得的能耗和設備實際消耗能耗情況。
由于內(nèi)置功率傳感器內(nèi)部的硬件組成細節(jié)、硬件驅動實現(xiàn)以及其使用的功率計算算法廠商未被提供,所以本文通過采集傳感器的大量數(shù)據(jù),以及觀測相關現(xiàn)象進而分析上述問題產(chǎn)生的原因主要在于:
1) 觀測傳感器所采集的大量數(shù)據(jù)發(fā)現(xiàn)它們具有連續(xù)性,推測傳感器可能使用了與溫度相關的算法來計算功率。
2) 從傳感器在程序運行階段和結束階段采集的數(shù)據(jù)所表現(xiàn)出的共有特征,推測功率傳感器可能使用了一類電容或電感效應的電路。
上述原因使得傳感器采集到的數(shù)據(jù)在程序運行階段和結束階段不能真實反映軟件在運行時設備的功率使用情況。軟件能耗和硬件能耗之間的關系[2,5]、問題產(chǎn)生的原因以及傳感器采集的數(shù)據(jù)逐漸接近真實功率的現(xiàn)象[9-10],啟發(fā)本文根據(jù)軟件運行時長進行數(shù)據(jù)矯正。內(nèi)置傳感器采集運行時間短的程序所得到的功耗數(shù)據(jù)是趨向性數(shù)據(jù),對其進行擬合能夠對趨向性數(shù)據(jù)進行矯正。對于運行時間長的程序,由于傳感器采集的數(shù)據(jù)是逐漸逼近的真實數(shù)據(jù),本文采用基于誤差方向的逼近函數(shù)進行矯正。
對傳感器采集的大量數(shù)據(jù)進行觀測發(fā)現(xiàn)如果程序運行時間或并行程序中的分階段運行的線程時間在小于t內(nèi),那么在這個時間段內(nèi)傳感器測得的數(shù)據(jù)是趨向性數(shù)據(jù),這段程序所消耗的真實功率可以利用位于t后的功率數(shù)據(jù)來表示。t是內(nèi)置功率傳感器數(shù)據(jù)趨于真實數(shù)據(jù)時的時間,它的取值為內(nèi)置功率傳感器從產(chǎn)生功耗數(shù)據(jù)開始得出的功耗數(shù)據(jù)和文獻[7]中直接功率測量方法得到的數(shù)據(jù)相差3%時所經(jīng)歷的時間。不同型號的GPU有不同的t值。為了減少誤差可以通過采集一定數(shù)量軟件的功耗數(shù)據(jù)獲得。由于程序運行時間在t內(nèi),測得的數(shù)據(jù)是趨向性數(shù)據(jù)。利用函數(shù)擬合方法能夠使采集到的趨向性數(shù)據(jù)逼近軟件運行時的實際功率數(shù)據(jù),因此采用函數(shù)擬合方法對軟件運行時的功率進行逼近。首先利用函數(shù)擬合方法將采集到的數(shù)據(jù)擬合成函數(shù)
下的真實功率數(shù)據(jù),為了提高準確度,本文取時刻t-△t、時刻t以及時刻t+△t下功率數(shù)據(jù)的平均作為逼近表示時刻t下的真實功率數(shù)據(jù)。因此運行時間在t內(nèi)程序的功率數(shù)據(jù)使用如式(3)進行矯正:
式中
real()、meas()、D和Avg()函數(shù)與式(3)表示的含義一樣;表示在當前誤差方向的情況下傳感器所采集到的功率數(shù)據(jù),它的取值為未矯正過的數(shù)據(jù);在式(3)與式(4)中t的取值為程序開始時間(start)和結束時間(end)之間的值。
在程序運行結束后,內(nèi)置傳感器會產(chǎn)生尾滯能耗現(xiàn)象[9-11]。它由兩部分組成,一部分是傳感器采集每個程序都有的常數(shù)能耗部分,常數(shù)部分是測量所有程序都表現(xiàn)出來的不隨所測程序改變而改變的恒定能耗部分;另一部分能耗是根據(jù)軟件運行時間不同的可變部分,它是程序運行結束后設備保持活動空閑時的功率。因此對于尾滯能耗的可變部分不能作為軟件運行時的能耗。為了使尾滯能耗的可變部分能更好地表現(xiàn)出程序結束時設備的功率情況,根據(jù)能耗產(chǎn)生的本質[2,5],只需將尾滯能耗的可變部分矯正為空閑狀態(tài)時的功率即可;常數(shù)能耗部分為程序無關的且是恒定的,所以不需要矯正。
綜上,經(jīng)過上述方法得到程序運行時的實際功率數(shù)據(jù),利用式(5)將上述矯正后的數(shù)據(jù)在程序運行的時間段內(nèi)進行積分就可以得到程序的真實能耗數(shù)據(jù):
在帶有內(nèi)置傳感器的平臺中,K20系列GPU運算速度快、應用范圍廣且所帶的功率傳感器成為測量功耗的一種典型配置。為此本文選取了具有代表性的K20系列(K20c、K20m和K20X)GPU為實驗平臺,驗證所提出方法的有效性。K20c和K20m有個streaming multiprocessors(SMX,2496個processing elements)和5 GB顯存。K20x擁有6 GB顯存和14個streaming multiprocessors(SMX,2688個processing elements)。它們的區(qū)別在于散熱方式,K20c使用主動散熱方式,K20m使用被動散熱方式。實驗平臺所使用的CUDA開發(fā)環(huán)境是VS2010,編譯環(huán)境是NVCC5.5。本文使用程序通過NVML接口查詢GPU的功率數(shù)據(jù),并且查詢出的數(shù)據(jù)都帶有時間標記。
實驗程序使用兩種不同算法實現(xiàn)模擬重力感應引起的多個恒星運動程序。第一種算法實現(xiàn)的程序執(zhí)行精確的雙向力計算,這種算法在規(guī)模為復雜度為(2),簡稱為NBody。第二種算法使用Barnes-Hut算法執(zhí)行近似計算作用力的實現(xiàn)程序,算法的思想是把個恒星周圍的體積層次劃分成有次序小正方體直到最里面的每個小正方體只有一個星體。結果被記錄在一個非平衡八叉樹的層次結構中。這種層次結構使算法的復雜性降為(log)[12],將這種方法簡稱為BHut。
圖1為使用NBody方法在=700 000時的功率曲線和使用本文提出的方法得到的功率數(shù)據(jù)。圖中曲線部分表示傳感器采樣得到的功率數(shù)據(jù),虛線部分表示使用本文矯正方法中的式(4)得到GPU功率曲線。圖中1、2、3分別表示程序開始時間、程序結束時間、常數(shù)能耗消耗開始時間。
通過觀察圖中矯正后的功率數(shù)據(jù)可以看出,矯正后的數(shù)據(jù)能夠有效地逼近真實功耗數(shù)據(jù),并且當程序運行結束時立即到達尾滯能耗空閑狀態(tài)功耗數(shù)值,矯正后的數(shù)據(jù)滿足軟件能耗產(chǎn)生的實質并能夠反映GPU運行時的真實功率。當程序在1和2之間執(zhí)行,矯正后的數(shù)據(jù)能夠和采樣得到的穩(wěn)定數(shù)據(jù)重合,間接驗證了本文方法的正確性。對于K20c系列GPU,活動空閑功率為54.2 W左右,因此在使用本文方法后將程序運行結束時的能耗到常數(shù)能耗之間的功率數(shù)據(jù)置為54.2 W,即為軟件結束后的真實功率。軟件實際能耗利用式(5)在1和2時間段積分即可得到。
圖1 N=700 000采集功率曲線圖和矯正后的功率曲線圖
圖2 啟動間隔時間為1.1 s,N=350 000的兩個相同程序的功率曲線和矯正后的功率曲線圖
由圖1可以看出使用本文提出的方法可以消除由傳感器自身因素所帶來的遲滯問題;而它所帶來的一個問題是程序能耗受其啟動時間影響。圖2為使用NBody方法在=350 000,啟動間隔時間為1.1 s的兩個相同程序的功率曲線和使用式(3)矯正后的功率數(shù)據(jù)。圖中1、3分別表示第一個和第二個程序開始時間,2、4分別為第一個和第二個程序結束時間,5是常數(shù)能耗開始時間。從圖中可以看到:1) 未矯正前兩個相同的程序能耗明顯不同;2) 使用本文方法矯正后的曲線在兩個程序運行期間是相同的,且都在程序運行結束時處于活動空閑狀態(tài)。相同的實驗在=350 000,間隔0.4 s的情況下得到的矯正曲線和間隔1.1 s得到的矯正曲線情況相同。由圖中矯正后的結果可以看出使用本文方法能夠很好地解決程序能耗受啟動時間影響的問題且得到的功率數(shù)據(jù)與何時運行程序無關,這個特性使得功率傳感器在測量程序能耗時無需等待傳感器數(shù)據(jù)達到空閑功率后啟動下一個程序的功率測量。
圖3 N=700 000在K20m、K20x上的采集功率曲線圖 和矯正后的功率曲線圖
為了確保所提出的方法具有通用性,本文使用K20m、K20x和不同驅動版本下的實驗情況。圖3a、圖3b分別為=700 000時,K20m、K20x傳感器采集功率曲線圖和使用式(4)矯正后的功率曲線圖。由圖中的曲線可以看出K20m和K20c對于同一程序而言具有幾乎相同的功率曲線,所不同的是K20m的功率比K20c的功率要高出10 W左右。圖3b中的曲線顯示了K20x中的功率傳感器采集的數(shù)據(jù)和K20c、K20m采集的數(shù)據(jù)曲線明顯不同,K20x中的傳感器盡最大努力得到GPU的真實功率,這種現(xiàn)象也從側面驗證了本文所提出的方法的正確性。在不同驅動版本下的功率數(shù)據(jù)曲線與矯正后的曲線和圖3表現(xiàn)現(xiàn)象類似,在此不再贅述。由圖3矯正后的數(shù)據(jù)可以看出使用本文提出的方法可以較好地解決由傳感器測量功耗時所產(chǎn)生的問題。由于遲滯問題在K20m和K20x上被解決,因此程序能耗受啟動時間影響的問題也就不存在了。通過實驗結果也驗證了利用本文所提出的方法解決式(2)所描述的問題,在此由于篇幅有限,就不再展示在K20m和K20x平臺上程序能耗受其啟動時間影響的實驗結果。
圖4是使用BHut方法在規(guī)模=22 000 000所得到的功率曲線和矯正后的功率曲線圖。由圖中可以看出BHut方法最高功率(128.2 W)低于NBody方法最高功率(158.4 W),并且BHut方法在程序結束前功率出現(xiàn)下降現(xiàn)象,這點不同于NBody方法。原因在于使用BHut方法使得GPU硬件利用情況沒有NBody方法高,并且在程序結束前硬件出現(xiàn)負載非均衡的情況,使得GPU中的一些SM不再參與作用力計算。
通過本文提出的方法得到的功率曲線和NBody曲線有別,主要表現(xiàn)在1和2、2和3、4和5階段。1和2階段與2和3階段主要是BHut方法建立的數(shù)據(jù)結構和對數(shù)據(jù)進行處理等工作,處理這些工作的內(nèi)核程序非均衡地利用GPU中SM。這些工作使得功率數(shù)據(jù)不同于3和4階段的作用力計算。由于1和2階段與2和3階段運行時間小于t,因此使用式(3)進行矯正。在3和4階段內(nèi)核函數(shù)運行時間大于t,因此使用式(4)進行矯正。在4和5階段一些SM不再參與計算,因此GPU的功率出現(xiàn)下降,利用逼近函數(shù)較好地得到了真實功率數(shù)據(jù)。通過分析程序和觀察圖中的曲線,可以看出本文提出的方法能夠很好地跟蹤GPU硬件功率的變化情況而不僅僅給出一個恒定的值。
圖4 N=22 000 000采集功率曲線圖和矯正后的功率曲線圖
文獻[9]也提出了一種解決這個問題的方法,表1展示了在利用傳感器計算程序能耗時兩種方法在上述實驗環(huán)境下的結果對比。
表1 結果對比
可以看出:1) 本文的方法與文獻[9]的方法得出的結果具有很大的相似性,最大誤差不超過1%,表明本文方法能夠很好地解決此類問題。2) 對比文獻[9]中使用的經(jīng)驗參數(shù)方法,本文方法使用逼近函數(shù)的方法也能得到較好的效果,說明了本文方法具有很好的通用性和可靠性。
本文提出了一種矯正內(nèi)置功率傳感器數(shù)據(jù)的方法。使用該方法可以較好地解決傳感器測量能耗所存在的功率遲滯、程序能耗受其啟動時間影響等問題,同時具有較好的準確性與通用性。本文選取典型的K20系列GPU為實驗平臺進行驗證,通過實驗表明該方法適用于解決傳感器測量能耗存在的問題。該方法較準確地獲得軟件在設備中運行的能耗,為以后的程序能耗優(yōu)化奠定了基礎。下一步研究內(nèi)容包括程序能效比優(yōu)化和能耗評估,以進一步提高能量的利用率,為綠色計算的深入應用打下堅實的基礎。
[1] Top 500 Supercomputer Site. The green lists[EB/OL]. [2014-11]. http://www.green500.org/greenlists.
[2] 郭兵, 沈艷, 邵子立. 綠色計算的重定義與若干探討[J]. 計算機學報, 2009, 32(12): 2311-2319.
GUO Bing, SHEN Yan, SHAO Zi-li. The redefinition and some discussion of green computing[J]. Chinese Journal of Computers, 2009, 32(12): 2311-2319.
[3] HONG S, KIM H. An integrated GPU power and performance model[C]//ACM SIGARCH Computer Architecture News. [S.l.]: ACM, 2010, 38(3): 280-289.
[4] ISCI C, MARTONOSI M. Runtime power monitoring in high-end processors: Methodology and empirical data[C]//Proceedings of the 36th annual IEEE/ACM International Symposium on Microarchitecture. [S.l.]: IEEE Computer Society, 2003: 93.
[5] 劉嘯濱, 郭兵, 沈艷, 等. 基于ARM處理器的嵌入式軟件能耗統(tǒng)計模型[J]. 電子科技大學學報, 2012, 41(5): 770-774.
LIU Xiao-bin, GUO Bing, SHEN Yan, et al. ARM-based embedded software statistical energy model[J]. Journal of University of Electronic Science And Technology of China. 2012, 41(5): 770-774.
[6] 趙霞, 郭耀, 雷志勇, 等. 基于模擬器的嵌入式操作系統(tǒng)能耗估算與分析[J]. 電子學報, 2008, 36(2): 209-215.
ZHAO Xia, GUO Yao, LEI Zhi-yong, et al. Estimation and analysis of embedded operating system energy consumption [J]. ACTA Electronica Sinica, 2008, 36(2): 209-215.
[7] SONG S, SU C, ROUNTREE B, et al. A simplified and accurate model of power-performance efficiency on emergent gpu architectures[C]// 2013 IEEE 27th International Symposium on Parallel & Distributed Processing (IPDPS). [S.l.]: IEEE, 2013: 673-686.
[8] NVIDIA Corporation. “NVIDIA’s next generation CUDA compute architecture: Kelper GK110/210” White paper V1.1[EB/OL]. (2012-03-17). http://www.nvidia.com.
[9] BURTSCHER M, ZECENA I, ZONG Z. Measuring GPU power with the K20 built-in sensor[C]//Proceedings of Workshop on General Purpose Processing Using GPUs. [S.l.]: ACM, 2014: 28.
[10]PATHAK A, HU Y C, ZHANG M, et al. Fine-grained power modeling for smartphones using system call tracing[C]// Proceedings of the sixth conference on Computer systems. [S.l.]: ACM, 2011: 153-168.
[11]PATHAK A, HU Y C, ZHANG M. Where is the energy spent inside my app?: Fine grained energy accounting on smartphones with eprof[C]//Proceedings of the 7th ACM European Conference on Computer Systems. [S.l.]: ACM, 2012: 29-42.
[12]BARNES J, HUT P. A Hierarchical(log) force- calculation algorithm[J]. Nature, 1986, 324(4): 446-449.
編 輯 蔣 曉
Research on Power Data Correction Approach of GPU Build-in Sensor
LI Jun-ke1, GUO Bing1, SHEN Yan2, LI De-guang1, HUANG Yan-hui1, and QI Zheng-wei3
(1. College of Computer Science, SiChuan University Chengdu 610065; 2. School of Control Engineering, Chengdu University of Information Technology Chengdu 610225;3.School of Software, Shanghai Jiaotong University Minhang Shanghai 200030)
Power data acquisition is the premise of the green computing and the basic work of the software energy consumption measurement. In power data acquisition, using the built-in power sensor to get the software energy usually faces the problem of power hysteresis and software energy affected by its start time because of the built-in sensor constitution as well as its power computation algorithm. Aiming at the problem of the built-in power sensor algorithm, this paper proposes a power data correction approach based on approximation function. According to the length of time the program runs, this approach uses the data fitting method and the approximation function method based on the error direction to correct power sensor data respectively. Finally, this approach is verified on the typical K20 GPU series experimental platform. Experimental results show that this approach can better solve the problems with high accuracy and the data obtained by our approach compared to that of the empirical parameter approach is less than 1% error.
built-in power sensor; data correction; green computing; software energy
TP338.6
A
10.3969/j.issn.1001-0548.2016.03.021
2014 - 10 - 21;
2015 - 05 - 15