999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2012-09-25 02:59:32張?jiān)?/span>
關(guān)鍵詞:指令效率優(yōu)化

張?jiān)?/p>

(國(guó)電南京自動(dòng)化股份有限公司,南京 211100)

引 言

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

1 超標(biāo)量體系結(jié)構(gòu)PowerPC芯片特點(diǎn)

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

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

1.2 PowerPC芯片特點(diǎn)

1.2.1 流水線機(jī)制

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

1.2.2 總線頻率

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

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

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

(1)指令Cache運(yùn)作機(jī)制

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

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

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

2 從超標(biāo)量流水線機(jī)制的角度進(jìn)行優(yōu)化

2.1 超標(biāo)量流水線機(jī)制對(duì)程序效率的分析

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

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

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

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

代碼舉例1:

該代碼循環(huán)體代碼之間因?yàn)榇嬖谙嚓P(guān)數(shù)據(jù),導(dǎo)致代碼無法被CPU并行執(zhí)行,需要避免類似代碼。

代碼舉例2:

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

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語句之后。因?yàn)槿≈笗r(shí),緊接著if語句的指令會(huì)被取到。這樣發(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),可以適當(dāng)展開。一是可以提高循環(huán)內(nèi)指令并行的可能性。二是可以減少跳轉(zhuǎn)次數(shù)。循環(huán)體代碼超過10句普通C語言代碼,可以不要展開。

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

3.1 指令Cache對(duì)程序效率的分析

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

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

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

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

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

3.2.1 多個(gè)相似函數(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í),函數(shù)體前面內(nèi)容已經(jīng)被調(diào)出Cache。同樣代碼又重新從內(nèi)存中讀取到Cache中,如此反復(fù),實(shí)際的結(jié)果是函數(shù)體Func代碼被三次從內(nèi)存中讀取到Cache中,導(dǎo)致效率大大降低。

代碼舉例4:

被優(yōu)化為:

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

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

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

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

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

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

②訪問數(shù)據(jù)時(shí),最好是根據(jù)數(shù)據(jù)的順序依次訪問。比如對(duì)數(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)化實(shí)驗(yàn)結(jié)果

5.1 優(yōu)化對(duì)比實(shí)驗(yàn)

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

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

結(jié) 語

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

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

猜你喜歡
指令效率優(yōu)化
聽我指令:大催眠術(shù)
超限高層建筑結(jié)構(gòu)設(shè)計(jì)與優(yōu)化思考
民用建筑防煙排煙設(shè)計(jì)優(yōu)化探討
關(guān)于優(yōu)化消防安全告知承諾的一些思考
一道優(yōu)化題的幾何解法
提升朗讀教學(xué)效率的幾點(diǎn)思考
甘肅教育(2020年14期)2020-09-11 07:57:42
ARINC661顯控指令快速驗(yàn)證方法
LED照明產(chǎn)品歐盟ErP指令要求解讀
跟蹤導(dǎo)練(一)2
“錢”、“事”脫節(jié)效率低
主站蜘蛛池模板: 这里只有精品国产| 青青青视频免费一区二区| 亚洲一区第一页| 亚洲中久无码永久在线观看软件| 日本亚洲成高清一区二区三区| 中国黄色一级视频| 久久国产免费观看| 无码国产伊人| 久久9966精品国产免费| 99久久国产精品无码| 老司国产精品视频91| 国产成年无码AⅤ片在线| 亚洲欧洲免费视频| 一本大道东京热无码av| 亚洲成人手机在线| 日本一区高清| 91精品人妻一区二区| 色成人综合| 麻豆精品视频在线原创| 国产精品久线在线观看| 91久久夜色精品| 国产第八页| 久久精品无码一区二区国产区| 波多野吉衣一区二区三区av| 国外欧美一区另类中文字幕| 午夜少妇精品视频小电影| 免费在线成人网| 亚洲成A人V欧美综合天堂| 在线观看国产精品日本不卡网| 中文字幕丝袜一区二区| 国产日韩欧美在线播放| 免费A级毛片无码无遮挡| 欧美成人日韩| 波多野结衣亚洲一区| 亚洲欧美另类视频| 亚洲伦理一区二区| 久久9966精品国产免费| 久久久久国产一区二区| 色网站免费在线观看| 丁香五月激情图片| 久久精品一卡日本电影| 国产区91| 国产精品伦视频观看免费| 国产成人精品视频一区二区电影| 思思热精品在线8| 波多野结衣的av一区二区三区| 毛片三级在线观看| 天天摸夜夜操| 国产你懂得| 亚洲精品无码高潮喷水A| 国产一级妓女av网站| 国产高清不卡视频| 亚洲制服丝袜第一页| 久久精品丝袜高跟鞋| 九色综合视频网| 国产网站免费观看| 在线永久免费观看的毛片| 91色在线观看| 色综合久久88| 欧美色视频网站| 国内精品久久久久鸭| 久久久亚洲国产美女国产盗摄| 男人天堂伊人网| 精品免费在线视频| 精品国产成人三级在线观看| Aⅴ无码专区在线观看| 中文成人无码国产亚洲| 美女裸体18禁网站| 人妻中文字幕无码久久一区| 国产精品原创不卡在线| 日本91在线| 亚洲免费黄色网| 亚洲第一香蕉视频| 91毛片网| 成人国产精品网站在线看| 中文字幕自拍偷拍| аⅴ资源中文在线天堂| 国产精品区网红主播在线观看| 波多野结衣的av一区二区三区| 一区二区三区四区日韩| 第一页亚洲| 国产日韩精品欧美一区灰|