女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何提高開源嵌入式處理應用程序的性能

電子設計 ? 來源:郭婷 ? 作者:電子設計 ? 2019-04-03 08:34 ? 次閱讀

隨著“開源”C / C ++算法成為嵌入式處理應用程序中基于版稅的代碼越來越受歡迎的替代方案,它們帶來了新的技術挑戰。其中最重要的是如何優化所獲取的代碼以在所選處理器上良好地工作。這個問題是至關重要的,因為為給定處理器系列編寫的編譯器將利用該處理器的優勢,可能會犧牲其他領域的低效率。當在不同平臺上直接運行相同的算法時,性能可能會降低。本文將探討將此類開源算法移植到ADI公司的Blackfin ?處理器,并在此過程中概述導致代碼優化的“攻擊計劃”。

什么是開源?

通常理解的“開源”定義是指任何帶有源代碼的項目,可供其他程序員使用。開源軟件通常在軟件程序員社區內協作開發并自由分發。例如,Linux操作系統就是以這種方式開發的。如果一切順利,最終的努力提供了一個不斷發展,強大的應用程序,經過充分測試,因為許多不同的應用程序利用了代碼。鼓勵程序員使用代碼,因為他們不必為此付費或自行開發,從而加快了他們的項目進度。他們成功使用該代碼提供了進一步的測試信息。

“開源”的認證標志由開源倡議(OSI)所有。如果分發條款符合OSI的開源定義,那么開發為可自由共享和發展的代碼可以使用開源商標。這要求根據某些指導原則將軟件重新分發給其他人。例如,在通用公共許可證(GPL)下,必須提供源代碼,以便其他開發人員能夠改進或發展它。

什么是Ogg?

整個開發人員社區都致力于為數字媒體創建開放標準和應用程序。其中一個組織是Xiph.Org Foundation,一家非營利性公司,其目的是支持和開發免費,開放的協議和軟件,以服務于公共,開發和商業市場。這個傘式組織(見圖1)負責監督視頻 - (Theora),音樂等技術的管理 - (有損Vorbis和無損Flac),以及語音(Speex)編解碼器。

如何提高開源嵌入式處理應用程序的性能

術語Ogg表示保存多媒體數據的容器格式。它通常用作生成數據的特定編解碼器的前綴。我們將在這里討論的音頻編解碼器Vorbis使用Ogg將其比特流存儲為文件,因此它通常被稱為“Ogg Vorbis”。事實上,一些便攜式媒體播放器被宣傳為支持OGG文件,其中“Vorbis”部分是隱含的。下面討論的語音編解碼器Speex也使用Ogg格式將其比特流存儲為計算機上的文件。但是,互聯網協議語音(VoIP)和其他實時通信系統不需要文件存儲功能,并且使用像實時傳輸協議(RTP)這樣的網絡層來封裝這些流。因此,即使Vorbis通過多播分發服務器通過網絡傳輸也會丟失其Ogg shell。

什么是Vorbis?

Vorbis 是一種完全開放,無專利,免版稅的音頻壓縮格式。在許多方面,它在功能上與普遍存在的MPEG-1/2第3層(MP3)格式和較新的MPEG-4(AAC)格式非常相似。該編解碼器設計用于16至128 kbps /通道的可變比特率的中高質量(8 kHz至48 kHz帶寬,> 16位,復音)音頻,因此它是音樂的理想格式。

最初的Vorbis實現是使用浮點運算開發的,主要是因為編程容易導致更快的發布。由于大多數電池供電的嵌入式系統(如便攜式MP3播放器)使用成本更低,電池效率更高的定點處理器,開源開發人員社區創建了Vorbis解碼器的定點實現。被稱為 Tremor 的定點Vorbis解碼器的源代碼是根據許可證發布的,允許將其合并到開源和商業系統中。

在選擇特定的用于移植Vorbis解碼器的定點架構,分析從壓縮比特流中恢復音頻所涉及的處理類型非常重要。 Vorbis解碼過程(和其他類似算法)的通用處理器流程如圖2所示。與許多其他解碼算法一樣,有兩個主要階段:前端和后端。

如何提高開源嵌入式處理應用程序的性能

< p>在前端階段,主要活動是標頭和數據包解包,表查找和霍夫曼解碼。這種操作涉及大量條件代碼和相對大量的程序空間,因此嵌入式開發人員通常使用微控制器作為前端。

