999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

MIPS指令集G.729算法優化

2013-08-22 08:02:36林善和
科技視界 2013年7期
關鍵詞:指令優化

林善和

(福建星網銳捷通訊股份有限公司,福建 福州 350002)

0 引言

G.729是目前比較優質的語音壓縮算法,10ms的語音,80個采樣點,可以壓縮到10字節,算法中用到了大量的移位,點乘,飽和,取整的運算,使用普通的指令雖然可以實現功能,但是消耗過多的CPU資源,不實用。

早期的編解碼算法一般都是通過外掛的DSP來實現,隨著技術的進步,一般家庭網關SoC的CPU性能越來越高,從原來的100M到現在的400-600M甚至更高,同時CPU也增加了DSP增強的指令集,這樣很多算法直接就可以用CPU來處理,無需外掛DSP或者嵌一個DSP內核。

RT305x使用MIPS32 24KE的核心,內涵DSP ASE指令集,可以在一條指令完成2個short型數據的移位,4個short型數據的兩兩點乘相加,同時還順便進行飽和,取整運算。

如果G729編解碼算法運行時能夠把CPU的占有率控制在30%以內,那么CPU還有足夠的資源實現其它功能。因此,優化的目標就是在G729編解碼時,RT305x的CPU占有率控制在30%以內。本文所闡述的優化是指對用標準C語言編寫的代碼用DSP增強指令集進行優化。

1 G.729AB優化步驟

1.1 準備一個30秒以上的PCM源文件,要求采樣率8K,16位采樣

1.2 編寫g729_test.c和Make file,用來小工程編譯G729

1.3 編譯得到可執行文件,例如g729

1.4 把可執行文件g729及PCM的源文件復制到NFS目錄

1.5 在設備上執行./g729 xx.pcm xx.g729,可以得到編碼后的g729文件和再解碼的pcm文件,還有完成編解碼所需要的總時間

1.6 修改源碼重新編譯,再次運行,如果輸出文件與之前的相同,而且消耗時間更短,則修改有意義

1.7 如果發現輸出文件與之前不同,有可能是修改內容有問題。但是如果修改內容涉及到算法的優化,例如使用了64位的累加器,精度提高了,運算結果肯定與之前的不同,這是容許的,這時,用Cooledit打開輸出的pcm文件,仔細查看,波形有沒有變形,音質有沒有變差

2 重點優化內容

2.1 基本元操作的優化

修改的內容在basic_op.c和basic_op.h中。

2.1.1 首先是用宏匯編指令代替函數的調用,要求是執行時間最短

2.1.2 很多的移位操作,需要判斷移位的方向和次數,如果移位次數是常數,可以使用不帶V的指令,例如用SRA代替SRAV

2.2 32位的常用運算的優化

內容在oper_32b.c和oper_32b.h,主要是32位的點乘運算,由于原始代碼是多個平臺公用,沒有通用的點乘指令,所以點乘是由多個16位的數之間相乘,左移,再相加。在本平臺的指令系統中,有專門的點乘指令,這是好東西,還可以提升運算的精度,不要放過。

2.3 乘加運算的集中優化

在編解碼中,有許多地方用到了兩個組數的點乘相加,通過for循環來完成,這個不斷的點乘,不斷的相加,在本平臺,可以用乘加指令來完成,只需要在循環開始時清空64位累加器,循環結束之后,根據需要,移位相應的次數,把數據用64位累加器中取出,即可。

在點乘算法中,兩個16位的數組兩兩點乘,首地址是4字節對齊,數組長度是偶數,我們同時把連續的兩個16位數按照32位數載入寄存器,一起進行點乘運算,可以使循環次數減半。

在不少的算法中,由于擔心乘加的數據會溢出,先把原始數據集體右移了幾位,再點乘相加,為了保證精度,運算結果可能還左移了幾位,對于這種情況,我們不需要先把數據集體右移,而是直接點乘,然后再取出數據時,再右移,保證運算結果不溢出,這個優化屬于算法的優化,不僅省力,精度還更高。

2.4 循環的展開

在循環中,如果數據量比較大,循環的次數是比較多的,每次循環,開銷至少需要3條指令(i++,判斷,跳轉),而且使得流水線中斷。如果每次循環所干的事情多一些,循環的次數就會大大減少。

