嵌入式系統(tǒng)的性能優(yōu)化設(shè)計_第1頁
嵌入式系統(tǒng)的性能優(yōu)化設(shè)計_第2頁
嵌入式系統(tǒng)的性能優(yōu)化設(shè)計_第3頁
嵌入式系統(tǒng)的性能優(yōu)化設(shè)計_第4頁
嵌入式系統(tǒng)的性能優(yōu)化設(shè)計_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

嵌入式系統(tǒng)的性能優(yōu)化設(shè)計內(nèi)容性能優(yōu)化概述性能優(yōu)化的方法論(Methodology)性能優(yōu)化的層次軟件優(yōu)化的工具7.1性能優(yōu)化概述無論對通用桌面計算機(jī)系統(tǒng),還是對在嵌入式系統(tǒng)而言,優(yōu)化(Optimization)一直是應(yīng)用程序追求的目標(biāo)之一。由于嵌入式系統(tǒng)是一個資源受限的系統(tǒng),它對程序的運行的空間和時間要求比桌面系統(tǒng)更為苛刻,因此,應(yīng)用程序的優(yōu)化對嵌入式系統(tǒng)來說尤顯得必要和緊迫。根據(jù)優(yōu)化的側(cè)重點不同,嵌入式系統(tǒng)的優(yōu)化大致分為:運行速度優(yōu)化、代碼尺寸優(yōu)化和低功耗優(yōu)化等三個方面。本章介紹的性能優(yōu)化是指運行速度優(yōu)化,而低功耗優(yōu)化將在下一章中重點介紹。7.1性能優(yōu)化概述性能優(yōu)化為什么對于嵌入式系統(tǒng)尤其重要?價格敏感類系統(tǒng)希望使用盡可能便宜的硬件但是又要能提供滿足應(yīng)用需求的性能如各種數(shù)碼產(chǎn)品性能critical類系統(tǒng)價格不敏感應(yīng)用的效果取決于能達(dá)到的性能比如CT,如果計算夠快,可以做實時的3DCT支持下的外科手術(shù)7.2性能優(yōu)化的方法論(Methodology)高速化并行化流水化計算和IO的互相替代性能優(yōu)化一般都有代價7.2.1高速化提高時鐘頻率更快的CPU主頻2009年2月,東芝發(fā)布了1Ghz主頻的TG01智能手機(jī)Qualcomm實現(xiàn)的基于ARM內(nèi)核的處理器更快的RAM頻率SDRAM主頻66Mhz→100Mh→133Mhz更快的IO頻率PCI1.033Mhz→PCI2.166Mhz→PCI-X1.0133Mhz→PCI-X2.0533Mhz一個時鐘周期做一件事情→一個時鐘周期做多件事情內(nèi)存訪問方式:SDR→DDR→QDR(IntelCoreDuo的FSB)ToshibaTG01綽號:智能怪獸時鐘可以無極限的快下去嗎?在2000之前,通過集成電路的工藝的不斷的深納米化,頻率可以做到越來越高180nm→130nm→90nm但是在2000年左右,業(yè)界發(fā)現(xiàn)了問題功耗越來越大,已經(jīng)無法控制另外,硬件設(shè)計也變得越來越困難信號完整性問題電磁輻射、電磁兼容問題需要新的思路并行化流水化HotPlateNuclearReactor386486PentiumPentiumProPentium2Pentium3Pentium4(Prescott)Pentium4芯片的單位面積功耗圖7.2.2并行化計算的并行化IO的并行化7.2.2.1計算并行化計算并行的尺度機(jī)器之間的并行-機(jī)群(Cluster)處理器之間的并行–

對稱多處理(SMP)內(nèi)核之間的并行–

多核同構(gòu)計算并行vs異構(gòu)計算并行同構(gòu)–

每個節(jié)點是同一CPUISA(指令集架構(gòu))適合任務(wù)中的計算類型比較單一異構(gòu)–

