《深入理解計算機系統(tǒng)》Part1 05:優(yōu)化程序性能

摘要:這一章節(jié)主要講述了以提高程序的運行速率進行程序優(yōu)化的三個層次(也就是優(yōu)化時間,而暫時不考慮空間性能的問題)旱函,并且主要介紹了如何做到指令級的優(yōu)化制轰。
關鍵詞:指令流水線
目錄
??1. 程序的指令級優(yōu)化
??2. 程序的代碼級優(yōu)化
??3. 程序的算法級優(yōu)化

1. 程序的指令級優(yōu)化

我們知道,對一個單核的機器進行密集型計算的時候兑徘,使用多線程是不會有效率的提高的。但使用單個線程汽久,不同的代碼也會很大的性能差異鹤竭,如何單核的計算效率達到最大,就需要使用指令級的優(yōu)化景醇。

在計算機中有時鐘周期的概念臀稚,也就是進行一次操作需要的時間。我們說CPU的主頻是多少GHz的時候三痰,表明CPU一秒可以處理多少個操作吧寺。實際上CPU中有好幾個功能單元,每個功能單元實現(xiàn)不同的功能散劫,這些功能單元加在一起的頻率才是主頻稚机,而CPU指令的處理又是流水線化的。也就是一個指令的幾個操作就像流水線一樣會通過不同的功能單元進行處理获搏。

假設你的程序是順序運行的指令赖条,也就是一個指令結束以后,才能執(zhí)行一下個指令常熙,這樣每個時刻都只有一個功能單元在運行纬乍,這樣的代碼就不能利用流水線化的執(zhí)行方式了。最大壓榨CPU性能的方法應該是使指令填滿流水線裸卫。而這取決你的代碼實現(xiàn)的功能能否做到指令級的并行仿贬,以及你是否能寫出指令級并行的代碼。前者需要你判斷你的算法能否并行墓贿,比如實現(xiàn)兩個向量元素的相乘或者相加茧泪,很顯然不同元素之間的計算相互獨立,這是可以并行的聋袋,那么就可以寫出對應的完全流水線化的代碼队伟。至于如何寫,一般則是通過循環(huán)展開舱馅,比如張開兩次,每次循環(huán)做兩個元素的相加刀荒,這兩個相加操作在代碼中的特點就是代嗤,即使第一次相加操作不執(zhí)行,也不會影響第二次相加操作代碼的執(zhí)行缠借。也就是代碼之間是互不影響的干毅,而不是非得執(zhí)行前面的代碼,才能執(zhí)行后面的泼返,這樣的代碼是不能利用流水線功能的硝逢。

2. 程序的代碼級優(yōu)化

代碼級別優(yōu)化主要針對的時候代碼本身一些不合理進行優(yōu)化,比如反復重復的計算,if判斷語句渠鸽,循環(huán)語句叫乌,以及不斷的調用函數(shù),不斷的訪問存儲器等等徽缚。本來一個變量可以放入寄存器的憨奸,你的代碼非要把他放到存儲器中。雖然減少過程調用會破壞面向對象編程凿试,因為其主張一個函數(shù)只做一件事排宰,必然充斥著大量的過程調用,以保證其可擴展性和可讀性那婉,所以至于要不要減少過程調用這個依賴與你的應用場景板甘,需要自己做個權衡。

總之代碼級別的優(yōu)化详炬,主要是從代碼級就能看到的效果盐类,而無需對底層處理器有所認識。

3. 程序算法級優(yōu)化

程序算法級優(yōu)化就更容易懂了痕寓。實現(xiàn)同一個功能傲醉,不同的算法性能是不一樣的,適用的情況也是不同的呻率,可謂是各有優(yōu)劣硬毕,就比如說排序算法這么多,他們都有自己的優(yōu)點和缺點礼仗,或者有的時間復雜度高吐咳,有的空間復雜度高,有的依賴于特定的數(shù)據(jù)結構能表現(xiàn)更好元践。

所以你需要對數(shù)據(jù)結構和算法有扎實的理解韭脊。對于一個程序而言,這三個級別的優(yōu)化都起著非常重要的作用单旁。希望你不要只關注于算法級的沪羔。尤其是做底層應用的人。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末象浑,一起剝皮案震驚了整個濱河市蔫饰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愉豺,老刑警劉巖篓吁,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蚪拦,居然都是意外死亡杖剪,警方通過查閱死者的電腦和手機冻押,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盛嘿,“玉大人洛巢,你說我怎么就攤上這事『⒗蓿” “怎么了狼渊?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長类垦。 經常有香客問我狈邑,道長,這世上最難降的妖魔是什么蚤认? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任米苹,我火速辦了婚禮,結果婚禮上砰琢,老公的妹妹穿的比我還像新娘蘸嘶。我一直安慰自己,他們只是感情好陪汽,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布训唱。 她就那樣靜靜地躺著,像睡著了一般挚冤。 火紅的嫁衣襯著肌膚如雪况增。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天训挡,我揣著相機與錄音澳骤,去河邊找鬼。 笑死澜薄,一個胖子當著我的面吹牛为肮,可吹牛的內容都是我干的。 我是一名探鬼主播肤京,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼颊艳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了忘分?” 一聲冷哼從身側響起棋枕,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饭庞,沒想到半個月后戒悠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熬荆,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡舟山,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片累盗。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡寒矿,死狀恐怖,靈堂內的尸體忽然破棺而出若债,到底是詐尸還是另有隱情符相,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布蠢琳,位于F島的核電站啊终,受9級特大地震影響,放射性物質發(fā)生泄漏傲须。R本人自食惡果不足惜蓝牲,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泰讽。 院中可真熱鬧例衍,春花似錦、人聲如沸已卸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽累澡。三九已至梦抢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間永乌,已是汗流浹背惑申。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翅雏,地道東北人圈驼。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像望几,于是被迫代替她去往敵國和親绩脆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容