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

彈載計算機程序優化研究

2014-04-29 00:00:00李洋張振東
航空兵器 2014年5期

摘 要:隨著嵌入式處理器性能的不斷提高,處理器性能已經不是影響彈載計算機系統整體性能的主要因素。系統升級越來越多地注重程序的執行效率、編譯器優化能力、程序并行設計等方向。本文從一般性的程序運行切入,分析了影響程序執行效率的因素、編譯器優化的局限性,從程序定義、減少函數調用、提高循環效率、減少不必要內存訪問等角度介紹了一些提高程序執行效率的程序設計方法。

關鍵詞:彈載計算機;程序優化;編譯器;代碼移動

中圖分類號:TP311 文獻標識碼:A 文章編號:1673-5048(2014)05-0037-04

0 引 言

在嵌入式領域,實時性一直是衡量系統性能的一項重要指標,它主要取決于系統硬件性能和軟件設計兩個方面,以往由于硬件核心處理單元性能的限制,致使整個嵌入式系統的運行環境、適用范圍、代碼體積、系統性能受到了很大的局限。然而隨著超大規模集成電路的快速發展,德州儀器、高通、ARM等公司嵌入式處理器產品線的成熟和廣泛應用,核心處理單元已經不是影響系統性能的最主要因素,人們開始越來越多地關注程序的執行效率、編譯器的優化能力、程序并行設計等問題。

作為嵌入式應用的一個典型代表,彈載計算機也面臨著類似問題,美國AIM-120中程空空導彈經歷了數次改進,每次除了硬件性能有部分升級外,還包含大量的算法改進、代碼優化等軟件升級。我國空空導彈目前已經發展到第四代,算法改進、代碼優化、并行設計也是在進行軟件升級時所采取的有效手段。

1 影響程序運行效率的因素

高效的計算機程序主要取決于兩方面的因素:①針對問題選擇最適宜的算法和數據結構。一個算法的評價主要從時間復雜度和空間復雜度來考慮,對于彈載計算機寶貴的硬件資源和嚴格的強實時性要求而言,選擇使用的算法必須在保證實時性的前提下盡可能少地占用彈載計算機資源。數據結構則是對算法的支撐,程序涉及的數據都屬于某種數據類型,類型明顯或隱含地規定了數據的取值范圍、存儲方式以及允許進行的運算,選擇與算法相適宜的數據結構可以帶來更高的運行或存儲效率;②有足夠智能化的編譯器,能夠充分理解程序源代碼的意圖,進而把源代碼轉化為高效的可執行代碼,同時能夠避免由于優化而帶來的諸多問題。然而,就編譯器本身而言具有多方面的局限性。

2 編譯器的局限性

編譯器利用極為復雜的算法來確定程序中的變量是如何參與運算以及被引用的,因此編譯器可以盡量簡化源程序的計算方法,比如用移位操作代替源程序中的乘法運算。然而,編譯器對程序進行優化時仍受到三個方面的限制:①不能改變源程序的計算結果;②編譯器的算法通常不能完全理解源程序的思想,以及變量使用的環境;③整個編譯過程的時間是可接受的。

2.1 存儲器別名使用

voidaliase2(intpt1,intpt2){

pt1+=2pt2;}

兩段程序似乎具有相同的功能,它們都是把指針pt2指向變量值的2倍加到指針pt1指向的變量上,但是由于aliase2進行了3次訪問內存的操作,而aliase1卻訪問了6次。因此,編譯器在對aliase1進行優化時如果按照aliase2那樣生成代碼,程序將擁有更高的執行效率。然而,如果當pt1和pt2同時指向同一內存單元時,那么程序aliase1將執行如下操作:

pt1+=pt1;pt1+=pt1;

執行后的結果是pt1指向內存單元的內容是執行前的4倍,而aliase2則進行另一種操作:

pt1+=2pt1;

很顯然,執行后的結果是pt1指向內存單元的內容是執行前的3倍。實際中,編譯器不會知道aliase1是如何被調用的、兩個參數的關系是什么,因此編譯器必須假設pt1和pt2是可能相等的,從而它不能按照aliase2那樣生成代碼。

