資料介紹
引言
公司基于超標(biāo)量體系結(jié)構(gòu)的某款PowerPC芯片開(kāi)發(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á)到400 MHz,但訪問(wèn)內(nèi)存的總線頻率是100 MHz,只有主頻的1/4。由此可見(jiàn),當(dāng)訪問(wèn)內(nèi)存數(shù)據(jù)時(shí),其運(yùn)行時(shí)間比執(zhí)行計(jì)算程序慢多了。當(dāng)系統(tǒng)大量訪問(wèn)內(nèi)存時(shí),系統(tǒng)運(yùn)行速度會(huì)明顯下降。
1.2.3 16 KB的指令Cache和16 KB的數(shù)據(jù)Cache
PowerPC芯片中指令Cache和數(shù)據(jù)Cache中訪問(wèn)指令和數(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中最久未訪問(wèn)的代碼淘汰出Cache。32字節(jié)相當(dāng)于3~5條普通C語(yǔ)言代碼。
?。?) 數(shù)據(jù)Cache運(yùn)作機(jī)制
每次訪問(wèn)數(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中最久未訪問(wèn)的數(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:
for(i=0;i《1000;i++) {
Y[i]=Y[i]+Y[i-1];
}
該代碼循環(huán)體代碼之間因?yàn)榇嬖谙嚓P(guān)數(shù)據(jù),導(dǎo)致代碼無(wú)法被CPU并行執(zhí)行,需要避免類似代碼。
代碼舉例2:
for(i=0;i《1000;i++) {
Y[i]=X[i]+Z[i];
}
該代碼循環(huán)體代碼之間不存在相關(guān),能被CPU并行執(zhí)行。CPU執(zhí)行時(shí)代碼如下:
Y[0]=X[0]+Z[0],
Y[1]=X[1]+Z[1],
Y[2]=X[2]+Z[2],
Y[3]=X[3]+Z[3],
2.2.2 代碼順序執(zhí)行避免跳轉(zhuǎn)的優(yōu)化
跳轉(zhuǎn)的語(yǔ)句主要有if_else結(jié)構(gòu)、switch_case結(jié)構(gòu)、循環(huán)結(jié)構(gòu)等。
if_else結(jié)構(gòu)可以將選擇概率最大的語(yǔ)句放到if語(yǔ)句之后。因?yàn)槿≈笗r(shí),緊接著if語(yǔ)句的指令會(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)展開(kāi)。
一是可以提高循環(huán)內(nèi)指令并行的可能性。
二是可以減少跳轉(zhuǎn)次數(shù)。
循環(huán)體代碼超過(guò)10句普通C語(yǔ)言代碼,可以不要展開(kāi)。
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:
{
FuncA;//3個(gè)相似函數(shù)連續(xù)調(diào)用
FuncB;
FuncC;
}
優(yōu)化為
for(i=0;i《3;i++) {
Func(i);
}
這樣相同的代碼一次即可從內(nèi)存讀到Cache中,另外2次指令都是從Cache中讀取。
3.2.2 大函數(shù)拆分的優(yōu)化
由于函數(shù)體較大,超出了指令Cache的大小,導(dǎo)致第1次循環(huán)結(jié)束、第2次循環(huán)開(kāi)始時(shí),函數(shù)體前面內(nèi)容已經(jīng)被調(diào)出Cache。同樣代碼又重新從內(nèi)存中讀取到Cache中,如此反復(fù),實(shí)際的結(jié)果是函數(shù)體Func代碼被三次從內(nèi)存中讀取到Cache中,導(dǎo)致效率大大降低。
代碼舉例4:
for(i=0;i《3;i++) {
Func(i);
}
被優(yōu)化為:
for(i=0;i《3;i++) {
Func1(i);
}
for(i=0;i《3;i++) {
Func2(i);
}
for(i=0;i《3;i++) {
Func3(i);
}
將函數(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)化
① 訪問(wèn)數(shù)據(jù)時(shí),最好是對(duì)同一段數(shù)據(jù)在一個(gè)地方集中訪問(wèn)。
② 訪問(wèn)數(shù)據(jù)時(shí),最好是根據(jù)數(shù)據(jù)的順序依次訪問(wèn)。比如對(duì)數(shù)組的訪問(wèn),最好是按數(shù)組成員依次訪問(wèn),效率較高。
?、?為了使程序能夠連續(xù)訪問(wèn)數(shù)據(jù),需要調(diào)整數(shù)據(jù)結(jié)構(gòu)、重構(gòu)代碼使得數(shù)據(jù)結(jié)構(gòu)和程序配合,提高數(shù)據(jù)Cache的命中率。
4.2.1 數(shù)組連續(xù)訪問(wèn)的優(yōu)化
代碼舉例5:
float afBuf[1000];
float xBuf[8][24];
Func {
for(i=0;i《24;i++) {
xBuf[0][i]=afBuf[0+i];
xBuf[1][i]=afBuf[24+i];
……
xBuf[7][i]=afBuf[168+i];
}
}
被優(yōu)化為:
Func {
for(i=0;i《8;i++) {
m=i*24;
xBuf[i][0]=afBuf[0+m]
xBuf[i][1]=afBuf[1+m];
……
xBuf[i][23]=afBuf[23+m];
}
}
這樣優(yōu)化后,數(shù)據(jù)每次訪問(wèn)都是連續(xù)的。
4.2.2 將不連續(xù)數(shù)據(jù)訪問(wèn)重構(gòu)為連續(xù)訪問(wèn)的優(yōu)化
代碼舉例6:
floatafBufA[24];
floatafBufB[24];
floatafBufC[24];
floatxbuf[200];
Func {
xBuf[0]=afBufA[0];
xBuf[1]=afBufB[0];
xBuf[2]=afBufC[0];
……
xBuf[69]=afBufA[23];
xBuf[70]=afBufB[23];
xBuf[71]=afBufC[23];
}
被優(yōu)化為:
struct {
float fA;
float fB;
float fC;
} aBufABC[24];
floatxbuf[200];
Func {
xBuf[0]=aBufABC[0].fA;
xBuf[1]=aBufABC[0].fB;
xBuf[2]=aBufABC[0].fC;
……
xBuf[69]=aBufABC[23].fA;
xBuf[70]=aBufABC[23].fB;
xBuf[71]=aBufABC[23].fC;
}
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é)語(yǔ)
雖然CPU的標(biāo)稱性能指標(biāo)非常高,但其有專用的體系結(jié)構(gòu),對(duì)一般開(kāi)發(fā)者的編程開(kāi)發(fā)方式而言并不是完全匹配,導(dǎo)致發(fā)揮不出CPU的潛力。所以有針對(duì)性的根據(jù)CPU的體系結(jié)構(gòu)特點(diǎn)進(jìn)行分析,并采取針對(duì)性的優(yōu)化措施,才能真正發(fā)揮其性能,滿足嵌入式強(qiáng)實(shí)時(shí)性要求。
?
公司基于超標(biāo)量體系結(jié)構(gòu)的某款PowerPC芯片開(kāi)發(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á)到400 MHz,但訪問(wèn)內(nèi)存的總線頻率是100 MHz,只有主頻的1/4。由此可見(jiàn),當(dāng)訪問(wèn)內(nèi)存數(shù)據(jù)時(shí),其運(yùn)行時(shí)間比執(zhí)行計(jì)算程序慢多了。當(dāng)系統(tǒng)大量訪問(wèn)內(nèi)存時(shí),系統(tǒng)運(yùn)行速度會(huì)明顯下降。
1.2.3 16 KB的指令Cache和16 KB的數(shù)據(jù)Cache
PowerPC芯片中指令Cache和數(shù)據(jù)Cache中訪問(wèn)指令和數(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中最久未訪問(wèn)的代碼淘汰出Cache。32字節(jié)相當(dāng)于3~5條普通C語(yǔ)言代碼。
?。?) 數(shù)據(jù)Cache運(yùn)作機(jī)制
每次訪問(wèn)數(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中最久未訪問(wèn)的數(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:
for(i=0;i《1000;i++) {
Y[i]=Y[i]+Y[i-1];
}
該代碼循環(huán)體代碼之間因?yàn)榇嬖谙嚓P(guān)數(shù)據(jù),導(dǎo)致代碼無(wú)法被CPU并行執(zhí)行,需要避免類似代碼。
代碼舉例2:
for(i=0;i《1000;i++) {
Y[i]=X[i]+Z[i];
}
該代碼循環(huán)體代碼之間不存在相關(guān),能被CPU并行執(zhí)行。CPU執(zhí)行時(shí)代碼如下:
Y[0]=X[0]+Z[0],
Y[1]=X[1]+Z[1],
Y[2]=X[2]+Z[2],
Y[3]=X[3]+Z[3],
2.2.2 代碼順序執(zhí)行避免跳轉(zhuǎn)的優(yōu)化
跳轉(zhuǎn)的語(yǔ)句主要有if_else結(jié)構(gòu)、switch_case結(jié)構(gòu)、循環(huán)結(jié)構(gòu)等。
if_else結(jié)構(gòu)可以將選擇概率最大的語(yǔ)句放到if語(yǔ)句之后。因?yàn)槿≈笗r(shí),緊接著if語(yǔ)句的指令會(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)展開(kāi)。
一是可以提高循環(huán)內(nèi)指令并行的可能性。
二是可以減少跳轉(zhuǎn)次數(shù)。
循環(huán)體代碼超過(guò)10句普通C語(yǔ)言代碼,可以不要展開(kāi)。
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:
{
FuncA;//3個(gè)相似函數(shù)連續(xù)調(diào)用
FuncB;
FuncC;
}
優(yōu)化為
for(i=0;i《3;i++) {
Func(i);
}
這樣相同的代碼一次即可從內(nèi)存讀到Cache中,另外2次指令都是從Cache中讀取。
3.2.2 大函數(shù)拆分的優(yōu)化
由于函數(shù)體較大,超出了指令Cache的大小,導(dǎo)致第1次循環(huán)結(jié)束、第2次循環(huán)開(kāi)始時(shí),函數(shù)體前面內(nèi)容已經(jīng)被調(diào)出Cache。同樣代碼又重新從內(nèi)存中讀取到Cache中,如此反復(fù),實(shí)際的結(jié)果是函數(shù)體Func代碼被三次從內(nèi)存中讀取到Cache中,導(dǎo)致效率大大降低。
代碼舉例4:
for(i=0;i《3;i++) {
Func(i);
}
被優(yōu)化為:
for(i=0;i《3;i++) {
Func1(i);
}
for(i=0;i《3;i++) {
Func2(i);
}
for(i=0;i《3;i++) {
Func3(i);
}
將函數(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)化
① 訪問(wèn)數(shù)據(jù)時(shí),最好是對(duì)同一段數(shù)據(jù)在一個(gè)地方集中訪問(wèn)。
② 訪問(wèn)數(shù)據(jù)時(shí),最好是根據(jù)數(shù)據(jù)的順序依次訪問(wèn)。比如對(duì)數(shù)組的訪問(wèn),最好是按數(shù)組成員依次訪問(wèn),效率較高。
?、?為了使程序能夠連續(xù)訪問(wèn)數(shù)據(jù),需要調(diào)整數(shù)據(jù)結(jié)構(gòu)、重構(gòu)代碼使得數(shù)據(jù)結(jié)構(gòu)和程序配合,提高數(shù)據(jù)Cache的命中率。
4.2.1 數(shù)組連續(xù)訪問(wèn)的優(yōu)化
代碼舉例5:
float afBuf[1000];
float xBuf[8][24];
Func {
for(i=0;i《24;i++) {
xBuf[0][i]=afBuf[0+i];
xBuf[1][i]=afBuf[24+i];
……
xBuf[7][i]=afBuf[168+i];
}
}
被優(yōu)化為:
Func {
for(i=0;i《8;i++) {
m=i*24;
xBuf[i][0]=afBuf[0+m]
xBuf[i][1]=afBuf[1+m];
……
xBuf[i][23]=afBuf[23+m];
}
}
這樣優(yōu)化后,數(shù)據(jù)每次訪問(wèn)都是連續(xù)的。
4.2.2 將不連續(xù)數(shù)據(jù)訪問(wèn)重構(gòu)為連續(xù)訪問(wèn)的優(yōu)化
代碼舉例6:
floatafBufA[24];
floatafBufB[24];
floatafBufC[24];
floatxbuf[200];
Func {
xBuf[0]=afBufA[0];
xBuf[1]=afBufB[0];
xBuf[2]=afBufC[0];
……
xBuf[69]=afBufA[23];
xBuf[70]=afBufB[23];
xBuf[71]=afBufC[23];
}
被優(yōu)化為:
struct {
float fA;
float fB;
float fC;
} aBufABC[24];
floatxbuf[200];
Func {
xBuf[0]=aBufABC[0].fA;
xBuf[1]=aBufABC[0].fB;
xBuf[2]=aBufABC[0].fC;
……
xBuf[69]=aBufABC[23].fA;
xBuf[70]=aBufABC[23].fB;
xBuf[71]=aBufABC[23].fC;
}
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é)語(yǔ)
雖然CPU的標(biāo)稱性能指標(biāo)非常高,但其有專用的體系結(jié)構(gòu),對(duì)一般開(kāi)發(fā)者的編程開(kāi)發(fā)方式而言并不是完全匹配,導(dǎo)致發(fā)揮不出CPU的潛力。所以有針對(duì)性的根據(jù)CPU的體系結(jié)構(gòu)特點(diǎn)進(jìn)行分析,并采取針對(duì)性的優(yōu)化措施,才能真正發(fā)揮其性能,滿足嵌入式強(qiáng)實(shí)時(shí)性要求。
?
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 時(shí)源芯微——RE超標(biāo)整機(jī)定位與解決詳細(xì)流程
- 電氣信息工程叢書(shū)之Linux PowerPC詳解-核心篇 0次下載
- 優(yōu)化算法、智能算法、智能控制技術(shù)的特點(diǎn)和應(yīng)用
- 超標(biāo)量處理器的指令亂序提交機(jī)制綜述 13次下載
- 基于MBNS滑動(dòng)窗口的多標(biāo)量乘快速算法 18次下載
- ARM體系的特點(diǎn)與ARM的技術(shù)的簡(jiǎn)介及AMBA總線的分析 9次下載
- 優(yōu)化算法和智能算法與智能控制技術(shù)有哪些特點(diǎn)和應(yīng)用 8次下載
- 高性能低功耗嵌入式CPU的關(guān)鍵技術(shù) 0次下載
- 亂序超標(biāo)量處理器核的功耗優(yōu)化 3次下載
- 優(yōu)化603e超標(biāo)量微處理器PowerPC指令執(zhí)行 8次下載
- XScale體系結(jié)構(gòu)及編譯優(yōu)化問(wèn)題 0次下載
- 空間矢量脈寬調(diào)制(SVPWM)技術(shù)特點(diǎn)及其優(yōu)化方法 8次下載
- PowerPC處理器優(yōu)勢(shì)及其應(yīng)用研究
- PowerPC 和Dallas 的時(shí)鐘芯片接口設(shè)計(jì)1
- PowerPC和Dallas的時(shí)鐘芯片接口設(shè)計(jì)
- GPGPU體系結(jié)構(gòu)優(yōu)化方向(1) 313次閱讀
- 【電磁兼容技術(shù)案例分享】PWM信號(hào)線束導(dǎo)致的輻射超標(biāo)解決案例 1047次閱讀
- 交換機(jī)cpu和交換芯片的關(guān)系 1243次閱讀
- 【電磁兼容技術(shù)案例分享】由SGMII通訊導(dǎo)致的輻射發(fā)射高頻單支超標(biāo)問(wèn)題解決案例 994次閱讀
- 因芯片NC引腳線路導(dǎo)致RE測(cè)試超標(biāo)問(wèn)題案例 1682次閱讀
- 輻射發(fā)射測(cè)試超標(biāo)的整改案例 1.2w次閱讀
- 基于PowerPC 405微處理器和VME總線實(shí)現(xiàn)以太網(wǎng)接口設(shè)計(jì) 2792次閱讀
- 基于嵌入式處理器PowerPC7447的設(shè)計(jì)方案 1195次閱讀
- 基于SOPC技術(shù)的嵌入式處理器PowerPC硬核測(cè)試實(shí)例詳解 1568次閱讀
- 淺談通信產(chǎn)品發(fā)射超標(biāo)問(wèn)題的解決 3267次閱讀
- 淺談ARM處理器的特點(diǎn)和體系結(jié)構(gòu) 1.7w次閱讀
- PowerPC沒(méi)落發(fā)展史 4.1w次閱讀
- ptn技術(shù)特點(diǎn)及體系結(jié)構(gòu)詳解 2.2w次閱讀
- PowerPC平臺(tái)Linux的移植(一) 1762次閱讀
- 芯片設(shè)計(jì)中的功耗估計(jì)與優(yōu)化技術(shù) 1.6w次閱讀
下載排行
本周
- 1星火6J3-1交直流二波段收音機(jī)電路圖資料
- 1.86 MB | 1次下載 | 免費(fèi)
- 2一種基于三極管開(kāi)關(guān)特性的負(fù)壓空控制電路的應(yīng)用資料
- 0.51 MB | 次下載 | 2 積分
- 3IMX307LQD-C規(guī)格書(shū)
- 2.09 MB | 次下載 | 1 積分
- 4IP6559AC超級(jí)快充電路設(shè)計(jì)資料
- 0.04 MB | 次下載 | 10 積分
- 5PL8805 4.7V至60V輸入,3.5A,降壓直流DCDC轉(zhuǎn)換器技術(shù)手冊(cè)
- 2.79 MB | 次下載 | 免費(fèi)
- 6PL31001 12V,10A,同步升壓轉(zhuǎn)換器技術(shù)手冊(cè)
- 2.09 MB | 次下載 | 免費(fèi)
- 7PL88052 4.8V至60V輸入,5A,同步降壓轉(zhuǎn)換器技術(shù)手冊(cè)
- 3.36 MB | 次下載 | 免費(fèi)
- 8PL88053 4.8V至60V輸入,3.5A,同步降壓轉(zhuǎn)換器技術(shù)手冊(cè)
- 3.31 MB | 次下載 | 免費(fèi)
本月
- 1如何看懂電子電路圖
- 12.88 MB | 291次下載 | 免費(fèi)
- 2RK3588數(shù)據(jù)手冊(cè)
- 2.24 MB | 14次下載 | 免費(fèi)
- 3PC5502負(fù)載均流控制電路數(shù)據(jù)手冊(cè)
- 1.63 MB | 12次下載 | 免費(fèi)
- 4STM32F10x參考手冊(cè)資料
- 13.64 MB | 12次下載 | 1 積分
- 5OAH0428 V1.0英文規(guī)格書(shū)
- 5.86 MB | 8次下載 | 免費(fèi)
- 6臺(tái)達(dá)變頻器VFD-M使用手冊(cè)
- 2.51 MB | 3次下載 | 免費(fèi)
- 7PID控制算法學(xué)習(xí)筆記資料
- 3.43 MB | 3次下載 | 2 積分
- 8RM1015B設(shè)計(jì)指南
- 1.85 MB | 2次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935132次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191415次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183349次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81599次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73818次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65990次下載 | 10 積分
評(píng)論