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

Rss & SiteMap

曙海教育集團論壇 http://www.bjzhda.cn

曙海教育集團論壇
共3 條記錄, 每頁顯示 10 條, 頁簽: [1]
[瀏覽完整版]

標題:基于TI C6000系列DSP的C/C++程序優化技術

1樓
wangxinxin 發表于:2010-11-22 14:19:47

摘 要:在現代DSP的開發中,越來越多地采用C/c++作為開發語言,而C/C++程序的優化成為DSP’軟件開發的重要環節。在此介紹TI C6000的軟件開發流程,重點討論C6000系列的C/C++程序優化技術,包括優化流程,C/C++代碼優化方法,編寫線形匯編代碼優化方法等。為DSP的C/C++軟件開發提供了全面的程序優化技術和方法,對實際系統的開發具有重要的現實意義。

關鍵詞:C6000;程序優化;軟件流水;線性匯編

0 引 言

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

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

l TMS320C6000處理器介紹

    TMS320C6000是TMS320系列產品中的新一代高性能DSP芯片,共分為兩大系列。其中定點系列為TMS320C62xx和TMS320C64xx;浮點系列為TMS320C67xx。由于TMS320C6000的開發主要面向數據密集型算法,它有著豐富的內部資源和強大的運算能力,所以被廣泛地應用于數字通信和圖像處理等領域。

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

2 C6000軟件開發流程

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

基于TI C6000系列DSP的C/C++程序優化技術 - lzhcqu=

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

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

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

    得到可執行文件之后就可以進行調試。可用軟件仿真器(Simulator)在PC機上對指令和運行時間進行精確仿真;用XDS硬件仿真器(Emulator)在目標板上進行調試。

    調試通過后即可下載到目標板進行獨立運行。

3 程序優化流程及方法

3.1 程序優化階段

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

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

基于TI C6000系列DSP的C/C++程序優化技術 - lzhcqu=

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

3.2 C/C++代碼優化方法

    為了使C/C++代碼獲得最好的性能,可以使用編譯選項、軟件流水、內聯函數和循環展開等方法來對代碼進行優化,以提高代碼執行速度,并減小代碼尺寸。

3.2.1 編譯器選項優化

    C/C++編譯器可以對代碼進行不同級別的優化。高級優化由專門的優化器完成,低級的和目標DSP有關的優化由代碼生成器完成。圖3為編譯器、優化器和代碼生成器的執行圖。

基于TI C6000系列DSP的C/C++程序優化技術 - lzhcqu=

    當優化器被激活時,將完成圖3所示的過程。C/C++語言源代碼首先通過一個完成預處理的解析器(Parser),生成一個中間文件(.if)作為優化器(Optimi-zer)的輸入。優化器生成一個優化文件(.opt),這個文件作為完成進一步優化的代碼生成器(Code Genera-tor)的輸入,最終生成匯編文件(.asm)。

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

3.2.2 軟件流水優化

    軟件流水是編排循環指令,使循環的多次迭代并行執行的技術。使用一02和一03選項編譯C/C++程序時,編譯器就從程序中收集信息,嘗試對程序循環做軟件流水。

    圖4顯示一個軟件流水循環。圖4中A,B,C,D和E表示1次迭代中的各條指令;A1,A2,A3,A4和A5表示一條指令執行的各階段。循環中,一個周期最多可并行執行5條指令,即圖中陰影部分所示的循環核(Loop Kernel)部分。循環核前面的部分稱為流水循環填充(Pipelined Loop Prolog),循環核后面部分稱為循環排空(Pipelined Loop Epilog)。

基于TI C6000系列DSP的C/C++程序優化技術 - lzhcqu=

