如何使大型计算程序更快

How to make large calculations program faster

本文关键字:计算程序 何使大      更新时间:2023-10-16

我正在实现一个压缩算法。问题是,20个Kib文件需要一秒钟的时间,所以这是不可接受的。我认为这是缓慢的,因为计算
我需要关于如何使它更快的建议。我已经有了一些技巧,比如移位而不是相乘,但由于程序的复杂性,我真的想确定哪些更改确实有帮助。我也接受关于编译器选项的建议,我听说有一种方法可以让程序更快地进行数学计算。

常见操作有:

  • math库的pow(…)函数
  • 大数字%2
  • 大数乘法

编辑:程序没有浮点数字

如何使事情更快的问题不应该在这里问给其他人,而应该在您的环境中问给探查器。使用探查器来确定大部分时间花在哪里,这将提示您哪些操作需要改进,如果您不知道如何改进,请询问具体的操作。在不知道原始代码是什么的情况下,几乎不可能说出你需要更改什么,而且这个问题没有提供足够的信息:pow(…)函数:函数的参数是什么,指数是固定的吗?你需要多少精度?你能改变一些会产生类似结果的函数吗大数中的有多大?在这种情况下,数字是什么?整数?浮点?

您的问题非常广泛,没有足够的信息给您具体的建议,我们只能制定一个总体路线图。

什么平台,什么编译器?什么是"大数字"?你已经做了什么,你对优化了解多少?

  • 使用优化测试版本构建(Visual C++中的/Ox/LTCG,gcc的-O3-IIRC)
  • 衡量一下时间花在了哪里——磁盘访问,还是实际的压缩程序
  • 有更好的算法和代码流吗?最快的操作是未执行的操作
  • 对于20K文件,内存工作集应该不是问题(除非您的compression需要大的数据结构),所以代码优化确实是下一步
  • 现代编译器已经实现了很多优化,例如用位移位代替常数的二次幂除法
  • pow对于本机整数非常慢
  • 如果你的代码写得很好,你可以试着发布它,也许有人能应对挑战

提示:-
1) 模2只对最后一位起作用
2) 幂函数可以在logn时间内实现,其中n是幂。(不过数学库应该足够快)。同样为了快速供电,你可以查看

如果什么都不起作用,只需检查是否存在一些快速算法。