将所有双打转换为整数以获得更好的性能,这只是一个谣言吗?

The*_*ist 1 c++ math double performance integer

我有一个非常复杂和复杂的数据拟合程序,它使用Levenverg-Marquardt算法进行双精度拟合(基本上拟合类是模板化的,但我使用实例化它来加倍).拟合过程包括:

  • 计算误差函数(卡方)
  • 求解线性方程组(我使用lapack)
  • 计算关于参数的函数的导数,我想要拟合数据(通常是20多个参数)
  • 连续计算功能值:该功能是具有少量谐波的正弦和指数函数的复杂组合.

我的一位同事建议我至少使用整数至少10倍.我的问题是:

  1. 这是真的,我会得到那种改善吗?
  2. 将所有内容转换为整数是否安全?这有什么缺点?
  3. 对整个问题你有什么建议?你会怎么做?

该程序的开发是为了从在线信号中计算出一些参数,这意味着程序必须尽可能快,但我想知道是否值得启动将所有内容转换为整数的项目.

Tho*_*ews 6

改进的程度取决于您的平台.例如,如果您的平台具有快速浮点协处理器,则在浮点执行算术可能比完整算术更快.

您可以通过优化算法而不是切换到整数算法来获得更多性能提升.

提高性能的另一种方法是减少数据缓存命中并减少分支和循环.

我会测量程序的性能以找出瓶颈所在的位置,然后查看大部分性能发生的部分.例如,在我的嵌入式系统中,像你建议的微优化,节省了3微秒.这种增益不值得重新测试整个系统.如果有效,请不要修复它.首先要注重正确性和稳健性.