久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区


曙海教育集團(tuán)論壇DSP專區(qū)DSP6000系統(tǒng)開發(fā) → 基于TI C6000系列DSP的C/C++程序優(yōu)化技術(shù)


  共有8764人關(guān)注過本帖樹形打印

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

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個(gè)性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發(fā)短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
基于TI C6000系列DSP的C/C++程序優(yōu)化技術(shù)  發(fā)帖心情 Post By:2010-11-22 14:19:47

摘 要:在現(xiàn)代DSP的開發(fā)中,越來越多地采用C/c++作為開發(fā)語言,而C/C++程序的優(yōu)化成為DSP’軟件開發(fā)的重要環(huán)節(jié)。在此介紹TI C6000的軟件開發(fā)流程,重點(diǎn)討論C6000系列的C/C++程序優(yōu)化技術(shù),包括優(yōu)化流程,C/C++代碼優(yōu)化方法,編寫線形匯編代碼優(yōu)化方法等。為DSP的C/C++軟件開發(fā)提供了全面的程序優(yōu)化技術(shù)和方法,對實(shí)際系統(tǒng)的開發(fā)具有重要的現(xiàn)實(shí)意義。

關(guān)鍵詞:C6000;程序優(yōu)化;軟件流水;線性匯編

0 引 言

    目前在DSP平臺上編程多使用匯編語言與C語言,為了追求代碼的高效,過去一般用匯編語言來編制。DSP程序匯編語言簡潔高效,能夠直接操作DSP的內(nèi)部寄存器、存儲空間、外設(shè),但可讀性、可修改性、可移植性較差;隨著DSP應(yīng)用范圍不斷延伸,應(yīng)用的日趨復(fù)雜,匯編語言程序在可讀性、可修改性、可移植性和可重用性的缺點(diǎn)日益突出,軟件需求與軟件生產(chǎn)力之間的矛盾日益嚴(yán)重。引入高級語言(如C語言,C++,Java),可以解決該矛盾。在高級語言中,C語言是一種較為高效的高級語言,在可讀性、可移植性等方面優(yōu)于匯編指令。各個(gè)DSP芯片公司都相繼推出了相應(yīng)的C語言編譯器。

    但由于DSF結(jié)構(gòu)的特殊性,使得該平臺上的C語言編譯器無法充分發(fā)揮DSP器件的性能優(yōu)勢。同樣功能的C語言程序,效率往往只有直接書寫的匯編程序的幾分之一甚至幾十分之一,因此有必要根據(jù)DSP的特性對C語言編寫的程序進(jìn)行進(jìn)一步的優(yōu)化。

l TMS320C6000處理器介紹

    TMS320C6000是TMS320系列產(chǎn)品中的新一代高性能DSP芯片,共分為兩大系列。其中定點(diǎn)系列為TMS320C62xx和TMS320C64xx;浮點(diǎn)系列為TMS320C67xx。由于TMS320C6000的開發(fā)主要面向數(shù)據(jù)密集型算法,它有著豐富的內(nèi)部資源和強(qiáng)大的運(yùn)算能力,所以被廣泛地應(yīng)用于數(shù)字通信和圖像處理等領(lǐng)域。

    C6000系列CPU中的8個(gè)功能單元可以并行操作,并且其中兩個(gè)功能單元為硬件乘法運(yùn)算單元,大大地提高了乘法速度。DSP采用具有獨(dú)立程序總線和數(shù)據(jù)總線的哈佛總線結(jié)構(gòu),僅片內(nèi)程序總線寬度就可達(dá)到256位,即每周期可并行執(zhí)行8條32位指令;片內(nèi)兩套數(shù)據(jù)總線的寬度分別為32位;此外,DSP還有一套32位DMA專用總線用于傳輸。靈活的總線結(jié)構(gòu)使得數(shù)據(jù)瓶頸對系統(tǒng)性能的限制大大緩解。C6000的通用寄存器組能支持32位和40位定點(diǎn)數(shù)據(jù)操作,另外C67xx和C64xx還分別支持64位雙精度數(shù)據(jù)和64位雙字定點(diǎn)數(shù)據(jù)操作。除了多功能單元外,流水技術(shù)是提高DSP程序執(zhí)行效率的另一主要手段。由于TMS320C6000的特殊結(jié)構(gòu),功能單元同時(shí)執(zhí)行的各種操作可由VLlW長指令分配模塊來同步執(zhí)行,使8條并行指令同時(shí)通過流水線的每個(gè)節(jié)拍,極大地提高了機(jī)器的吞吐量。

