第五章——優化程式效能
高效的程式所具備的特點:
1)必須選擇一組合適的演算法與資料結構(參考資料結構與演算法的書);
2)編寫出編譯器能有效優化來轉換成高效可執行的源**(本章就這一點展開);
3)充分利用計算機的多核、多處理器——在處理乙個運算量特別大的計算時,常常需要把乙個任務分解成多個部分,這些部分可以在多核和多處理器的某種組合上並行的運算(這一點將在第12章——併發程式設計中講解)。
就第二點詳細展開:
1)消除不必要的內容,例如:消除不必要的儲存器使用(同時可能由於儲存器別名使用——兩個指標指向了同乙個儲存器位置,導致意想不到的錯誤),條件測試(迴圈中的低效率),函式呼叫;
2)提高指令級並行能力,同時執行多條指令(需要了解處理器的運作)。
對處理器中的每個運算,有兩個方面來刻畫其效能:1、延遲:表示完成運算所需要的總時間;2、發射時間:兩個連續的同型別運算之間間隔的最小時鐘週期數(注:cpe表示每元素的週期數)。由延遲和發射時間的限制引出了關鍵路徑的概念,得到執行一組機器指令所需時鐘下界。
深入**什麼樣的路徑是關鍵路徑之前,再引入幾個概念。對形成迴圈**的片段訪問到的暫存器分類:1、唯讀:這些暫存器只作為源值,可用資料,用來計算儲存器位址,但本質是在迴圈過程中,該暫存器不會被改變;2、只寫:暫存器作為資料傳送操作的目的;3、區域性:暫存器在迴圈內部被使用和修改,迭代與迭代之間不相關;4.迴圈:暫存器在迴圈之間被使用和修改,它們即作為源值又作為目的,在一次迭代中產生的值會下一次迭代中用到。
對關鍵路徑產生影響的是迴圈,因為迴圈的操作鏈決定了限制效能的資料相關,所以在迴圈部分要提高程式效能,就要著重注意降低關鍵路徑的週期數,這就是要充分利用迴圈對程式做變換。對此書上接下來介紹了兩種優化。
《深入理解計算機系統》讀後筆記一
深入理解計算機系統 這本書從乙個程式設計師的視角詳細剖析了整個計算機系統,涵蓋了組成原理 組合語言 體系結構 作業系統 網路等計算機基礎知識。是很多人都推薦的一本書,所以有空的時候花了近乙個月的時間把我感興趣的地方都看了一遍。在看完整本書之後,現在把我看過的內容整體回顧一遍,作為複習,也作為以後再回...
深入理解計算機系統 筆記
cu control unit cpu暫存器,晶元的快取記憶體sram 晶元外的快取記憶體sram 主存dram 本地硬碟 網路分布式檔案系統。拷貝次數越少,越好,netty,零拷貝 dma控制器與cpu分時使用記憶體的三種方式 程序 作業系統對執行程式的一種抽象,乙個系統上,多個程序都好像獨佔硬體...
深入理解計算機系統
關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...