全局程式最佳化理論

全局程式最佳化理論

程式最佳化是指改進程式,使之節省存儲空間,提高執行效率,這個過程稱為最佳化。最佳化的目標是從執行的結果程式中消除重複計算。程式最佳化的基礎:控制分析,數據流分析。程式最佳化可以分類為局部或全局的,依賴於機器或不依賴於機器的,依賴於語言或不依賴於語言的。全局程式最佳化理論是指編譯階段對整個程式執行語句和數據流指令進行最佳化的方法,最終生成的程式代碼短,時空效率最佳化。

基本介紹

  • 中文名:全局程式最佳化理論
  • 外文名:Global programming optimization theory
  • 學科:計算機
  • 目的:提高程式執行效率
  • 方法:指令並行化、調用高性能庫
  • 有關術語:程式最佳化
簡介,最佳化策略,代碼最佳化,

簡介

全局程式最佳化理論是指用於提高程式執行效率和降低程式執行代價的有關理論,包括程式編譯階段,對程式的語義語法最佳化和中間代碼的最佳化。程式設計階段中,程式模組的設計和有關函式館的選擇,程式的有關語句和循環結構選擇,即代碼最佳化,代碼最佳化是指對程式代碼進行等價變換。等價的含義是使得變換後的代碼運行結果與變換前代碼運行結果相同。全局程式最佳化理論主要目的是提高軟體性能。軟體性能是軟體的一種非功能特性,它關注的不是軟體是否能夠完成特定的功能,而是在完成該功能時展示出來的及時性,是指一個軟體系統正確提供其服務的能力和效率,是軟體對用戶請求回響速度在回響時間、 吞吐量、資源利用率和可用性等方面的度量。

最佳化策略

提高程式的數據局部性
程式設計師編程喜歡用結構體去抽象對象類型,即在結構體中定義一組與對象相關的數據的類型。例如,如果編寫一個學籍管理系統程式,程式設計師往往把學號姓名、性別、聯繫方式等信息用結構體組合在一起,來描述學生:個學生對應一個這樣的結構體對象。顯然,使用結構體編程思維可以更加容易的編寫程式而且使程式有更好的可讀性。但是如果程式中存在大量的結構體,特別是結構體數組,會降低了程式的數據局部性,降低程式的性能。例如,如果在上面學籍管理系統的例子中,有一段代碼只是頻繁訪問學生的聯繫方式信息,但是程式運行時,會把整個學生這個結構體數據載入的快取中,即把不相關的姓名、性別等信息也載入了快取。這樣會降低快取的利用率,增加從而使得程式的性能下降。結構體數組分拆能夠把結構體數組分拆成其各個域的數組,提高程式的數據局部性。使用結構體數組分拆工具,程式設計師可以繼續使用結構體編程思維編程而不影響程式的性能。
程式存儲管理需要的信息支撐
存儲管理是程式最佳化一個重要手段。當前研究對於稠密數組的記憶體管理能取得不錯的性能提高,但是對於堆記憶體對象的性能提高不夠理想。一個重要原因是因為獲取其結構信息比較困難。例如像這樣的語言,由於允許使用指針,程式設計師可以構造出任意深度的鏈狀堆記憶體對象,其往往有著複雜的結構。對程式進行分析時,堆記憶體對象的具體結構無法直接通過指向它的指針或者指針指向的頂層節點獲得。而如果得不到堆記憶體對象的結構信息,存儲管理就無法判斷它打算分離兩個堆記憶體對象的結構是否獨立,就無法它們進行分離、分別進行存儲最佳化。所以堆記憶體對象的結構信息是程式存儲管理需要的一個重要信息支撐。
調用高性能庫
充分利用已有的高性能程式庫是提高應用程式實際性能最有效的途徑之一。許多著名的高性能數學程式庫如最佳化的 BLAS、FFTW等,由於經過廠商或第三方針對特定處理機進行的專門最佳化,其性能一般大大優於用戶自行編寫的同樣功能的程式段或子程式。合理地調用這些高性能庫中的子程式,可以成倍、甚至成數量級地提升應用程式的性能,達到事半功倍的效果。
並行程式性能最佳化
並行程式的性能最佳化相對於串列程式而言更加複雜,其中最主要的是選擇好的並行算法及通信模式。在並行算法確定之後,影響並行程式效率的主要因素是通信開銷、由於數據相關性或負載不平衡引起的進程空閒等待、以及並行算法引入的冗餘計算。在設計並行程式時,可以採用多種技術來減少或消除這些因素對並行效率的影響。
通信、計算的重疊
通過讓通信與計算重疊進行,利用計算時間來禁止通信時間,是減少通信開銷的非常有效的方法。實現通信與計算重疊的方法一般基於非阻塞通信,先發出非阻塞的訊息接收或傳送命令,然後處理與收發數據無關的計算任務,完成這些計算後再等待訊息收發的完成。通信與計算的重疊能否實現,除了取決於算法和程式的實現方式之外,還取決於並行機的通信網路及通信協定。
負載平衡
負載不平衡是導致進程空閒等待的另外一個重要因素。在設計並行算法時應該充分考慮負載平衡問題,必要時使用動態負載平衡技術,即根據各進程計算完成的情況動態地分配或調整各進程的計算任務。動態調整負載時要考慮負載調整的開銷及由於負載不平衡而引起的空閒等待對性能的影響,尋找最優負載調整方案
全局通信儘量利用高效聚合通信算法
當組織多個進程之間的聚合通信時,使用高效的通信算法可以大大提高通信效率、降低通信開銷。對於標準的聚合通信,如廣播、歸約、數據散發與收集等,儘量調用 MPI 標準庫中的函式,因為這些函式往往經過專門最佳化。但使用標準庫函式的一個缺點是整個通信過程被封裝起來,無法在通信的同時進行計算工作,此時,可以自行編制相應通信代碼,將其與計算過程結合起來,以達到最佳的效果。

代碼最佳化

代碼最佳化是指對程式代碼進行等價(指不改變程式的運行結果)變換。程式代碼可以是中間代碼(如四元式代碼),也可以是目標代碼。等價的含義是使得變換後的代碼運行結果與變換前代碼運行結果相同。最佳化的含義是最終生成的目標代碼短(運行時間更短、占用空間更小),時空效率最佳化。原則上,最佳化可以在編譯的各個階段進行,但最主要的一類是對中間代碼進行最佳化,這類最佳化不依賴於具體的計算機。在不改變程式運行效果的前提下,對被編譯的程式進行等價變換,使之能生成更加高效的目標代碼。

相關詞條

熱門詞條

聯絡我們