使用CLT 工具優(yōu)化C6000 代碼

同時(shí)在目錄下生成OBJ 和ASM 文件,這個(gè)和我們的實(shí)驗關(guān)系不大,可以不用關(guān)注。
out 文件是一會(huì )需要下載到芯片里運行的可執行文件,而map 文件用于幫助我們定位profile 信息存放的內存地址。
如果用戶(hù)使用CCS 編譯工具,則需要在Build 的屬性里指定Feedback 選項,然后正常編譯即可生成攜帶分析代碼的可執行文件。
2. 獲取分析信息
根據用戶(hù)獲取分析數據的不同,這里有兩種方法,第一種方法適用于持續運行的程序,比如在基于SYS/BIOS 的程序里,有些任務(wù)是以循環(huán)的方式存在的,這時(shí)用戶(hù)需要自己從DSP 內存里讀取分析數據。
首先打開(kāi)map 文件,可以找到.ppdata 段的內存地址,這個(gè)地址就是profile 信息存放處,在例子中
.ppdata 0 0081fecc 00000034 UNINITIALIZED
.ppdata 段位于0x0081fecc 這個(gè)地址,長(cháng)度是34 個(gè)byte。
啟動(dòng)CCS,連接EVM 板,下載out 文件到DSP 上,在main 函數末尾加上調試斷點(diǎn),可以讓程序到這里暫停(實(shí)際上,在用戶(hù)代碼中,可以把斷點(diǎn)設置在需要的任何地方,profile 的信息是實(shí)時(shí)更新的)。
運行該程序,到達斷點(diǎn)后,在View 菜單里打開(kāi)memory browser,將地址設定為0x0081fecc, 可以讀到.ppdata 的信息,參考以下步驟將其存到工程目錄下。
1) 選取Save Memory
2) 存放路徑
3) 確定數據地址和長(cháng)度,如下圖
4) 修改dat 文件
打開(kāi)剛才存下的dat 文件,注意到文件頭的數據長(cháng)度是以32 比特字為單位的,我們需要以8 比特字節為單位,如
1651 9 81fecc 0 d 1
修改為
1651 9 81fecc 0 34 1
5) 轉換文件格式
對剛才的運行profile 信息進(jìn)行分析,得到優(yōu)化后的cmd 內存排布文件,該文件內容如下,用戶(hù)可根據自己的程序進(jìn)行修改
如果是大端,則將-le 選項改為-be 選項。
第二種方法,針對于只需運行一次流程的程序,CCS 可以自動(dòng)生成pdat 文件,需要注意的是,生成pdat 文件的分析代碼是在用戶(hù)程序結束也就是exit()程序執行時(shí)進(jìn)行,因此用戶(hù)要保證自己的程序能完整運行到主函數出口結束,否則無(wú)法生成pdat 文件,需要用第一種方法來(lái)獲取數據。
3. 重新編譯代碼
首先使用pdd6x 從數據文件里提取prf 文件作為重編譯的輸入文件
將輸出的pfo.cmd 加入到項目的cmd 文件重新編譯輸出優(yōu)化后的out 文件,cache 優(yōu)化到此完成。
對比優(yōu)化結果,對于TCP/IP 的例子應用上,CLT 帶來(lái)了接近20%的提升,對于視頻編碼等應用CLT 也帶來(lái)了5%左右的提升。而且,用戶(hù)代碼量越大,則CLT 可能帶來(lái)的提升越明顯。
4. 結論
通過(guò)使用CLT 工具,可以方便快捷的對用戶(hù)代碼的Cache 分配進(jìn)行優(yōu)化,用戶(hù)不需要了解DSP Cache 分配的詳細信息,只需要在Simulator 或者硬件板卡上運行定制的代碼,就可以方便快捷地得到Cache 的詳細信息,并自動(dòng)根據這些信息對程序在內存的分布進(jìn)行配置已達到提升性能的效果。
評論