在從數組取出數據的時候,如果偏移地址是變量,會引入加法運算,聰明的做法是用x[0],x[1],x[-1]這種固定偏移的方式取數據,循環結束后修改x的值,代替用x[i]來訪問內容,i++這種循環,循環的判斷也不用i,而是直接判斷數據的地址是否到達末地址。

在本平臺的指令系統中,一條指令不能做到判斷大于或小于非零而跳轉,只能判斷不相等,或大于或等于0而跳轉,所以,把for(i=0;i<j;i++)寫成for(i=0;i!=j;i++),會省一條指令。

如果i是short型,而j是常數或int型,在判斷之前,會把i進行一次符號擴展。多一條指令,所以,在定義i的時候,建議保證待比較的兩個變量,位寬一致。

2.5 流水線優化

MIPS32 CPU號稱大部分指令是單周期指令,但實際上,單單一條指令上來看,一條指令包括,取指令,取操作數,執行,存儲運算結果等幾個,各需要一個指令周期,但是這些指令周期可以疊加,如果流水線不間斷的運行,相當于一條指令只需要一個指令周期。

打斷流水線,會引入額外的等待,本條指令使用上一條指令的運算結果,判斷跳轉指令,都會導致流水線的中斷。

在純C的代碼中,編譯器會自動優化流水線,但是,當嵌入匯編時,如果加了volatile屬性,或者源操作數和目的操作數是隱含的,或者和內存交互數據,編譯器是不會幫助優化流水線的,這時需要通過反匯編自己調整流水線。

為了使流水線不中斷,通常的做法是本條指令的目的操作數,不要馬上作為下一條指令的源操作數,而是間隔2條或2條指令以上。

對于跳轉指令,由于流水線的緣故,該指令的下一條指令也會被執行到。這是特別需要注意的。

2.6 減少訪問內存的次數

訪問內存是比較慢的,如果沒有Cache,訪問一次內存大約需要100ns,CPU內有24個通用可用的寄存器,在函數調用時,4個及以內的形參傳遞,返回值,都不需要入棧。

在運行過程中,應盡量減少內存的訪問次數,比如一次載入32bit數據,而不是分兩次載入16bit的數據。

2.7 C內嵌匯編的實例

其中mult dpaq_sa.l.w mfhi是3條指令,$ac0是64位累加器,$zero是 0 寄存器,%0,%1,%2 的意思是用“:”后面的操作數代替,第一個”:”后面是目前操作數,第二個”:”的后面是源操作數,”=r”的意思是目的操作數,且為寄存器,”r”的意思是源操作數,且為寄存器,與內容交互數據的指令,可以用”m”。

2.8 DSP常用的運算結果處理

2.8.1 飽和

飽和處理就是運算結果限制在固定的位寬所能表示的數的范圍,例如short型的最大數為0x7fff,最小數為0x8000,如果運算結果超出了這個范圍,就根據正負,調整為0x7fff或0x8000,普通CPU的累加器沒有對運算結果進行飽和處理,因此需要額外判斷結果,再調整,DSP的累加器一般都能對運算結果飽和處理。一般同符號數的加法,不同符號的減法,點乘,左移,甚至取負,均有可能溢出。

2.8.2 取整

取整是在右移的操作中比較常用,右移會導致精度的丟失,根據移走的最高位,調整結果,有助于保留精度。

2.8.3 點乘

在物理上,點乘是已知力和位移求功。在數字信號處理中,這里的點乘其實是信號的相乘,信號幅度用小數表示,在本平臺,用Q15(Word16)或 Q31(Word32)表示,兩個 Q15 點乘,結果 Q31,但是直接數學相乘,只得到Q30,所以還需要左移一位。

3 優化結果分析

3.1 用標準C語言進行編解碼算法測試CPU的占用率達到55%,無法滿足實際應用需求。

3.2 反匯編

3.2.1 局部優化之后,用反匯編objdump-d來查看匯編代碼,看看是否能得到預料中匯編代碼,注意從內存中載入short型數據,帶符號和不帶符號,在擴展到32bit時,是不一樣的

3.2.2 看看編譯器是不是引入額外的指令,比如沒有必要的符號擴展

3.2.3 看看流水線是否最佳

3.3 編解碼的輸出文件檢驗

