找回密码
 欢迎注册
楼主: 无心人

[讨论] 二进制32位整数快速平方根

[复制链接]
发表于 2009-2-18 11:00:28 | 显示全部楼层
原帖由 无心人 于 2009-2-18 10:34 发表


关键是ALU算法并不是最好的
这就是为什么Intel推SIMD的原因

也许你的算法改SSE2更快


SIMD 的妙处是将同一个128bit数据可以看做 128x1 / 64x1 / 32x4 / 8x16
如何看待取决于不同的指令。
这样可以做到多路并行的效果。

这里的ALU算法并不是最好的,
但在一定使用范围内却是最有效的。

比如,如果确知被开方数不大于 0xFFFF,
则仅需调用 8 次 SQRT_CORE 即可。
这是 FPU 等其它算法所不具备的。
当然,也可看作是 FPU 算法的精度过剩造成的,
因为实际上它是在做 64bit 数的开方。

SIMD 系列指令集也分整型指令和浮点型指令。
一般来说,整型指令比浮点型指令具有更短的周期,以及更大的吞吐率。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-2-18 11:02:25 | 显示全部楼层
是53Bit啊

宝宝的代码我修改了
改成肯定是64位浮点运算了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-2-18 11:03:46 | 显示全部楼层


你程序能不能使用一个预先得到的初始值?

根据首四位,能得到一个2位的初始值
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-18 11:12:12 | 显示全部楼层
主要是嫌 bsr 指令周期太长(新的 CPU 已改善不少),
要不完全可以动态决定循环次数的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-2-18 11:17:45 | 显示全部楼层
2个周期的指令还嫌长啊
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-2-18 11:18:29 | 显示全部楼层


如果你是AMD的U
怎么不用shr啊
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-18 11:23:37 | 显示全部楼层
你查到的是在 Core 2;
在 P4E 上得 2+16 个周期,
在 AMD K7 上得 23+9,
在 AMD K8上得 28+10,
在 AMD K7 上得 7+4。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-2-18 11:29:40 | 显示全部楼层
P4上是6个啊
微操作3个,6个周期延迟

P4E是16个
微操作2个,16个周期延迟

呵呵
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-2-18 11:32:19 | 显示全部楼层
LEA 代价也不小
P4E是2.5
P4才是0.5
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-2-18 11:46:27 | 显示全部楼层

  1. __declspec(naked)
  2. DWORD __fastcall iSqrt_FPU1_yaos(DWORD n)
  3. {
  4. __asm
  5. {
  6.    push ecx
  7.    sub esp, 4
  8.    mov word ptr [esp], 0x0E60
  9.    fnstcw word ptr [esp + 2]
  10.    fldcw word ptr [esp]  //提前设定截断加64位
  11.    mov eax, ecx  
  12.    shr eax, 31
  13.    fld qword ptr [b32 + eax * 8]
  14.    fild dword ptr [esp + 4]
  15.    faddp st(1), st
  16.    fsqrt
  17.    fistp dword ptr [esp + 4]
  18.    fldcw word ptr [esp + 2]
  19.    mov eax, [esp + 4]
  20.    add esp, 8
  21.    ret
  22.    }
  23. }
复制代码
继续优化, 通过测试
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-7 23:37 , Processed in 0.043826 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表