最快的128位整数库

我正在研究CPU繁重的数值计算应用程序。 没有进入很多细节,它是一个计算数学研究项目,涉及计算大整数x的某个函数f(x)。

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

我在维基百科上找到了一个大约20个大整数库的列表,但其中大多数似乎都是针对任意精度的数字,这对我的任务来说太过分了,而且我不需要额外的费用。

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

您没有提到您的平台/可移植性要求。 如果你愿意使用gccclang ,在64位平台上,他们有一个免费的内置128位类型, __uint128_t__int128_t 。 也许其他平台有类似的类型扩展。

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

ttmath库可以满足您的需求。

这可能不适合所有人,但我要做的是选择具有源代码的最高性能的任意整数库,否则适合该作业,并将其破解为固定的整数大小。 将一些变量“nbits”更改为128硬编码。 它可能在运行时分配内存,直到那时才知道字节数。 将其更改为使用struct with data in place,每次读取数据时都保存一个解除引用的指针。 手动展开某些关键循环。 硬编码可能至关重要的任何其他内容。 然后编译器将有更好的时间来优化事物。 当然,其中大部分将是assembly,使用花哨的SIMD与本周使用的任何技术。

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

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