0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

剖析DSP編程優(yōu)化的7個(gè)方法

2oON_changxuemc ? 2018-02-02 14:56 ? 次閱讀

方法一 把浮點(diǎn)運(yùn)算改成定點(diǎn)運(yùn)算

因?yàn)镃6x DSP板并不支持浮點(diǎn)運(yùn)算,但我們的原始程序代碼是浮點(diǎn)運(yùn)算的格式,所以必須改成定點(diǎn)運(yùn)算,而其修改后的執(zhí)行速度也會(huì)加快很多。我們采用 Q-format 規(guī)格來(lái)表示浮點(diǎn)運(yùn)算。以下將介紹其相關(guān)原理。

定點(diǎn)DSP使用固定的小數(shù)點(diǎn)來(lái)表示小數(shù)部份的數(shù)字,這也造成了使用上的限制,而為了要分類(lèi)不同范圍的小數(shù)點(diǎn),我們必須使用Q-format的格式。不同的Q-format表示不同的小數(shù)點(diǎn)位置,也就是整數(shù)的范圍。Q15數(shù)字的格式,要注意在小數(shù)點(diǎn)后的每一位,表示下一位為前一位的二分之一,而MSB (most-significant-bit ) 則被指定成有號(hào)數(shù) ( Sign bit )。當(dāng)有號(hào)數(shù)被設(shè)成0而其余位設(shè)成1時(shí),可得到最大的正數(shù) (7FFFH ) ;而當(dāng)有號(hào)數(shù)被設(shè)成1而其余位設(shè)成0時(shí),可得到最大的負(fù)數(shù) ( 8000H ) 。所以Q15格式的范圍從-1到0.9999694 (@1) ,因此我們可以藉由把小數(shù)點(diǎn)向右移位,來(lái)增加整數(shù)部份的范圍,Q14格式的范圍增為-2.0到1.9999694 (@2) ,然而范圍的增加卻犧牲了精確度。

方法二 建立表格 ( table )

原來(lái)程序的設(shè)計(jì)是除了要讀AAC的檔案外,在譯碼時(shí),還要再另外讀取一些C語(yǔ)言程序代碼的內(nèi)容再做計(jì)算,如讀取一些數(shù)值做sin、cos、exp的運(yùn)算,但是為了加快程序的執(zhí)行速度,故將這這些運(yùn)算的結(jié)果建成表格,內(nèi)建在程序中,可以不必再做額外的計(jì)算動(dòng)做,以加速程序。

方法三 減短程序的長(zhǎng)度

1.去除Debug的功能

原本程序在Debug的階段時(shí),就加了許多用來(lái)偵測(cè)錯(cuò)誤的部份,程序 Debug完后,已經(jīng)沒(méi)有錯(cuò)誤發(fā)生,所以就可以把這些部份給去除,以減少程序的長(zhǎng)度,也可以減少程序執(zhí)行時(shí)的時(shí)脈數(shù),加快程序的速度。

2.去除計(jì)算時(shí)脈( clock ) 功能

原本程序可以計(jì)算執(zhí)行程序所需的時(shí)脈數(shù),我們也可以把這些部份給去除,如果有需要計(jì)算時(shí)脈時(shí),我們可以用C6x的工具軟件來(lái)作,功能更強(qiáng)大。

方法四 減少I(mǎi)/O 過(guò)程

原本在做譯碼的動(dòng)作時(shí),是先讀取AAC檔案的一部份做譯碼,譯碼完成后再讀取下一部份,再做譯碼。但是由于C6x的板子跟PC做檔案讀取時(shí)相當(dāng)?shù)木徛?,讀取的動(dòng)作占了大部份的時(shí)間,所以就將程序改成先將AAC檔案全部讀到C6x的內(nèi)存中,再做譯碼。或是將AAC建成表格(約1 MB),以避免DSP板上的內(nèi)存不足。

方法五 減少子程序的呼叫

在呼叫子程序時(shí),必須先將緩存器的內(nèi)容放到堆棧(stack) 中,而從子程序返回時(shí),也要將這些緩存器原本的內(nèi)容從堆棧中取出來(lái)。但是有些子程序的長(zhǎng)度很短,而且被呼叫的次數(shù)又很多,往往幾個(gè)時(shí)脈就可以完成卻浪費(fèi)時(shí)間在存取堆棧的內(nèi)容上,所以干脆將這些很短的子程序直接寫(xiě)在主程序當(dāng)中,以減少時(shí)脈數(shù)。

方法六 寫(xiě)匯編語(yǔ)言

