程式優化的第一步就是消除不必要的內容,讓**盡可能有效地執行他期望的工作。消除不必要的函式呼叫、條件測試和儲存器引用。
程式優化的第二步利用處理器提供的指令級並行能力,同時執行多條指令,降低乙個計算不同部分之間的資料相關,增加並行度。
當一系列操作必須按照嚴格的順序執行時,就會遇到延遲界限,因為在下一條指令開始之前,這條指令必須結束。當**中的資料相關限制令處理器利用指令級並行的能力時,延遲界限能夠限定程式效能。吞吐量界限刻畫了處理器功能單元的原始計算能力。這個界限是程式效能的終極限制。
迴圈展開能夠從兩個方面改進程式效能。首先,它減少了不直接有助於程式結果的操作的數量,例如迴圈索引計算和條件分支。其次,它提供了一些方法,可以進一步變化**,減少整個計算中關鍵路徑上的運算元量。用命令列選項『-funroll-loops』呼叫gcc,會執行迴圈展開。
程式優化常用方法:1.減少連續的函式呼叫,在可能時,將計算移到迴圈外。2.消除不必要的儲存器引用。用臨時變數儲存中間結果。3.展開迴圈,降低開銷。4.通過使用例如多個累計變數和重新結合等技術,找到方法提高指令級並行。5.用功能的風格重寫條件操作,使編譯器採用條件資料傳送,避免**錯誤懲罰。
amdahl定律的主要思想是,當我們加快系統乙個部分的速度時,對系統整體效能的影響依賴於這個部分有多重要和速度提高了多少。要想大幅度提高整個系統的速度,我們必須提高整個系統很大一部分的速度。當處理大型程式時,將注意力集中在最耗時的部分變得很重要,而gpro(unix剖析工具)可以幫助我們進行程式剖析。
深入理解計算機系統
關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...
《深入理解計算機系統》
知乎 深入理解計算機系統 這本書需要什麼水平能看懂?15 213 18 218 15 513 introduction to computer systems schedule fall 2016 鏈結失效則 cmu15 213的課程主頁,有ppt,還有錄影,主講人就是這本書的作者。備註 備註 詳細...
深入理解計算機系統
系統的硬體組成 快取記憶體 作業系統管理硬體 程序虛擬記憶體 檔案amdahl定律 併發和並行 0和1組成的位序列,又稱為位元序列,8個位被組織成一組,成為位元組。每個位元組表示程式中的某些文字字元。系統中的所有資訊 包括磁碟檔案 記憶體中的程式 記憶體中存放的的使用者資料以及網路上傳送的資料,都是...