優化系列 之DSP優化方法

2022-03-24 02:03:38 字數 3559 閱讀 1700

date: 2019-2-18

1、參考

ti dsp tms320c66x學習筆記之dsp優化經驗

2、dsp介紹和特點

dsp是英文digital signal process的簡稱,即數字訊號處理器,dsp晶元內部採用程式和資料分開的哈佛結構,具有特殊的dsp指令和不同的功能單元,實現多級流水操作,完成平行計算。可以用來快速實現各種數字訊號處理演算法。

dsp特點:

dsp晶元一般具有如下的一些主要特點:

3、dsp常用優化方法

3.1、dma

dma:直接儲存器儲存模式,通常用於ddr和l2之間交換資料,這樣可以減少cache miss,加快ddr的讀寫速度,提高資料傳輸速率。

在dma模式下,cpu只須向dma控制器下達指令,讓dma控制器來處理資料的傳送,資料傳送完畢再把資訊反饋給cpu,這樣就很大程度上減輕了cpu資源佔用率,可以大大節省系統資源。

dma傳輸:

在實現dma傳輸時,是由dma控制器直接掌管匯流排,因此,存在著乙個匯流排控制權轉移問題。即dma傳輸前,cpu要把匯流排控制權交給dma控制器。而在結束dma傳輸後,dma控制器應立即把匯流排控制權再交回給cpu。

乙個完整的dma傳輸過程經過下面3個步驟:

cpu初始化dma---->dma啟動----->dma完成資料拷貝

dma常用技巧:

桌球操作

a組:資料拷貝—》資料計算----》資料拷貝----》資料計算

b組:初始化-----》資料拷貝-----》資料計算----》資料拷貝

3.2、編譯選項

參考自:ti dsp tms320c66x學習筆記之dsp優化經驗

一、 c6x的編譯的常用選項

(一)c6x的編譯程式為「cl6x.exe」使用的方法

cl6x [options] [filenames]
cl6x: 編譯程式

options: 編譯選項

filenames: c或彙編原始檔

說明:

編譯選項是乙個字母或者兩個字母,對大小寫不敏感。

編譯選項的前面需要有乙個「-」符號。

乙個字母的選項可以合併在一起。比如「-sgq」與「-s -g -q」相同。

兩個字母的選項如果第乙個字母相同也可以合併在一起。比如「-mgt」與「-mg -mt」相同。

(二)有關優化的選項

-mt:   表示在程式中沒有使用alaising技術,這使得編譯器可以進行比較好的優化。

-o3: 對檔案級別進行最強的優化,一般在編譯時應該使用這個選項。但是在個別情況下使用這個選項優化程式可能會出現錯誤(-o2有相同現象,-o0和-o1不會出現錯誤)。可能是在優化迴圈,組織流水線的時候發生錯誤。如果有這種現象出現可以同時使用-g選項,程式優化就不會出現錯誤,但是優化效果會下降。另外可以調整程式的表達方式,可能會避免編譯器發生錯誤。

-pm: 在程式級別進行優化。可以將所以檔案聯合在一起進行優化,主要有去掉沒有被呼叫的函式、總是常數的變數以及沒有使用的函式返回值。建議由程式設計師自己進行這種優化工作。使用這個選項在win98下編譯可能會出現找不到編譯程式的情況。

-ms0: 不使用冗餘迴圈進行優化,減小程式的大小。一般情況下這個選項對程式大小的優化作用不明顯。

-mh[n]:去掉流水線的epilog,減小程式的大小。這個選項的作用比較明顯。但是有可能出現讀取位址超出有效範圍的問題,所以要在資料段的開始和結尾處增加一些pading,或者在分配記憶體時保證陣列的前面和後面一段範圍內都是有效的位址。可選的引數n給出這種pading的長度位元組數。

(三)保留編譯和優化資訊的選項

-k: 保留優化後生成組合語言檔案。

-s: 組合語言檔案中加入優化資訊,如果沒有則加入c語言源程式作為注釋。

-mw:在組合語言檔案加入軟體流水線資訊。

