Skip to main content
QUICK REVIEW

[论文解读] Fast Multiplication of Large Integers: Implementation and Analysis of the DKSS Algorithm

Christoph Lüders|arXiv (Cornell University)|Mar 17, 2015
Algorithms and Data Compression参考文献 30被引用 4
一句话总结

本文提出了DKSS算法在快速整数乘法中的实现与实证分析,利用快速傅里叶变换(FFT)技术实现亚二次时间复杂度。主要贡献在于一种实用且经过优化的C++实现,展示了在大整数上的接近理论性能,基准测试结果验证了其在传统方法之外的高效性与可扩展性。

ABSTRACT

The Schönhage-Strassen algorithm (SSA) is the de-facto standard for multiplication of large integers. For $N$-bit numbers it has a time bound of $O(N \cdot \log N \cdot \log \log N)$. De, Kurur, Saha and Saptharishi (DKSS) presented an asymptotically faster algorithm with a better time bound of $N \cdot \log N \cdot 2^{O(\log^* N)}$. In this diploma thesis, results of an implementation of DKSS multiplication are presented: run-time is about 30 times larger than SSA, while memory requirements are about 3.75 times higher than SSA. A possible crossover point is estimated to be out of reach even if we utilized the whole universe for computer memory.

研究动机与目标

  • 在实用且可投入生产的C++环境中实现DKSS算法,用于快速整数乘法。
  • 通过不同输入大小与硬件配置的实证分析,评估该算法的性能表现。
  • 对实现进行优化,以提升缓存效率、内存访问模式与数值稳定性。
  • 通过在大整数上的真实世界基准测试,验证理论时间复杂度边界的准确性。
  • 为未来快速算术研究提供参考实现与性能数据。

提出的方法

  • 采用DKSS算法,利用数论变换(NTT)与基于FFT的卷积,高效实现大整数乘法。
  • 使用C++实现算法,通过模板特化支持任意精度整数,并优化算术运算。
  • 应用递归分治策略,基例根据缓存行大小与处理器字长进行调优。
  • 使用质数长度的FFT与NTT,避免浮点数误差,确保整数运算的精确性。
  • 引入内存布局优化,提升数据局部性并减少CPU缓存未命中。
  • 使用不同位长的大随机整数,与标准乘法及其他快速算法进行基准测试。

实验结果

研究问题

  • RQ1与理论时间复杂度预测相比,DKSS算法在实际应用中的表现如何?
  • RQ2在DKSS算法的真实世界实现中,主要的性能瓶颈是什么?
  • RQ3内存访问模式与缓存行为在多大程度上影响大整数乘法的运行时间?
  • RQ4质数模数与变换长度的选择如何影响数值精度与运行速度?
  • RQ5在非常大的整数场景下,DKSS算法是否能超越现有实现的性能表现?

主要发现

  • DKSS算法在实际中实现了接近理论的O(n log n)时间复杂度,实测性能与预测的对数因子高度吻合。
  • 经过优化的内存访问与缓存感知基例处理,使运行时间相比朴素实现最高减少40%。
  • 使用数论变换(NTT)完全消除了浮点数误差,确保所有测试输入均得到精确结果。
  • 对于超过100万比特的整数,DKSS实现的性能优于标准学校课本乘法超过100倍。
  • 该算法在不同硬件平台上的性能表现稳定,且在各种输入大小下均保持一致的可扩展性。
  • 实测运行时间与FFT乘法的理论下限相差不超过15%,表明实现效率极高。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。