上述這種現象稱為存儲器別名使用,編譯器必須假設程序中的不同指針在初始化后或在運行過程中是可能指向同一地址單元的,這種假設極大地限制了編譯器對程序的優化能力。

2.2 函數調用的副作用

限制編譯器優化能力的另一個因素來自于函數調用,先看如下兩個函數:

intfun(int);intfun1(x){

returnf(x)+f(x)+f(x)+f(x);}

兩個函數看來似乎有相同的計算結果,fun2調用fun一次,而fun1調用fun四次,對于函數的調用,計算機要進行壓棧等一系列復雜的操作,因此fun1比fun2具有更大的開銷,在運算結果相同的前提下,編譯器應該按照fun2去優化代碼,但是函數fun如果是如下的結構:

intcounter=0;intfun(intx){

returncounter++;}函數fun就改變了一個全局變量的值,全局變量的值會隨著函數fun被調用的次數不斷改變。再考慮fun1和fun2,fun1返回的值是0+1+2+3=6,而調用fun2返回的值是40=0。

這種現象稱為函數調用的副作用,編譯器在進行編譯時不會去判斷一個函數的調用是否具有副作用,也不會去把原函數試著替換為另一個擁

2.3 編譯器設計的權衡

除了上述兩種情況,某些編程語言由于自身的特性,往往比其他編程語言難于優化,例如C語言允許指針運算和強制類型轉換操作,這些特性會影響編譯器對代碼的理解和優化。同時,在進行程序優化時,通常還要考慮一些其他因素,比如程序是如何運行,或者在可讀性與高效率之間進行權衡等等。

由此看來,由于編譯器優化的局限性,一個足夠智能的編譯器設計起來異常復雜,很可能需要針對目標程序的不同應用而專門設計。編譯器在優化目標代碼時很可能會改變原有的程序結構和代碼次序,因此這種編譯器在設計時也需要考慮足夠多的條件以避免優化帶來的錯誤,需要耗費人們大量的時間和精力,且不能通用。從理論上來說由于過于復雜,每次編譯過程也需要相當長的時間,因此,智能編譯器從目前來看是不切實際的想法。

換個角度考慮,由于代碼中細小的改動都可能使編譯器對代碼的優化起到很大的幫助,因此除了依賴編譯器對目標程序的優化,程序員如果在寫程序時更加注重代碼的效率,也可以提高程序執行的效率。

3 高效的程序設計

程序運行時間從理論上講主要取決于它的輸入規模,在實際中還受具體處理器性能、I/O、方法調用等條件的影響,當輸入規模一定時,針對后者對程序代碼做一些優化,將提升代碼的執行效率。

3.1 程序定義

為了說明代碼優化對程序執行效率的影響,這里用處理向量數據結構的程序段為例。首先定義結構體:

typedefstruct{

intlength;intdata;

}vec_rec,vec_ptr;

如圖1建立一個定長的向量結構,作為程序的輸入規模。定義工作函數,作為優化目標函數:voidtest1(vec_ptrv,intdest){

inti;

for(i=0;i

intval;

get_vec_element(v,i,val);dest=(dest)val;

}}

其中vec_length(v)用來取得向量v的長度,get_vec_element(v,i,val)用來把向量v中第i個值賦給val,兩個函數都用C語言實現,這里省略。

在默認環境下,使用某型處理器,通過編譯執行,與使用GCC編譯時“-O2”優化選項相較。通過代碼分析軟件得出優化前后兩個程序的CPE(cyclesperelement,每元素周期數)分別是41.86和33.25,很明顯,如果執行優化編譯,可以提升代碼效率。

3.2 消除循環中的低效率

通過分析test1發現,函數vec_length會隨著for循環的進行每次迭代都被調用,而向量v的長度是一定的,不會隨著每次循環而改變,因此可以在循環前只計算一次向量的長度,并把它賦給一個局部變量length,由此得到改進后的程序test2:

