日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
TMS320C64X DSP的程序設(shè)計(jì)與優(yōu)化
TMS320C64X DSP的程序設(shè)計(jì)與優(yōu)化
 更新時(shí)間:2008-8-18 9:33:05  點(diǎn)擊數(shù):14
【字體: 字體顏色
1 TMS320C64X的特點(diǎn)
采用VelociTI.2體系結(jié)構(gòu)的C64X系列定點(diǎn)DSP芯片,在結(jié)構(gòu)上有許多特點(diǎn):
1) C64X片內(nèi)有2個(gè)數(shù)據(jù)通道、8個(gè)功能單元(.L1,.L2,.S1,.S2,.D1,. D2,.M1和.M2,其中.M1和.M2為兩個(gè)乘法器)和2個(gè)一般目的寄存器文件(A和B)。而8個(gè)功能單元和2個(gè)寄存器文件又分成了相同的兩組,每組占用一個(gè)數(shù)據(jù)通道。兩個(gè)數(shù)據(jù)通道之間包含有兩個(gè)數(shù)據(jù)交叉通路。
2) C64X DSP采用超長(zhǎng)指令字(VLIW),即在每個(gè)時(shí)鐘周期最高可提供8條32位指令,總字長(zhǎng)為256位的指令包同時(shí)分配到8個(gè)并行處理單元。在600MHz的時(shí)鐘頻率下,當(dāng)片內(nèi)8個(gè)處理單元同時(shí)運(yùn)行時(shí),其最大處理能力可以達(dá)到4800MIPS。
3) C64X DSP具有雙16bit擴(kuò)充功能,芯片能在一個(gè)周期內(nèi)完成雙16bit的乘法、加減法、比較、移位等操作。

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í)和種類(lèi)的自動(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è)方案,以便選擇最佳方案。
根據(jù)實(shí)際編譯的程序,選擇合適的優(yōu)化選項(xiàng),進(jìn)行源程序的優(yōu)化。
2) 減小存儲(chǔ)器相關(guān)性
為使指令達(dá)到最大效率,C64X編譯器盡可能將指令安排為并行執(zhí)行。為使指令并行操作,編譯器必須知道指令間的關(guān)系,因?yàn)橹挥胁幌嚓P(guān)的指令才可以并行執(zhí)行。當(dāng)編譯器不能確定兩條指令是否相關(guān)時(shí),則編譯器假定它們是相關(guān)的,從而不能并行執(zhí)行。設(shè)計(jì)中常采用關(guān)鍵字const來(lái)指定目標(biāo),const表示一個(gè)變量或一個(gè)變量的存儲(chǔ)單元保持不變。因此,在代碼中加入關(guān)鍵字const,可以去除指令間的相關(guān)性。例如下面的程序:
void vecsum(short *sum,short*in1,short*in2,unsigned int N)
{
int i;
for(i=0;i<N;i++)
sum[i]=in1[i]+in2[i];
}


由其相關(guān)圖2(a)可見(jiàn),寫(xiě)sum可能對(duì)指針in1、in2所指向的地址有影響,從而in1和in2的讀操作必須等到寫(xiě)sum操作完成之后才能進(jìn)行,降低了流水效率,為幫助編譯器確定存儲(chǔ)器的相關(guān)性,使用const關(guān)鍵字來(lái)指定一個(gè)目標(biāo),上面的源程序可改為含關(guān)鍵字const的優(yōu)化源代碼:
void vecsum(short * sum, const short*in1,const short*in2,unsigned int N)
{
int i;
for(i=0;i<N;i++)
sum[i]=in1[i]+in2[i];
}

