作者uefang (雲飛(想出去玩))
看板C_and_CPP
標題Re: [問題] 程式最佳化
時間Fri Mar 27 21:06:49 2009
※ 引述《Killercat (殺人貓™)》之銘言:
: ※ 引述《dcgkii ()》之銘言:
: : 有沒有書籍或網站是專門在講
: : 程式的最佳化啊?
: : 就是可以使編譯後的組語更快?
: 最佳化來講 "我們能做的"大概就是只有thread opt跟openMP而以了
: 剩下的不是要_asm就是要交給編譯器來做
: 有幾個最佳化的點我可以聊一下
: 1. 良好的寫作習慣
: 能++n就不要n++ 能+=就不要+
: 能一次迴圈內做完的就不要分兩個迴圈(不過這個在最佳化有不少例外)
: 2. 利用一些third party library
: 比方說Intel出的IPP/MKL(恩 效能要用錢來換)
: 3. 買很棒的IDE並且遵照他的作法
: 又是Intel, IC(Intel Compiler)
: 4. OpenMP
: 這個是你可以google的東西,在很多IDE上都有支援
: 效能增加非常可觀
: 5. Thread opt
: 這是一個很複雜的議題,thread本身是有最佳化解法的
: 市面上也有些現成的(恩 也有要錢的)library
: 比方說TBB(有免費版本的OpenTBB, http://www.threadingbuildingblocks.org/ )
: Boost本身也有thread pool manager,openMP3.0的task manager
: 原理的話就自己google了,其實除了1以外
: 大多數都是把很多個相同的算式合在一次運算裡面做掉以避免浪費
6. 盡量用三元運算式 e1?e2:e3 代替 if else
7. 盡量不要用動態記憶體配置寫法 malloc()
8. 盡量用 Bitwise Logical Operator (>>,<<,^,|,&,~)
ps: 乘法可用<< , 除法可用 >>
9. 盡量不要用 / 或 % 運算
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.110.129.63
※ 編輯: uefang 來自: 123.110.129.63 (03/27 21:07)
※ 編輯: uefang 來自: 123.110.129.63 (03/27 21:08)
→ stonehomelaa:不用malloc 那怎麼寫程式@@ 03/27 22:06
→ tsaiminghan:new ? 03/27 22:10
推 s864372002:自己測時,三元運算子好像比if else慢耶@@ 03/27 23:29
推 VictorTom:另外推一個, 能用整數算/存的就不要用浮點數來算/存@_@" 03/27 23:45
推 freelancer:可以用alloca 或一些stack based 的container 03/28 02:20
→ freelancer:然後有些時候寫C是沒有C standard library 可以用的. 03/28 02:21
→ tinlans:.............沒有一個是正確的觀念。 03/31 01:13