<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于TI C6000系列DSP的C/C++程序優(yōu)化技術(shù)

基于TI C6000系列DSP的C/C++程序優(yōu)化技術(shù)

作者: 時(shí)間:2009-06-16 來(lái)源:網(wǎng)絡(luò ) 收藏

匯編源代碼再經(jīng)過(guò)匯編器(Assembier)翻譯為機器語(yǔ)言目標文件。機器語(yǔ)言是通用目標文件格式(Common Object File Format,COFF)的。
連接器(Linker)連接目標文件,生成一個(gè)可執行文件。它要完成地址的重分配(Relocation)和解析外部引用(Resolve External References)。
得到可執行文件之后就可以進(jìn)行調試??捎密浖抡嫫?Simulator)在PC機上對指令和運行時(shí)間進(jìn)行精確仿真;用XDS硬件仿真器(Emulator)在目標板上進(jìn)行調試。
調試通過(guò)后即可下載到目標板進(jìn)行獨立運行。

本文引用地址:http://dyxdggzs.com/article/152470.htm


3 流程及方法
3.1 階段
由于應用的復雜度,在用C語(yǔ)言進(jìn)行軟件開(kāi)發(fā)時(shí),一般先在通用微處理器的PC機或工作站上對算法進(jìn)行仿真,仿真通過(guò)后再將C移植到平臺中。
所以,DSP的軟件開(kāi)發(fā)與流程主要分為3個(gè)階段:C代碼開(kāi)發(fā)階段;C代碼優(yōu)化階段;手工匯編代碼重編寫(xiě)階段。如圖2所示。

在圖2中,第一階段:沒(méi)有知識的用戶(hù)能開(kāi)發(fā)自己的C代碼,然后使用CCS中的代碼剖析工具,確定C代碼中可能存在的低效率段,為進(jìn)一步代碼優(yōu)化做好準備。第二階段:C代碼優(yōu)化階段。在這個(gè)階段,主要利用intrinsics函數以及編譯器編譯選項來(lái)提高代碼的性能。優(yōu)化后利用軟件模擬器檢查代碼的效率,如仍不能達到期望的效率,則進(jìn)入第三階段。第三階段:寫(xiě)線(xiàn)性匯編優(yōu)化。在這個(gè)階段中,用戶(hù)把最耗費時(shí)間的代碼抽取出來(lái),重新用線(xiàn)性匯編寫(xiě),然后使用匯編優(yōu)化器優(yōu)化這些代碼。在第一次寫(xiě)線(xiàn)性匯編時(shí),可以不考慮流水線(xiàn)和寄存器分配。然后,提高線(xiàn)性匯編代碼性能,往代碼中添加更多的細節,如分配寄存器等。由于這一階段所需的時(shí)間要比第二階段多,所以整個(gè)代碼的優(yōu)化盡量放在第二階段來(lái)完成,而少使用線(xiàn)性匯編代碼優(yōu)化。
3.2 C/C++代碼優(yōu)化方法
為了使C/C++代碼獲得最好的性能,可以使用編譯選項、軟件流水、內聯(lián)函數和循環(huán)展開(kāi)等方法來(lái)對代碼進(jìn)行優(yōu)化,以提高代碼執行速度,并減小代碼尺寸。
3.2.1 編譯器選項優(yōu)化
C/C++編譯器可以對代碼進(jìn)行不同級別的優(yōu)化。高級優(yōu)化由專(zhuān)門(mén)的優(yōu)化器完成,低級的和目標DSP有關(guān)的優(yōu)化由代碼生成器完成。圖3為編譯器、優(yōu)化器和代碼生成器的執行圖。

當優(yōu)化器被激活時(shí),將完成圖3所示的過(guò)程。C/C++語(yǔ)言源代碼首先通過(guò)一個(gè)完成預處理的解析器(Parser),生成一個(gè)中間文件(.if)作為優(yōu)化器(Optimi-zer)的輸入。優(yōu)化器生成一個(gè)優(yōu)化文件(.opt),這個(gè)文件作為完成進(jìn)一步優(yōu)化的代碼生成器(Code Genera-tor)的輸入,最終生成匯編文件(.a(chǎn)sm)。
最簡(jiǎn)單執行優(yōu)化的方法是采用cl6x編譯程序,在命令行設置一On選項即可。n是優(yōu)化的級別(n為0,1,2,3),它控制優(yōu)化的類(lèi)型和程度。
3.2.2 軟件流水優(yōu)化
軟件流水是編排循環(huán)指令,使循環(huán)的多次迭代并行執行的。使用一02和一03選項編譯C/C++程序時(shí),編譯器就從程序中收集信息,嘗試對程序循環(huán)做軟件流水。
圖4顯示一個(gè)軟件流水循環(huán)。圖4中A,B,C,D和E表示1次迭代中的各條指令;A1,A2,A3,A4和A5表示一條指令執行的各階段。循環(huán)中,一個(gè)周期最多可并行執行5條指令,即圖中陰影部分所示的循環(huán)核(Loop Kernel)部分。循環(huán)核前面的部分稱(chēng)為流水循環(huán)填充(Pipelined Loop Prolog),循環(huán)核后面部分稱(chēng)為循環(huán)排空(Pipelined Loop Epilog)。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>