節(jié)點可有不同的CPUISA適合任務(wù)中存在多種不同類型的計算計算異構(gòu)并行的例子PCCPU+GPU(圖形卡芯片)OMAPARM+C55xDSPCPU+各種加速引擎注意這些加速引擎本身不一定是處理器結(jié)構(gòu)(不是圖靈機(jī))7.2.2.2IO并行加寬IO總線寬度比如8bit總線→16bit→32bit但是IO總線過寬后,時鐘頻率上去后難以保證信號的完整性,所以新的趨勢是采用串行總線,但是提高時鐘頻率比如并行的PCI→串行的PCIExpress比如并列使用多個bank的SDRAM所有單元共享一個總線→分成多個相對獨立的IO總線段如PC的FSB+北橋+PCI+南橋+ISA的結(jié)構(gòu)如ARMSoC中的AHB、APB結(jié)構(gòu)單一總線結(jié)構(gòu)類似于不同速度的車輛(汽車、自行車等)都行駛在一條道路上。ARMSoC的分段總線結(jié)構(gòu)AMBA(AdvancedMicrocontrollerBusArchitecture,高級微控制器總線架構(gòu))片上總線是基于ARMIP的SoC的一種流行結(jié)構(gòu)。在AMBA中有兩個總線:

AHB(AdvancedHighperformanceBus,高性能總線)主要用于高性能、高時鐘頻率的系統(tǒng)模塊(如CPU、DMA和DSP等)之間的連接,它構(gòu)成了SoC高性能的系統(tǒng)骨干總線(back-bonebus)。

APB(AdvancedPeripheralBus,高級外圍總線)主要用于低帶寬的周邊外設(shè)之間的連接,例如UART、1284等。

APB通過橋接器連接到AHB上,以實現(xiàn)速度的上匹配。類似于不同速度的車輛(汽車、自行車等)分道行駛。7.2.3流水化福特汽車首次正式提出流水化的思想將一個操作細(xì)分為多個順序執(zhí)行的子操作每個子操作有獨立的硬件來完成不能減少單個操作的端到端延時,但是可以增加單位時間內(nèi)的產(chǎn)出。例子CPU內(nèi)部的執(zhí)行流水線軟件中常用的Doublebuffer(也叫乒乓buffer)機(jī)制。但是使用Buffer的兩個步驟必須由不同的硬件單元執(zhí)行比如聲卡錄制過程中。寫數(shù)據(jù)的步驟是由聲卡或系統(tǒng)的DMA引擎執(zhí)行,而讀是由CPU執(zhí)行。否則沒有提高性能的效果DoubleBuffer的例子7.2.4計算和IO的互相替代用IO替代計算–

查找表比如一個應(yīng)用中需要使用到0-180度的每隔5度的sin和cos函數(shù)的值。可以將這些值事先算出,存在一個查找表中。使用時用角度做索引即可。用計算替代IO–

