2010-05-25 91 views
13

是否有任何技術來優化代碼以確保較低的功耗。體系結構是ARM.language是C我們可以優化代碼以降低功耗嗎?

+21

使用'//'優化運算符。 :) – SLaks 2010-05-25 15:15:54

+0

程序未使用的週期仍將用作空閒進程。我想如果你的CPU被調整爲在需要更少的週期時降低功耗,那麼你只需要讓你的代碼更快。否則,你唯一的選擇是'#include「gogreen.h」'。 – corsiKa 2010-05-25 15:18:23

+4

@Slaks優化只適用於C++(並且比ANSI C變體更新),因此最好使用/ **/operator :- – fortran 2010-05-25 15:22:56

回答

6

從臂技術參考站點:

改善能量 效率的ARM11 MPCore的 處理器的功能包括:

  • 準確分支和子例程返回預測,減少了數 不正確的取指令和 解碼操作
  • 使用物理地址緩存,這減少了緩存 沖洗和筆芯的數量,在 節能系統
  • 使用MicroTLBs的降低了翻譯和 保護查找每個週期所消耗的功率
  • 緩存使用順序訪問信息的人數減少的 訪問標籤RAM和不需要的數據RAM。

在ARM11 MPCore處理器 廣泛使用也由門控 時鐘和柵極以禁用輸入 未使用的功能塊。只有主動用於執行計算的 邏輯消耗任何動態功率。

基於這些信息,我想說處理器爲您節省了大量功耗。任何能量浪費都會來自編寫得不好的代碼,它會執行比必要的更多的處理,而這是您不想要的。如果您想節省電力,應用程序的整體設計將會產生更多效果。網絡訪問,屏幕渲染和其他耗電量較高的操作將更加關注功耗。

5

優化代碼以使用更少的功耗實際上只是優化代碼。無論您的動機是金錢,社交,政治或其他類似的東西,CPU週期越少=使用的能源越少。我想說的是,我認爲你可以用「執行時間」代替「耗電量」,因爲它們本質上會直接成正比 - 因此,如果不用「嚇跑」與電力有關的問題。但是,我可能會糾正:)

+0

小心證明-1? – Jeriko 2010-05-25 15:33:21

+0

我沒有-1你,但是如果CPU運行速度較慢,我的筆記本電腦使用更少的電量,所以執行時間與功耗成反比。 – 2010-05-25 15:42:44

+0

您不能聲稱執行時間與功耗成反比。這意味着我可以寫一個長達10年的文字,並期望它消耗一個焦耳的能量。 我會承認以前的含糊不清 - 「如何使用功耗與CPU操作數量成正比,請記住,每次操作所需的功率與所執行操作的連續速度相反(還有百萬其他因素仍未提及,因爲我試圖寫出一般的經驗法則而不是在法庭上站立起來的同義反復論)「? :P – Jeriko 2010-05-25 17:01:04

0

如果處理器調整爲在需要更少的週期時使用更少的功耗,那麼簡單地讓代碼更有效地運行就是解決方案。否則,除非操作系統公開某種電源管理功能,否則沒有多少可做的事情。

0

將IO保持在最小值。

0

在某些ARM處理器上,可以通過將穩壓器置於待機模式來降低功耗。

5

是的。使用profiler並查看哪些例程正在使用大部分CPU。在ARM上,如果可用,可以使用一些JTAG連接器(我使用Lauterbach進行調試和分析)。主要問題通常是將處理器閒置時處於低功耗狀態(深度睡眠)。如果你不能減少很多使用的CPU百分比(例如從80%到50%),那麼它就不會有太大的區別。根據您正在運行的操作系統,選項可能會有所不同。

+0

,我可能會補充:除非您真的使用它們,否則不要將外圍設備保持在「打開」狀態(例如,保持藍牙/ Wi-Fi打開可減少移動設備的電池壽命* – INS 2010-05-25 15:38:25

1

如果你沒有運行Windows XP +或更新版本的Linux,你可以運行一個後臺線程,它除了HLT之外什麼也不做。

這就是像CPUIdle這樣的程序如何減少功耗/發熱。

+0

This shouldn對於較新的操作系統來說,這是不必要的。 – 2010-05-25 15:31:35

+2

@Axel:是的,我提到過...... – 2010-05-25 15:53:14

3

2010年7月版的ACM的通信有一篇關於節能算法的文章,您可能會感興趣。我還沒有讀過它,所以不能傳授它的任何智慧。

+0

總的來說,我對這篇文章感到非常失望,不幸的是, – 2010-05-27 17:08:41

+0

現在我可能永遠不會讀它。 – 2010-05-27 18:06:32

3

嘗試留在芯片內存(緩存)空閒循環,保持I/O到最低限度,在總線上保持位翻轉到最小。像proms和flash這樣的NV存儲器消耗更多的能量來存儲0比存儲零(這就是爲什麼它們被擦除的原因,它實際上是零,但是轉換器在你看到它之前將該位反轉,將零存儲爲1,將零存儲爲零,這也是爲什麼當它們失敗時它們會降級),我不知道易失性存儲器,德拉姆使用的晶體管數量是sram的一半,但必須刷新。

儘管您需要從較低功率的系統開始,但以上所述可能並不明顯,所有這些都很重要。例如,不要使用任何來自intel的東西。