基于TMS320C62X DSP的混合編程研究
.asg B10,ocsr
.asg B11,rw_4
STW .D2 ocsr,*stack--[1] ;被調(diào)用函數(shù)用到了B10~B15,A10
STW .D2 r_w4,*stack--[1] ;~A15的寄存器,則需對它們保護
MVC .S2 CSR,ocsr
AND .S2 -2,ocsr,ocsr
MVC .S2 ocsr,CSR ;關(guān)閉某些中斷 ……
loop:
LDW .D2 *tmp_pSrc++[src_width1],r_w1
;讀取第一個字
LDW .D1 *pSrc++[1],r-w2 ;讀取第二個字
LDW .D1 *pSrc++[src_width2],r-w3 ;讀取第三個字
SHRU .S2 r_w1,rshiftB, r-w1
SHL .S1 r_w3,lshiftA, r_w3
SHL .S2X r_w2,rshiftB,r_w4
SHRU .S1 r_w2,rshiftA, r_w2
OR .L2 r_w1,r_w4, r_w1
OR .L1 r_w1,r_w3,r_w2 ;這幾步作了圖a中的操作過程
STW .D2 r_w1,*pDst++[2]
STW .D1 r_w2,*tmpDst++[2] ;存儲取得的兩個字
B .S2 loop ;延遲跳轉(zhuǎn)到標號loop處,實現(xiàn)循環(huán) ……
LDW .D2T2 *++stack[1],r_w4
LDW .D2T2 *++stack[1],ocsr ;對被調(diào)用函數(shù)中自己保護的寄存器作恢復處理
MVC .S2 ocsr, CSR ;恢復中斷環(huán)境
B .S2 B3 ;返回到調(diào)用函數(shù)處
……
在TI CCS上用其庫函數(shù)CLOCK()對這個算法的C語言程序和并行匯編程序分別進行了性能測試。在純C語言中,運動矢量對4的偏移量的余數(shù)為0 時,約為33個指令周期, 余數(shù)為1時約為93個指令周期, 余數(shù)為2 時約為 51個指令周期,余數(shù)為3 時約為 93個指令周期,平均約耗時 67個周期。而將其用并行匯編代碼編寫,其周期數(shù)恒定為33個指令周期。33個指令周期的執(zhí)行時間,對于這個函數(shù)基本上是達到了函數(shù)的最大優(yōu)化。
由此可見,程序的核心算法的代碼用并行匯編程序編寫,而主體的C語言程序則以函數(shù)調(diào)用的形式調(diào)用這些核心算法的并行匯編函數(shù),是提高程序代碼執(zhí)行效率的一種有效方法。
參考文獻
1 TMS320C6000 CPU and Instruction Set Reference Guide. Texas Instruments Incorprated,2000
2 TMS320C600 Programmer’s Guide. Texas Instruments Incorporated, 2001
3 MS320C6000 Optimizing Compiler User’s Guide. Texas Instruments Incorporated,2001
4 任麗香,馬淑芬,李方慧. TMS320C6000系列DSPs的原理與應用.北京:電子工業(yè)出版社,2000.7
5 鐘玉琢, 王 琪, 賀玉方.基于對象的多媒體數(shù)據(jù)壓縮編碼國際標準-MPEG-4及其校驗模型.北京:科學出版社,2000
評論