2 TMS320C64X的軟件開(kāi)發(fā)
流程。
TMS320C64X內(nèi)部有8個(gè)獨(dú)立的功能單元,所以在一個(gè)周期內(nèi)最多可以并行執(zhí)行8條指令。然而指令與功能單元之間特殊的映射關(guān)系、每一條指令執(zhí)行時(shí)間的不相同、每一條指令的數(shù)據(jù)通路的不相同和指令間操作數(shù)的相關(guān)性等因素,致使一個(gè)周期內(nèi)實(shí)際能并行執(zhí)行的指令數(shù)達(dá)不到8條,從而降低了DSP的性能,因此,必須采用合理的開(kāi)發(fā)和優(yōu)化流程,盡可能的對(duì)代碼進(jìn)行優(yōu)化,從而提高指令執(zhí)行的并行度。
如圖1所示,工作流程一般分為三個(gè)階段。
階段一:直接按照需要用C語(yǔ)言實(shí)現(xiàn)功能。在實(shí)際的DSP應(yīng)用中,許多算法都是非常復(fù)雜,直接用匯編代碼編寫(xiě),雖然優(yōu)化效率很高,可是實(shí)現(xiàn)的難度卻很大,所以一般都采用先用C語(yǔ)言來(lái)實(shí)現(xiàn),然后編譯運(yùn)行,利用C64X開(kāi)發(fā)環(huán)境的profile clock工具測(cè)試程序運(yùn)行時(shí)間,若不能滿足要求,則進(jìn)行第二階段。
階段二:C語(yǔ)言級(jí)的優(yōu)化。選擇C64X開(kāi)發(fā)環(huán)境提供的優(yōu)化方式以及充分運(yùn)用其他技巧,優(yōu)化C代碼,若還不能滿足效率要求,則進(jìn)行第三步。
階段三:匯編級(jí)的優(yōu)化。將上一階段C程序中優(yōu)化效率較低的部分提出來(lái),用線性匯編語(yǔ)言編寫(xiě),利用匯編優(yōu)化器進(jìn)行優(yōu)化。匯編優(yōu)化器的作用是讓開(kāi)發(fā)人員在不考慮C64X流水線結(jié)構(gòu)和分配其內(nèi)部寄存器的情況下,編寫(xiě)線形匯編語(yǔ)言程序,然后匯編優(yōu)化器通過(guò)分配寄存器和循環(huán)優(yōu)化將匯編語(yǔ)言程序轉(zhuǎn)化為利用流水線方式的高速并行匯編程序。
上述的三個(gè)階段不是都必須經(jīng)過(guò),當(dāng)在某一階段獲得了期望的性能,就不必進(jìn)行下一階段的優(yōu)化。
3 C代碼的優(yōu)化方法
對(duì)于C64X平臺(tái)下的C源程序,可以選用的優(yōu)化方法有:
1) 選用C編譯器提供的優(yōu)化選項(xiàng)
在編譯器中提供了分為若干等級(jí)和種類的自動(dòng)優(yōu)化選項(xiàng),如下:
● -o:使能軟件流水和其他優(yōu)化方法
● -pm:使能程序級(jí)優(yōu)化
● -mt:使能編譯器假設(shè)程序中沒(méi)有數(shù)據(jù)存儲(chǔ)混淆,可進(jìn)一步優(yōu)化代碼。
● -mg:使能分析(profile)優(yōu)化代碼
● -ms:確保不產(chǎn)生冗余循環(huán),從而減小代碼尺寸
● -mh:允許投機(jī)執(zhí)行
● -mx:使能軟件流水循環(huán)重試,基于循環(huán)次數(shù)對(duì)循環(huán)試用多個(gè)方案,以便選擇最佳方案。