[問題] Math數學運算效率問題

看板C_and_CPP作者 (hoi)時間14年前 (2011/11/17 14:30), 編輯推噓1(1015)
留言16則, 6人參與, 最新討論串1/1
開發平台(Platform): GCC 額外使用到的函數庫(Library Used): Math 問題(Question): 想請教的是, 這兩個Case算出來答案都一樣, 那麼假設計算機記憶體非常的大, 兩種算法哪一個運算速度較快呢0.0? 程式碼(Code):(請善用置底文網頁, 記得排版) Case1: double x=2, y=0, temp=0; temp = sqrt(x+3); y = test + 5*temp + 8*temp; Case2: double x=2, y=0; y = sqrt(x+3) + 5*sqrt(x+3) + 8*sqrt(x+3); 補充說明(Supplement): 因為範例程式還蠻短的所以直接貼上了, 只是想要知道一些效率問題的基本理論概念, 實際上我是要運算幾萬個字的數學方程式, 所以效率上有些要求,謝謝。 -- 酷酷方盒子 - QQBoxy http://QQBoxy.blogspot.com   -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.130.12.48 ※ 編輯: gs1458 來自: 140.130.12.48 (11/17 14:31)

11/17 14:41, , 1F
若compiler沒優化掉的話,case1,但何不寫14*sqrt(x+3)?
11/17 14:41, 1F

11/17 14:43, , 2F
compiler會幫你優化 所以這問題不需要問
11/17 14:43, 2F

11/17 15:21, , 3F
想到,可接受inline asm的話 : http://ppt.cc/dfWh
11/17 15:21, 3F

11/17 15:22, , 4F
sqrt14 是我目前看過最快的,約一般sqrt 2倍左右。
11/17 15:22, 4F

11/17 16:46, , 5F
很難從單一運算回答這種假設性的問題,整個scheme都給出
11/17 16:46, 5F

11/17 16:46, , 6F
來,記憶體要用多大,怎麼用,這樣還比較能回答
11/17 16:46, 6F

11/17 18:18, , 7F
自己計時就知道了...
11/17 18:18, 7F

11/17 18:37, , 8F
如果有開optimze case1/case2結果會一樣
11/17 18:37, 8F

11/17 18:38, , 9F
而且乘法也會變成一次
11/17 18:38, 9F

11/17 18:40, , 10F
不對,實際上因為double x=2在前面的關係
11/17 18:40, 10F

11/17 18:40, , 11F
compiler夠厲害會直接constant folding
11/17 18:40, 11F

11/17 18:40, , 12F
也就是在你這個特殊的狀況下sqrt和乘法的運算都會不見
11/17 18:40, 12F

11/17 18:41, , 13F
反而自己用inline asm不會比較快
11/17 18:41, 13F

11/17 18:41, , 14F
當然實際的case不會長成這樣..
11/17 18:41, 14F

11/17 18:42, , 15F
否則按計算機就好了,何必用程式XD
11/17 18:42, 15F

11/18 01:53, , 16F
恩,大致上瞭解了,非常感謝大家的指點迷津 :)
11/18 01:53, 16F
文章代碼(AID): #1EnAeKeo (C_and_CPP)