如何更快地制作大型计算程序

时间:2011-06-23 07:36:09

标签: c++ performance mathematical-optimization

我正在实施压缩算法。事实上,20 Kib文件花了一秒钟,所以这是不可接受的。我认为这很慢,因为计算结果  我需要有关如何加快速度的建议。我已经有一些提示,比如移位而不是乘法,但我真的想确定哪些更改实际上有帮助,因为程序的复杂性。我也接受有关编译器选项的建议,我听说有一种方法可以让程序做更快的数学计算。

常见的操作是:

  • pow(...)math
  • 的功能
  • 大数%2
  • 大数乘

编辑:程序没有浮点数

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

您的问题非常广泛,没有足够的信息可以为您提供具体的建议,我们必须遵循一般的路线图。

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

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

答案 2 :(得分:0)

提示: -
1)模2只适用于最后一位 2)功率函数可以在logn时间实现,其中n是功率。 (数学库应该足够快)。也用于快速通电you may check this out

如果无效,只需检查是否存在快速算法。