2 C6000軟件開發(fā)流程

    圖1為C6000的軟件開發(fā)流程圖。圖中陰影部分是開發(fā)C代碼的常規(guī)流程,其他部分用于輔助和加速開發(fā)討程.

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

    C/C++源文件首先經(jīng)過C/C++編譯器(C/C++cornpiler)轉(zhuǎn)換為C6000匯編源代碼。編譯器、優(yōu)化器(optimizer)和交疊工具是C/C++編譯器的組成部分。編譯器使用戶能一步完成編譯、匯編和連接;優(yōu)化器調(diào)整合修改代碼以提高C程序的效率;交疊工具把C/C++語句和對應(yīng)的匯編語句交疊列出。

匯編源代碼再經(jīng)過匯編器(Assembier)翻譯為機(jī)器語言目標(biāo)文件。機(jī)器語言是基于通用目標(biāo)文件格式(Common Object File Format,COFF)的。

    連接器(Linker)連接目標(biāo)文件,生成一個(gè)可執(zhí)行文件。它要完成地址的重分配(Relocation)和解析外部引用(Resolve External References)。

    得到可執(zhí)行文件之后就可以進(jìn)行調(diào)試。可用軟件仿真器(Simulator)在PC機(jī)上對指令和運(yùn)行時(shí)間進(jìn)行精確仿真;用XDS硬件仿真器(Emulator)在目標(biāo)板上進(jìn)行調(diào)試。

    調(diào)試通過后即可下載到目標(biāo)板進(jìn)行獨(dú)立運(yùn)行。

3 程序優(yōu)化流程及方法

3.1 程序優(yōu)化階段

    由于DSP應(yīng)用的復(fù)雜度,在用C語言進(jìn)行DSP軟件開發(fā)時(shí),一般先在基于通用微處理器的PC機(jī)或工作站上對算法進(jìn)行仿真,仿真通過后再將C程序移植到DSP平臺中。

    所以,DSP的軟件開發(fā)與優(yōu)化流程主要分為3個(gè)階段:C代碼開發(fā)階段;C代碼優(yōu)化階段;手工匯編代碼重編寫階段。如圖2所示。

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

    在圖2中,第一階段:沒有C6000知識的用戶能開發(fā)自己的C代碼,然后使用CCS中的代碼剖析工具,確定C代碼中可能存在的低效率段,為進(jìn)一步代碼優(yōu)化做好準(zhǔn)備。第二階段:C代碼優(yōu)化階段。在這個(gè)階段,主要利用intrinsics函數(shù)以及編譯器編譯選項(xiàng)來提高代碼的性能。優(yōu)化后利用軟件模擬器檢查代碼的效率,如仍不能達(dá)到期望的效率,則進(jìn)入第三階段。第三階段:寫線性匯編優(yōu)化。在這個(gè)階段中,用戶把最耗費(fèi)時(shí)間的代碼抽取出來,重新用線性匯編寫,然后使用匯編優(yōu)化器優(yōu)化這些代碼。在第一次寫線性匯編時(shí),可以不考慮流水線和寄存器分配。然后,提高線性匯編代碼性能,往代碼中添加更多的細(xì)節(jié),如分配寄存器等。由于這一階段所需的時(shí)間要比第二階段多,所以整個(gè)代碼的優(yōu)化盡量放在第二階段來完成,而少使用線性匯編代碼優(yōu)化。

3.2 C/C++代碼優(yōu)化方法

    為了使C/C++代碼獲得最好的性能,可以使用編譯選項(xiàng)、軟件流水、內(nèi)聯(lián)函數(shù)和循環(huán)展開等方法來對代碼進(jìn)行優(yōu)化,以提高代碼執(zhí)行速度,并減小代碼尺寸。

