- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
2.6編譯技術與電腦體系結構設計本節從編譯技術的觀點討論指令集結構設計的關鍵目標:◆哪些指令集結構特性可以為生成高質量的程式目標代碼提供保證?◆如何才能非常容易地為指令集結構編寫出相應的高效編譯器?2.6.1現代編譯器的結構和相關技術現代編譯器結構編譯器設計者的目標(1)保證編譯器的正確性,使得所有有效的程式必須能夠被正確地編譯(2)編譯出的代碼在目標機器上的執行速度要盡可能快(3)編譯的速度(4)對程式調試的支持(5)各種語言之間互操作的可能性由於高級語言和低級語言之間存在很大的語義差別,在完成這樣一個複雜轉換過程中要兼顧這些內容是很複雜的一件事。為了確保正確性,現代編譯器一般都採用多遍掃描的方法:每一遍掃描都將一種比較高級的表示形式轉換成一種比較低級的表示形式,最終達到機器語言形式。同樣,優化過程通常也是採用這樣一種多遍掃描方法,每一遍掃描進行一種類型的優化處理,直至所有優化處理執行完。這種多遍掃描方法引出了一個“按序轉換問題”:前一步轉換並不知道它是否一定適合後一步轉換,它只能基於某種假設,有一定的盲目性。例“全局公共子運算式消去法”設法找出在同一運算式中出現的公共子表達式,並把第一次公共子運算式計算出的值存放在一個臨時變數中,然後它利用該臨時變數的值消去運算式中的其他相同公共子運算式的計算。關鍵:該臨時變數一定要分配給某一寄存器。問題:後續的優化處理不一定能完成這樣的寄存器分配寄存器分配寄存器分配演算法均是基於“圖著色法”發展而來的。圖著色法的基本思想:根據將要分配給寄存器的各個可能候選變數和它們的使用範圍,構造相干圖,然後再用該圖來分配寄存器。編譯器所實現的優化的幾種類型(1)高級優化通常是對原始程式進行優化,並將優化結果送到後續的優化掃描中。(2)局部優化僅僅是一系列線上性的程式段(也稱為基本塊)中進行的優化。(3)全局優化在局部優化的基礎上,考慮到各種分支情況,對迴圈和分支進行一系列的優化轉換。(4)寄存器分配(5)基於機器的優化目的是充分利用機器結構的一些特點進行代碼優化。一些實際優化方法優化類型和方法說明高級優化處於或接近源代碼級別,與機器獨立無關過程集成用過程體代替過程調用語句。局部優化線性代碼序列內的優化消去公共子運算式設法找出在同一運算式中出現的公共子運算式,並把第一次公共子運算式計算出的值存放在一個臨時變數中,然後它利用該臨時變數值消去運算式中的其他相同公共子運算式的計算。常數傳遞將所有被賦值為常數的變數用該常數的值代替。降低堆疊的高度對表達樹進行重新組織,儘量減少運算式求值時所需要的資源。全局優化非線性代碼序列的優化消去公共子運算式和局部優化中的消去公共子運算式優化類似。拷貝傳遞如果變數A已經賦值為X,則用X代替所有地方的A。代碼移動如果在迴圈中的某段代碼均是計算相同的值,則將這段代碼移到迴圈的外部。消去索引變數簡化/消去在迴圈中的數組地址計算。基於機器的優化依賴於機器的特點降低計算量比如,可以用加操作和移位操作來代替一個常數的乘操作。流水線調度重新組織指令序列以提高流水線性能。分支偏移的優化選擇能夠達到分支目標的最短分支偏移量。進行的優化性能提高的百分比只進行過程集成10%只進行局部優化5%局部優化+寄存器分配26%局部優化+全局優化14%局部優化+全局優化+寄存器分配63%局部優化+全局優化+寄存器分配+過程集成81%8.優化對程式執行性能的影響2.6.2現代編譯技術對電腦體系結構設計的影響要認識編譯技術對電腦體系結構的影響必須瞭解這樣兩個問題:◆如何分配和尋址變數??用多少個寄存器分配變數比較合適。◆優化技術對指令使用頻度有何影響??什麼樣的指令更需加快執行速度。1.高級語言用來分配數據的三個不同區域
文档评论(0)