我正在为移动设备编写一个计算量很大的过程,并且仅限于32位CPU。本质上,我正在执行大量数据的点积(大于12k的带符号16位整数)。浮点运算太慢了,因此我一直在寻找一种使用整数类型执行相同计算的方法。我偶然发现了一种称为“ 块浮点算术”的方法(链接论文的第17页)。它做得很好,但是现在我面临一个32位的问题,只是不足以足够精确地存储我的计算输出。
只是为了澄清,其精度不够的原因是,我必须大幅度降低每个数组元素的精度,以使最后得到一个适合32位整数的数字。约16000个事物的总和使我的结果如此巨大。
有没有一种方法(我希望参考文章或教程)使用两个32位整数作为最高有效词和最低有效词,并在它们上定义算术(+,-,*,/)以处理数据有效率的?另外,也许有更好的方法来做这些事情?这种方法有问题吗?我在使用的编程语言上相当灵活。我更喜欢C / C ++,但java也可以。我敢肯定有人做过。
我非常确定JVM必须支持64位算术long
类型,并且如果平台不支持JVM ,则VM必须模拟它。但是,如果您不能承受float
性能问题,那么JVM可能会毁了您。
大多数C和C ++实现将提供针对32位目标仿真的64位算术-我知道MSVC和GCC可以做到。但是,您应该意识到,您可能在谈论许多整数指令来保存单个浮点指令。您应该考虑该程序的规范不合理,或者您可以从其他地方释放性能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句