優(yōu)化程序性能

????個人覺得雖然沒必要過度優(yōu)化颠焦,現(xiàn)代編譯器在優(yōu)化方面已經(jīng)做得比較好了通今,但是在有些方面民宿,還是需要程序員主動去做的娇妓。

? ? 不過度優(yōu)化≠不主動優(yōu)化

? ? 深度學(xué)習(xí)跑模型的時候,有時候可能一跑就是幾天活鹰,哪怕只對程序優(yōu)化10%哈恰,效果也是非常可觀的志群。在進(jìn)行優(yōu)化的時候着绷,程序可能因此可讀性和可維護(hù)性都變差,這就需要程序員自己去權(quán)衡了锌云,在速度非常重要的時候荠医,做一些犧牲也是可以接受的。

1.高級設(shè)計桑涎。為遇到的問題選擇適當(dāng)?shù)乃惴ê蛿?shù)據(jù)結(jié)構(gòu)彬向。要特別警覺,避免使用那些會漸進(jìn)產(chǎn)生糟糕性能的算法和編碼技術(shù)石洗。

2.基本編碼原則幢泼。避免限制優(yōu)化的因素紧显,這樣編譯器就能產(chǎn)生高效的代碼讲衫。

? ??這點是非常重要的,因為其他優(yōu)化編譯器都可以代替你做孵班,但是以下兩點涉兽,編譯器是沒辦法做優(yōu)化的,至于為什么這兩點會導(dǎo)致編譯器沒辦法優(yōu)化篙程,這里不再贅述枷畏。

1)消除連續(xù)的函數(shù)調(diào)用。在可能時虱饿,將計算移到循環(huán)外拥诡。考慮有選擇性的妥協(xié)程序的模塊性已獲得更大的效率氮发。?

? ? 除此之外渴肉,在可能的情況下,使用內(nèi)聯(lián)函數(shù)也是一個很好的選擇爽冕。

? ? 舉個例子:

? ? 在C++11以前,容器成員函數(shù)size()都是O(n)仇祭,如果采用以下寫法,原本O(n)復(fù)雜度的代碼就變成了O(n^2)颈畸。

????for (int i=0;i<str.size();i++)

? ? 正確的做法是盡量將函數(shù)調(diào)用提到循環(huán)外乌奇。

2)消除不必要的存儲器引用没讲。引入臨時變量來保存中間結(jié)果。只有在最后的值計算出來時礁苗,才將結(jié)果放到數(shù)組或全局變量中爬凑。

? ? 這個應(yīng)該很好理解,學(xué)過計算機(jī)組成原理的都知道存儲器速度遠(yuǎn)低于寄存器速度试伙。

3.低級優(yōu)化?

1)展開循環(huán)贰谣,降低開銷,并且使得進(jìn)一步的優(yōu)化成為可能迁霎。?

? ? 現(xiàn)代編譯器一般都會進(jìn)行循環(huán)展開優(yōu)化吱抚,但是碰到嚴(yán)重限制程序速度的代碼,還是可以嘗試用循環(huán)展開改進(jìn)速度考廉。

2)通過使用例如累積變量和重新結(jié)合等技術(shù)秘豹,找到方法提高指令級并行。?

????①累計變量

????例如a1*a2*a3*a4

? ? 可以改成求(a1*a2)*(a3*a4)

? ? 如果用分治法昌粤,可以把原本O(n)復(fù)雜度減少到O(logn)

????②重新結(jié)合

? ? 那么重新結(jié)合是意思呢既绕,看以下代碼:

????int????a=0,b=1,c=3;

? ? 第一種寫法:????a=a+b+c;

? ? 第二種寫法:? ? a=a+(b+c);

? ? 乍一看這兩種寫法沒什么區(qū)別,但是實際上兩種代碼的關(guān)鍵路徑是不一樣的涮坐。在匯編代碼中凄贩,關(guān)鍵路徑限制代碼執(zhí)行代碼執(zhí)行速度。

? ? 第一種寫法袱讹,應(yīng)該先將a+b保存在寄存器c中疲扎,即存在寄存器寫后讀相關(guān),指令不能并行執(zhí)行捷雕。但是第二種寫法椒丧,b+c保存在不同寄存器中,兩條乘法指令互相不影響救巷。

? ? 以前學(xué)計算機(jī)組成原理的時候壶熏,這種沖突可以通過記分牌算法和Tomasulo算法解決,但是讓硬件去優(yōu)化浦译,還是會增加開銷棒假。我用clang試了一下,編譯器也是會做此類優(yōu)化的精盅。所以一般情況下帽哑,這類優(yōu)化并沒有太大必要。

3)使用功能的風(fēng)格重寫條件操作渤弛,使得編譯采用條件數(shù)據(jù)傳送祝拯。

? ? C++中在可能的情況下,用三目運算符 ?:代替條件語句佳头。(條件傳送指令更快)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鹰贵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子康嘉,更是在濱河造成了極大的恐慌碉输,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亭珍,死亡現(xiàn)場離奇詭異敷钾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)肄梨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門阻荒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人众羡,你說我怎么就攤上這事侨赡。” “怎么了粱侣?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵羊壹,是天一觀的道長。 經(jīng)常有香客問我齐婴,道長油猫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任柠偶,我火速辦了婚禮情妖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嚣州。我一直安慰自己鲫售,他們只是感情好共螺,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布该肴。 她就那樣靜靜地躺著,像睡著了一般藐不。 火紅的嫁衣襯著肌膚如雪匀哄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天雏蛮,我揣著相機(jī)與錄音涎嚼,去河邊找鬼。 笑死挑秉,一個胖子當(dāng)著我的面吹牛法梯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼立哑,長吁一口氣:“原來是場噩夢啊……” “哼夜惭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起铛绰,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤诈茧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捂掰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敢会,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年这嚣,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸥昏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡姐帚,死狀恐怖互广,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卧土,我是刑警寧澤惫皱,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站尤莺,受9級特大地震影響旅敷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜颤霎,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一媳谁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧友酱,春花似錦晴音、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至或详,卻和暖如春系羞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霸琴。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工椒振, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梧乘。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓澎迎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子夹供,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 閱讀經(jīng)典——《深入理解計算機(jī)系統(tǒng)》07 本文將介紹非常實用的程序性能優(yōu)化手段辑莫,并用一個案例來詳細(xì)說明。 為什么要優(yōu)...
    金戈大王閱讀 3,727評論 2 23
  • 8086匯編 本筆記是筆者觀看小甲魚老師(魚C論壇)《零基礎(chǔ)入門學(xué)習(xí)匯編語言》系列視頻的筆記,在此感謝他和像他一樣...
    Gibbs基閱讀 37,139評論 8 114
  • 一洒缀、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運行的地址不確定 關(guān)于...
    SeanCST閱讀 7,784評論 0 27
  • “便秘是臨床常見的復(fù)雜癥狀瑰谜,而不是一種疾病,主要是指排便次數(shù)減少树绩、糞便量減少萨脑、糞便干結(jié)、排便費力等饺饭〔吃纾”(百度百科)...
    七個胖兒閱讀 19,013評論 0 3
  • 在小學(xué)我班來了一個轉(zhuǎn)學(xué)生,長的有點帥高高的瘫俊,有一點點胖鹊杖。可能是我比較幸運扛芽,他跟我一座骂蓖。己經(jīng)不記得我們說的第一句話是...
    陌上花開你等我閱讀 166評論 0 0