后端處理由過濾函數,逆變換和一般向量運算定義。與前端階段相比,后端階段涉及更多的循環結構和內存訪問,通常使用較少量的代碼。由于這些原因,嵌入式系統中的后端處理歷來由成熟的DSP主導。

Blackfin處理器架構統一了微控制器(MCU)和DSP功能,因此不再需要兩個單獨的設備。它可以有效地用于在單個芯片上實現前端和后端處理。

什么是Speex?

Speex 是開放式的-source,專利用于語音的專利音頻壓縮格式。雖然Vorbis用于壓縮所有類型的音樂和音頻,但Speex僅針對語音。出于這個原因,Speex在相同質量水平的語音上可以取得比Vorbis更好的結果。

正如Vorbis與基于版稅的算法(如MP3和AAC)競爭一樣,Speex在語音編解碼器市場中與GSM-EFR和G.72x算法共享空間,例如G.729和G.722。 Speex還具有許多其他編解碼器中不存在的功能。這些包括可變比特率(VBR),在同一比特流(8 kHz,16 kHz和32 kHz)中集成多個采樣率,以及立體聲編碼支持。此外,Speex的最初設計目標是促進融入互聯網應用程序,因此它是VoIP電話系統的一個非常強大的組件。

除了其獨特的技術特性,Speex還具有成本的主要優勢“沒有“ - 可以分發和修改以符合特定的應用程序。源代碼以類似于Vorbis的許可證分發。由于項目的維護者意識到將Speex嵌入到小型定點處理器中的重要性,因此在主代碼分支中引入了定點實現。

在Blackfin處理器上優化Vorbis和Speex

當現有應用程序(如Vorbis或Speex)移植到新處理器時,立即“開箱即用”代碼性能是最重要的考慮因素。但是,軟件工程師可以通過熟悉可用于優化整體性能的眾多技術來獲得巨大回報。有些只需要很少的額外努力。

將任何軟件移植到Blackfin等嵌入式處理器的第一步是定制低級I / O例程以滿足系統需求。例如,Vorbis和Speex的參考代碼假定數據源自文件和處理后的輸出存儲到文件中(主要是因為這兩種實現最初都是在Unix / Linux系統上運行的,其中文件是I / O例程可用)。然而,在嵌入式媒體系統中,輸入和/或輸出通常連接到在數字和現實模擬域之間轉換的A / D和D / A 數據轉換器。圖3顯示了可能基于Vorbis的媒體播放器實現的概念性概述。輸入比特流從閃存傳輸,解碼器輸出驅動音頻DAC。此外,雖然一些媒體應用程序(例如,便攜式音樂播放器)仍然使用文件來存儲數據,但許多系統用網絡連接替換存儲。

如何提高開源嵌入式處理應用程序的性能

當優化像Vorbis解碼器這樣的系統時有效地運行,有一個有組織的攻擊計劃是一個好主意。一種可能性是首先從C內優化算法,然后簡化系統數據流,最后在裝配級別調整代碼的各個部分。圖4通過連續的優化步驟說明了處理器負載的代表性減少,并顯示了該方法的效率。

如何提高開源嵌入式處理應用程序的性能

編譯器優化

可能是最有用的代碼優化工具是一個很好的探測器。使用VisualDSP ++ for Blackfin中的統計 profiler ,程序員可以快速關注在處理器執行代碼時變得明顯的熱點。在許多實現中,20%的代碼占用了80%的處理時間。關注這些關鍵部分會產生最高的邊際回報。事實證明,循環是Vorbis等媒體算法優化的主要候選者,因為密集數字運算通常發生在它們內部。

還有全局的代碼優化方法。首先,編譯器可以優化內存保護或速度。此外,可以考慮將函數自動內聯到C代碼中的匯編指令。 (編譯器的inline關鍵字用于指示函數應該具有在調用點內聯生成的代碼。這樣做可以避免各種成本,例如程序流延遲,函數入口和退出指令以及參數傳遞開銷。)這也會創建在空間和速度之間進行權衡。最后,像Blackfin可用的編譯器可以使用兩階段過程來導出單個項目中各種源文件之間的關系,以進一步加快代碼執行速度(過程間分析)。

