[問題] 最快的平方法?

看板C_and_CPP (C/C++)作者 (此方不可長)時間15年前 (2010/10/11 09:06), 編輯推噓8(8020)
留言28則, 11人參與, 最新討論串1/1
因為我的程式演算法中用到很多 "平方" 目前想的到最快的大概就是 x * x 試過 inline asm 了, 似乎還慢一點 請問還有什麼撇步有可能比 x * x 還快的嗎? 需求是 double 浮點數, 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.126.29

10/11 09:10, , 1F
嗯,需求很特別.一般說是把*換成連續+,在大規模計算會快一點
10/11 09:10, 1F

10/11 09:12, , 2F
因為是浮點數...沒法用連續加 XD
10/11 09:12, 2F

10/11 09:18, , 3F
對厚 囧
10/11 09:18, 3F

10/11 09:25, , 4F
我是想知道有沒有更好的inline asm寫法...
10/11 09:25, 4F

10/11 09:25, , 5F
看過一個sqrt()用asm寫的,比c自己的快三倍...
10/11 09:25, 5F

10/11 09:32, , 6F
有試過把double,float分解成mantissa和exp,分開計算嗎?
10/11 09:32, 6F

10/11 09:33, , 7F
小數點? 那你需要的是Q.15才對,要不然浮點運算...hmmm
10/11 09:33, 7F
請問Q.15是什麼 orz

10/11 09:33, , 8F
m1*10^e1 * m2*10^e2 = m1*m2*10^(e1+e2)
10/11 09:33, 8F
... 我想...去拆的過程可能就已經太慢了 XD 我當時是用 _asm { fld TMPa1 fld TMPa1 fmul fstp TMPa1 } 跟 _asm { movq xmm0, TMPa1 movq xmm1, xmm0 mulpd xmm0, xmm1 movq TMPa1, xmm0 } 結果好像都比 TMPa1 * TMPa1 慢一點點.... ※ 編輯: wahaha99 來自: 220.132.126.29 (10/11 09:42)

10/11 09:52, , 9F
我想是以float來說,左移1次,右移24次,取得mantissa
10/11 09:52, 9F

10/11 09:53, , 10F
另外,左移8次右移8次取得exp;右移31取得sign
10/11 09:53, 10F

10/11 09:53, , 11F
前面錯,是左移1,右移25取得mantissa
10/11 09:53, 11F

10/11 09:55, , 12F
mantissa用連加取得乘積,exp直接相加.把結果用位元運算寫回
10/11 09:55, 12F

10/11 10:11, , 13F
CUDA?
10/11 10:11, 13F

10/11 10:32, , 14F
既然有 fmul 那還有比用硬體作更快的嗎?? = =
10/11 10:32, 14F

10/11 10:59, , 15F
你如果能超越乘法器那還要乘法器幹麻?? XD
10/11 10:59, 15F

10/11 11:31, , 16F
要再快的話只能用simd的方式一次進行多個運算了
10/11 11:31, 16F

10/11 13:13, , 17F
CUDA算double有點麻煩
10/11 13:13, 17F

10/11 13:20, , 18F
下面那篇不見了@_@"
10/11 13:20, 18F

10/11 13:33, , 19F
後來想想...改天再發
10/11 13:33, 19F

10/11 13:40, , 20F
剛發的那篇fastcall好像少了點什麼
10/11 13:40, 20F

10/11 13:57, , 21F
對啊,多想一下再把結論寫出來.
10/11 13:57, 21F

10/11 14:05, , 22F
我做浮點數的左右移,還真不好做...
10/11 14:05, 22F

10/11 20:46, , 23F
要用bit op的話, 直接union起來吧, float與DWORD:bit
10/11 20:46, 23F

10/11 20:46, , 24F
直接union起來, 取值時比較省事; 但是算完放回去就....
10/11 20:46, 24F

10/11 20:48, , 25F
另外不曉得, 如果涉及falu<->ialu資料的傳遞, 會不會有
10/11 20:48, 25F

10/11 20:49, , 26F
其他效能衝擊....Orz
10/11 20:49, 26F

10/11 23:48, , 27F
看平台吧..
10/11 23:48, 27F

10/17 01:15, , 28F
先分析程式,將其轉為fix-point會不會快得多一點?
10/17 01:15, 28F
文章代碼(AID): #1CicCNVl (C_and_CPP)
文章代碼(AID): #1CicCNVl (C_and_CPP)