雖然由C語(yǔ)言所編譯出來(lái)的匯編語(yǔ)言可以正確無(wú)誤的執(zhí)行,但是這個(gè)匯編語(yǔ)言卻不是最有效率的寫(xiě)法,所以為了增加程序的效率,于是在某些地方,例如一些被呼叫很多次且程序代碼不長(zhǎng)的函式(function),必須改以自己動(dòng)手寫(xiě)匯編語(yǔ)言來(lái)取代。

方法七 利用平行處理的觀念

C6x是一顆功能強(qiáng)大的處理器,它CPU的內(nèi)部提供了八個(gè)可以執(zhí)行不同指令的單元,也就是說(shuō)最多可以同時(shí)處理八個(gè)指令。所以如果我們可以用它來(lái)作平行處理,我們就可以大大的縮短程序執(zhí)行的時(shí)間,最有效率的來(lái)利用它來(lái)作解碼的動(dòng)作。

剖析DSP編程優(yōu)化的7個(gè)方法

最后還要知道:

第三級(jí)優(yōu)化(-O3),效率不高(經(jīng)驗(yàn)),還有一些諸如用一條讀32位的指令讀兩個(gè)相鄰的16位數(shù)據(jù)等,具體情況可以看看C優(yōu)化手冊(cè)。但這些效率都不高(雖然ti的宣傳說(shuō)能達(dá)到80%,我自己做的時(shí)候發(fā)現(xiàn)絕對(duì)沒(méi)有這個(gè)效率!65%還差不多),如果要提高效率只能用匯編來(lái)做了。還有要看看你的c程序是怎么編的,如果里面有很多中斷的話,6000可以說(shuō)沒(méi)什么優(yōu)勢(shì)。還有,profiler的數(shù)據(jù)也是不準(zhǔn)確的,比實(shí)際的要大,大多少不好說(shuō)。還有dsp在初始化的時(shí)候特別慢,這些時(shí)間就不要和pc機(jī)相比了,如果要比就比核心的部分。

關(guān)于profile:

C6x的Debug工具提供了一個(gè)profile界面。在圖9中,包括了幾個(gè)重要的窗口,左上角的窗口是顯示出我們寫(xiě)的C語(yǔ)言,可以讓我們知道現(xiàn)在做到了哪一步。右上角的窗口顯示的是C6x所編譯出來(lái)的匯編語(yǔ)言,同樣的我們也可以知道現(xiàn)在做到了哪一步。左下角的窗口是命令列,是讓我們下指令以及顯示訊息的窗口。而中間的profile窗口就是在profile模式下最重要的窗口,它顯示出的項(xiàng)目如下:

Count被呼叫的次數(shù)

Inclusive 包含子程序的總執(zhí)行clock數(shù)

Incl-Max 包含子程序的執(zhí)行一次最大clock數(shù)

Exclusive 不包含子程序的總執(zhí)行clock數(shù)

Excl-Max 不包含子程序的執(zhí)行一次最大clock數(shù)

利用這個(gè)profile模式我們可以用來(lái)分析程序中每個(gè)函數(shù)被呼叫的次數(shù)、執(zhí)行的時(shí)脈數(shù)等等。用這個(gè)分析的結(jié)果,我們就可以知道哪個(gè)函數(shù)所花費(fèi)的時(shí)脈最多,是可以再改進(jìn)的,而針對(duì)它來(lái)作最佳化。

匯編代碼級(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)化器可以得到很高的效率,一般可以滿足性能上的要求。

優(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è)。

程序設(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ì)中需要注意。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • dsp
    dsp
    +關(guān)注

    關(guān)注

    554

    文章

    8056

    瀏覽量

    349539
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7613

    瀏覽量

    137238
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3633

    瀏覽量

    93847

原文標(biāo)題:DSP代碼優(yōu)化方法

