天天看點

代碼初探->能耗

    将作為一名程式員,進一步确定的目标是成為一個架構師,那麼能耗必須考慮。    

    寫代碼與能耗的關系不言自明,現在假設将網絡視訊監控的監控識别算法放在用戶端,既不利于算法的保護,也不利于算法的優化,更不利于降低能耗。

    談到能耗,每一台伺服器都是吃電器,如果我不是老闆,就不考慮耗電的情況,但是如果作為這個公司的一員,也有義務從能耗的角度去寫代碼。 

    一個65W的CPU跑一年,需耗電568度電,一度電假定為1.2元,那麼一個CPU就需要耗電681.6元,這個價錢可以再買個CPU了。

     對于一個1500W的GPU跑一年,耗電13104W,一度電假定為1.2元,那麼一個GPU就需要耗電15724.8元,這個價可以上京東買個目前最高端的GPU了,當然還沒算上冷卻耗電,電源效率這些問題。

降低能耗的方法:

一:優化算法

     下面源自一段代碼測試的資料:                                  

代碼初探->能耗

    我們可以看到,能耗與代碼執行的時間肯定有直接關系。跑50秒一般比跑3秒要耗能,是以在寫代碼時,算法設計的好可以節能。

    由于最近學習一篇論文,接觸了intel的SSE指令集,是以就出來了學習這個的熱情,其實對于程式設計,個人的看法是好的算法是關鍵,但是一個好的程式設計功底必不可少。

    其實算法優化有很多工作可以做:多線程處理,分布式處理,資料優化等等。

二:減少資料遷移

    在處理圖像時,最頭疼的就是資料太多,一個三維圖像資料MATLAB讀取的話會顯示空間不足,一個二維的FFT變換去處理一張桌面圖檔,可能就會卡死你的程式,在這些處理的過程中,其實就是把硬碟上的圖檔資料讀到記憶體上,然後在讀到緩存上處理,算法的不同,資料遷移的方式就不同。

     假設一張圖檔從硬碟讀到記憶體上耗能xW ,記憶體寫到硬碟上耗能yW,那麼就是一張圖檔的讀寫就是x+yW,寫一幀視訊到硬碟上耗能zW ,如果遇上一個菜鳥程式員,寫個代碼處理視訊時将圖檔儲存到硬碟裡,而不是儲存視訊的話,那麼儲存10萬幀視訊的話,多耗能100000(x+y-z)W。

     減少資料遷移方法:高效使用寄存器,高效使用共享記憶體,減少不必要的資料遷移操作。

三:硬體優化

     在配置機器時,處理器性能至關重要,性能越好意味着能耗可能越少,耗電可能越少,一個處理器跑一年的電費至少相當于購買該處理器的價格。

     制冷,溫度過高,機器性能會下降,當然溫度過低,性能也會下降,維持一個适應的溫度,對于機器的運作也是很重要。

小結:

     代碼越少比不意味着能耗越少,代碼執行效率高也并不意味着能耗低,重要的是我們需要了解計算機構造,程式設計語言的原理,熟練搭配,争取做一個低功耗的程式員,節能的程式員,低功耗的程式等于執行程式耗資少,也等于減少碳排放。

繼續閱讀