如上所述,大多數媒體算法參考軟件都使用浮點運算。但考慮到使用分數定點機器編寫的軟件仍然錯過了一個關鍵部分。大多數編解碼算法的首選語言是C語言,但C語言并不“本地”支持使用分數定點數據。因此,許多分數定點算法都使用整數數學進行仿真。這可能使代碼具有高度可移植性,但它不能通過使用特定于機器的編譯器構造重寫某些數學函數來獲得可達到的性能,以獲得最高的計算效率。

說明這一點的具體示例如圖5.左欄顯示了適用于所有整數機器的模擬分數算術的C代碼和Blackfin編譯器輸出。執行32位小數乘法的一次調用需要80個周期。右欄顯示了利用(mult_fr1x32x32)可獲得的性能改進,這是Blackfin編譯器的一個內在函數,它利用了底層的小數硬件。通過這種相當容易的修改,可以實現86%的加速。

如何提高開源嵌入式處理應用程序的性能

系統優化

系統優化以正確的內存布局開始。在最好的情況下,所有代碼和數據都適合處理器的L1內存。遺憾的是,這并不總是可行,特別是在網絡應用程序中實現大型基于C的應用程序時。

真正的困境是處理器經過優化,可通過直接內存獨立于核心移動數據訪問(DMA),但MCU程序員通常使用緩存模型運行。雖然核心提取是不可避免的現實,但使用DMA或高速緩存進行大型傳輸對于保持性能是必不可少的。

為了介紹討論,讓我們考慮Blackfin總線體系結構固有支持的幾個屬性。第一個是在沒有核心干預的情況下仲裁請求的能力。因為內部存儲器通常構造在子庫中,所以DMA控制器和核心的同時訪問可以通過將數據放置在單獨的庫中而在單個周期中完成。例如,核心可以在一個子庫中的數據上操作,而DMA在第二子庫中填充新的緩沖器。在某些情況下,也可以同時訪問同一個子庫。

通常只有一條物理總線可用于訪問外部存儲器。結果,仲裁功能變得更加關鍵。下面是一個澄清挑戰的示例:在任何給定周期,可以訪問外部存儲器位置,以便在它作為傳入和傳出數據的源和目標的同時填充指令緩存。

指令執行

Blackfin處理器使用分層存儲器架構,力求平衡具有不同大小和性能級別的多個級別的存儲器。片上 L1存儲器最接近核心處理器,以全時鐘速率工作。該存儲器可以配置為SRAM和/或高速緩存。需要最大確定性的應用可以在單核時鐘周期內訪問片上SRAM。對于需要更大代碼尺寸的系統,可提供額外的片上和片外存儲器 - 延遲增加。

SDRAM 比L1 SRAM慢,但存儲需要大型程序和數據緩沖區。但是,程序員可以通過多種方式利用快速L1內存。如果目標應用程序直接適合L1存儲器,除了程序員將應用程序代碼直接映射到該存儲空間之外,不需要特殊操作 - 如上述Vorbis示例中那樣。

如果應用程序代碼對于內部存儲器而言太大,例如,將網絡組件添加到Vorbis編解碼器時,可以使用緩存機制來允許程序員訪問更大,更便宜的外部存儲器。 緩存用作在需要時自動將代碼放入L1內存的方法。一旦進入L1,代碼就可以在單個核心周期中執行,就像它首先存儲在芯片上一樣。這個過程的關鍵優勢在于程序員不必管理進出緩存的代碼移動。

當執行的代碼本質上是線性的時,使用緩存是最好的。指令緩存實際上執行兩個角色。首先,它有助于以更有效的方式從外部存儲器預取指令。此外,由于高速緩存通常使用某種類型的“最近最少使用”算法運行,因此最常運行的指令通常保留在高速緩存中。因此,如果代碼已經被提取一次并且尚未被替換,那么它將在下一次循環時準備好執行。

謹慎的實時程序員沒有信任緩存來獲得最好的系統性能,因為如果執行需要時指令塊不在高速緩存中,系統性能將降低。利用緩存鎖定機制可以避免此問題。當關鍵指令加載到緩存中時,可以鎖定緩存行以防止指令被替換。這允許程序員在緩存中保留他們所需的內容,并允許緩存機制本身管理不太重要的指令。此功能使Blackfin處理器與其他信號處理器區別開來。

數據管理

在討論了如何最好地管理代碼以提高此應用程序的性能之后,我們現在考慮數據移動的選項。作為高速緩存的替代方案,可以使用獨立于內核的DMA控制器將數據移入和移出L1存儲器。雖然內核在一部分內存上運行,但DMA正在引入下一個要處理的數據緩沖區。

