請教W806程序運行效率及優化問題

發布於 2022-05-04 00:58:18

請教一下W806的程序優化技巧,我的代碼之前是運行在cortex M4內核單片機上的,168M下妥妥跑完,主要是跑語音算法,但是同樣代碼移植到W806上連原算法的一半都跑不到,我嘗試將代碼中部分const型參數表和樣本轉為普通的單精度float或char型存儲,並將程序中一些從數組中調用的參數轉為固定值,情況有所好轉,但也只跑完了一半任務。
目前所有程序只是在連接CKLINK的仿真狀態下運行,我不知道這是否有一定關系,然後芯片沒有掛外部FLASH或PSRAM,所有運行變量也都去掉const屬性,代碼優化等級到O3,程序都是在芯片內部跑,另外我檢查了CPU的cache控制寄存器,是處於打開狀態
根據現象我覺得應該可能的原因是CPU的指令和數據存取速度跟不上,或浮點運算器本身耗時過長,
當前項目完成了底層外設的移植,並已和算法內核完成對接,只苦於沒有完成運算任務,希望能指點下是否還有優化空間,比如是否要將代碼段或數據指定到特定的內存區域,或者其他什麼方式可以提升運行效率的。非常感謝

查看更多

關注者
0
被浏覽
1k
3 個回答
ZYQ
ZYQ 2022-05-04
我已不再支持W80X任何相關問題的回複,請大家不要私信,有問題找 isme 謝謝

你的這個分析是很有道理的,確實是這樣的,你可以去除調試器跑一下,雖然開啟了cache,關於你的想法將代碼段放到RAM中是可行的,但是需要考慮你得RAM是否能夠容納這麼大的代碼段,可以將部分函數放到RAM中執行以達到加快執行效率,如果可以的話能否放出代碼,看看能到否幫你優化下

大信
大信 認證專家 2022-05-04
硬件開發,軟件開發,系統開發,工程架構,方案設計

優化有很多方法,主要是看你代碼的結構以及指令的類型:
如果你代碼有較多的地址訪問,讀取常量數據,那麼將代碼複制到 RAM 中會有很大的速度提升。 這地地址訪問是編譯時產生的,比如複雜結構體的使用,將造成大量的間接地址的訪問。

如果你代碼有大量的計算,特別是浮點計算,以及三角函數等高級代數的計算,那麼在一些算法下,想辦法,把算法改造成定點整數的算法,這樣使速度會加快。 如果代碼中,有大量的超函數計算,那麼可以考慮查表法,不用調用系統的函數庫。

另外就是代碼指令優化,分析代碼中重複運行比較高的段落,將此段落編為匯編代碼,然後手動優化匯編代碼,完成代碼指令的優化。

使用多種方法,可以達到提升程序運行速度與效率。

okeybomb
okeybomb 2022-05-04
這家夥很懶,什麼也沒寫!

非常感謝兩位大佬的解答,大概有了一定的改善思路,還是要試試看有沒有優化空間,準備先將部分代碼放到RAM跑試試,再拼一下

撰寫答案

請登錄後再發布答案,點擊登錄

發布
問題

分享
好友

手機
浏覽

掃碼手機浏覽