如何使大型计算程序更快
How to make large calculations program faster
我正在实现一个压缩算法。问题是,20个Kib文件需要一秒钟的时间,所以这是不可接受的。我认为这是缓慢的,因为计算
我需要关于如何使它更快的建议。我已经有了一些技巧,比如移位而不是相乘,但由于程序的复杂性,我真的想确定哪些更改确实有帮助。我也接受关于编译器选项的建议,我听说有一种方法可以让程序更快地进行数学计算。
常见操作有:
math
库的pow
(…)函数- 大数字%2
- 大数乘法
编辑:程序没有浮点数字
如何使事情更快的问题不应该在这里问给其他人,而应该在您的环境中问给探查器。使用探查器来确定大部分时间花在哪里,这将提示您哪些操作需要改进,如果您不知道如何改进,请询问具体的操作。在不知道原始代码是什么的情况下,几乎不可能说出你需要更改什么,而且这个问题没有提供足够的信息:pow(…)函数:函数的参数是什么,指数是固定的吗?你需要多少精度?你能改变一些会产生类似结果的函数吗大数:中的大有多大?在这种情况下,数字是什么?整数?浮点?
您的问题非常广泛,没有足够的信息给您具体的建议,我们只能制定一个总体路线图。
什么平台,什么编译器?什么是"大数字"?你已经做了什么,你对优化了解多少?
- 使用优化测试版本构建(Visual C++中的/Ox/LTCG,gcc的-O3-IIRC)
- 衡量一下时间花在了哪里——磁盘访问,还是实际的压缩程序
- 有更好的算法和代码流吗?最快的操作是未执行的操作
- 对于20K文件,内存工作集应该不是问题(除非您的compression需要大的数据结构),所以代码优化确实是下一步
- 现代编译器已经实现了很多优化,例如用位移位代替常数的二次幂除法
pow
对于本机整数非常慢- 如果你的代码写得很好,你可以试着发布它,也许有人能应对挑战
提示:-
1) 模2只对最后一位起作用
2) 幂函数可以在logn时间内实现,其中n是幂。(不过数学库应该足够快)。同样为了快速供电,你可以查看
如果什么都不起作用,只需检查是否存在一些快速算法。
相关文章:
- 为什么C++程序在太大时返回代码而不是答案?
- QDateTime::toString() 在退出处理程序中使用时失败
- 使用指针计算堆栈问题的大 O 表示法
- 我的C++级数计算程序出了什么问题?被困了好几个星期
- Wxwidgets - 如何添加调整大小事件处理程序以使"X"绘图随窗口调整大小?
- 使用 C++ 和 OOP 创建面积计算程序
- 为什么按位运算符在使用与整数中提供的位数相同的位数计算可能的最大范围时会产生错误
- 聚合初始化的 C++17 扩展是否使大括号初始化变得危险?
- 如何限制文件大小,以便我的程序在变大之后创建一个新文件?并编辑新创建的文件的名称
- 使用 valgrind 的地块测量 c++ 应用程序的最大内存使用量(堆栈和堆)
- 根据堆栈操作 c++ 计算元素的最大数量
- 为什么我的C 代码无法计算整数的最大和最小值
- 使用幂函数的计算给出了大数字的错误答案
- 计算杆的最大总价格,以独特的长度值切割
- 我正在尝试编写一个简单的计算程序,但答案一直返回为 0
- 在c++上创建税务计算程序,错误为未初始化的局部变量
- 不计算程序中的最低和最高成绩。(C++)(流)
- 以下程序中最大 int 1000 000(在 int 范围内)的整数溢出
- 给定 (a, b) 计算 k 的最大值,使得 a^{1/k} 和 b^{1/k} 是整数
- 如何使大型计算程序更快