Boost C++ 库

...是世界上评价最高、设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

性能对比 - Boost C++ 函数库
PrevUpHomeNext

在项目初期和整个过程中,进行了许多性能分析、每秒多精度运算次数的统计等。其中一些已经列在接下来的章节中。

在进入下一节的详细基准测试之前,我们将先提供一些适用于所有多精度后端的一般性性能说明。

头文件方式、与库无关的 Boost 许可证整数和浮点数后端,包括用于多精度整数的 cpp_int,以及用于多精度浮点数类型的 cpp_bin_floatcpp_dec_float,其速度明显慢于普遍认为世界最快的实现,即 GMP/MPIR、MPFR 和 MPC(它们基于 GMP)。由这些类型合成的复杂类型 cpp_complex 具有类似的相对性能。

有效封装 GMP/MPIR 和 MPFR 的后端保留了底层大数引擎的卓越性能。当使用这些后端时(结合至少一定程度的优化),它们可以达到并保持预期的底层性能。

然而,在数字位数较少的情况下,值得注意的是 cpp_intcpp_bin_floatcpp_dec_float 的性能实际上可以媲美甚至超过 GMP/MPIR、MPFR 等。其原因在于,栈分配和/或使用快速容器存储的机制,在数字位数较少时,其性能可以超过 GMP/MPIR 中的分配机制,而这在低位数情况下是运行时成本的主要部分。

然而,当数字位数超过约 50 位时,GMP/MPIR 的性能会稳步提升,并同时超过(相对于)Boost 许可的、自编写的后端性能。在几百到几千位数字时,会观察到约两到五倍的性能差异,其中基于 GMP/MPIR 的计算在性能上更优。

在几千位小数时,达到了 Boost 后端的上限。目前,Boost 许可的、自编写的后端的高级大数乘法方案仅限于学校乘法和 Karatsuba 乘法。尚未实现更高级的 Toom-Cook 和基于 FFT 的乘法。因此,使用 Boost 许可的、自编写的后端进行兆位计算尚不可行,而使用基于 GMP/MPIR 和 MPRF 的后端则可以轻松实现。


PrevUpHomeNext