用两个32位整数“模拟”一个64位整数

声子

我正在为移动设备编写一个计算量很大的过程,并且仅限于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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么将两个32位整数合并为一个64位整数?

用两个无符号的16位整数表示一个无符号的32位值

两个 16 位整数到一个 32 位浮点值

将两个32位整数转换为一个带符号的64位整数字符串

将两个32位整数的向量相乘,生成一个32位结果元素的向量

汇编:使用两个32位寄存器中的值进行除法,就好像它们是一个64位整数一样

将两个64位整数乘以128位然后>> >> 64位的最快方法?

在 C++ 中将 128 位整数表示为两个 64 位整数

如何用八(8)个4位整数创建一个32位整数?

逐位减去两个整数

如何将 32 位浮点值转换为两个 16 位整数

两个256位整数的按位异或

打破一个32位整数,并使用后半部分16位形成一个整数

显示一个19位整数

将四个8位无符号整数合并为一个32位无符号整数

哈希一个32位整数比对3个16位整数进行哈希运算要慢?

将多个整数打包成一个 64 位整数

检查整数是另一个整数的位旋转

在文本中的一位整数整数后面添加一个十进制分隔符和两个零

以 32 位存储两个整数值,同时避免使用负数 UB

Wix-用一个较新的32位MSI替换单独的32位和64位MSI

如何在8086汇编中减去两个64位整数

从两个8位整数计算16位整数值?

使用位运算符比较两个整数

给定一个包含43.0亿个32位整数的文件,我们如何找到一个至少出现两次的数字?

将2个32位整数交织成64个整数

C# 更改 GUID 的第一个 32 位整数

将整数的位X设置为另一个整数的Y位而不分支?

从一个整数形成位模式