3.2.1 編譯器選項(xiàng)優(yōu)化

    C/C++編譯器可以對代碼進(jìn)行不同級別的優(yōu)化。高級優(yōu)化由專門的優(yōu)化器完成,低級的和目標(biāo)DSP有關(guān)的優(yōu)化由代碼生成器完成。圖3為編譯器、優(yōu)化器和代碼生成器的執(zhí)行圖。

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

    當(dāng)優(yōu)化器被激活時(shí),將完成圖3所示的過程。C/C++語言源代碼首先通過一個(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)。

    最簡單執(zhí)行優(yōu)化的方法是采用cl6x編譯程序,在命令行設(shè)置一On選項(xiàng)即可。n是優(yōu)化的級別(n為0,1,2,3),它控制優(yōu)化的類型和程度。

3.2.2 軟件流水優(yōu)化

    軟件流水是編排循環(huán)指令,使循環(huán)的多次迭代并行執(zhí)行的技術(shù)。使用一02和一03選項(xiàng)編譯C/C++程序時(shí),編譯器就從程序中收集信息,嘗試對程序循環(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)核前面的部分稱為流水循環(huán)填充(Pipelined Loop Prolog),循環(huán)核后面部分稱為循環(huán)排空(Pipelined Loop Epilog)。

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

3.2.3 內(nèi)聯(lián)函數(shù)優(yōu)化

     通過下面的方法改進(jìn)C語言程序,可使編譯出的代碼性能顯著提高:

    (1)使用intrinsics(內(nèi)聯(lián)函數(shù))替代復(fù)雜的C/C++代碼;

    (2)使用字(Word)訪問存放在32位寄存器的高16位和低16位字段的數(shù)據(jù);

    (3)使用雙字訪問存放在64位寄存器的32位數(shù)據(jù)(僅指C64xx/C67XX)。

    C6000編譯器提供了許多內(nèi)聯(lián)函數(shù),它們直接對應(yīng)著C62X/C64X/C67X指令可快速優(yōu)化C代碼。這些內(nèi)聯(lián)函數(shù)不易用C/C++語言實(shí)現(xiàn)其功能。內(nèi)聯(lián)函數(shù)用前下劃線“_”特別標(biāo)示,其使用方法與調(diào)用函數(shù)一樣。例如C語言的飽和加法只能寫為需要多周期的函數(shù):

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

    這段復(fù)雜的代碼可以用_sadd()內(nèi)聯(lián)函數(shù)實(shí)現(xiàn),它是一個(gè)單周期的C6x指令。

    result=_sadd(a,b);

    要提高C6000數(shù)據(jù)處理率,應(yīng)使一條Load/Store指令能訪問多個(gè)數(shù)據(jù)。C6000有與內(nèi)聯(lián)函數(shù)相關(guān)的指令,例如_add2(),_mpyhl(),_mpylh()等,這些操作數(shù)以16位數(shù)據(jù)形式存儲在32位寄存器的高位部分和低位部分。當(dāng)程序需要對一連串短型數(shù)據(jù)進(jìn)行操作時(shí),可使用字1次訪問2個(gè)短型數(shù)據(jù),然后使用C6000相應(yīng)指令來處理數(shù)據(jù)。相似的在C64x或C67x中,有時(shí)需要執(zhí)行64位的LDDW來訪問兩個(gè)32位數(shù)據(jù),4個(gè)16位數(shù)據(jù),甚至8個(gè)8位數(shù)據(jù)。

3.2.4 循環(huán)展開

    循環(huán)展開是改進(jìn)性能的另一種,即把小循環(huán)的迭代展開,以讓循環(huán)的每次迭代出現(xiàn)在代碼中。這種方法可增加并行執(zhí)行的指令數(shù)。當(dāng)每次迭代操作沒有充分利用C6000結(jié)構(gòu)的所有資源時(shí),可使用循環(huán)展開提高性能。

    有3種使循環(huán)展開的方法:

    (1)編譯器自動執(zhí)行循環(huán)展開;

    (2)在程序中使用UNROLL偽指令建議編譯器做循環(huán)展開;

    (3)用戶自己在C/C++代碼中展開。

3.3 匯編優(yōu)化

    在對C/C++代碼使用了所有的C/C++優(yōu)化手段之后,如果仍然不滿意代碼的性能,就可以寫線性匯編程序,然后用匯編優(yōu)化器進(jìn)行優(yōu)化,生成高性能的代碼。

