<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 汽車電子 > 設(shè)計應(yīng)用 > 優(yōu)化DSP應(yīng)用的技術(shù)

          優(yōu)化DSP應(yīng)用的技術(shù)

          ——
          作者:TI/Rob Oshana 時間:2006-09-29 來源:電子產(chǎn)品世界 收藏
          介紹

          數(shù)字信號處理 () 是處理信號和數(shù)據(jù)的專用方法,其目的在于加強并修改這些信號。數(shù)字信號處理也用于分析信號以確定特定的信息內(nèi)容。主要用于處理真實世界的信號。這些信號可由數(shù)字序列進行轉(zhuǎn)化和表示。我們后來使用數(shù)學(xué)方法處理信號,從信號中提取特定信息或以某種方式轉(zhuǎn)化信號。

          在實時中非常普遍,在這種系統(tǒng)中,計算的及時性與準(zhǔn)確性同樣重要。DSP 在這些環(huán)境中非常普遍,因為其根據(jù)設(shè)計,能夠非常迅速地執(zhí)行常見的信號處理操作。DSP 的可編程性允許應(yīng)用隨著時間的推移而不斷變化發(fā)展,從而為應(yīng)用供應(yīng)商提供了眾多優(yōu)勢。進行 DSP 編程需要熟悉應(yīng)用、DSP 硬件架構(gòu)以及用于編寫高效實時軟件、并能滿足系統(tǒng)最終期限的代碼生成工具。

          本文是兩篇文章中的第一篇,將探討 DSP 某些重要的軟件與系統(tǒng)優(yōu)化技術(shù),并將解釋采用強大處理器開發(fā)高效嵌入式應(yīng)用的某些指導(dǎo)原則。

          優(yōu)化的第一條規(guī)則--不要!

          在開始任何優(yōu)化工作之前,您必須了解自己的方向。從性能角度講,所有軟件都是不同的!您必須首先理解瓶頸在哪里。一旦您已經(jīng)對應(yīng)用進行了描述,那么接下來就可以開始調(diào)整代碼。描述應(yīng)用是指衡量代碼每部分所需的時間(或所用的存儲器空間或功耗)。軟件的某些部分僅執(zhí)行一次(如初始化)或有限的次數(shù)。花很多時間優(yōu)化這部分代碼是不明智的,因為這樣做所得的總體節(jié)約是相對有限的。很可能的情況是,軟件的某些部分會執(zhí)行許多次,盡管代碼本身很短,但執(zhí)行代碼的事實常常說明代碼的整體周期需時不菲。如果您能夠從這部分代碼中節(jié)約哪怕一兩個周期,那么所得到的節(jié)約也會相當(dāng)顯著。在調(diào)整并優(yōu)化進程時,這就是您應(yīng)當(dāng)花時間開展工作的地方。

          存儲器的依賴性

          處理器在存儲器中存儲指令和數(shù)據(jù)。盡管人們已經(jīng)創(chuàng)建了許多具有創(chuàng)新性的方法以從存儲器中獲取指令和數(shù)據(jù),但訪問指令和數(shù)據(jù)時總會有性能損失。這就是純粹的開銷了。只要能夠減少等待指令或數(shù)據(jù)存取的時間,不管怎么樣,都能夠改善應(yīng)用的整體性能。舉例而言,硬件高速緩沖系統(tǒng)將會盡可能多的指令靠近 CPU,從而實現(xiàn)快速存取,通常只需一個周期即可,業(yè)經(jīng)驗證這能夠改善整體性能。DSP 擁有片上存儲器,其可存儲數(shù)據(jù)與指令。但數(shù)據(jù)和指令不能自動放置于片上存儲器中。編程員必須對此進行管理,只要管理有效,DSP 就可以利用片上存儲器顯著提高性能。

          存儲器等級中有若干層次(見圖1)。第一層是芯片寄存器。這部分存儲器用于保存臨時和中間數(shù)據(jù)。編譯器在調(diào)度指令時使用寄存器。該存儲器是速度最快、價格最昂貴的(器件上的寄存器越多,器件體積就越大,這意味著硅晶片上的器件減少,也就是說用更多的硅芯片獲得相同數(shù)量的器件,您應(yīng)該明白我的意思吧)。存儲器的下一層是高速緩沖系統(tǒng)。它也是即快速又昂貴,用于將指令和數(shù)據(jù)在使用指令和/或數(shù)據(jù)前移至靠近 CPU 處。存儲器的再下一層是"外部"或"片外"存儲器。該存儲器會比其他存儲器類型的速度慢,而且價格也較便宜。這一般是不使用(存儲期限較長)數(shù)據(jù)和指令時保存的地方。從該存儲器存取信息包括更多的信號交換和控制,因此也需要更多時間。實時嵌入式設(shè)計人員的主要目的是使您將用到的任何東西盡可能靠近 CPU。這意味著需要從外部存儲器獲取信息,使其進入速度更快的存儲器,并使用諸如直接存儲器存?。?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/DMA">DMA)等技術(shù),以及編譯或架構(gòu)技術(shù)。

                             層次

          為了增強采用流水線操作概念的處理器性能,我們使用了硬件架構(gòu)技術(shù)。流水線處理器的原則與汽車裝配線沒什么兩樣。每輛汽車都通過裝配線被一步步組裝起來。許多輛車同時在裝配線上,每輛車位于裝配過程的不同環(huán)節(jié)。在裝配線末端會出現(xiàn)一輛新車,緊接著還有另一輛新車跟進,以此類推。人們早就發(fā)現(xiàn),在前一輛車完成之前即開始下一輛新車的裝配工作,這種做法的成本效益要高得多。在流水線處理器中,情況也是如此。流水線處理器可在前一項任務(wù)完成前開始新任務(wù)。完成率就是傳入新指令的速率。如圖 2a 和 2b 所示,指令的完成時間沒有改變。但指令的完成率提高了。

          為了進一步改善性能,我們可以使用多個流水線。該方法稱作超標(biāo)量,其進一步利用了平行的概念(見圖 2c)。如今某些高性能數(shù)字信號處理器(如 Intel i860)就有一個超標(biāo)量設(shè)計。


                          非流水線、流水線和超標(biāo)量執(zhí)行時間表


                                            圖2. 非流水線、流水線和超標(biāo)量執(zhí)行時間表


                                                     標(biāo)量構(gòu)架
          具備多個獨立執(zhí)行單元的 DSP 利用平行同時執(zhí)行多個獨立指令,這將為性能改善提供立竿見影的效果。關(guān)鍵在于找到彼此獨立的"n"個不同指令。有時,我們通過硬件完成此工作,有時則通過軟件來完成(編譯)。超長指令字(VLIW)處理器(如 TI 的 C6200 DSP 系列產(chǎn)品)使用編譯技術(shù)可以在 8 個獨立的處理器執(zhí)行單元上調(diào)度最多 8 個彼此獨立的指令。指令間的數(shù)據(jù)依賴性常常將此限制在最高速率之下,但還是能夠?qū)崿F(xiàn)顯著的性能。許多情況下,我們可以重新構(gòu)建算法,以利用架構(gòu)的優(yōu)勢,從而實現(xiàn)多執(zhí)行單元的優(yōu)勢。 {{分頁}}

          較之于流水線處理器而言,超標(biāo)量架構(gòu)可提供更多的并行處理能力。但是,如果算法或函數(shù)不能利用此并行功能的話,那么多余的管道將得不到使用,就會降低能夠?qū)崿F(xiàn)的并行量。編寫用作快速運行于流水線處理器上的算法不一定能在超標(biāo)量處理器上同樣高效運行。舉例而言,我們可以看看圖 4a 所示的算法。該算法的編寫利用了流水線處理器的優(yōu)勢。這是在串行處理器上計算多項式的常見方法,因為它不必再計算 p**8, p**7 等。這節(jié)約了周期和存儲中間值的寄存器。

          但就超標(biāo)量器件而言,這并不是計算表達式的最佳方法。算法中的括號限制了編譯器順序計算表達式的功能。這也使得并行功能無法發(fā)揮。如果我們將此表達式分解為幾個獨立的表達式,那么編譯器就可以在超標(biāo)量器件的并行管道上以任何方便的順序來安排這些獨立的表達式。這樣進行的計算利用了較少的指令周期,而采用了更多的寄存器(如圖 4b 所示)。

          上述實例說明了為什么編程人員必須了解器件架構(gòu)、編譯器以及算法,從而確定執(zhí)行任何特定函數(shù)的最快方法。我們將討論利用上述高性能設(shè)備加速函數(shù)計算的其他方法。


          rp = (((((((R8*p + R7) * p + R6) * p + R5) * p + R4) * p + R3) * p + R2) * p + R1) * p

               圖 4a)

          p2 = p * p
          p3 = p * p * p
          .
          .
          p8  = p * p * p * p * p * p * p * p
          ---------------------------------------------
          R1p1 = R1 * p
          R2p2 = R2 * p2
          .
          .
          R8p8 = R8 * p8
          ----------------------------------------------
          rp = 0.0F
          rp += R1p1
          .
          .
          rp += R8p8

                       圖 4b)

          圖4. a)、編寫可快速運行于流水線處理器上的算法。B)、 相同算法經(jīng)修改后在超標(biāo)量處理器上快速運行。

          直接存儲器存取

          直接存儲器存取 ()是無 CPU介入情況下訪問存儲器的一種方式。外設(shè)用于向內(nèi)存直接寫入并導(dǎo)出數(shù)據(jù),這就減輕了 CPU 的負(fù)擔(dān)。 就是另一種類型的CPU,其唯一作用就是快速移動數(shù)據(jù),其優(yōu)勢則在于 CPU 可以向 DMA 發(fā)出一些指令移動數(shù)據(jù),隨后就可以再進行原本的工作。DMA 在 CPU 運行的同時移動數(shù)據(jù)(圖 5)。這實際就是另一種利用器件內(nèi)置并行功能的方法。DMA 在復(fù)制大量數(shù)據(jù)時非常有用。較小的數(shù)據(jù)塊無法受益,因為還要考慮到 DMA 的設(shè)置和開銷時間,反倒不如直接使用 CPU 合適。但如果明智使用的話,DMA 可以節(jié)約大量時間。


                                     使用 dma 而非 cpu 能夠顯著提升性能


                                       圖 5. 使用 DMA 而非 CPU能夠顯著提升性能

          由于訪問外部存儲器會帶來很大的性能損失,且占用 CPU 的代價不菲,因此只要有可能,就應(yīng)采用 DMA。最好是在實際需要數(shù)據(jù)之前就啟動 DMA 操作。這讓CPU 同時也有工作可做,且不用強制應(yīng)用等待數(shù)據(jù)的移動。隨后,當(dāng)確實需要數(shù)據(jù)時,數(shù)據(jù)就已經(jīng)就位了。應(yīng)用應(yīng)當(dāng)進行檢查,以確認(rèn)操作成功,這將要求檢查寄存器。如果操作提前完成,這將對寄存器進行一次查詢,但不會產(chǎn)生大量工作,占用寶貴的處理時間。

          DMA 的常見用法是將數(shù)據(jù)移入或移出芯片。CPU 訪問片上存儲器的速度大大快于其訪問片外或外部存儲器的速度。將盡可能多的數(shù)據(jù)放于芯片上是提高性能的最佳途徑。如果被處理的數(shù)據(jù)不能全部同時放于芯片上(如大型陣列),那么數(shù)據(jù)可使用 DMA 成塊地移入或移出芯片。所有數(shù)據(jù)傳輸都可在后臺進行,同時 CPU 對數(shù)據(jù)進行實際處理。片上存儲器的智能管理和布局可以減少數(shù)據(jù)必須移入、移出存儲器的次數(shù)。就如何使用片上存儲器開發(fā)出智能計劃,在這項工作上投入時間和精力是值得的。總體而言,規(guī)則就是使用 DMA 將數(shù)據(jù)移入、移出片上存儲器并在芯片上生成結(jié)果(圖 6)。由于成本和空間原因,大多數(shù) DSP 不具備很多芯片上存儲器。這要求編程人員協(xié)調(diào)算法,以高效利用現(xiàn)有的片上存儲器。

          為使用 DMA 測量代碼確實會產(chǎn)生一些性能損失。根據(jù)應(yīng)用使用 DMA 的多少,代碼大小會上升。如果全面啟用 DMA,我們曾遇到過代碼大小增長 50% 的情況。使用 DMA 還增加了復(fù)雜性和應(yīng)用的同步化。只有在要求高吞吐量的情況下才應(yīng)使用 DMA。但是,片上存儲器的智能布局和使用以及明智地使用 DMA 能夠消除大多數(shù)訪問片外存儲器所帶來的性能損失。


                                          使用 dma 將數(shù)據(jù)移入、移出芯片的模板
                                         圖 6. 使用 DMA 將數(shù)據(jù)移入、移出芯片的模板

          等待狀態(tài)與探詢

          就像存儲器和CPU一樣,可將DMA視為資源。在DMA操作進行過程中,應(yīng)用可以等待DMA傳輸完成,也可以繼續(xù)處理應(yīng)用的另一部分,直到數(shù)據(jù)傳輸完成為止。每種方法都有其優(yōu)勢和劣勢。如果應(yīng)用等待DMA傳輸完成,那么它必須探詢DMA硬件狀態(tài)寄存器,直至對比特的設(shè)置完成。這要求CPU在循環(huán)操作中檢查DMA狀態(tài)寄存器,從而導(dǎo)致浪費寶貴的CPU周期。 如果傳輸較短,那么這只需幾個周期就可完成,等等也是值得的。如果數(shù)據(jù)傳輸較長,應(yīng)用工程師可能希望使用同步化機制,如在傳輸完成時發(fā)出信號標(biāo)志一樣。在這種情況下,應(yīng)用會在傳輸發(fā)生時通過系統(tǒng)等待信號標(biāo)志。該應(yīng)用將與另一個準(zhǔn)備運行的應(yīng)用進行交換。任務(wù)交換也會導(dǎo)致開銷,因此如果任務(wù)交換產(chǎn)生的開銷大于對DMA完成進行簡單探詢帶來的開銷,那么就不應(yīng)進行任務(wù)交換。等待時間取決于被傳輸數(shù)據(jù)的數(shù)量。

          圖7顯示了檢查傳輸長度并執(zhí)行DMA探詢操作(如果只需要傳輸幾個字的話)或信號標(biāo)志等待操作(對較大型數(shù)據(jù)傳輸而言)的一些代碼。數(shù)據(jù)大小"平衡"長度取決于處理器以及接口結(jié)構(gòu),應(yīng)當(dāng)建立起原型,以確定最佳大小。

          圖8顯示了等待操作的代碼。在這種情況下,應(yīng)用將進行SEM_pend操作,以等待DMA傳輸?shù)耐瓿?。通過暫時中止當(dāng)前執(zhí)行的任務(wù)并交換到另一項任務(wù)以進行其他處理,可使應(yīng)用能夠進行其他有意義的工作。當(dāng)操作系統(tǒng)中止一項任務(wù)而開始執(zhí)行另一項任務(wù)時,會導(dǎo)致一定量的開銷。開銷量的大小取決于DSP和操作系統(tǒng)。

          圖9顯示了探詢操作的代碼。在該例中,應(yīng)用將繼續(xù)探詢DMA完成狀態(tài)寄存器以獲知操作是否完成。這要求使用CPU來進行探詢操作。這樣做使CPU無法進行其他有意義的工作。如果傳輸足夠短,那么CPU只需在短時間內(nèi)探尋狀態(tài)寄存器,這種方法也就可以更有效。


                         檢查傳輸長度并調(diào)用驅(qū)動程序功能的代碼片段

                 圖7. 檢查傳輸長度并調(diào)用驅(qū)動程序功能的代碼片段,其將探詢DSP狀態(tài)寄存器中的DMA完成位,抑或等待操作系統(tǒng)信號標(biāo)志。{{分頁}}


          最后決策建立于數(shù)據(jù)傳輸數(shù)量以及CPU探詢必須進行多少周期的基礎(chǔ)上。如果探詢所需時間少于操作系統(tǒng)交換任務(wù)并開始執(zhí)行新任務(wù)的開銷,那么這種方法就會更有效。


                                 等待 dma 完成信號標(biāo)志的代碼片段
                                    圖 8. 等待 DMA 完成信號標(biāo)志的代碼片段 

                              探詢 dma 是否完成的代碼片段
                                                圖9. 探詢 DMA 是否完成的代碼片段

          內(nèi)存的管理

          DSP 最重要的資源之一就是其本身片上或內(nèi)部的存儲器。這是大多數(shù)計算將發(fā)生的地方,因為訪問該存儲器比訪問片外或外部存儲器要快得多。由于許多 DSP 因為決定不可預(yù)見性的緣故都不具備數(shù)據(jù)高速緩沖存儲器,因此軟件設(shè)計人員將 DSP 內(nèi)存看作是一種由程序員管理的高速緩沖存儲器。與程序員不能控制的處理器硬件高速緩沖存儲器數(shù)據(jù)以提高性能不同,DSP 內(nèi)部數(shù)據(jù)存儲器在DSP程序員的完全控制之下。使用 DMA,數(shù)據(jù)可以在后臺進出內(nèi)存,基本或完全不受DSP CPU的干預(yù)。如果管理正確有效的話,內(nèi)存會成為非常有價值的資源。

          安排好內(nèi)存的使用并隨時管理數(shù)據(jù)進入內(nèi)存的地點,這是相當(dāng)重要的??紤]到用于眾多應(yīng)用的有限內(nèi)存量,并非所有的程序數(shù)據(jù)都能在應(yīng)用執(zhí)行時間中儲存于內(nèi)存中。隨著時間的推移,數(shù)據(jù)將被移至內(nèi)存中,進行處理,可能會被重新使用,并在不需要時移至外部存儲器中。圖10顯示了內(nèi)部 DSP 存儲器在應(yīng)用執(zhí)行時可能的存儲器映射情況。在應(yīng)用執(zhí)行時,不同的數(shù)據(jù)結(jié)構(gòu)將移至片上存儲器中,并最終移出芯片保存到外部存儲器中,或在不需要時在內(nèi)存中將其覆蓋。


                   必須由程序員管理的 dsp 內(nèi)存
                                                        圖10. 必須由程序員管理的 DSP 內(nèi)存

          結(jié)論

          直接存儲器存取 (DMA) 是無需 CPU 干預(yù)而訪問存儲器的一種方法。外設(shè)用于向內(nèi)存直接寫入并導(dǎo)出數(shù)據(jù),這就減輕了 CPU 的負(fù)擔(dān)。DMA 只是另一種類型的CPU,其唯一作用就是快速移動數(shù)據(jù),優(yōu)勢則在于 CPU 可以向 DMA 發(fā)出一些指令移動數(shù)據(jù),隨后就可以再進行原本的工作。程序員應(yīng)當(dāng)充分利用 DMA 的功能,特別是對 DSP 系統(tǒng)中常見的、數(shù)據(jù)強度大的數(shù)字處理應(yīng)用更是如此。DMA能夠大大減輕 CPU 的負(fù)擔(dān),并有助于高效管理數(shù)據(jù)。

          下一次,我們將討論其他一些利用 DSP 器件架構(gòu),并使用編譯器調(diào)度高效代碼的DSP 優(yōu)化技術(shù),其也能顯著改善性能。具體的課題將包括軟件流水線和循環(huán)展開技術(shù)。

          參考書目

          《TMS320C62X 程序員指南》,德州儀器,1997 年;

          《計算機架構(gòu),量化的方法》,作者:John L Hennesey 和 David A Patterson , Morgan Kaufmann Publishers 公司1990 年版權(quán)所有,Palo Alto, CA。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();