我正在开发一个CPU重型数值计算应用程序。没有进入很多细节,它是一个计算数学研究项目,涉及为大整数x计算某个函数f(x)。
现在一切都是在x64模式下用C ++实现的,使用本机64位整数。这限制我x <2 ^ 64~1.8 * 10 ^ 19。我想更进一步,为此,我需要一个执行128位算术的库。它必须非常快。特别是,整数除法应该很快。否则我会坐在这里等待结果直到感恩节。而且我宁愿不重新发明轮子。
我在维基百科上找到了一个大约20个大整数库的列表,但其中大多数似乎都是针对任意精确数字的,这对我的任务来说太过分了,而且我不需要额外的费用。
有谁知道哪个库可以最快地运行128位整数?
答案 0 :(得分:16)
您没有提及您的平台/可移植性要求。如果您愿意使用gcc
或clang
,则在64位平台上,他们有免费的内置128位类型,__uint128_t
和__int128_t
。也许其他平台有类似的类型扩展。
在任何情况下都应该可以在gcc
源中找到相应的通用代码,这些代码组合宽度为N
的两个整数来合成一个宽度为2N
的整数。这可能是为此目的创建独立库的一个很好的起点。
答案 1 :(得分:5)
ttmath库可以满足您的需求。
答案 2 :(得分:1)
这可能不适合所有人,但我要做的是选择性能最高的任意整数库,其中包含源代码,否则适用于该作业,并将其破解为固定的整数大小。将一些变量“nbits”更改为128硬编码。它可能在运行时分配内存,直到那时才知道字节数。将其更改为使用struct就地存储数据,每次读取数据时都会保存一个解除引用的指针。手动展开某些关键循环。硬编码其他可能至关重要的东西。然后编译器将probaby更容易时间优化。当然,其中大部分将是装配,使用花哨的SIMD与本周使用的任何技术。
这会很有趣!但是,作为程序员,我开始使用机器代码和非常低级的东西。
但对于那些不像我一样疯狂的人,可能有一个可用的库使用模板,或者有一些生成自定义代码的方法。并且,一些编译器具有可能适合的“long long”整数类型。