文章出處:【微信號(hào):changxuemcu,微信公眾號(hào):暢學(xué)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【火熱帖子TOP10】DSP編程技巧——持續(xù)更新中

    :揭開(kāi)編譯器神秘面紗之處理器選項(xiàng)DSP編程技巧之3:揭開(kāi)編譯器神秘面紗之程序優(yōu)化DSP編程技巧之4---揭開(kāi)編譯器神秘面紗之高級(jí)程序
    發(fā)表于 07-24 16:52

    請(qǐng)問(wèn)如何對(duì)DSP編程序進(jìn)行優(yōu)化?

    請(qǐng)問(wèn)如何對(duì)DSP編程序進(jìn)行優(yōu)化?
    發(fā)表于 04-23 07:00

    優(yōu)化DSP功率預(yù)算的方法

    鑒于內(nèi)核、存儲(chǔ)器、I/O 以及其它電軌的過(guò)多電壓電流要求,多核 DSP 實(shí)施需要智能電源管理。DSP 內(nèi)核電壓電源的一個(gè)重要性能基準(zhǔn)就是能夠根據(jù)DSP 使用情況及環(huán)境條件實(shí)時(shí)調(diào)節(jié) VC
    發(fā)表于 11-23 08:09

    基于DSP的任意碼長(zhǎng)RS編碼及算法優(yōu)化

    本文提出通過(guò)在DSP編程算法中增加實(shí)時(shí)構(gòu)造有限域域表的方法,利用DSP的McBSP同步串行通信接口,實(shí)現(xiàn)任意碼長(zhǎng)(最大為255)的RS編碼,同時(shí)討論了C語(yǔ)言
    發(fā)表于 08-07 09:39 ?24次下載

    EPROM優(yōu)化快速編程方法研究

    摘要:隨著EPROM芯片技術(shù)的進(jìn)步,各種編程開(kāi)發(fā)裝置及編程方法相應(yīng)得到發(fā)展。通過(guò)對(duì)標(biāo)準(zhǔn)編程和快速編程過(guò)程的分析,以及與
    發(fā)表于 05-18 09:20 ?16次下載

    DSP環(huán)境下C語(yǔ)言的編程優(yōu)化

    DSP環(huán)境下C語(yǔ)言的編程優(yōu)化,又需要的下來(lái)看看,
    發(fā)表于 01-19 16:57 ?22次下載

    DSP系統(tǒng)應(yīng)用中FLASH在線編程方法

    DSP系統(tǒng)應(yīng)用中FLASH在線編程方法
    發(fā)表于 02-08 00:51 ?12次下載

    基于DSP的圖像去霧算法優(yōu)化方法_楊夢(mèng)雯

    基于DSP的圖像去霧算法優(yōu)化方法_楊夢(mèng)雯
    發(fā)表于 03-19 19:07 ?3次下載

    基于TMS320C6000系列DSP的Flash編程方法

    基于TMS320C6000系列DSP的Flash編程方法
    發(fā)表于 10-19 11:37 ?7次下載
    基于TMS320C6000系列<b class='flag-5'>DSP</b>的Flash<b class='flag-5'>編程</b><b class='flag-5'>方法</b>

    DSP編程優(yōu)化方法的探討

    DSP編程優(yōu)化方法的探討
    發(fā)表于 10-20 10:41 ?5次下載
    <b class='flag-5'>DSP</b>匯<b class='flag-5'>編程</b>序<b class='flag-5'>優(yōu)化</b><b class='flag-5'>方法</b>的探討

    dsp編程用什么語(yǔ)言_dsp編程如何實(shí)現(xiàn)的

    TI公司的DSP用CCS開(kāi)發(fā)平臺(tái),編程語(yǔ)言一般是C語(yǔ)言;來(lái)ADI公司的源DSP用VDSP++開(kāi)發(fā)平臺(tái),一般也是用C語(yǔ)言。當(dāng)然兩個(gè)公司百都有不同型號(hào)的
    發(fā)表于 04-08 15:15 ?2.9w次閱讀
    <b class='flag-5'>dsp</b><b class='flag-5'>編程</b>用什么語(yǔ)言_<b class='flag-5'>dsp</b><b class='flag-5'>編程</b>如何實(shí)現(xiàn)的

    DSP7個(gè)經(jīng)典程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是DSP7個(gè)經(jīng)典程序免費(fèi)下載。
    發(fā)表于 11-20 17:59 ?20次下載

    超全使用串口對(duì)DSP進(jìn)行應(yīng)用可編程方法

    本文介紹了一種通過(guò)串口對(duì)DSP進(jìn)行應(yīng)用可編程方法,該方法簡(jiǎn)單易操作,文中給出了具體的實(shí)現(xiàn)方法
    的頭像 發(fā)表于 04-02 16:13 ?3303次閱讀

    基于DSP的軟件流水優(yōu)化

    本文通過(guò)研究軟件流水相關(guān)技術(shù),結(jié)合TIDSPC6000系列DSP的硬件特性,探討了DSP軟件流水的相關(guān)優(yōu)化方法。通過(guò)性能比較,說(shuō)明這些方法
    發(fā)表于 04-27 09:38 ?10次下載

    SDAccel環(huán)境剖析和最優(yōu)化指南

    電子發(fā)燒友網(wǎng)站提供《SDAccel環(huán)境剖析和最優(yōu)化指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-15 11:37 ?0次下載
    SDAccel環(huán)境<b class='flag-5'>剖析</b>和最<b class='flag-5'>優(yōu)化</b>指南