Blackfin數據存儲器架構對于整體系統性能與指令一樣重要 - 時鐘速度。由于多媒體應用程序中任何時候都經常發生多次數據傳輸,因此總線結構必須支持內部和外部存儲器的所有區域的核心和DMA訪問。至關重要的是自動處理DMA控制器和內核的仲裁,否則性能將大大降低。只需要設置DMA控制器,然后在數據準備好處理時響應中斷,就需要進行核心到DMA的交互。此外,數據緩存還可以提高整體性能。

在默認模式下,Blackfin執行數據提取作為基本核心功能。雖然這通常是用于傳輸數據的最低效機制,但它導致最簡單的編程模型。快速暫存器內存通常作為L1內存的一部分提供;但對于較大的片外緩沖區,如果核心必須獲取所有內容,則訪問時間將受到影響。不僅需要多個周期來獲取數據,而且核心也將忙著進行提取。

因此,在可能的情況下,應始終使用DMA來移動數據。 Blackfin處理器具有DMA功能,可在外設和內存之間以及不同內存段之間傳輸數據。例如,我們的Vorbis實現使用DMA將音頻緩沖區傳輸到音頻D / A轉換器

對于此音頻應用程序,“旋轉門”雙緩沖區方案用于容納DMA引擎。由于串行端口DMA清空了循環雙緩沖器的一半,另一半填充有解碼的音頻數據。為了限制壓縮數據被解碼的速率,DMA中斷服務程序(ISR)修改解碼器可以讀取的信號量,以確保寫入雙緩沖區的特定一半是安全的。在缺乏操作系統(OS)的設計中,輪詢信號量意味著浪費CPU周期;但是,在操作系統下,調度程序可以切換到另一個任務(如用戶界面)以使處理器忙于實際工作。

如果不考慮數據一致性,使用DMA會導致錯誤的結果。因此,與音頻DAC關聯的音頻緩沖區被放置在非高速緩存的存儲空間中,因為除了要由DMA傳輸的緩沖區之外,高速緩存可能保存的數據版本更新。

裝配優化

優化的最后階段與用匯編語言重寫開源C代碼的孤立段有關。通過程序集重寫提高性能的最佳選擇通常是中斷服務程序(ISR)和可重用的信號處理模塊。

在程序集中編寫中斷處理程序的動力是低效的ISR會降低其他中斷處理程序的響應速度。例如,某些音頻設計必須使用音頻ISR格式化為音頻DAC綁定的AC97數據。由于這種情況會定期發生,因此長音頻ISR會降低其他事件的響應速度。減少中斷處理程序循環計數的最佳方法是在匯編中重寫它。

可重用信號處理模塊的一個很好的例子是修改的離散余弦變換(MDCT)用于后端Vorbis處理,將時域信號轉換為頻域表示。編譯器永遠不會像熟練的匯編程序員那樣生成“緊”的代碼,因此MDCT的C版本效率低下。相同功能的匯編版本可以利用Blackfin架構的硬件功能,例如單周期蝶形加/減和硬件位反轉。

