精華區beta Programming 關於我們 聯絡資訊
※ 引述《sealoe@kkcity.com.tw ()》之銘言: : ※ 引述《DungeonFan》之銘言: : > 這是多講的。 : > 如果拿同一個algorithm來實做,千萬不可小看那50%~的改善。 : > 真正的問題是..一般人別說algorithm,連程式本身的效率 : > 都不會。-_- : 可以舉個例子嗎? : 可以和 "課本" 內列出的演算法效率差很多的 : 我不要說50% 我只想問問 10%的有沒有 : 很多新演算法的改良處不過是常數的部份 : 你要是能夠提出如你所說的方法 我想IEEE一定有數篇你的大作 : 如果你說的會 不過是查查課本 照本宣科 : 那樣, 我只能說少以管窺天 多多學習才是比較重要的 他的意思是說, 同樣的 algorithm 以不同 coding 方式寫出來效率可能差很多. 隨便舉個例子, Discrete Cosine Trasform 講求的是最少的加法跟乘法. 縱使在 algorithm 上把加法跟乘法的數目壓到最低, 最重要的還是查表. table-lookup 這種 coding 技巧在 algorithm 課本上是不會敎的. 還有一些是搞組語或 SIMD 時該知道的東西. 比如說 MOVQ 在 Pentium 4 上要 6 cycles, PSHUFW 只要 2cycles. movq mm1, mm2 不如寫成 pshufw mm1, mm2, 0xe4 又如 MMX 上並沒有 PAVGB 這個兩點平均指令 (motion compensation 常用) 然而我們知道 (x + y + 1)>>1 = (x OR y) - (x XOR y)>>1, 因此 #define _m_pavgb_mmx(m1, m2) \ _m_psubb(_m_por(m1, m2), _m_psrlqi(_m_pand(_m_pxor(m1, m2), \ _mm_set1_pi8((char)0xfe)), 1)) 這也是屬於 coding 技巧的一種, 程式寫久了有感覺才比較能想出這種東西. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.85.8.143