13

我正在开发一个 CPU 密集型数值计算应用程序。无需赘述,这是一个计算数学研究项目,涉及为大整数 x 计算某个函数 f(x)。

现在一切都在 C++ 中以 x64 模式实现,使用本机 64 位整数。这将我限制在 x<2^64~1.8*10^19。我想更进一步,为此,我需要一个执行 128 位算术的库。而且它必须非常快。特别是整数除法应该很快。否则我会坐在这里等到感恩节的结果。我宁愿不重新发明轮子。

我在 Wikipedia 上找到了大约 20 个大整数库的列表,但其中大多数似乎针对的是任意精度的数字,这对我的任务来说太过分了,我不需要与此相关的额外成本。

有谁知道哪个库可以最快地处理 128 位整数?

4

3 回答 3

16

您没有提到您的平台/可移植性要求。如果您愿意使用gccor clang,则在 64 位平台上,它们具有免费提供的内置 128 位类型,__uint128_t并且__int128_t. 也许其他平台有类似的类型扩展。

在任何情况下,都应该可以在gcc源代码中找到相应的通用代码,该代码将两个宽度整数组合起来N以合成一个宽度整数2N。这可能是为此目的创建独立库的一个很好的起点。

于 2010-09-11T22:23:34.117 回答
5

ttmath库可以满足您的需求。

于 2010-09-15T10:16:27.807 回答
1

这可能并不适合所有人,但我要做的是选择具有源代码的性能最高的任意整数库,并且在其他方​​面适合这项工作,并将其修改为固定整数大小。将一些变量“nbits”更改为 128 硬编码。它可能在运行时分配内存,直到那时才知道字节数。将其更改为使用 struct 与数据就地,保存每次读取数据时取消引用的指针。手动展开某些关键循环。硬编码其他可能很关键的东西。然后编译器可能会更容易优化事物。当然,其中大部分将是组装,使用花哨的 SIMD 和本周使用的任何技术。

这会很有趣!但是,作为一名程序员,我从机器代码和非常低级的东西开始。

但是对于那些不像我那么疯狂的人来说,也许其中一个可用的库使用模板或者有一些方法可以生成自定义大小的代码。而且,一些编译器有一个“long long”整数类型,它可能是合适的。

于 2010-09-14T03:26:56.287 回答