1. 程式人生 > >CSSAPP稀裡糊塗的讀書筆記(五)優化程式效能

CSSAPP稀裡糊塗的讀書筆記(五)優化程式效能

本章主要探討如何使用幾種不同型別的程式優化技術,使程式執行的更快。

  1. 編寫高效程式需要做到以下幾點:第一,我們必須選擇一組適當的演算法和資料結構。第二,我們必須編寫出編譯器能夠有效優化以轉換成高效可執行程式碼的原始碼。第三,針對處理運算量特別大的計算,將一個任務分成多個部分,這些部分可以在多核和多處理器的某種組合上並行地計算。
  2. 程式優化地第一步就是消除不必要地工作,讓程式碼儘可能有效地執行所期望地任務。這包括消除不必要地函式呼叫、條件測試和記憶體引用。第二步,利用處理器提供地指令級並行能力,同時執行多條指令。
  3. 消除迴圈地低效率。避免在迴圈判斷地時候呼叫函式,而是將該函式地結果賦給一個區域性變數。這種優化稱為程式碼移動。 在這裡插入圖片描述
  4. 減少過程呼叫。
  5. 消除不必要地記憶體引用。 在這裡插入圖片描述
  6. 通過理解現代處理器的效能和特點進行優化,不展開了。
  7. 迴圈展開。通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。
  8. 提高並行性。但是,如果我們的並行度p超過了可用的暫存器數量,那麼編譯器會訴諸溢位(spilling),將某些臨時值存放到記憶體中,通常是在執行時堆疊上分配空間。此時效率可能變差。
  9. 理解記憶體的效能,瞭解載入和儲存的效能及影響等。
  10. 優化程式效能的基本策略:
  • 高階設計。為遇到的問題選擇適當的演算法和資料結構。
  • 基本編碼原則:消除連續的函式呼叫;消除不必要的記憶體引用。
  • 低階優化:展開迴圈,降低開銷;提高指令級並行;用功能性風- 格重寫條件操作,使得編譯採用條件資料傳送。