由其相關(guān)圖2(b)可見(jiàn),由于使用了關(guān)鍵字const,消除了指令之間的相關(guān)路徑,從而使編譯器能夠判別內(nèi)存操作之間的相關(guān)性,找到更好的指令執(zhí)行方案。
3) 使用內(nèi)聯(lián)函數(shù)(intrinsics)
內(nèi)聯(lián)函數(shù)是C64X編譯器提供的專(zhuān)門(mén)函數(shù),它們與嵌入式的匯編指令是一一對(duì)應(yīng)的,其目的是快速優(yōu)化C源程序。在源程序中調(diào)用內(nèi)聯(lián)函數(shù),與調(diào)用一般的函數(shù)相同,只不過(guò)內(nèi)聯(lián)函數(shù)名稱前有下劃線作特殊標(biāo)識(shí)。當(dāng)匯編指令功能不易采用C語(yǔ)言表達(dá)時(shí),可采用內(nèi)聯(lián)函數(shù)表示。例如在定點(diǎn)運(yùn)算中經(jīng)常要求出源操作數(shù)的冗余符號(hào)位數(shù),這一功能如果用C完成的話,需要如下的代碼:
unsigned int norm(int src1)
{
unsigned int sign, result = 0;
sign = src1 & 0x80000000;
while(1)
{
if(sign)
{
if((src1 = src1 << 1) & sign)
result += 1;
else
return result;
}
else
{
if((src1 = src1 << 1) sign)
return result;
else
result += 1;
}
}
}
該源程序代碼冗長(zhǎng),有較多的邏輯操作和判斷跳轉(zhuǎn),運(yùn)行效率低下。若用內(nèi)聯(lián)函數(shù),則是result = _norm(src1),減少了代碼長(zhǎng)度,提高了運(yùn)行效率。因此對(duì)于需要大量C代碼才能表示的復(fù)雜功能,應(yīng)該盡量用C64X的內(nèi)聯(lián)函數(shù)來(lái)表示。
4) short型數(shù)據(jù)的int處理
C64XDSP具有雙16bit擴(kuò)充功能,芯片能在一個(gè)周期內(nèi)完成雙16bit的乘法、加減法、比較、移位等操作。在設(shè)計(jì)時(shí),當(dāng)對(duì)連續(xù)的short型數(shù)據(jù)流操作時(shí),應(yīng)該轉(zhuǎn)化成對(duì)int型數(shù)據(jù)流的操作,這樣一次可以把兩個(gè)16位的數(shù)據(jù)讀入一個(gè)32位的寄存器,然后用內(nèi)部函數(shù)來(lái)對(duì)它們處理(如_sub2等),充分運(yùn)用雙16bit擴(kuò)充功能,一次可以進(jìn)行兩個(gè)16bit數(shù)據(jù)的運(yùn)算,速度將提升一倍。
5) 盡量少進(jìn)行函數(shù)調(diào)用
函數(shù)調(diào)用的時(shí)候,要將PC和一些寄存器壓棧保存,函數(shù)返回時(shí),則將這些寄存器出棧返回,增加了一些不必要的操作。所以一些小的函數(shù),最好是用適當(dāng)?shù)膬?nèi)聯(lián)函數(shù)代替直接寫(xiě)入主函數(shù)里,一些調(diào)用不多的函數(shù),也可以直接寫(xiě)入主函數(shù)內(nèi),這樣可減少不必要的操作,提高速度。但是這樣往往會(huì)增加程序的長(zhǎng)度,因此是一種利用空間換取時(shí)間的辦法。
6) 盡量使用邏輯運(yùn)算代替乘除運(yùn)算
在DSP里,乘除運(yùn)算指令的執(zhí)行時(shí)間要遠(yuǎn)遠(yuǎn)超過(guò)邏輯移位指令,尤其是除法指令,在設(shè)計(jì)的時(shí)候,可以根據(jù)實(shí)際情況,進(jìn)行一些調(diào)整,盡量用邏輯移位運(yùn)算來(lái)代替乘除運(yùn)算,這樣可以加快指令的運(yùn)行時(shí)間。
7) 軟件流水線技術(shù)的使用
軟件流水線技術(shù)用來(lái)對(duì)一個(gè)循環(huán)結(jié)構(gòu)的指令進(jìn)行調(diào)度安排,使之成為多重迭代循環(huán)并行執(zhí)行。在編譯代碼時(shí),可以選擇編譯器的-o2或-o3選項(xiàng),則編譯器將根據(jù)程序盡可能地安排軟件流水線。圖3顯示一個(gè)運(yùn)用軟件流水線方式的循環(huán),它包括A、B、C、D、E5次迭代,同一周期可最多執(zhí)行5次迭代的不同指令(陰影部分)。