得到的g729文件和PCM文件,首先是查看二進制是否和修改之前相同,如果不同,需要找到原因,如果是算法的優化導致的不同,需仔細查看聲音有沒有失真。最后用Abacus檢測音質,同時進行長時間通話拷機。優化后的CPU占有率僅達30%。

4 結束語

在低成本家庭網關SoC芯片RT305x上使用MIPS32Kec帶的DSP AE指令集進行G729編碼的進行優化后,CPU占用率不到30%,滿足家庭網關在語音、數據、Wifi的需求。隨著CPU性能的越來越強以及通信網絡IP話,這樣的技術將在各種各樣終端上使用,具有廣泛的應用場景。

[1]王洪,唐凱.低速率語音編碼 Low Rate Speech Coding[M].北京:國防工業出版社,2006.

[2]Chinh Tran Chijioke Anyanwu,Sanjai Balakrishnan,Anshul Bhargava,James Jiang,Radhika Thekkath.The24KETMCore Family:High-Performance RISC Cores with DSP Enhancements[M].MIPS Technologies Inc.,2005.

[3]MIPS Technologies Inc.MIPS DSP ASE Instruction Set Quick Reference.MIPS Technologies Inc.,2005.

猜你喜歡
指令優化
聽我指令:大催眠術
超限高層建筑結構設計與優化思考
房地產導刊(2022年5期)2022-06-01 06:20:14
民用建筑防煙排煙設計優化探討
關于優化消防安全告知承諾的一些思考
一道優化題的幾何解法
由“形”啟“數”優化運算——以2021年解析幾何高考題為例
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
殺毒軟件中指令虛擬機的脆弱性分析
電信科學(2016年10期)2016-11-23 05:11:56
基于低碳物流的公路運輸優化
現代企業(2015年2期)2015-02-28 18:45:09
主站蜘蛛池模板: 91高清在线视频| 大学生久久香蕉国产线观看| 中文字幕人成人乱码亚洲电影| 成人va亚洲va欧美天堂| 毛片视频网| 色婷婷丁香| 青草娱乐极品免费视频| 大陆精大陆国产国语精品1024 | 麻豆精品久久久久久久99蜜桃| 亚洲—日韩aV在线| 国产精品不卡片视频免费观看| 91久久偷偷做嫩草影院| 成人午夜网址| 成人免费网站在线观看| 美女亚洲一区| 亚洲人成色在线观看| 亚洲综合九九| 亚洲精品桃花岛av在线| 免费看久久精品99| 99视频在线免费看| 国产精品真实对白精彩久久| 国产网站免费观看| 欧美人在线一区二区三区| 亚洲一级毛片在线观播放| 亚洲精品va| 亚洲欧美另类色图| 99久久婷婷国产综合精| 精品国产黑色丝袜高跟鞋| 直接黄91麻豆网站| 中文字幕在线看| 强乱中文字幕在线播放不卡| 成人精品视频一区二区在线| 久久狠狠色噜噜狠狠狠狠97视色| 国产精品浪潮Av| 国产精品专区第1页| 国产成人亚洲综合A∨在线播放| 国产色网站| 成人国产精品网站在线看| 国产成人成人一区二区| 免费无码AV片在线观看中文| 在线观看国产精美视频| 超清无码一区二区三区| 亚洲成人网在线播放| 四虎AV麻豆| 亚洲成人黄色网址| 欧美在线视频a| 欧美爱爱网| www.精品国产| 一区二区三区国产精品视频| 久久亚洲国产最新网站| 97色婷婷成人综合在线观看| 国产91九色在线播放| 日本欧美成人免费| 国产97色在线| 超碰色了色| 久久免费看片| a毛片在线播放| 色视频久久| 国产av无码日韩av无码网站| 久久综合色视频| 看你懂的巨臀中文字幕一区二区| 午夜一级做a爰片久久毛片| 欧美成人区| 国产在线欧美| 精品小视频在线观看| 粉嫩国产白浆在线观看| 精品一区二区三区四区五区| 无码aaa视频| 国产午夜一级毛片| 成人午夜免费观看| 国产无码精品在线播放| 免费A级毛片无码免费视频| 亚洲中文字幕久久无码精品A| 国内嫩模私拍精品视频| 国产精品黑色丝袜的老师| 色天堂无毒不卡| 欧美在线精品一区二区三区| 亚洲成年人网| 激情国产精品一区| 伊人网址在线| 国产农村妇女精品一二区| av天堂最新版在线|