壓縮文件比如嵌入式中一般把Linux的內(nèi)核進(jìn)行壓縮(zImage)后存儲在Flash中,讀到RAM中再解開。由于Flash讀相對計算和RAM訪問要慢很多,總體上比從Flash直接load不壓縮的image要快7.2.5性能優(yōu)化一般都有代價最常見的是空間換時間并行化、流水化都屬于此。后面講的一些軟件實現(xiàn)的優(yōu)化,如循環(huán)展開、查找表也是如此。設(shè)計的復(fù)雜化比如多核上軟件設(shè)計的難度遠(yuǎn)高于單核的情況比如流水線的不同階段可能有互相依賴時,流水線設(shè)計變得非常復(fù)雜一個高明的設(shè)計師要懂得折中(trade-off)7.3性能優(yōu)化的層次系統(tǒng)層次軟硬綜合的考慮軟件層次在給定硬件平臺下,如何充分挖掘潛力7.3.1系統(tǒng)層次設(shè)計中充分考慮并行化、流水化,比如多處理器或多核處理器充分使用DMA引擎來做數(shù)據(jù)搬移足夠的IO,內(nèi)存接口寬度使用雙口RAM解決并發(fā)訪問的競爭問題選擇合適的處理器類型CPUvsDSP合理的軟硬分配選擇正好有帶針對所需應(yīng)用的關(guān)鍵計算步驟的加速引擎的SoC但是加速引擎往往針對一個特定的算法實現(xiàn),算法一旦改變這個SOC就無用了計算密集部分考慮用FPGA實現(xiàn)7.3.2軟件層次平臺無關(guān)的優(yōu)化措施與具體硬件平臺無關(guān)的,優(yōu)化后對于任何硬件平臺都有好處算法層次的優(yōu)化如何降低算法的計算復(fù)雜度和數(shù)據(jù)搬移復(fù)雜度實現(xiàn)層次的優(yōu)化在算法復(fù)雜度確定情況,如何減少實際的運算次數(shù)和數(shù)據(jù)搬移次數(shù)用戶界面層次的優(yōu)化與平臺相關(guān)的優(yōu)化與具體平臺(即處理器架構(gòu))相關(guān),利用具體平臺的一些特性。7.3.2.1算法復(fù)雜度優(yōu)化具體參考數(shù)據(jù)結(jié)構(gòu)和算法復(fù)雜度課程比如計算復(fù)雜度優(yōu)化冒泡排序的N2→快速排序(quicksort)的NlogN傅立葉變換的FFT算法,將N點DFT(離散傅立葉變換)的乘法計算量由N2次降為(Nlog2N)/2次。一個簡單的算法復(fù)雜度優(yōu)化的例子假設(shè)一個應(yīng)用使用一個鏈表來存儲一些數(shù)據(jù),以便頻繁的增加和刪除數(shù)據(jù)。但是同時又經(jīng)常需要使用當(dāng)前鏈表中的單元個數(shù)的信息做法1:實現(xiàn)一個getLength()方法,該方法遍歷一次鏈表獲得單元數(shù)目。復(fù)雜度為N做法2:為鏈表類增加一個獨立的長度字段,在鏈表插入元素和刪除元素的方法中順帶更新這個長度字段。復(fù)雜度為常數(shù)。7.3.2.2實現(xiàn)優(yōu)化表達(dá)式簡化a*b+a*c->a*(b+c)函數(shù)調(diào)用的inline化計算強(qiáng)度降低(Strengthreduction)一般除法所需時間>>乘法所需時間>>加法所需時間i*3→i+i+i(x/y)/z→x*z/y利用二進(jìn)制的特點實現(xiàn)循環(huán)指針idx=idx<15?x+1:0→idx=(idx+1)&0xF實現(xiàn)乘、除法i*16→i<<4i*17→i<<4+i–

一般來說后者要快,但不一定i/16→i>>4循環(huán)展開全部展開對于循環(huán)次數(shù)很多的情況,可以部分展開循環(huán)不變量的外提循環(huán)歸并循環(huán)變量取值相同(或可以由另一個算出來)一個測試題–

矩陣乘法注意:c[i][j]每次確定元素的下標(biāo)時都要做一次乘法和加法,即i*c的一維長度+j其他例子用查找表代替運算:消除了計算的復(fù)雜度(但是增加了內(nèi)存容量)Hash法代替比較:將比較的復(fù)雜度降為常數(shù)1(但也增加了內(nèi)存容量,而且隨著容量的減少,復(fù)雜度會上升)。7.3.2.3用戶界面層次的優(yōu)化只適用于與用戶直接交互的系統(tǒng)在實際性能不變的條件下,讓用戶主觀上感覺系統(tǒng)響應(yīng)更加及時——在業(yè)界稱為以迂回的方式解決問題(workaround≠solve)機(jī)頂盒項目的實際例子開機(jī)速度以前是Linux下的視頻驅(qū)動加載后電視才出來圖像改為在Bootloader里就先輸出一副開機(jī)畫面換臺速度問題–

