看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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