3.3.1 寫線性匯編

    使用C6000的剖析工具(Profiling Tools)可以找到代碼中最耗費(fèi)時(shí)間的部分,就是這部分需要用線性匯編重寫。線性匯編代碼與匯編源代碼相似,但是,線性匯編代碼中沒有指令延遲和寄存器使用信息。這樣做的目的是由匯編優(yōu)化器來為自己設(shè)定這些信息。

    寫線性匯編代碼時(shí),需要知道:匯編優(yōu)化器偽指令、影響匯編優(yōu)化器行為的選項(xiàng)、TMS320C6000指令、線性匯編源語句語法、指定寄存器或寄存器組、指定功能單元、源代碼注釋等。

3.3.2 匯編優(yōu)化器優(yōu)化

    匯編優(yōu)化器的任務(wù)主要有:

    (1)編排指令,最大限度的利用C6000的并行能力;

    (2)確保指令滿足C6000的延遲要求(Latency Requirements);

    (3)為源代碼分配寄存器。

4 結(jié) 語

    C6000系列的DSP C/c++代碼優(yōu)化比傳統(tǒng)的代碼優(yōu)化要方便的多,但要真正發(fā)揮其芯片的工作效率還是需要一定的經(jīng)驗(yàn)和技巧。這不僅要求開發(fā)人員熟悉其硬件體系,還要求對編譯器的編譯原理有一定的理解。另外,在C語言層面上要達(dá)到DSP芯片的峰值即8條指令并行是很難的,大多情況下都只能達(dá)到6.7條指令并行。在實(shí)際開發(fā)中,若優(yōu)化結(jié)果已達(dá)到6,7條指令并行卻還離實(shí)時(shí)的要求相差很遠(yuǎn),再花大量的人力去力求達(dá)到8條指令并行是不經(jīng)濟(jì)的,此時(shí)應(yīng)該考慮其他的技術(shù)改進(jìn)或策略上的調(diào)整以求達(dá)到目的。