(四)有關除錯和剖析的選項

-g: 允許符號除錯,在「out」檔案中包含符號資訊和行號資訊,可以在c語言級別進行除錯和剖析。使用聯合使用-g、-mt和-o3可以保證能夠進行符號除錯的情況下最大限度的優化。

-mg:允許profile優化後的程式。 在「out」檔案中包含符號資訊和很少的行號資訊。允許在c語言的函式基本進行剖析。如果聯合使用這兩個選項,-g選項可能被忽略,結果與只用-mg相同。

(五)其它型別

-mln: 生成大記憶體模式的程式。

-ml0: 預設情況下將集合變數(陣列和結構)作為far型。

-ml1: 預設情況下將全部函式作為far型

-ml2: 等於-ml0加-ml1

-ml3: 預設情況下將全部資料和函式作為far型

(六)建議使用的編譯方式

cl6x -gk -mt -o3 -mw -ss  「filename」

方式1用於程式的除錯,這種方式具有比較強的優化能力,並且支援符號除錯。在編譯的過程中不會發生錯誤。由於生成的「out」檔案中包含了符號資訊和行號資訊,所以比較大。

cl6x -k -mgt -o3 -mw -ss 「filename」

方式2用於程式的剖析(profile),這種方式的優化能力幾乎最強(絕大多數情況下與方式3相同),並且支援對程式進行profile。檔案中只包含了符號資訊和很少的行號資訊,所以「out」檔案比較小。

cl6x -k -mt -o3 -mw -ss 「filename」

方式3用於最終的發行版本程式,可以對程式進行最強的優化,並且去掉了全部的符號和行號資訊,所以「out」檔案比較小。由多個檔案組成的程式應該編寫makefile,將編譯引數放在該檔案中,並在其中說明使用的編譯器的版本號。

(七)連線引數

-heap: 指定堆的大小

-stack: 指定棧的大小

連線的各種選項應該統一放在「cmd」檔案中

3.3、c**優化

1、使用內嵌函式intrinsic

tms320c6000提供的內嵌函式是一種直接對映為內嵌tms320c6000彙編指令的特殊函式,呼叫內嵌函式對程式的可讀性影響不大,同時可以達到優化效果。內嵌函式用下劃線(_)開頭,使用方法同呼叫普通函式一樣。

例如:_dotpu4, _extu

舉個例子:

for(j=0; j使用內嵌函式優化後:

for(j=0; j2、利用軟體流水

軟體用於安排迴圈指令,使迴圈的多次迭代以並行方式執行,這也是dsp主頻低、效率高的主要原因。當使用編譯器的-o2和-o3選項時,編譯器使用軟體流水優化源**並且從程式中收集相關的優化資訊。

3、迴圈處理

(1)迴圈計數:逆序計數效率更高。

(2)消除冗餘迴圈

(3)迴圈展開

DSP優化經驗一

restrict的作用就是限制乙個指針對一塊記憶體的訪問,進一步說就是如果一塊記憶體區域通過乙個受限制指標訪問,那麼它就不能通過另乙個受限指標訪問。引入restrict的目的是確保同一塊記憶體上沒有其它引用,讓編譯器更好地優化指令,生成更有效的彙編 把 pragma must iterate 放在迴...

DSP程式設計優化總結

1 多重迴圈拆成單層迴圈,減少迴圈層數 例如,雙重迴圈內乙個cycle只使用了乙個乘法器,拆成單層迴圈後,乙個cycle可使用2個乘法器,充分利用dsp乘法器資源,同時運算速度也會加快 2 迴圈次數少的放在外層迴圈,迴圈次數多的放在記憶體迴圈 3 二維陣列的二重迴圈 二維陣列的行迴圈放在外層迴圈,列...

最優化方法系列 SGD Adam

整理一下資源,不過最好還是根據書上的理論好好推導一下.本文是deep learning 之 最優化方法系列文章 deep learning 之 最優化方法 deep learning 最優化方法之sgd deep learning 最優化方法之momentum 動量 deep learning 最優...