新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于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)翻譯為機(jī)器語(yǔ)言目標(biāo)文件。機(jī)器語(yǔ)言是通用目標(biāo)文件格式(Common Object File Format,COFF)的。
連接器(Linker)連接目標(biāo)文件,生成一個(gè)可執(zhí)行文件。它要完成地址的重分配(Relocation)和解析外部引用(Resolve External References)。
得到可執(zhí)行文件之后就可以進(jìn)行調(diào)試。可用軟件仿真器(Simulator)在PC機(jī)上對(duì)指令和運(yùn)行時(shí)間進(jìn)行精確仿真;用XDS硬件仿真器(Emulator)在目標(biāo)板上進(jìn)行調(diào)試。
調(diào)試通過(guò)后即可下載到目標(biāo)板進(jìn)行獨(dú)立運(yùn)行。

本文引用地址:http://butianyuan.cn/article/152470.htm


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

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

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



評(píng)論


相關(guān)推薦

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

關(guān)閉