DSP程式設計優化總結

2021-09-16 13:16:09 字數 1748 閱讀 5751

(1)多重迴圈拆成單層迴圈,減少迴圈層數;

例如,雙重迴圈內乙個cycle只使用了乙個乘法器,拆成單層迴圈後,乙個cycle可使用2個乘法器,充分利用dsp乘法器資源,同時運算速度也會加快;

(2)迴圈次數少的放在外層迴圈,迴圈次數多的放在記憶體迴圈;

(3)二維陣列的二重迴圈:二維陣列的行迴圈放在外層迴圈,列迴圈放在內層迴圈;

(4)避免迴圈內部的乘除運算:迴圈內部的乘除運算盡量移到迴圈外部以及用加法替代;

(1)記憶體拷貝:memcpy

memcpy(array_dst,array_src,sizeof(array_src));

#pragma data_align(array, 8);             // 8位元組對齊(低3位全為0)

void dspf_sp_blk_move(const float * x, float *restrict y, const int n);

(2)記憶體清零:memset

​memset(array,0,sizeof(array));
注意:記憶體清零並不多餘,因為某些編譯器在分配空間時,記憶體預設值並不為0;此外,memset 函式只能用於賦0值,其他的值則會出錯。

3、

(1)printf 等除錯函式

printf 函式或其它除錯函式的占用時間為ms級,且具備最高的系統優先順序,不響應中斷,對於**執行有嚴重影響,且占用大量時間,除錯時應去除此類函式。

(2)移位運算代替乘除運算

1、profile clock工具

(1)依次選擇 run—>clock—>enable;

(2)run—>clock—>setup(手動/自動清零);

(3)雙擊右下角時鐘週期計數欄(cpu cycle count)清零;

(4)在程式之間設定斷點,執行至第乙個斷點,清零,執行至第二個斷點,記錄cpu cycle count值;

缺點:時鐘計數 cycle count 資料不準確,比實際情況的要大。

2、tscl、tsch暫存器

#include unsigned int cycleoverhead;

// 啟動**效能計數

long long tbefore, tafter,toverhead;

tscl = 0;

tsch = 0;

tbefore = _itoll(tsch, tscl);

tafter = _itoll(tsch, tscl);

cycleoverhead = tafter - tbefore; //暫存器讀取延時校準

tbefore = _itoll(tsch, tscl);

delay(10);

tafter = _itoll(tsch, tscl);

toverhead = tafter - tbefore - cycleoverhead;

printf("duration is %lld us (cpu frequency:300mhz)\n", toverhead/300);

3、硬體測試方法

(1)在待測程式前加led點亮程式,在待測程式後加led燈滅程式;

(2)執行程式,使用示波器測量led引腳的電平變化,通過示波器的週期測量或者利用游標來測量待測程式時間;

DSP優化經驗一

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

DSP中斷總結

c55x支援32個isr。有些isr可以由軟體或硬體觸發,有些只能由軟體觸發。當cpu同時收到多個硬體中斷請求時,cpu會按照預先定義的優先順序對它們做出響應和處理。2 響應中斷請求。cpu必須響應中斷。如果是可遮蔽中斷,響應必須滿足某些條件。如果是不可遮蔽中斷,則cpu立即響應。3 準備進入中斷服...

優化系列 之DSP優化方法

date 2019 2 18 1 參考 ti dsp tms320c66x學習筆記之dsp優化經驗 2 dsp介紹和特點 dsp是英文digital signal process的簡稱,即數字訊號處理器,dsp晶元內部採用程式和資料分開的哈佛結構,具有特殊的dsp指令和不同的功能單元,實現多級流水操...