G.723.1算法在DSP上的優(yōu)化
3.3匯編編程的優(yōu)化
線(xiàn)性匯編是TI提供的一種匯編語(yǔ)言,其指令系統和匯編語(yǔ)言的指令系統完全相同,但在編寫(xiě)時(shí)不需要指定寄存器和操作單元,也不需要考慮延時(shí)的問(wèn)題,因此編寫(xiě)線(xiàn)性匯編相對要容易一些。
經(jīng)過(guò)以上的優(yōu)化后,音頻編碼程序在DM642上的運行狀況有了很大改善,但是經(jīng)測試仍然沒(méi)有到達可以接收的程度,而高級語(yǔ)言的效率幾乎發(fā)揮到了極致,所以在具體分析耗時(shí)大的模塊特點(diǎn)后,采用線(xiàn)性匯編語(yǔ)言重新編寫(xiě)C代碼的低效率段程序,迸一步提高程序的執行效率。
在編寫(xiě)線(xiàn)性匯編優(yōu)化代碼的過(guò)程中,為了提高代碼執行效率,我們需要遵循以下原則:
(1)寫(xiě)并行代碼:通過(guò)使用匯編指令并行執行的方法減少循環(huán)內的執行周期數,優(yōu)化線(xiàn)性匯編代碼。這里的關(guān)鍵問(wèn)題是弄清指令相關(guān)性,只有不相關(guān)的指令才能并行執行。辨別指令是否相關(guān).可以使用相關(guān)圖。
(2)處理跳轉指令和轉移指令:匯編程序的一大特點(diǎn)就是頻繁地跳轉,當滿(mǎn)足不同的條件時(shí),要求程序進(jìn)行不同的操作,或跳到相應的位置。對于“大于”、“大于等于”、“小于”、“小于等于”等較為接近的邏輯判斷和處理,應慎重對待,否則將產(chǎn)生邏輯性錯誤,并且很難調試。當發(fā)生溢出需進(jìn)行相應處理時(shí),這種現象尤為突出。
(3)盡量減少循環(huán)體內的指令數[7]:G.72.1的算法實(shí)現,有許多是在循環(huán)內部完成的,有些地方如同定碼本搜索過(guò)程中,為了確定四個(gè)非0脈沖的位置和幅度,還用到了多重循環(huán)。在循環(huán)內部,特別是在嵌套較深的循環(huán)內部,減少一條指令可以大大降低程序的操作次數。例如。對于一個(gè)每重循環(huán)8次的四重嵌套循環(huán),在最內層循環(huán)每減少一條指令,整個(gè)程序可以少執行84=4096語(yǔ)句。因此在設計程序時(shí),能夠放在循環(huán)體外執行的語(yǔ)句.盡量放在循環(huán)體外執行。
(4)展開(kāi)程序體:盡在一定條件下,盡量展開(kāi)程序,以減少子程序的調用和返回次數,犧牲空問(wèn)換取時(shí)間。
經(jīng)匯編優(yōu)化器優(yōu)化后,代碼效率比C語(yǔ)言直接編譯有明顯提高。
4 優(yōu)化工作的創(chuàng )新點(diǎn)
在對G.723.1的優(yōu)化中.本文在前人研究成果的基礎上,針對DSP C64xx系列芯片提}n了一些有價(jià)值的新方法。這些創(chuàng )新點(diǎn)在不同程度上提高了代碼的優(yōu)化速度和執行效率,在語(yǔ)音編解碼的DSP實(shí)時(shí)實(shí)現中起到了關(guān)鍵性作用。下面,本文將以舉例的方式闡明一些經(jīng)典的方法。
(1)編寫(xiě)連接命令文件.cmd
明確了系統的程序和數據映射地址后,編寫(xiě)連接器命令文件將部分調用次數較多的函數、堆棧段、數據段放入內存:cmd文件內容如下:
一L\evmdm642_echocfg.cmd //連接CCS提供的連接命令文件
SECTIONS
{
?。畉ahles>SDRAM
?。甤init>ISRAM //將變量初值表放入內存
. far >SDRAM
?。甤onst>ISRAM //將常數段放入內存
?。畃init>SDRAM
. tin >SDRAM
?。畉ext>SDRAM
?。畉est >ISRAM
}
一levmdm642bsl.lib //連接庫文件
一levmdm642_edma_aic23.164 //連接驅動(dòng)程序的庫文件
一lc6xlx_edma_mcasp.J64 //連接串口McASP的庫文件
其中.test是筆者在C程序內用#pragma CODE_SECTION或DATA_SECTION自定義的段。
(2)高速緩沖寄存器Cache的使用
Cache即高速緩存,是位于CPU和片內存儲器之間的規模小速度快的存儲器。Cache的工作原理是保存CPU中最常用的數據。當Cache中保存著(zhù)CPU要讀寫(xiě)的數據時(shí),CPU直接訪(fǎng)問(wèn)Cache。由于Cache的速度與CPU相當,CPU能在零等待狀態(tài)下迅速地實(shí)現數據存取。只有在Cache中不舍有CPU所需的數據時(shí)CPU才去訪(fǎng)問(wèn)片內存儲器。因此Cache的有效利用對整個(gè)程序速度的提高有著(zhù)舉足輕重的作用。在主函數中加入以下代碼,使Cache使能:
CACHE_clean (CACHE_L2ALL,0,0}; //清除Cache內原有內容
CACHE_setL2Mode (CACHE_64KCACHE); //設置Cache的大小為64K
CACHE_enableCaching (CACHE_EMIFA_CE00); //Cache使能
添加以上代瑪后,測試速度由原來(lái)的20幀/s提高到了400幀/s。提高了將近20倍。
5 結束語(yǔ)
本文詳緇分紹了G.723.1標準的DSP代碼優(yōu)化工作,重點(diǎn)描述了代碼優(yōu)化的方法和本課題的創(chuàng )新點(diǎn).對于算法中的一些函數提出了獨創(chuàng )性改寫(xiě)方法?;诰€(xiàn)性匯編的優(yōu)化以及Cache的有效利用使本課題的工作取得了顯著(zhù)成果,在沒(méi)有降低音質(zhì)的情況下,實(shí)現了DSP的語(yǔ)音實(shí)時(shí)編解碼。
本文作者創(chuàng )新點(diǎn):在對G.723.1的優(yōu)化中,針對TMS320DM 642 DSP系列芯片提出了一些有價(jià)值的新方法。例如:編寫(xiě)連接命令文件.cmd和高速緩沖寄存器Cache的使用。這些創(chuàng )新點(diǎn)在不同程度上提高了代碼的優(yōu)化速度和執行效率,在語(yǔ)音編解碼的DSP實(shí)時(shí)實(shí)現中起到了關(guān)鍵性作用。
評論