支持(0中立(0反對(0單帖管理 | 引用 | 回復(fù) 回到頂部

返回版面帖子列表

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








簽名
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
亚洲精品一区二区三区蜜桃下载| 国内精品久久久久影院一蜜桃| 日韩欧美成人激情| 午夜欧美电影在线观看| 欧美色欧美亚洲另类二区| 不卡的av电影在线观看| 亚洲视频1区2区| 欧美三日本三级三级在线播放| 日韩va亚洲va欧美va久久| 欧美日韩视频专区在线播放| 麻豆freexxxx性91精品| 欧美成人免费网站| 成人av电影观看| 亚洲男人天堂一区| 日本一区二区在线| 九九久久精品视频| 中文字幕在线不卡一区二区三区| 久久人人九九| 国产在线视频一区二区| 成人免费小视频| 欧美日韩国产高清一区| 好吊色欧美一区二区三区视频| 日韩毛片一二三区| 欧美视频一区二区三区四区| 国产成人精品免费视频大全最热| 日韩理论片在线| 欧美激情视频一区二区三区| 亚洲与欧洲av电影| 日韩三级在线观看| 国产精品免费一区二区三区| 免费欧美高清视频| 国产精品国产精品国产专区不蜜| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 亚洲欧美一区二区三区国产精品| 日本视频一区二区在线观看| 成人在线一区二区三区| 国产喷白浆一区二区三区| 色综合天天综合网天天狠天天| 精品在线亚洲视频| 亚洲免费观看高清| 久久先锋影音av鲁色资源网| 日本道免费精品一区二区三区| 国产91高潮流白浆在线麻豆| 夜夜精品视频一区二区| 久久久久国产精品厨房| 欧美在线视频二区| 91丝袜美腿高跟国产极品老师| 亚洲男女一区二区三区| 日韩欧美精品在线| 欧美在线免费观看视频| 农村寡妇一区二区三区| 成人性色av| 成人avav影音| 亚洲欧美一区二区三区国产精品 | 一区精品在线| 成人av在线播放网站| 日本欧美在线观看| 久久久另类综合| 欧美卡1卡2卡| 色综合咪咪久久| 欧美影视一区二区| 激情欧美一区二区三区中文字幕| 青青国产91久久久久久| 亚洲蜜桃精久久久久久久| 久久亚洲影视婷婷| 日韩欧美国产一二三区| 欧美精品视频www在线观看| 一本色道久久综合狠狠躁的推荐 | 福利一区福利二区| 免费成人av在线| 婷婷开心激情综合| 国产亚洲自拍一区| 欧美日韩亚洲综合| 欧美性一区二区| 91久久国产综合久久| 中文字幕人成一区| 中文字幕剧情在线观看一区| 日本婷婷久久久久久久久一区二区| 国产一区二区美女诱惑| 麻豆国产精品777777在线| 日本一区二区三区电影| 精品国产乱码久久| 精品少妇一区二区三区| 在线免费观看成人网| 91色视频在线| 91免费版在线| 99re视频| 国产亚洲二区| 国产成人丝袜美腿| 国产大陆a不卡| 三级久久三级久久久| 久久精品免视看| 欧美色涩在线第一页| 欧美综合一区二区| 欧日韩精品视频| 欧美日韩一区二区视频在线| 久久99精品久久久久久久青青日本| 国产福利91精品一区二区三区| 亚洲影视在线观看| 亚洲一区av在线| 久久久精品国产99久久精品芒果 | 一本大道综合伊人精品热热| 性刺激综合网| 亚洲一区三区| 欧美午夜一区二区三区免费大片| 欧美一区观看| 亚洲欧美久久234| 99在线高清视频在线播放| 91青青草免费观看| 国产在线欧美日韩| 成人永久aaa| www.欧美精品一二区| 91麻豆自制传媒国产之光| 国产精品综合一区二区| 成人丝袜18视频在线观看| 91免费版黄色| 久久伊人一区二区| 色婷婷激情综合| 欧美日韩国产免费一区二区三区 | 99九九99九九九视频精品| 91久久偷偷做嫩草影院| 久久视频在线观看中文字幕| 亚洲国产精品毛片| 欧美日韩一级片在线观看| 欧美成人国产一区二区| 欧美精品一二三区| 欧美成人vps| 国产精品久久久久一区| 亚洲va国产va欧美va观看| 九九精品一区二区| www.久久精品| 欧美久久久久久| 欧美性受极品xxxx喷水| 久久免费美女视频| 精品99久久久久久| 国产精品成人免费在线| 天天综合色天天| 国产91在线观看丝袜| 精品日产一区2区三区黄免费| 国产99在线免费| 99九九视频| 日韩精品一区二区三区丰满| 欧美性xxxxxxxx| 国产日韩亚洲欧美综合| 国产三级欧美三级| 亚洲亚洲人成综合网络| 国产精品 日产精品 欧美精品| 国产高清视频一区| 国产精品国色综合久久| 中文字幕一区二区三区四区五区六区| 视频一区视频二区视频| 神马欧美一区二区| 91精品国模一区二区三区| 国产精品福利一区| 一区二区三区中文免费| 一区二区三区四区在线播放| 国内精品国产成人国产三级粉色 | www.视频一区| 日本午夜一区二区三区| 欧美人伦禁忌dvd放荡欲情| 91精品国产91久久久久久最新毛片| 日韩一区二区三区三四区视频在线观看 | 久久综合九色综合欧美亚洲| 久久久精品免费网站| 亚洲国产精品久久久男人的天堂| 婷婷国产在线综合| 美女视频网站黄色亚洲| 国产一区二区在线影院| 国产私拍一区| 制服丝袜中文字幕亚洲| 一区二区三区免费网站| gogo大胆日本视频一区| 一本久道久久综合中文字幕 | 国产成人av一区二区三区在线| 精品成a人在线观看| 亚洲h精品动漫在线观看| 国产传媒欧美日韩成人| 日本午夜精品电影| 精品国产亚洲在线| 日韩精品欧美精品| 俄罗斯精品一区二区| 欧美日韩mp4| 亚洲精品视频一区| 99在线热播精品免费| 色综合天天性综合| 亚洲色图在线看| 99久久精品国产一区二区三区| 国产欧美日韩伦理| 欧美日韩精品综合| 2019国产精品| 国产真实乱偷精品视频免| 日韩精品另类天天更新| 中文字幕第一页久久| 丁香一区二区三区| 欧美日免费三级在线| 亚洲成人一二三| 久久精品中文字幕一区二区三区| 一本久久精品一区二区| 欧美一级理论片| 麻豆国产一区二区|