資料介紹
引言
公司基于超標量體系結構的某款PowerPC芯片開發出了電力系列自動化裝置,它對實時性要求很高。但軟件的運行效率低,這就需要我們針對該芯片的超標量體系結構特點進行軟件優化。實踐中,在針對性優化后進行對比實驗,裝置軟件運行效率大大提高,實際效果良好。
1 超標量體系結構PowerPC芯片特點
1.1 超標量體系結構芯片
PowerPC芯片屬于超標量體系結構。超標量體系結構是一種微處理器設計模式,它能夠在一個時鐘周期內執行多條指令。在超標量體系結構設計中,處理器或指令編譯器判斷指令能否獨立于其他順序指令而執行,或是依賴于另一指令,必須按順序執行。然后處理器使用多個執行單元并行執行兩個或更多獨立指令。
1.2 PowerPC芯片特點
1.2.1 流水線機制
該芯片一條指令,可簡單分為取指、譯碼、執行,提交4個時鐘周期操作。同一周期,CPU的不同部件可并行執行多條指令的不同操作,從而達到指令并行,提高CPU的吞吐率。
1.2.2 總線頻率
該芯片的主頻達到400 MHz,但訪問內存的總線頻率是100 MHz,只有主頻的1/4。由此可見,當訪問內存數據時,其運行時間比執行計算程序慢多了。當系統大量訪問內存時,系統運行速度會明顯下降。
1.2.3 16 KB的指令Cache和16 KB的數據Cache
PowerPC芯片中指令Cache和數據Cache中訪問指令和數據的速度與主頻一樣。同樣,當讀取指令和數據時在Cache中讀取的速度約是內存中讀取速度的4倍。
(1) 指令Cache運作機制
每次指令運行時若指令未在指令Cache中,即指令Cache未命中,則一次從內存中讀出待執行的連續32字節(32字節相當于8個浮點數)指令到指令Cache。同時將指令Cache中最久未訪問的代碼淘汰出Cache。32字節相當于3~5條普通C語言代碼。
(2) 數據Cache運作機制
每次訪問數據時,若數據未在數據Cache中,即數據Cache未命中,則一次從內存中讀出連續32字節數據到數據Cache。同時將數據Cache中最久未訪問的數據淘汰出Cache。
2 從超標量流水線機制的角度進行優化
2.1 超標量流水線機制對程序效率的分析
從前面的流水線機制可以看到,若指令能達到盡可能的并行,程序運行效率會明顯提高。這就需要優化代碼,讓編譯器優化成并行指令。
2.2 從提高指令并行和流水線不被打斷的角度進行優化
要提高指令并行,主要就要提高代碼并行可能性。防止流水線不被打斷,就是要盡量避免跳轉。
2.2.1 循環體代碼并行執行的優化
代碼舉例1:
for(i=0;i《1000;i++) {
Y[i]=Y[i]+Y[i-1];
}
該代碼循環體代碼之間因為存在相關數據,導致代碼無法被CPU并行執行,需要避免類似代碼。
代碼舉例2:
for(i=0;i《1000;i++) {
Y[i]=X[i]+Z[i];
}
該代碼循環體代碼之間不存在相關,能被CPU并行執行。CPU執行時代碼如下:
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 代碼順序執行避免跳轉的優化
跳轉的語句主要有if_else結構、switch_case結構、循環結構等。
if_else結構可以將選擇概率最大的語句放到if語句之后。因為取指時,緊接著if語句的指令會被取到。這樣發生跳轉的次數降低,流水線被中斷的概率降低。
盡量降低循環嵌套層數和循環次數,這樣發生跳轉的次數也降低。
2.2.3 避免小段程序代碼循環的優化
比如2~3句的小循環,可以適當展開。
一是可以提高循環內指令并行的可能性。
二是可以減少跳轉次數。
循環體代碼超過10句普通C語言代碼,可以不要展開。
3 從指令Cache的角度進行優化
3.1 指令Cache對程序效率的分析
從前面分析可知,若程序取指環節能從指令Cache中讀取,而不是每次都從內存中讀取,則能顯著提高程序執行速度。
3.2 從提高指令Cache命中的角度進行優化
① 盡量使程序順序執行。
② 避免大量相似的代碼重復實現、分散調用。
③ 盡量將相同的代碼在一個地方循環執行,提高指令Cache的命中率。不要分散執行,導致多次讀取同一段代碼到指令Cache中。
3.2.1 多個相似函數的優化
代碼舉例3:
{
FuncA;//3個相似函數連續調用
FuncB;
FuncC;
}
優化為
for(i=0;i《3;i++) {
Func(i);
}
這樣相同的代碼一次即可從內存讀到Cache中,另外2次指令都是從Cache中讀取。
3.2.2 大函數拆分的優化
由于函數體較大,超出了指令Cache的大小,導致第1次循環結束、第2次循環開始時,函數體前面內容已經被調出Cache。同樣代碼又重新從內存中讀取到Cache中,如此反復,實際的結果是函數體Func代碼被三次從內存中讀取到Cache中,導致效率大大降低。
代碼舉例4:
for(i=0;i《3;i++) {
Func(i);
}
被優化為:
for(i=0;i《3;i++) {
Func1(i);
}
for(i=0;i《3;i++) {
Func2(i);
}
for(i=0;i《3;i++) {
Func3(i);
}
將函數體Func分成幾個單獨的子函數:Func1、Func2、Func3,然后分別循環。這樣Func1循環時,由于代碼量較小,整個函數體都在Cache中。Func2、Func3類似。這樣的結果是,函數體Func1、Func2、Func3都只從內存被讀一次到Cache中。
4 從數據Cache的角度進行優化
4.1 數據Cache對程序效率的分析
從前面分析可知,在程序取操作數環節,若能從數據Cache中讀取操作數,而不是每次都從內存中讀取則能提高程序執行速度。
4.2 從提高數據Cache命中的角度進行優化
① 訪問數據時,最好是對同一段數據在一個地方集中訪問。
② 訪問數據時,最好是根據數據的順序依次訪問。比如對數組的訪問,最好是按數組成員依次訪問,效率較高。
③ 為了使程序能夠連續訪問數據,需要調整數據結構、重構代碼使得數據結構和程序配合,提高數據Cache的命中率。
4.2.1 數組連續訪問的優化
代碼舉例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];
}
}
被優化為:
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];
}
}
這樣優化后,數據每次訪問都是連續的。
4.2.2 將不連續數據訪問重構為連續訪問的優化
代碼舉例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];
}
被優化為:
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 軟件優化實驗結果
5.1 優化對比實驗
在自動化裝置的主要消耗資源的實時掃描任務中進行了代碼分析,并按上述可能優化措施進行了優化。優化前實時掃描任務占用資源為系統CPU總資源的52%。代碼優化后實時掃描任務占用CPU資源只有系統總資源的31%。
對比可以看出,系統效率提高了40%,效果是非常明顯的。
結語
雖然CPU的標稱性能指標非常高,但其有專用的體系結構,對一般開發者的編程開發方式而言并不是完全匹配,導致發揮不出CPU的潛力。所以有針對性的根據CPU的體系結構特點進行分析,并采取針對性的優化措施,才能真正發揮其性能,滿足嵌入式強實時性要求。
?
公司基于超標量體系結構的某款PowerPC芯片開發出了電力系列自動化裝置,它對實時性要求很高。但軟件的運行效率低,這就需要我們針對該芯片的超標量體系結構特點進行軟件優化。實踐中,在針對性優化后進行對比實驗,裝置軟件運行效率大大提高,實際效果良好。
1 超標量體系結構PowerPC芯片特點
1.1 超標量體系結構芯片
PowerPC芯片屬于超標量體系結構。超標量體系結構是一種微處理器設計模式,它能夠在一個時鐘周期內執行多條指令。在超標量體系結構設計中,處理器或指令編譯器判斷指令能否獨立于其他順序指令而執行,或是依賴于另一指令,必須按順序執行。然后處理器使用多個執行單元并行執行兩個或更多獨立指令。
1.2 PowerPC芯片特點
1.2.1 流水線機制
該芯片一條指令,可簡單分為取指、譯碼、執行,提交4個時鐘周期操作。同一周期,CPU的不同部件可并行執行多條指令的不同操作,從而達到指令并行,提高CPU的吞吐率。
1.2.2 總線頻率
該芯片的主頻達到400 MHz,但訪問內存的總線頻率是100 MHz,只有主頻的1/4。由此可見,當訪問內存數據時,其運行時間比執行計算程序慢多了。當系統大量訪問內存時,系統運行速度會明顯下降。
1.2.3 16 KB的指令Cache和16 KB的數據Cache
PowerPC芯片中指令Cache和數據Cache中訪問指令和數據的速度與主頻一樣。同樣,當讀取指令和數據時在Cache中讀取的速度約是內存中讀取速度的4倍。
(1) 指令Cache運作機制
每次指令運行時若指令未在指令Cache中,即指令Cache未命中,則一次從內存中讀出待執行的連續32字節(32字節相當于8個浮點數)指令到指令Cache。同時將指令Cache中最久未訪問的代碼淘汰出Cache。32字節相當于3~5條普通C語言代碼。
(2) 數據Cache運作機制
每次訪問數據時,若數據未在數據Cache中,即數據Cache未命中,則一次從內存中讀出連續32字節數據到數據Cache。同時將數據Cache中最久未訪問的數據淘汰出Cache。
2 從超標量流水線機制的角度進行優化
2.1 超標量流水線機制對程序效率的分析
從前面的流水線機制可以看到,若指令能達到盡可能的并行,程序運行效率會明顯提高。這就需要優化代碼,讓編譯器優化成并行指令。
2.2 從提高指令并行和流水線不被打斷的角度進行優化
要提高指令并行,主要就要提高代碼并行可能性。防止流水線不被打斷,就是要盡量避免跳轉。
2.2.1 循環體代碼并行執行的優化
代碼舉例1:
for(i=0;i《1000;i++) {
Y[i]=Y[i]+Y[i-1];
}
該代碼循環體代碼之間因為存在相關數據,導致代碼無法被CPU并行執行,需要避免類似代碼。
代碼舉例2:
for(i=0;i《1000;i++) {
Y[i]=X[i]+Z[i];
}
該代碼循環體代碼之間不存在相關,能被CPU并行執行。CPU執行時代碼如下:
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 代碼順序執行避免跳轉的優化
跳轉的語句主要有if_else結構、switch_case結構、循環結構等。
if_else結構可以將選擇概率最大的語句放到if語句之后。因為取指時,緊接著if語句的指令會被取到。這樣發生跳轉的次數降低,流水線被中斷的概率降低。
盡量降低循環嵌套層數和循環次數,這樣發生跳轉的次數也降低。
2.2.3 避免小段程序代碼循環的優化
比如2~3句的小循環,可以適當展開。
一是可以提高循環內指令并行的可能性。
二是可以減少跳轉次數。
循環體代碼超過10句普通C語言代碼,可以不要展開。
3 從指令Cache的角度進行優化
3.1 指令Cache對程序效率的分析
從前面分析可知,若程序取指環節能從指令Cache中讀取,而不是每次都從內存中讀取,則能顯著提高程序執行速度。
3.2 從提高指令Cache命中的角度進行優化
① 盡量使程序順序執行。
② 避免大量相似的代碼重復實現、分散調用。
③ 盡量將相同的代碼在一個地方循環執行,提高指令Cache的命中率。不要分散執行,導致多次讀取同一段代碼到指令Cache中。
3.2.1 多個相似函數的優化
代碼舉例3:
{
FuncA;//3個相似函數連續調用
FuncB;
FuncC;
}
優化為
for(i=0;i《3;i++) {
Func(i);
}
這樣相同的代碼一次即可從內存讀到Cache中,另外2次指令都是從Cache中讀取。
3.2.2 大函數拆分的優化
由于函數體較大,超出了指令Cache的大小,導致第1次循環結束、第2次循環開始時,函數體前面內容已經被調出Cache。同樣代碼又重新從內存中讀取到Cache中,如此反復,實際的結果是函數體Func代碼被三次從內存中讀取到Cache中,導致效率大大降低。
代碼舉例4:
for(i=0;i《3;i++) {
Func(i);
}
被優化為:
for(i=0;i《3;i++) {
Func1(i);
}
for(i=0;i《3;i++) {
Func2(i);
}
for(i=0;i《3;i++) {
Func3(i);
}
將函數體Func分成幾個單獨的子函數:Func1、Func2、Func3,然后分別循環。這樣Func1循環時,由于代碼量較小,整個函數體都在Cache中。Func2、Func3類似。這樣的結果是,函數體Func1、Func2、Func3都只從內存被讀一次到Cache中。
4 從數據Cache的角度進行優化
4.1 數據Cache對程序效率的分析
從前面分析可知,在程序取操作數環節,若能從數據Cache中讀取操作數,而不是每次都從內存中讀取則能提高程序執行速度。
4.2 從提高數據Cache命中的角度進行優化
① 訪問數據時,最好是對同一段數據在一個地方集中訪問。
② 訪問數據時,最好是根據數據的順序依次訪問。比如對數組的訪問,最好是按數組成員依次訪問,效率較高。
③ 為了使程序能夠連續訪問數據,需要調整數據結構、重構代碼使得數據結構和程序配合,提高數據Cache的命中率。
4.2.1 數組連續訪問的優化
代碼舉例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];
}
}
被優化為:
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];
}
}
這樣優化后,數據每次訪問都是連續的。
4.2.2 將不連續數據訪問重構為連續訪問的優化
代碼舉例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];
}
被優化為:
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 軟件優化實驗結果
5.1 優化對比實驗
在自動化裝置的主要消耗資源的實時掃描任務中進行了代碼分析,并按上述可能優化措施進行了優化。優化前實時掃描任務占用資源為系統CPU總資源的52%。代碼優化后實時掃描任務占用CPU資源只有系統總資源的31%。
對比可以看出,系統效率提高了40%,效果是非常明顯的。
結語
雖然CPU的標稱性能指標非常高,但其有專用的體系結構,對一般開發者的編程開發方式而言并不是完全匹配,導致發揮不出CPU的潛力。所以有針對性的根據CPU的體系結構特點進行分析,并采取針對性的優化措施,才能真正發揮其性能,滿足嵌入式強實時性要求。
?
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 電氣信息工程叢書之Linux PowerPC詳解-核心篇 0次下載
- 優化算法、智能算法、智能控制技術的特點和應用
- 超標量處理器的指令亂序提交機制綜述 13次下載
- 基于MBNS滑動窗口的多標量乘快速算法 18次下載
- ARM體系的特點與ARM的技術的簡介及AMBA總線的分析 9次下載
- 優化算法和智能算法與智能控制技術有哪些特點和應用 8次下載
- 高性能低功耗嵌入式CPU的關鍵技術 0次下載
- 亂序超標量處理器核的功耗優化 3次下載
- 優化603e超標量微處理器PowerPC指令執行 8次下載
- XScale體系結構及編譯優化問題 0次下載
- 空間矢量脈寬調制(SVPWM)技術特點及其優化方法 8次下載
- 基于PowerPC的模擬量輸入接口擴展
- PowerPC處理器優勢及其應用研究
- PowerPC 和Dallas 的時鐘芯片接口設計1
- PowerPC和Dallas的時鐘芯片接口設計
- 【電磁兼容技術案例分享】PWM信號線束導致的輻射超標解決案例 564次閱讀
- 交換機cpu和交換芯片的關系 810次閱讀
- 【電磁兼容技術案例分享】由SGMII通訊導致的輻射發射高頻單支超標問題解決案例 612次閱讀
- MCU芯片的分類及特點 958次閱讀
- 因芯片NC引腳線路導致RE測試超標問題案例 1322次閱讀
- 輻射發射測試超標的整改案例 1.1w次閱讀
- 基于PowerPC 405微處理器和VME總線實現以太網接口設計 2545次閱讀
- 基于嵌入式處理器PowerPC7447的設計方案 1128次閱讀
- 基于SOPC技術的嵌入式處理器PowerPC硬核測試實例詳解 1465次閱讀
- 淺談通信產品發射超標問題的解決 3097次閱讀
- 淺談ARM處理器的特點和體系結構 1.7w次閱讀
- PowerPC沒落發展史 4.1w次閱讀
- ptn技術特點及體系結構詳解 2.1w次閱讀
- PowerPC平臺Linux的移植(一) 1712次閱讀
- 芯片設計中的功耗估計與優化技術 1.5w次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關電源基礎知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統的設計與實現
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發板設計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多