在DSP算法中存在大量的循環(huán)操作,因此充分地運(yùn)用軟件流水線方式,能極大地提高程序的運(yùn)行速度。但使用軟件流水線還有下面幾點(diǎn)限制:
● 循環(huán)結(jié)構(gòu)不能包含代碼調(diào)用,但可以包含內(nèi)聯(lián)函數(shù)。
● 循環(huán)計(jì)數(shù)器應(yīng)該是遞減的。
● 循環(huán)結(jié)構(gòu)不能包含break,if語(yǔ)句不能嵌套,條件代碼應(yīng)當(dāng)盡量的簡(jiǎn)單。
● 循環(huán)結(jié)構(gòu)中不要包含改變循環(huán)計(jì)數(shù)器的代碼。
● 循環(huán)體代碼不能過(guò)長(zhǎng),因?yàn)榧拇嫫鳎?2個(gè))的數(shù)量有限,應(yīng)該分解為多個(gè)循環(huán)。
在軟件流水線的運(yùn)用上,應(yīng)該盡量使復(fù)雜的循環(huán)分解成簡(jiǎn)單的小循環(huán),以避免寄存器的數(shù)量不夠;對(duì)于過(guò)于簡(jiǎn)單的循環(huán),應(yīng)該適當(dāng)?shù)恼归_(kāi),以增加代碼數(shù)量,增加流水線中的迭代指令。
8) 采用指令亂序技術(shù)
程序中,有些指令的執(zhí)行順序沒(méi)有嚴(yán)格的要求,可以作出一些位置上的調(diào)整,因此可以適當(dāng)?shù)恼{(diào)整這些指令的位置,穿插于其他的指令之中,從而減小指令的相關(guān)性,增加運(yùn)行時(shí)的并行性。
尤其在循環(huán)里,當(dāng)循環(huán)體較小的時(shí)候,可以把多個(gè)循環(huán)的代碼寫(xiě)在一個(gè)循環(huán)體里,合并成一個(gè)循環(huán),從而減小循環(huán)內(nèi)指令的相關(guān)性,增加指令運(yùn)行的并行性。但是要注意不要使循環(huán)過(guò)于復(fù)雜,以至不能進(jìn)行軟件流水線的優(yōu)化。

4 匯編代碼級(jí)的優(yōu)化
在經(jīng)過(guò)C代碼的優(yōu)化之后,還不能滿足性能上的要求,則可以通過(guò)profile clock工具找出效率很低的部分,使用線性匯編重新改寫(xiě)。再通過(guò)匯編優(yōu)化器編譯,匯編優(yōu)化器從輸入的線性匯編代碼中,完成以下功能:
● 尋找可以平行執(zhí)行的CPU指令。
● 在軟件流水線期間,處理流水線標(biāo)號(hào)。
● 分配寄存器的用法。
● 分配功能單元。
TI提供的匯編優(yōu)化器可以得到很高的效率,一般可以滿足性能上的要求。

5 優(yōu)化中的問(wèn)題
在優(yōu)化過(guò)程中,總是要對(duì)程序進(jìn)行一定的改動(dòng),這樣經(jīng)常會(huì)出現(xiàn)一些問(wèn)題。
1) 優(yōu)化結(jié)果的驗(yàn)證
優(yōu)化過(guò)的程序往往不知道是否運(yùn)行正確,這就需要加以驗(yàn)證。一般采用的辦法就是通過(guò)測(cè)試序列來(lái)驗(yàn)證。測(cè)試序列指的是對(duì)于不同的算法所取的一組特殊的數(shù)據(jù),這些數(shù)據(jù)可以準(zhǔn)確的反映算法的特性。測(cè)試序列中每組數(shù)據(jù)包括輸入數(shù)據(jù)和輸出數(shù)據(jù),通過(guò)對(duì)輸入數(shù)據(jù)的運(yùn)算,把結(jié)果與輸出數(shù)據(jù)進(jìn)行比較,判斷程序的正確性。一些常見(jiàn)的算法,一般都提供了測(cè)試序列。還有一些,沒(méi)有測(cè)試序列。這時(shí)就需要根據(jù)算法的特點(diǎn),自己構(gòu)造測(cè)試序列,進(jìn)行驗(yàn)證。構(gòu)造的時(shí)候,注意序列最好有幾組,數(shù)據(jù)最好有一定的長(zhǎng)度,這樣驗(yàn)證的更準(zhǔn)確。
2) 內(nèi)存泄漏的問(wèn)題
C64X系列DSP的內(nèi)部存儲(chǔ)空間有1MB,其中程序和數(shù)據(jù)還有CPU的二級(jí)緩存將共享這片空間,因此當(dāng)程序的運(yùn)行不正常時(shí),很有可能就是內(nèi)存泄漏造成的。因此,在程序設(shè)計(jì)中,應(yīng)盡量不用指針,同時(shí)注意進(jìn)行邊界檢測(cè)。

