版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
新工科建設(shè)·計(jì)算機(jī)類系列教材
免費(fèi)提供編譯原理16目錄第一章概述第二章形式語言理論基礎(chǔ)第三章自動(dòng)機(jī)理論基礎(chǔ)第四章詞法分析第五章語法分析—自頂向下分析方法第六章語法分析—自底向上分析方法第七章語義分析及中間代碼的生成第八章代碼優(yōu)化第九章目標(biāo)代碼的生成第十章符號(hào)表和出錯(cuò)處理第十一章
面向?qū)ο笳Z言的編譯第十二章
并行編譯技術(shù)第十三章
軟件構(gòu)造22024/11/63學(xué)習(xí)目標(biāo)代碼優(yōu)化的概念循環(huán)優(yōu)化局部優(yōu)化代碼優(yōu)化的分類8代碼優(yōu)化重點(diǎn):代碼優(yōu)化的定義和代碼優(yōu)化的分類難點(diǎn):局部優(yōu)化、循環(huán)優(yōu)化
目錄8.1代碼優(yōu)化概述8.2局部優(yōu)化8.3循環(huán)優(yōu)化8.4本章小結(jié)4定義
所謂優(yōu)化,實(shí)質(zhì)上是對代碼進(jìn)行等價(jià)變換,使得變換后的代碼具有更高的效率,包括時(shí)間效率和空間效率。目的
獲得性能較好的代碼,即要盡量縮小存儲(chǔ)空間,還要盡量提高運(yùn)行速度。
58.1代碼優(yōu)化概述8.1.1代碼優(yōu)化的定義優(yōu)化可在編譯的不同階段進(jìn)行:源代碼設(shè)計(jì)階段--程序員選擇好的算法和語句語義分析階段--如何生成高質(zhì)量的中間代碼中間代碼--采用優(yōu)化技術(shù)目標(biāo)代碼--有效利用寄存器、指令、處理機(jī)
678.1.2代碼優(yōu)化的分類1、與機(jī)器的相關(guān)性
與機(jī)器有關(guān)的優(yōu)化:寄存器的優(yōu)化、多處理機(jī)的優(yōu)化、特殊指令的優(yōu)化、無用代碼的消除。與機(jī)器無關(guān)的優(yōu)化:基本塊的優(yōu)化、循環(huán)優(yōu)化。2、優(yōu)化范圍
局部優(yōu)化:基本程序塊上進(jìn)行的優(yōu)化
全局優(yōu)化:全局程序范圍內(nèi)的優(yōu)化88.1.2代碼優(yōu)化的分類1、局部優(yōu)化:基本程序塊上進(jìn)行的優(yōu)化
基本程序塊---只有一個(gè)入口、一個(gè)出口的基本程序塊
合并常量和已知量
消除公共子表達(dá)式
削減運(yùn)算強(qiáng)度
刪除無用代碼2、全局優(yōu)化:全局程序范圍內(nèi)的優(yōu)化
循環(huán)優(yōu)化是全局優(yōu)化:
外提循環(huán)不變表達(dá)式
削減計(jì)算強(qiáng)度
刪除歸納變量1、合并常量運(yùn)算
運(yùn)算對象是常量或在編譯時(shí)已知,則在編譯時(shí)直接計(jì)算出結(jié)果,不必等到運(yùn)行時(shí)再去計(jì)算。
例:
x:=3.14*2;y:=2*5*a;z:=x+0.5;合并常量運(yùn)算后: x:=6.28;y:=10*a;z:=6.78;98.1.3優(yōu)化技術(shù)簡介優(yōu)化前的四元式:(1)(*
,3.14,2,T1)(2)(:=,T1
,_,
x)(3)(*
,2
,5,T2)(4)(*
,T2
,a,T3)(5)(:=,T3
,_,
y)(6)(+
,x
,0.5,T4)(7)(:=,T4
,
_,
z)優(yōu)化后:
(1) (:=,6.28,_,x)(2)(*
,10
,a,y)(3)(:=,6.78,_,z)
102、刪除無用賦值
刪除程序中對運(yùn)行結(jié)果沒有任何作用的賦值變量。
例:
x:=2+a;
y:=2+b;
x:=2*a*b;y:=x*y;刪除無用賦值后:
y:=2+b;
x:=2*a*b;y:=x*y;11優(yōu)化前的四元式:(1)(+,2,a,x)(2)(+,2,b,y)(3)(*,2,
a,T1)(4)(*,T1,b,x)(5)(*,x,y,y)優(yōu)化后的四元式:
(1)(+,2,b,y)(2)(*,2,a,T1)(3)(*,T1,b,x)(4)(*,x,y,y)
123、削減運(yùn)算強(qiáng)度(運(yùn)算強(qiáng)度大→?。?/p>
例:
fori:=1to100doa:=10*i;削減運(yùn)算強(qiáng)度后:a:=0;fori:=1to100doa:=a+10;優(yōu)化后的四元式:
(1)(:=,0
,_,a)(2)(:=,1
,_,i)(3)(<=,i,100,T1)(4)(BF,(8),T1,_)(5)(+
,a,10,a)(6)(+
,i,1,
i)(7)(BR,(3),_,_)(8)()134、刪除多余運(yùn)算(或刪除公共子表達(dá)式)公共子表達(dá)式:重復(fù)使用兩次以上的子表達(dá)式,且表達(dá)式中變量的值沒有發(fā)生變化。
例:x:=a*(b+c)+d;y:=a*(b+c)-d;
14優(yōu)化前:
(1)(+,b,c,T1)
(2)(*,a,T1,T2)(3)(+,T2,d,x)
(4)(+,b,c,T3)
(5)(*,a,T3,T4)(6)(-,T4,d,y)優(yōu)化后:
(1)(+,b,c,T1)(2)(*,a,T1,T2)(3)(+,T2,d,x)(4)(-,T2,d,y)
155、外提不變表達(dá)式不變表達(dá)式:循環(huán)中其值始終保持不變的表達(dá)式
例:fori:=1to100dobeginx:=(a+b)*(c+d)*i;y:=x+i;end優(yōu)化后的程序:e:=(a+b)*(c+d);fori:=1to100dobeginx:=e*i;y:=x+i;end16優(yōu)化前的四元式:(1)(:=,1,_,i)(2)(<=,i,100,T1)(3)(BF,(11),T1,_)(4)(+, a,b,T2)(5)(+, c,d,T3)(6)(*, T2,T3,T4)(7)(*, T4,i,x)(8)(+, x,i,y)(9)(+, i,1,i)(10)(BR,(2),_,_)(11)( )
17優(yōu)化后的四元式:(1)(:=,1,_,i)(2)(+,a,b,T1)(3)(+,c,d,T2)(4)(*,T1,T2,e)(5)(<=,i,100,T3)(6)(BF,(11),T3,_)(7)(*,e,i,x)(8)(+,x,i,y)(9)(+,i,1,i)(10)(BR,(5),_,_)(11)( )
18198.2局部優(yōu)化a=10;b=a*10;
c=a+b;s=0;k=1;if(k<5)s=s+k;elses=s-k;一個(gè)基本塊不是一個(gè)基本塊
局部優(yōu)化是指局部范圍內(nèi)的優(yōu)化。把程序劃分為若干個(gè)“基本塊”,優(yōu)化的工作將分別在各個(gè)基本塊內(nèi)進(jìn)行。8.2.1基本塊的劃分
基本塊,是指程序中一組順序執(zhí)行的語句序列,其中只有一個(gè)入口和一個(gè)出口,執(zhí)行時(shí)只能從其入口進(jìn)入,從其出口退出。即基本塊內(nèi)的運(yùn)算要么都被執(zhí)行,要么都不執(zhí)行。208.2.1基本塊的劃分例題8.1、
考察下列四元式序列:(1)(=,(2)(+,(3)(>,(4)(
BF,(5)(_,(6)(=,(7)(BR,(8)(*,(9)(end,100,i,k,(8),
k,T3
,
(3),i,_,_,j,T1
,
T2
,
1,_,_,j,_,k)T1)T2))T3)k)_)k)_)圖8.1基本塊劃分示例
由圖8.1可以看出,以上程序段可以劃分為四個(gè)基本塊B1、B2、B3、B4
,而且各基本塊之間通過一些有向邊連接起來,這種有向圖稱為程序流圖或流圖。218.2.2基本塊的DAG表示8.2.2基本塊的DAG表示
為了便于對基本塊進(jìn)行優(yōu)化,引進(jìn)一種有效的數(shù)據(jù)結(jié)構(gòu)——無回路有向圖(DirectedAcyclicGraph,DAG)。228.2.2基本塊的DAG表示
圖8.2一個(gè)帶環(huán)路的有向圖圖8.3一個(gè)無環(huán)路的有向圖238.2.2基本塊的DAG表示(1)(=,3.14,_,
T1)(2)(*,2,
T1
,T2)(3)(+,R,r,
T3)(4)(*,T2
,T3
,A)(5)(=,A,_,
B)(6)(*,2,
T1
,T4)(7)(+,R,r,
T5)(8)(*,T4
,T5
,T6)(9)(?,R,
r,T7)(10)(*,T5
,T7
,
B)例題8.2構(gòu)造以下基本塊G1的DAG248.2.2基本塊的DAG表示利用算法8.2對以上基本塊中10個(gè)四元式逐個(gè)進(jìn)行處理,新產(chǎn)生的DAG
子圖依次如圖8.5(a)~(j)所示,其中,圖8.5(j)即為要構(gòu)造的DAG。圖8.5基本塊G
的
DAG258.2.3基本塊優(yōu)化的實(shí)現(xiàn)將四元式表示成相應(yīng)的DAG
后,就可利用DAG對基本塊進(jìn)行優(yōu)化。實(shí)際上,在對基本塊執(zhí)行算法8.2的過程中,已完成了對基本塊進(jìn)行優(yōu)化的一系列基本工作。268.2.3基本塊優(yōu)化的實(shí)現(xiàn)利用這樣的DAG,按照原來構(gòu)造其節(jié)點(diǎn)的順序,重建四元式序列G2如下:(=,3.14,_,T1)(2)(=,6.28,_,T2)(3)(=,6.28,_,T4)(4)(+,R,r,T3)(5)(=,T3,_,T5)(6)(*,6.28,T3,A)(7)(=,A,_,T6)(8)(_,R,r,T7)(9)(=,T5,T7,B)278.3循環(huán)優(yōu)化循環(huán)是程序設(shè)計(jì)中一種重要的數(shù)據(jù)結(jié)構(gòu),程序運(yùn)行時(shí)花費(fèi)在循環(huán)上的時(shí)間往往占整個(gè)運(yùn)行時(shí)間的很大部分,因此對循環(huán)的優(yōu)化實(shí)為提高程序運(yùn)行效率的重要途徑。對循環(huán)的優(yōu)化實(shí)為提高程序運(yùn)行效率的重要途徑。288.3.1循環(huán)的查找為了進(jìn)行循環(huán)的優(yōu)化,首先要查找程序中的循環(huán)。在程序流圖中,具有下列性質(zhì)的節(jié)點(diǎn)序列(即一組基本塊)稱為程序中的一個(gè)循環(huán):①在這組節(jié)點(diǎn)中,有且只有一個(gè)是入口節(jié)點(diǎn)。②這組節(jié)點(diǎn)是強(qiáng)連通的,即任意兩個(gè)節(jié)點(diǎn)之間必有一條通路(特別當(dāng)這組節(jié)點(diǎn)僅含一個(gè)節(jié)點(diǎn)時(shí),必有從此節(jié)點(diǎn)到其自身的有向邊)。298.3.1循環(huán)的查找【例8.3】圖8.6是一個(gè)程序流圖。按照上述關(guān)于循環(huán)的定義可知,圖8.6中,節(jié)點(diǎn)序列{6,7,8}以及{4,6,7,8}、{4,5,6,7,8}、{3,4,5,6,7,8}都是循環(huán);而節(jié)點(diǎn)序列{3,4}、{4,5,6,7}雖然是強(qiáng)連通的,但因它們的入口節(jié)點(diǎn)不唯一,所以不是循環(huán)。圖8.6一個(gè)程序流圖308.3.2循環(huán)優(yōu)化的實(shí)現(xiàn)循環(huán)優(yōu)化的三種主要技術(shù)削減運(yùn)算強(qiáng)度外提循環(huán)中的不變表達(dá)式刪除歸納變量1、外提循環(huán)中的不變表達(dá)式318.3.2循環(huán)優(yōu)化的實(shí)現(xiàn)所謂循環(huán)中的不變表達(dá)式是指該表達(dá)式的值不隨循環(huán)的重復(fù)執(zhí)行而改變。為了實(shí)現(xiàn)循環(huán)中不變表達(dá)式的外提,需解決如下三個(gè)問題:①如何查找循環(huán)中的不變表達(dá)式;②找到的不變表達(dá)式是否可以外提;③把不變表達(dá)式提到循環(huán)外的什么地方。328.3.2循環(huán)優(yōu)化的實(shí)現(xiàn)相關(guān)概念:(1)變量的“定值點(diǎn)”:是指在四元式序列中變量被賦值或輸入值的某一四元式的位置。(2)變量的“引用點(diǎn)”:是指在四元式序列中變量被引用的某一四元式的位置。(3)“到達(dá)一定值點(diǎn)”:是指變量在某點(diǎn)定值后到達(dá)的一點(diǎn)。(4)“活躍變量”:是指在流圖中,從某一點(diǎn)P出發(fā)的通路上有該變量的引用點(diǎn)。(5)“循環(huán)的前置節(jié)點(diǎn)”:是指在循環(huán)的入口節(jié)點(diǎn)前面建立一個(gè)新節(jié)點(diǎn)(基本塊)。338.3.2循環(huán)優(yōu)化的實(shí)現(xiàn)例題、
x=10,y=20時(shí),執(zhí)行路徑為B2→B3→B4→B5
,j=2;x=30,y=22時(shí),執(zhí)行路徑為B2
→B4
→B2
→B4
→B5,j=1。圖8.7在循環(huán)L
前設(shè)置前置節(jié)點(diǎn)圖8.8程序流程一2、削減運(yùn)算強(qiáng)度348.3.2循環(huán)優(yōu)化的實(shí)現(xiàn)
削減運(yùn)算強(qiáng)度是把程序中執(zhí)行時(shí)間較長的運(yùn)算替換為執(zhí)行時(shí)間較短的運(yùn)算,以提高目標(biāo)程序的執(zhí)行效率。358.3.2循環(huán)優(yōu)化的實(shí)現(xiàn)例如,對于如下循環(huán)語句:i=a;while(i<=b){…
x=i*k…}把循環(huán)中的乘法運(yùn)算用遞歸加法運(yùn)算來實(shí)現(xiàn)。368.3.2循環(huán)優(yōu)化的實(shí)現(xiàn)假定k和n都是在循環(huán)中不變的常量,且在循環(huán)中沒有x
的其他定值點(diǎn),那
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度年福建省高校教師資格證之高等教育學(xué)自測模擬預(yù)測題庫
- 2024年度山西省高校教師資格證之高等教育心理學(xué)題庫練習(xí)試卷B卷附答案
- 2024年橡膠、橡塑制品項(xiàng)目投資申請報(bào)告代可行性研究報(bào)告
- 2024年一氧化二氮項(xiàng)目資金籌措計(jì)劃書代可行性研究報(bào)告
- 版權(quán)授權(quán)合同6篇
- 電動(dòng)汽車集中充換電設(shè)施規(guī)劃和優(yōu)化運(yùn)行研究綜述
- 2024年度成品買賣協(xié)議范本
- 2024年產(chǎn)品銷售代理化協(xié)議模板
- 2024年理想婚慶場地租賃協(xié)議模板
- 2024年品牌音響銷售及服務(wù)協(xié)議
- 涵洞沉降壓漿處理方案
- 開關(guān)電源變壓器鐵芯磁滯回線測量
- 配電箱使用說明書
- 召開聽證會(huì)程序流程
- 中建路橋集團(tuán)有限公司分包分供結(jié)算管理辦法
- 風(fēng)電場項(xiàng)目質(zhì)量目標(biāo)及保證措施
- 輪扣架支模體系材料量計(jì)算
- 《短視頻拍攝腳本模板資料》視頻抖音拍攝腳本劇本分鏡表
- 玻璃纖維行業(yè)準(zhǔn)入條件(2021年修訂)
- 馬鈴薯種植技術(shù).ppt
- CRRT的原理PPT參考課件
評論
0/150
提交評論