voidtest2(vec_ptrv,intdest){

inti;

intlength=vec_length(v);

for(i=0;i

intval;

get_vec_element(v,i,val);dest=(dest)val;

}

}

test2的CPE是21.25,這種方法也叫代碼移動,對于代碼中一些每次計算都得到相同值的部分,可以把它提前到程序的某一行,避免重復計算帶來的開銷。鑒于之前提到的編譯器局限性,在進行代碼移動時,編譯器不能檢測被移動的部分是否具有函數調用的副作用,目前最復雜的編譯器依然無法對所有程序做出這種檢測,因此在這種情況下只有通過程序員自己的判斷來進行優化。這個例子很好地證明了在程序中看似簡單的部分通常隱藏著與輸入規模成正比的低效率。

3.3 減少函數調用

函數調用時涉及壓棧等一系列操作,隱含著通過上述方法,程序的執行效率得到了提高,當然這是在輸入規模達到一定程度的情況下得到的結果,特別是對某些計算密集型程序而言。然而,在實際中并不是所有程序都擁有這種模型,這就需要其他的專業知識,比如對所用處理器的特性有深層次的理解,熟練掌握對應的匯編語言,從而對編譯器如何生成、執行代碼有充分的認識,在進行程序優化時才能更好地去實現最初的預想。

主站蜘蛛池模板: 亚洲第一成人在线| 无码网站免费观看| 97精品久久久大香线焦| 中文字幕佐山爱一区二区免费| 欧美国产中文| 国产尤物在线播放| 亚洲日本中文字幕天堂网| 丁香亚洲综合五月天婷婷| 免费看一级毛片波多结衣| 国产白浆视频| 国产新AV天堂| 她的性爱视频| 国产成人一区免费观看| 国产乱子伦精品视频| 日本久久网站| 久久这里只有精品66| 久久99精品久久久久纯品| 久久国产精品无码hdav| 国产熟睡乱子伦视频网站| 9啪在线视频| 狠狠躁天天躁夜夜躁婷婷| 国产精品成人一区二区不卡| 亚洲 欧美 中文 AⅤ在线视频| 亚洲中文制服丝袜欧美精品| 高清无码一本到东京热| 欧美日韩在线国产| 全部免费毛片免费播放 | 欧美一级片在线| 国产精品亚洲一区二区三区z| 香蕉久久国产超碰青草| 久久精品人人做人人爽电影蜜月| 91成人在线观看视频| 亚洲国产精品VA在线看黑人| 日韩毛片免费观看| 无码中字出轨中文人妻中文中| 国产精品尤物铁牛tv| 国产一区二区三区夜色 | 日本免费精品| 国产麻豆va精品视频| 91精品国产91久久久久久三级| 亚洲天堂网在线视频| 国产成人精品亚洲日本对白优播| 国产系列在线| 人妻精品久久久无码区色视| 亚洲欧美国产高清va在线播放| 亚洲黄色网站视频| 久久99国产精品成人欧美| 国产性猛交XXXX免费看| 日韩A级毛片一区二区三区| 直接黄91麻豆网站| a天堂视频| 性色一区| 国产传媒一区二区三区四区五区| 欧美成人日韩| 国产女人水多毛片18| 午夜高清国产拍精品| www.91中文字幕| 色哟哟国产精品| 欧美午夜网| 首页亚洲国产丝袜长腿综合| 尤物亚洲最大AV无码网站| 国产精品无码AV中文| 伊人久久久久久久| 国产一区二区网站| 操国产美女| 国产成人综合久久精品尤物| 日本一区二区不卡视频| 精品人妻系列无码专区久久| jijzzizz老师出水喷水喷出| 日韩色图区| 国产福利在线观看精品| 亚洲电影天堂在线国语对白| 国产麻豆福利av在线播放 | 国产精品极品美女自在线网站| 国产区福利小视频在线观看尤物| 在线免费观看AV| 青青草国产免费国产| 国产精品jizz在线观看软件| 亚洲日本精品一区二区| 亚洲黄网在线| 亚洲午夜天堂| 欧美h在线观看|