6 程序設(shè)計(jì)的一些方法
程序設(shè)計(jì)時(shí),一切以滿足實(shí)際的要求為目標(biāo)。在實(shí)際的設(shè)計(jì)中,除了優(yōu)化能夠提高性能以外,還可以采取其他的辦法,利用DSP的特性,提高程序的運(yùn)行性能,滿足實(shí)際的設(shè)計(jì)要求。
1) 把程序和經(jīng)常要用的數(shù)據(jù)放入片內(nèi)RAM
片內(nèi)RAM與CPU 工作在同一時(shí)鐘頻率,比片外RAM性能高得多。因此把程序放在片內(nèi)可以大大提高運(yùn)行的速度。同時(shí)對(duì)于一些經(jīng)常要用到的數(shù)據(jù),放入片內(nèi),也會(huì)節(jié)省處理時(shí)間。
2) 通過(guò)DMA技術(shù)搬移數(shù)據(jù)
對(duì)于C64X芯片,其片內(nèi)RAM有1MB,但是對(duì)于一些大型的圖像處理算法而言,仍可能是不夠的,因此經(jīng)常通過(guò)DMA技術(shù),把需要用到的數(shù)據(jù)搬入片內(nèi),把不需要的搬到片外,可以大大的提高程序的運(yùn)行速度。
3) CACHE的使用
增大CACHE,可以明顯的提高性能。但是C64X系列DSP中程序和數(shù)據(jù)還有CACHE共享片內(nèi)RAM,因此增大CACHE,就減小了實(shí)際的片內(nèi)可用空間,設(shè)計(jì)中需要注意。

7 結(jié)論
以上均是筆者在實(shí)際的DSP實(shí)踐中總結(jié)得出,對(duì)實(shí)際開(kāi)發(fā)非常有幫助。以筆者對(duì)5×5模板的高斯濾波算法優(yōu)化為例,在優(yōu)化之前,算法的運(yùn)算量為50MIPS,優(yōu)化后的運(yùn)算量約為2MIPS,提高了20多倍,可見(jiàn)優(yōu)化的效果很明顯。以上這些經(jīng)驗(yàn)主要是針對(duì)TI公司的64系列,但其中的一些對(duì)于別的型號(hào)的DSP也有借鑒作用。

  • 上一篇: 汽車(chē)應(yīng)用中的繼電器驅(qū)動(dòng)器
  • 下一篇: 蘇州和艦12吋晶圓鎖定0.15微米制程
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1