我有一个非常复杂和复杂的数据拟合程序,它使用 Levenverg-Marquardt 算法以 double 进行拟合(基本上拟合类是模板化的,但我使用实例化它来加倍)。拟合过程包括:
- 计算误差函数(卡方)
- 求解线性方程组(为此我使用 lapack)
- 计算函数关于参数的导数,我想将其拟合到数据(通常超过 20 个参数)
- 连续计算函数值:该函数是具有少量谐波的正弦函数和指数函数的复杂组合。
我的一位同事建议我使用整数至少要快 10 倍。我的问题是:
- 我真的会得到那种改善吗?
- 将所有内容都转换为整数是否安全?这有什么缺点?
- 对于整个问题,您有什么建议?你会怎么做?
该程序是为了在线计算信号的一些参数而开发的,这意味着该程序必须尽可能快,但我想知道是否值得开始将所有内容转换为整数的项目。
最佳答案
改进的程度取决于您的平台。例如,如果您的平台具有快速浮点协处理器,则执行浮点运算可能比积分运算更快。
通过优化算法而不是切换到整数运算,您可能能够获得更多性能提升。
另一种提高性能的方法是减少数据缓存命中并减少分支和循环。
我会衡量程序的性能以找出瓶颈所在,然后查看大部分性能发生的部分。例如,在我的嵌入式系统中,像你建议的那样进行微优化,节省了 3 微秒。这个 yield 不值得重新测试整个系统。如果有效,请不要修复它。首先关注正确性和健壮性。
关于c++ - 将所有 double 转换为整数以获得更好的性能,这只是谣言吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19300101/