3.2.3 內聯函數優化

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

    (1)使用intrinsics(內聯函數)替代復雜的C/C++代碼;

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

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

    C6000編譯器提供了許多內聯函數,它們直接對應著C62X/C64X/C67X指令可快速優化C代碼。這些內聯函數不易用C/C++語言實現其功能。內聯函數用前下劃線“_”特別標示,其使用方法與調用函數一樣。例如C語言的飽和加法只能寫為需要多周期的函數:

    基于TI C6000系列DSP的C/C++程序優化技術 - lzhcqu=

    這段復雜的代碼可以用_sadd()內聯函數實現,它是一個單周期的C6x指令。

    result=_sadd(a,b);

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

3.2.4 循環展開

    循環展開是改進性能的另一種,即把小循環的迭代展開,以讓循環的每次迭代出現在代碼中。這種方法可增加并行執行的指令數。當每次迭代操作沒有充分利用C6000結構的所有資源時,可使用循環展開提高性能。

    有3種使循環展開的方法:

    (1)編譯器自動執行循環展開;

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

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

3.3 匯編優化

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

3.3.1 寫線性匯編

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

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

3.3.2 匯編優化器優化

    匯編優化器的任務主要有:

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

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

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

4 結 語

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

共3 條記錄, 每頁顯示 10 條, 頁簽: [1]

