close
吾人本身一陣最常用到的二個運算: Sqrt, 1/Sqrt,於是會找些奇淫怪技想辦法加速。
事實上在做 Sqrt 加速時,實測之結果效能都沒 VC 開 O2 來得快,即使只求整數之 sqrt 之演算法效果也沒很好,所幸在 codeproject 看到有人已實測,該程式碼共寫了 14 份 sqrt,有興趣可去下載下來看看,其中 asm 崁入的有 2 份,測出來結果都比內建的還快,且精度也完全正確。以下為該作者提供之 2 份 sqrt,實測出來約比內建 sqrt 快上 20% 左右 (11390 : 8922),其它的 12 種方法若有興趣,也可再進行實測。
double inline __declspec (naked) __fastcall sqrt14(double n) { _asm fld qword ptr [esp+4] _asm fsqrt _asm ret 8 } double sqrt13(double n) { __asm{ fld n fsqrt } }
經由 sqrt、log2、invSqrt 等文之探討,若效能要寫過 vc 提供之 library (除整數次方除外),真的不容易,若不會寫 asm 、對速度沒特別需求的話,還是直接用 vc 內建提供之 math library 即可,不然可能三不五時又要看到 0x5f3759df 這種 magic number。
若要看其它 asm 碼,可至此網站,裡面提供大多是整數型之 sqrt,比 vc 內建之 sqrt 還快的約有一半 (後半段)。
全站熱搜