SLP(Chapter 10 part 2):性能優化

1 介紹

通常,使用一個邏輯簡單但比較慢的程序比較好。
因爲一個快的程序通常:1. 編寫時間長;2. 提速不高,難以察覺;3.可以通過硬件升級達到

不同層次優化:

  • 建模 - 算法
  • 編碼 - 程序/過程
  • 編譯 - 底層 Low-level
  • 執行 - 硬件
  • ……

2 The Golden Rules of optimization 黃金準則(優化建模——算法)

良好的算法規則:優化程序的最佳和最重要的方法是使用良好的算法

時間複雜度Asymptotic complexity:衡量算法優劣
(但並不總是效率的適當指標,如底層優化)
在這裏插入圖片描述

3 Optimizing compilers 有優化功能的編譯器

在這裏插入圖片描述
提高程序到彙編的映射
- 編譯器對代碼重排序
- 消除輕微效率低下

不足(妨礙優化的因素)

  • 內存別名 memory aliasing
    • 不同的指針可能會指向存儲器的同一位置
      在這裏插入圖片描述
  • 函數副作用
    • 編譯器不會判斷一個函數是否有副作用,它會假設最糟的情況,並保持所有的函數調用不變
      在這裏插入圖片描述

4 Example of optimizing program

表達性能:每元素的週期數(CPE,cycle per element),在這裏元素指的是代碼塊
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

名字 情況 代碼 備註
combine1 未優化 在這裏插入圖片描述 將v的所有元素求和,存到dest
combine2 eliminating loop inefficiencies消除低效循環 在這裏插入圖片描述 代碼移動code motion
combine3 reducing procedure calls 減少過程調用 在這裏插入圖片描述
combine4 eliminating unneeded memory references消除不需要的內存引用(內存讀寫花費高) 在這裏插入圖片描述

5 General optimization techniques [self study]

  1. 編譯時,選擇優化選項
  2. 編碼時

單擊優化
更快的數學
更快的循環
避免表達式重複
使用匯編
使用寄存器
整數
指針取消引用
避免臨時變量
字符串比較
++/–放在前面比放在後面塊
按值調用 VS 按引用調用
重用代替重新分配
使用 switch()代替if-else
循環中儘早break

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章