Copyright © 2000 - 2009 曙海教育集團
Powered By 曙海教育集團 Version 2.2
Processed in .04688 s, 2 queries.
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
日韩欧美国产三级电影视频| 亚洲人成网站色在线观看| 日本一区二区高清| 国产乱人伦精品一区二区在线观看| 涩涩涩999| 一区二区高清视频在线观看| 国产精品一区二区三区精品| 欧美成人福利视频| 国产99久久久精品| 欧美一级在线观看| 国产精品亚洲视频| 欧美三级视频在线播放| 日韩av午夜在线观看| 中文字幕一区二区三区精彩视频| 亚洲一二三四区不卡| 久久人人爽爽人人爽人人片av| 国产精品国产三级国产有无不卡| 国产成人免费在线视频| 一区二区三区在线视频观看58| 成人av免费观看| 欧美高清视频一二三区| 久久精品国产99国产精品| 日日骚一区二区网站| 成人欧美一区二区三区白人| 国产亚洲情侣一区二区无| 久久一留热品黄| 国产精华液一区二区三区| 欧美日韩中文字幕一区| 奇米精品一区二区三区四区| 国产精品午夜在线| 日韩精品一区二区三区蜜臀| 精品91自产拍在线观看一区| 精品久久人人做人人爽| 国产欧美综合在线观看第十页| 国产三级欧美三级日产三级99| 国产午夜精品一区二区三区视频| 国产欧美一区二区精品婷婷| 欧美精品少妇一区二区三区| 亚洲不卡一区二区三区| 亚洲高清在线观看一区| 亚洲成人1区2区| 欧洲久久久久久| 一区二区欧美国产| 蜜桃免费一区二区三区| 亚洲伦在线观看| 欧美人xxxxx| 亚洲日本在线视频观看| 99久精品国产| 久久综合狠狠综合| 99久久自偷自偷国产精品不卡| 国产人久久人人人人爽| 成人蜜臀av电影| 欧美日韩视频不卡| 天天操天天干天天综合网| 日本精品二区| 一区二区免费在线播放| 久久99精品久久久久久青青日本 | 亚洲永久精品国产| 日本一区视频在线播放| 亚洲地区一二三色| 色婷婷亚洲婷婷| 极品少妇一区二区| 欧美午夜一区二区三区| 国产精品一区在线观看乱码| 欧美一区二区三区日韩视频| 92国产精品观看| 国产精品你懂的| 日韩av一区二区三区美女毛片| 午夜国产精品影院在线观看| 91国内精品野花午夜精品| 国产麻豆精品theporn| 精品美女在线观看| 国产一区二区三区四区hd| 亚洲综合色区另类av| 色天天综合久久久久综合片| 国产主播一区二区| 久久久久国产精品麻豆ai换脸| 成人在线观看91| 亚洲午夜免费福利视频| 欧美日韩一区成人| 91亚洲精品久久久蜜桃| 中文字幕不卡在线| 日本在线观看一区二区| 日韩一区二区三区电影 | 97久久精品午夜一区二区| 国产美女在线精品免费观看| 亚洲精品一品区二品区三品区| 91精品中文字幕一区二区三区| 91激情五月电影| 亚洲一区免费在线观看| 欧美色手机在线观看| 豆国产97在线| 日本女人一区二区三区| 日韩欧美高清一区| 久久亚洲国产精品日日av夜夜| 奇米影视7777精品一区二区| 精品久久人人做人人爽| 蜜桃av噜噜一区二区三| 久久国产精品99精品国产| 国产日韩欧美不卡| 一区二区精品在线观看| 成人app在线| 亚洲mv在线看| 3atv一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了| 成人aaaa免费全部观看| 欧美天天综合网| 亚洲一级电影视频| 国产日韩三区| 久久久欧美精品sm网站| 激情六月婷婷久久| 亚洲视频小说| 亚洲三级在线免费观看| 激情深爱一区二区| 国产精品一区二区a| 在线播放/欧美激情| 亚洲第一精品在线| 日韩欧美精品在线不卡| 成人免费小视频| 91捆绑美女网站| 精品女同一区二区| 国产成人啪免费观看软件| 欧美日韩午夜在线视频| 日韩影院在线观看| 亚洲精品影院| 亚洲成人精品一区二区| 日本不卡一二三区| 亚洲美腿欧美偷拍| 国产在线一区二区三区四区| 日本一区二区三区电影| av在线这里只有精品| 欧美r级电影在线观看| 国产成人综合视频| 777欧美精品| 国产成人综合网站| 欧美一级欧美三级在线观看| 亚洲精品视频观看| 久久99欧美| 中文字幕不卡在线观看| 国产综合18久久久久久| 国产精品传媒视频| 久久伊人一区二区| 一区二区三区欧美日韩| 视频一区二区在线| 午夜精品久久久久久久久| 亚洲精品中文字幕乱码三区不卡| 亚洲美女少妇撒尿| 亚洲精品一区二区毛豆| 首页国产丝袜综合| 欧美视频一区二区三区在线观看| 精品综合久久久久久8888| 337p亚洲精品色噜噜| 不卡免费追剧大全电视剧网站| 久久久午夜电影| 狠狠色狠狠色综合人人| 午夜精品久久久| 欧美性感一区二区三区| 日本午夜一本久久久综合| 一区二区免费在线观看| 婷婷久久综合九色综合绿巨人| 欧美日本韩国国产| 亚洲综合网站在线观看| 一本一道久久a久久精品综合| 麻豆国产91在线播放| 5566中文字幕一区二区电影 | 国产成人精品aa毛片| 欧美一级理论性理论a| 国产精品yjizz| 午夜成人免费视频| 日韩欧美国产综合一区| 93久久精品日日躁夜夜躁欧美| 中文字幕免费不卡在线| 日韩精彩视频| 国产一区二区三区免费看 | 国产成人精品一区二区三区网站观看| 26uuu国产在线精品一区二区| 国产福利久久| 日韩精品一卡二卡三卡四卡无卡| 91精品中文字幕一区二区三区| 97久久夜色精品国产九色| 中文字幕+乱码+中文字幕一区| 美女一区视频| 亚洲成人三级小说| 日韩视频在线你懂得| 欧美色欧美亚洲另类七区| 国产精品一二三四区| 国产精品久久久久久久久动漫| 中文字幕一区二区三区在线乱码| 成人一级视频在线观看| 一区二区三区视频在线观看| 制服丝袜亚洲精品中文字幕| 91亚洲精品久久久蜜桃| 伊人开心综合网| 国产肉丝袜一区二区| 色屁屁一区二区| 国产精品日韩一区二区 | 久久久午夜精品| 色94色欧美sute亚洲线路二| 国产精品入口免费| 精品在线一区二区|