今天,Vorbis和Speex的Blackfin端口都存在,可根據要求提供。這些端口在ADSP-BF533 EZ-KIT Lite上運行。在blackfin.uclinux.org上也可以找到μClinux的開源端口。它們共同實現了各種各樣的應用程序,這些應用程序可以集成免版稅的語音或音樂功能,同時保留足夠的處理空間以實現其他特性和功能。例如,新的ADSP-BF536和ADSP-BF537及其集成的以太網MAC為低成本的網絡音頻和語音應用打開了大門。很明顯,開源代碼預示著嵌入式處理領域的一場革命,Blackfin處理器有望充分利用這種情況。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19808

    瀏覽量

    233570
  • 嵌入式
    +關注

    關注

    5141

    文章

    19537

    瀏覽量

    315030
  • C++
    C++
    +關注

    關注

    22

    文章

    2117

    瀏覽量

    74781
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    嵌入式應用程序進行性能優化

    嵌入式系統由于受功耗、成本和體積等因素的制約,嵌入式微處理器的處理能力與桌面系統處理器相比也存在較大差距,故嵌入式系統對
    發表于 12-22 07:46

    嵌入式系統應用程序移植的研究

    隨著嵌入式系統的大量使用,對各類應用程序的需求也日益增長,為了避免應用程序的重復開發,往往需要將基于某一嵌入式操作系統平臺的應用程序移植到另
    發表于 09-18 11:51 ?12次下載

    基于FPGA的原型系統的嵌入式應用程序

    嵌入式應用程序通常需要使用標準的微機和定制的接口。 本文講的是基于FPGA的原型系統的嵌入式應用程序。 Embedded applications usually require th
    發表于 05-22 14:48 ?21次下載
    基于FPGA的原型系統的<b class='flag-5'>嵌入式</b><b class='flag-5'>應用程序</b>

    MATLAB平臺的DSP嵌入式應用程序設計的研究

    MATLAB平臺的DSP嵌入式應用程序設計的研究
    發表于 10-19 13:22 ?7次下載
    MATLAB平臺的DSP<b class='flag-5'>嵌入式</b><b class='flag-5'>應用程序</b>設計的研究

    基于MATLAB平臺的DSP嵌入式應用程序設計的研究

    基于MATLAB平臺的DSP嵌入式應用程序設計的研究
    發表于 10-20 15:09 ?5次下載
    基于MATLAB平臺的DSP<b class='flag-5'>嵌入式</b><b class='flag-5'>應用程序</b>設計的研究

    如何為應用程序選擇嵌入式系統

    PC的性能和能力的應用程序嵌入式解決方案的前景發生了翻天覆地的變化,一切只為更好地服務于這些應用程序: (1)嵌入式系統技術和設計的演進
    發表于 10-20 16:27 ?0次下載

    基于嵌入式Linux應用程序開發詳解

    基于嵌入式Linux應用程序開發詳解
    發表于 10-25 14:17 ?12次下載
    基于<b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>應用程序</b>開發詳解

    構建和優化嵌入式和物聯網應用程序

    構建和優化嵌入式,移動和物聯網應用程序
    的頭像 發表于 05-31 09:23 ?1922次閱讀

    ARM嵌入式處理器的GNU工具應用程序免費下載

    本文檔的主要內容詳細介紹的是ARM嵌入式處理器的GNU工具應用程序免費下載。
    發表于 07-05 16:11 ?7次下載
    ARM<b class='flag-5'>嵌入式</b><b class='flag-5'>處理</b>器的GNU工具<b class='flag-5'>應用程序</b>免費下載

    增強開源應用程序中的處理性能

    增強開源應用程序中的處理性能
    發表于 05-15 13:41 ?4次下載
    增強<b class='flag-5'>開源</b><b class='flag-5'>應用程序</b>中的<b class='flag-5'>處理</b>器<b class='flag-5'>性能</b>

    嵌入式Linux應用程序例程

    嵌入式Linux應用程序例程(arm嵌入式開發步驟)-嵌入式Linux應用程序例程,有需要的可以參考!
    發表于 07-30 13:23 ?16次下載
    <b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>應用程序</b>例程

    《從實踐中學嵌入式Linux應用程序開發》pdf完整版資源分享

    《從實踐中學嵌入式Linux應用程序開發》內容簡介: 《從實踐中學嵌入式linux應用程序開發》結合大量實例,講解了嵌入式linux
    發表于 11-01 17:07 ?0次下載
    《從實踐中學<b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>應用程序</b>開發》pdf完整版資源分享

    嵌入式Linux應用程序開發-(1)第一個嵌入式QT應用程序

    第一個嵌入式QT應用程序在成功安裝 Qt Creator 開發環境后,我們通過一個簡單的嵌入式Qt應用程序,來說明一下如何構建和編譯一個Qt界面應用
    發表于 11-01 17:21 ?16次下載
    <b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>應用程序</b>開發-(1)第一個<b class='flag-5'>嵌入式</b>QT<b class='flag-5'>應用程序</b>

    嵌入式Linux應用程序開發之圖形編程

    嵌入式Linux應用程序開發之圖形編程資料分享。
    發表于 04-12 14:50 ?2次下載

    使用微型嵌入式設備實現嵌入式語音識別應用程序

    電子發燒友網站提供《使用微型嵌入式設備實現嵌入式語音識別應用程序.zip》資料免費下載
    發表于 12-09 10:00 ?0次下載
    使用微型<b class='flag-5'>嵌入式</b>設備實現<b class='flag-5'>嵌入式</b>語音識別<b class='flag-5'>應用程序</b>