用戶習(xí)慣通過按住切臺鍵不放,轉(zhuǎn)到自己想看的某個臺(已知序號)以前是每次切臺按鈕事件都會導(dǎo)致完整的切臺動作(包括tuner頻點切換,demux設(shè)置,視頻解碼器重新初始化等動作),從頻道1→頻道10,需要做10次改為如果用戶按住切臺鍵不放,屏幕變黑,然后只改變臺標(biāo)顯示,直到用戶停在頻道10。實際只需做1次切臺7.3.2.4平臺相關(guān)的優(yōu)化利用平臺特定的指令,比如ARM上利用條件執(zhí)行替代條件跳轉(zhuǎn)比如ARM中用Branch-and-link實現(xiàn)函數(shù)調(diào)用,可以節(jié)省返回地址壓棧if(i>j)

i-=j;

elsej-=i;

CMPRi,Rj

; setcondition"NE"if(i!=j)

;

"GT"if(i>j),;or"LT"if(i<j)

SUBGTRi,Ri,Rj

;if"GT",i=i-j;

SUBLTRj,Rj,Ri

;if"LT",j=j-i;

利用平臺特定的結(jié)構(gòu),比如8051中利用通用寄存器shadow機(jī)制,省去中斷響應(yīng)過程中對寄存器的現(xiàn)場保護(hù)ARM中帶F后綴的,可以把浮點計算直接交給FPU來處理利用ARMV6中引入的SIMD擴(kuò)展實現(xiàn)一條指令同時處理多路數(shù)據(jù)減少cachemiss如果一個數(shù)據(jù)結(jié)構(gòu)大小與Cache的大小可比擬,那么盡量將該數(shù)據(jù)結(jié)構(gòu)的所有處理都集中在一塊完成,以免造成多次Cacheloading處理一個大數(shù)據(jù)結(jié)構(gòu)A處理另一個大數(shù)據(jù)結(jié)構(gòu)B又處理A處理一個大數(shù)據(jù)結(jié)構(gòu)A又處理A處理另一個大數(shù)據(jù)結(jié)構(gòu)BCache更形動作:A裝入CacheA從Cache中淘汰(即寫入內(nèi)存中)B裝入CacheB從Cache中淘汰A裝入CacheCache更形動作:A裝入CacheA從Cache中淘汰(即寫入內(nèi)存中)B裝入Cache使用與處理器的自然邊界對齊(alignment)的數(shù)據(jù)結(jié)構(gòu)一般處理器訪問內(nèi)存時存在一個自然邊界的概念,比如8字節(jié)對齊。如果一個數(shù)據(jù)結(jié)構(gòu)的邊界不在這個邊界上,需要額外的一次操作??梢酝ㄟ^#pragmapack編譯指令改變編譯器缺省行為對于Intel64架構(gòu)處理器(64位的x86)charc1,c2,c3;longl;需要兩條mov指令只需一條mov指令c1c2c3l流水線編排(PipelineScheduling)目標(biāo)是減少流水線stall(空轉(zhuǎn))需要對CPU實現(xiàn)結(jié)構(gòu)的深層了解一般Compiler會做一些這樣的考慮,但是想達(dá)到最優(yōu)還是得手工操作。支持亂序執(zhí)行的CPU實現(xiàn)結(jié)構(gòu)可以動態(tài)的做一定程度的流水線編排但是大多數(shù)嵌入式CPU都不支持亂序執(zhí)行由于難度實在太大,一般最對最關(guān)鍵的算法進(jìn)行這樣的優(yōu)化。... ...ADDR1,R2,R4 ADDR1,R2,R4ADDR2,R2,#1 LDRR4,[R1]ADDR3,R6,R2 ADDR2,R2,#1LDRR4,[R1] ADDR3,R6,R2ADDR7,R4,#2 ADDR7,R4,#2

從內(nèi)存Load數(shù)據(jù)一般需要多個周期,而下一條指令依賴于R4的值,所以流水線只能stall此時可能LOADR4已經(jīng)完成,可以馬上執(zhí)行這條指令流水線編排的例子7.4軟

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論