一段c程式,功能開發完成,開始效能優化。
當然是先用 -pg 編譯,再gprof看「熱點」在**,很快找到,是計算hash值的函式,於是換了個更快的hash函式——fnv (
),速度提高了一些。接著把該hash函式內聯(inline),程式又快了一些。內聯函式不是解決效能問題的靈丹妙藥,因為inline之後gprof就看不到該函式的呼叫情況,也就不好找真正的效能瓶頸了。
接著把幾個常用迴圈中的變數宣告為register,即優先使用暫存器,嗯,有點效果,但不是很明顯。管它的,快一點是一點。
最後把**部分優化完,改編譯引數了:
將 -o2 改為 -o3 ,跑了單元測試,沒問題,效能好一點
加 -march=nocona ,效能又好一點(因為開發的程式只在伺服器上跑,而公司的伺服器都裝intel的cpu,而且都是新到貨,基本都是nocona平台,所以加上沒問題)
加 -minline-all-stringops , 據說這個選項適合含有memset、memcpy語句較多的程式,這個正合我意,加上之後效能有好了一點.
優化程式效能
編寫高效程式需要兩個活動 第一,我們必須選擇一組最好的演算法和資料結構 第二,我們必須編寫出編譯器能夠有效優化以轉換成高效可執行 的源 這裡,我們主要講述後者。首先,我們討論一下為什麼要編寫高效程式。不難想象,如果本來要用 天執行完的程式,經過優化只需要 天就可執行完,這是一件多麼令人振奮的 事啊。...
優化程式效能
l 消除迴圈的低效率 n 對於迴圈中的過程呼叫盡量移出迴圈外,例如 nfor i 0 i strlen s i strlen 函式為線性增長 在字串長度很大時 很消耗系統資源 n 減少不必要的儲存器引用,將儲存器引用儲存在臨時變數中.l 處理器優化 即充分利用儲存器流水線操作的吞吐量 n 迴圈展開,...
優化程式效能
研究彙編 是理解編譯器以及產生的 會如何執行的最有效的手段之一。編譯器優化 的限制 1 程式設計中存在 儲存器別名使用 的問題。編譯器必須假設不同的指標可能指向儲存器中相同的位置。2 函式呼叫 簡略了。具體看書 基本的編碼原則 效能大幅度提公升 優化程式效能的一些方法 1 將除錯完的程式完成編譯器級...