And*_*ass 12 floating-point android
由于所有智能手机(至少是那些我可以找到规格的智能手机)都有32位处理器,我认为在大量计算中使用单精度浮点值的性能明显优于双精度.但是,情况似乎并非如此.
即使我避免使用类型转换,并尽可能使用FloatMath包,在将基于浮点的方法与基于浮点的方法进行比较时,除了内存使用之外,我几乎看不到性能上的任何改进.
我目前正在研究一种相当大的计算密集型声音分析工具,它每秒进行数百万次乘法和加法.由于32位处理器上的双精度乘法需要几个时钟周期而单个精度需要1个,我假设类型更改会很明显......但它不是:-(
对此有一个很好的解释吗?这是由于Dalvik VM的工作方式,还是什么?
Gab*_*abe 16
典型CPU上的浮点单元以双精度(或更好)执行所有计算,并简单地舍入或转换为最终精度.换句话说,即使是32位CPU也具有64位FPU.
许多手机都有包含FPU的CPU,但禁用了FPU以节省功耗,导致浮点运算被慢慢模拟(在这种情况下,32位浮点数将是一个优势).
还有一些具有32位FPU的向量单元,导致64位浮点运算需要更长时间.某些SIMD单元(如执行SSE指令的单元)在相同的时间内执行32位和64位操作,因此您可以一次执行两次32位操作,但是单个32位操作赢了不会比单个64位操作更快.
许多(可能是大多数)Android设备没有浮点协处理器.
我目前正在研究一种相当大的计算密集型声音分析工具,它每秒进行数百万次乘法和加法.
在没有浮点协处理器的Android设备上,这不会很好.
使用NDK将其移至C/C++,然后将目标限制为ARM7,后者具有浮点协处理器.
或者,将数学更改为在定点模式下工作.例如,Google地图不处理纬度和经度的十进制度数,而是微度度数(10 ^ 6度),特别是它可以使用定点数学进行计算.
| 归档时间: |
|
| 查看次数: |
4046 次 |
| 最近记录: |