經驗豐富的嵌入式系統程序員已經知道將代碼優化到目標平臺的大部分技巧,但是我們中的許多人相對較晚才接觸到嵌入式系統編程,因為我們在限制較少的平臺上學習了我們的編碼技能。除了算法的一般效率之外,我們不必過多擔心硬件細節,但在嵌入式應用程序中,我們需要更加小心,當然是為了性能,還要適應我們想要做的實際限制我們的硬件目標,尤其是可用內存的類型和大小。這些系統中的內存是您必須將所有軟件和所有工作數據裝入其中的手提箱,而且手提箱通常比您希望的要小得多。
作為一個額外的復雜因素,這些系統中通常有不止一種類型的內存。為了保持編程簡單,您只看到一個邏輯內存空間,但某些地址范圍可能以不同的方式在硬件中實現。一些空間可以實現為外部主存儲器,可以通過一級或多級高速緩存從處理器訪問。
一個常見的硬件優化將實現另一個范圍作為緊耦合內存 (TCM)。它與處理器位于同一芯片內,通常緊鄰該處理器。TCM 為存儲在該內存中的任何指令或數據提供有保證的單時鐘周期訪問,這與標準內存不同,標準內存只有在指令/數據已經在緩存中時才能提供該性能;否則它必須進入主存儲器,花費更多的時鐘周期。TCM 是(內存映射)快速片上內存的一個例子;還有其他用途,例如用于圖像處理中快速訪問的圖像緩沖區。
另一個考慮因素 - 使用片上存儲器可降低功耗,而使用主存儲器會消耗更多功率,這要歸功于更高的電流來驅動所有這些封裝引腳和芯片之間的電路板互連。這是低功耗應用中的一個重要考慮因素。
為什么不只使用大的片上存儲器并從片外不頻繁地加載/存儲?不幸的是,大型片上存儲器顯著增加了芯片面積,并且隨著芯片尺寸的增長,該設備變得更加昂貴且競爭力下降。系統架構師必須非常小心地平衡性能增益與此成本,考慮他們是否可能僅提供 16KB 的 TCM 與可能多達 1MB 的 TCM。這讓程序員有很多責任要盡可能節儉和謹慎地使用或規劃這些存儲器(如果你在早期的芯片架構中有發言權),尤其是在涉及到你想要的功能或數據時使用快速內存。
您需要在這里做的一些事情是相當明顯的;我假設您從基于 PC 的實現或為早期產品開發的實現開始。由于您顯然對 DSP 感興趣,因此您可能計劃進行大量浮點計算。盡可能將數據類型從雙精度減少到單精度;僅此一項就可能將數據大小減半。
臨時內存池是一種一次性分配內存塊以滿足多個較小相關分配需求的方法,它在分配和釋放速度方面很受歡迎,但在內存方面可能非常昂貴。嘗試將所有這些合并到一個內存池中,只要它們不并行使用或硬著頭皮返回堆上的傳統malloc;這可能會慢一些,但在內存中效率會高很多。
特別是在 TCM 方面,分析代碼以找到消耗最多運行時間的函數。您的策略將是從需求最高的功能開始,決定其中哪些可以適合 TCM。當然,這里必須有一些判斷。如果一個高需求函數調用一個低需求函數,你能負擔得起從緩存中拉出那個低需求函數嗎?只要緩存命中率很高,或者偶爾較長的延遲是可以容忍的,這可能就可以了。
在支持 MP3 和 FLAC 解碼器的音樂播放器中,較長的延遲可能是可以的。每首歌曲最多只能使用一個,因此它們不需要都駐留在快速內存中。接受延遲加載所需的任何內容,按需從片外加載到快速存儲器中。
您希望將生產代碼和數據壓縮到盡可能小的大小,因此作為一般良好衛生的一點,請確保所有調試、分析和日志記錄代碼都包含在編譯指示中,這些編譯指示可以在生產構建中禁用。在 PC 代碼中,您可能不會太擔心這一點(特別是如果您想在生產軟件上運行調試器),但在這里它是必不可少的。相反,您還應該確保在 禁用該代碼的情況下運行所有回歸測試。只需要在調試中忽略一個運行時依賴項即可創建下游噩夢。
同樣,請確保您的軟件中的每一段代碼都在被使用。運行覆蓋測試。如果您發現未使用的代碼,則可能是早期版本的遺留問題,可能需要它。這里不是,所以你應該能夠擺脫它,對吧?再次,你必須小心。也許這是對一個不能忽視的非常罕見的情況的錯誤處理。也許它應該包含在回歸測試中,但直接觸發太難了。您必須根據與架構師甚至硬件團隊的討論做出決定。
最后,與架構師(如果需要,還有營銷人員)爭論他們要求包含哪些功能是真正必要的。他們可能沒有意識到,在您可能想到的每一次優化之后,手提箱仍然不會關閉。然后他們將不得不決定可能不得不犧牲他們真正想要的真正酷的功能。或者,也許他們必須回到業務團隊并要求更大的片上存儲器,使用您可以提供的關于這些存儲器需要增長多少的信息。無論哪種方式,你都會看起來不錯!
審核編輯 黃昊宇
-
dsp
+關注
關注
561文章
8244瀏覽量
366650 -
嵌入式
+關注
關注
5198文章
20449瀏覽量
334074
發布評論請先 登錄
從算法到部署:Enclustra如何用DSP+FPGA/SoC專長,實現功耗與成本雙優化?
深入了解API:詳解應用程序接口的作用和原理
【技術貼】解密艾為飛天?DSP黑科技(三):特色算法與未來前瞻
【技術貼】解密艾為飛天?DSP黑科技(二):產品迭代與性能飛躍
如何在應用程序調試期間分析棧和堆使用情況
學生適合使用的SOLIDWORKS 云應用程序
ZEISS INSPECT應用程序,解鎖工業測量的無限可能(二)
ZEISS INSPECT應用程序,解鎖工業測量的無限可能(一)
軟件更新 | TSMaster 2025.06版來了!AIO/DIO/DDS全面優化,體驗再升級
華秋DFM軟件升級時,提示“應用程序無法正常啟動”怎么辦?
VirtualLab:光柵的優化與分析
如何在 Raspberry Pi AI Camera 上構建為開發人員提供實時的智能應用程序!
MCP:連接AI與應用程序的開放標準!
為您的 DSP 應用程序優化軟件
評論