• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      嵌入式系統(tǒng)超標量體系CPU的高效軟件優(yōu)化技術(shù)

      2012-09-25 02:59:32張云
      關(guān)鍵詞:體系結(jié)構(gòu)流水線內(nèi)存

      張云

      (國電南京自動化股份有限公司,南京 211100)

      引 言

      公司基于超標量體系結(jié)構(gòu)的某款PowerPC芯片開發(fā)出了電力系列自動化裝置,它對實時性要求很高。但軟件的運行效率低,這就需要我們針對該芯片的超標量體系結(jié)構(gòu)特點進行軟件優(yōu)化。實踐中,在針對性優(yōu)化后進行對比實驗,裝置軟件運行效率大大提高,實際效果良好。

      1 超標量體系結(jié)構(gòu)PowerPC芯片特點

      1.1 超標量體系結(jié)構(gòu)芯片

      PowerPC芯片屬于超標量體系結(jié)構(gòu)。超標量體系結(jié)構(gòu)是一種微處理器設(shè)計模式,它能夠在一個時鐘周期內(nèi)執(zhí)行多條指令。在超標量體系結(jié)構(gòu)設(shè)計中,處理器或指令編譯器判斷指令能否獨立于其他順序指令而執(zhí)行,或是依賴于另一指令,必須按順序執(zhí)行。然后處理器使用多個執(zhí)行單元并行執(zhí)行兩個或更多獨立指令。

      1.2 PowerPC芯片特點

      1.2.1 流水線機制

      該芯片一條指令,可簡單分為取指、譯碼、執(zhí)行,提交4個時鐘周期操作。同一周期,CPU的不同部件可并行執(zhí)行多條指令的不同操作,從而達到指令并行,提高CPU的吞吐率。

      1.2.2 總線頻率

      該芯片的主頻達到400MHz,但訪問內(nèi)存的總線頻率是100MHz,只有主頻的1/4。由此可見,當訪問內(nèi)存數(shù)據(jù)時,其運行時間比執(zhí)行計算程序慢多了。當系統(tǒng)大量訪問內(nèi)存時,系統(tǒng)運行速度會明顯下降。

      1.2.3 16KB的指令Cache和16KB的數(shù)據(jù)Cache

      PowerPC芯片中指令Cache和數(shù)據(jù)Cache中訪問指令和數(shù)據(jù)的速度與主頻一樣。同樣,當讀取指令和數(shù)據(jù)時在Cache中讀取的速度約是內(nèi)存中讀取速度的4倍。

      (1)指令Cache運作機制

      每次指令運行時若指令未在指令Cache中,即指令Cache未命中,則一次從內(nèi)存中讀出待執(zhí)行的連續(xù)32字節(jié)(32字節(jié)相當于8個浮點數(shù))指令到指令Cache。同時將指令Cache中最久未訪問的代碼淘汰出Cache。32字節(jié)相當于3~5條普通C語言代碼。

      (2)數(shù)據(jù)Cache運作機制

      每次訪問數(shù)據(jù)時,若數(shù)據(jù)未在數(shù)據(jù)Cache中,即數(shù)據(jù)Cache未命中,則一次從內(nèi)存中讀出連續(xù)32字節(jié)數(shù)據(jù)到數(shù)據(jù)Cache。同時將數(shù)據(jù)Cache中最久未訪問的數(shù)據(jù)淘汰出Cache。

      2 從超標量流水線機制的角度進行優(yōu)化

      2.1 超標量流水線機制對程序效率的分析

      從前面的流水線機制可以看到,若指令能達到盡可能的并行,程序運行效率會明顯提高。這就需要優(yōu)化代碼,讓編譯器優(yōu)化成并行指令。

      2.2 從提高指令并行和流水線不被打斷的角度進行優(yōu)化

      要提高指令并行,主要就要提高代碼并行可能性。防止流水線不被打斷,就是要盡量避免跳轉(zhuǎn)。

      2.2.1 循環(huán)體代碼并行執(zhí)行的優(yōu)化

      代碼舉例1:

      該代碼循環(huán)體代碼之間因為存在相關(guān)數(shù)據(jù),導(dǎo)致代碼無法被CPU并行執(zhí)行,需要避免類似代碼。

      代碼舉例2:

      該代碼循環(huán)體代碼之間不存在相關(guān),能被CPU并行執(zhí)行。CPU執(zhí)行時代碼如下:

      2.2.2 代碼順序執(zhí)行避免跳轉(zhuǎn)的優(yōu)化

      跳轉(zhuǎn)的語句主要有if_else結(jié)構(gòu)、switch_case結(jié)構(gòu)、循環(huán)結(jié)構(gòu)等。

      if_else結(jié)構(gòu)可以將選擇概率最大的語句放到if語句之后。因為取指時,緊接著if語句的指令會被取到。這樣發(fā)生跳轉(zhuǎn)的次數(shù)降低,流水線被中斷的概率降低。

      盡量降低循環(huán)嵌套層數(shù)和循環(huán)次數(shù),這樣發(fā)生跳轉(zhuǎn)的次數(shù)也降低。

      2.2.3 避免小段程序代碼循環(huán)的優(yōu)化

      比如2~3句的小循環(huán),可以適當展開。一是可以提高循環(huán)內(nèi)指令并行的可能性。二是可以減少跳轉(zhuǎn)次數(shù)。循環(huán)體代碼超過10句普通C語言代碼,可以不要展開。

      3 從指令Cache的角度進行優(yōu)化

      3.1 指令Cache對程序效率的分析

      從前面分析可知,若程序取指環(huán)節(jié)能從指令Cache中讀取,而不是每次都從內(nèi)存中讀取,則能顯著提高程序執(zhí)行速度。

      3.2 從提高指令Cache命中的角度進行優(yōu)化

      ①盡量使程序順序執(zhí)行。

      ②避免大量相似的代碼重復(fù)實現(xiàn)、分散調(diào)用。

      ③盡量將相同的代碼在一個地方循環(huán)執(zhí)行,提高指令Cache的命中率。不要分散執(zhí)行,導(dǎo)致多次讀取同一段代碼到指令Cache中。

      3.2.1 多個相似函數(shù)的優(yōu)化

      代碼舉例3:

      優(yōu)化為

      這樣相同的代碼一次即可從內(nèi)存讀到Cache中,另外2次指令都是從Cache中讀取。

      3.2.2 大函數(shù)拆分的優(yōu)化

      由于函數(shù)體較大,超出了指令Cache的大小,導(dǎo)致第1次循環(huán)結(jié)束、第2次循環(huán)開始時,函數(shù)體前面內(nèi)容已經(jīng)被調(diào)出Cache。同樣代碼又重新從內(nèi)存中讀取到Cache中,如此反復(fù),實際的結(jié)果是函數(shù)體Func代碼被三次從內(nèi)存中讀取到Cache中,導(dǎo)致效率大大降低。

      代碼舉例4:

      被優(yōu)化為:

      將函數(shù)體Func分成幾個單獨的子函數(shù):Func1、Func2、Func3,然后分別循環(huán)。這樣Func1循環(huán)時,由于代碼量較小,整個函數(shù)體都在Cache中。Func2、Func3類似。這樣的結(jié)果是,函數(shù)體Func1、Func2、Func3都只從內(nèi)存被讀一次到Cache中。

      4 從數(shù)據(jù)Cache的角度進行優(yōu)化

      4.1 數(shù)據(jù)Cache對程序效率的分析

      從前面分析可知,在程序取操作數(shù)環(huán)節(jié),若能從數(shù)據(jù)Cache中讀取操作數(shù),而不是每次都從內(nèi)存中讀取則能提高程序執(zhí)行速度。

      4.2 從提高數(shù)據(jù)Cache命中的角度進行優(yōu)化

      ①訪問數(shù)據(jù)時,最好是對同一段數(shù)據(jù)在一個地方集中訪問。

      ②訪問數(shù)據(jù)時,最好是根據(jù)數(shù)據(jù)的順序依次訪問。比如對數(shù)組的訪問,最好是按數(shù)組成員依次訪問,效率較高。

      ③為了使程序能夠連續(xù)訪問數(shù)據(jù),需要調(diào)整數(shù)據(jù)結(jié)構(gòu)、重構(gòu)代碼使得數(shù)據(jù)結(jié)構(gòu)和程序配合,提高數(shù)據(jù)Cache的命中率。

      4.2.1 數(shù)組連續(xù)訪問的優(yōu)化

      代碼舉例5:

      被優(yōu)化為:

      這樣優(yōu)化后,數(shù)據(jù)每次訪問都是連續(xù)的。

      4.2.2 將不連續(xù)數(shù)據(jù)訪問重構(gòu)為連續(xù)訪問的優(yōu)化

      代碼舉例6:

      被優(yōu)化為:

      5 軟件優(yōu)化實驗結(jié)果

      5.1 優(yōu)化對比實驗

      在自動化裝置的主要消耗資源的實時掃描任務(wù)中進行了代碼分析,并按上述可能優(yōu)化措施進行了優(yōu)化。優(yōu)化前實時掃描任務(wù)占用資源為系統(tǒng)CPU總資源的52%。代碼優(yōu)化后實時掃描任務(wù)占用CPU資源只有系統(tǒng)總資源的31%。

      對比可以看出,系統(tǒng)效率提高了40%,效果是非常明顯的。

      結(jié) 語

      雖然CPU的標稱性能指標非常高,但其有專用的體系結(jié)構(gòu),對一般開發(fā)者的編程開發(fā)方式而言并不是完全匹配,導(dǎo)致發(fā)揮不出CPU的潛力。所以有針對性的根據(jù)CPU的體系結(jié)構(gòu)特點進行分析,并采取針對性的優(yōu)化措施,才能真正發(fā)揮其性能,滿足嵌入式強實時性要求。

      [1]John L Hennesy,David A Patterson.計算機系統(tǒng)結(jié)構(gòu):一種定量的方法[M].北京:清華大學(xué)出版社,2002.

      猜你喜歡
      體系結(jié)構(gòu)流水線內(nèi)存
      Gen Z Migrant Workers Are Leaving the Assembly Line
      流水線
      “春夏秋冬”的內(nèi)存
      當代陜西(2019年13期)2019-08-20 03:54:22
      基于粒計算的武器裝備體系結(jié)構(gòu)超網(wǎng)絡(luò)模型
      作戰(zhàn)體系結(jié)構(gòu)穩(wěn)定性突變分析
      報廢汽車拆解半自動流水線研究
      基于DODAF的裝備體系結(jié)構(gòu)設(shè)計
      基于云計算的航天器控制系統(tǒng)自組織體系結(jié)構(gòu)
      SIMATIC IPC3000 SMART在汽車流水線領(lǐng)域的應(yīng)用
      自動化博覽(2014年6期)2014-02-28 22:32:05
      基于內(nèi)存的地理信息訪問技術(shù)
      称多县| 颍上县| 襄垣县| 泗洪县| 长沙县| 保德县| 沧源| 淮安市| 法库县| 万安县| 石门县| 金坛市| 丰县| 鲁甸县| 安新县| 交城县| 云安县| 明星| 清水县| 梓潼县| 鲁甸县| 农安县| 射洪县| 郑州市| 彰化市| 尉氏县| 西乌珠穆沁旗| 集安市| 咸宁市| 潜江市| 丰都县| 五寨县| 卫辉市| 紫阳县| 徐汇区| 泽普县| 驻马店市| 彰武县| 连云港市| 大埔区| 潮安县|