c++ - 将所有 double 转换为整数以获得更好的性能,这只是谣言吗?

标签 c++ performance math integer double

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

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

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

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

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

最佳答案

改进的程度取决于您的平台。例如,如果您的平台具有快速浮点协处理器,则执行浮点运算可能比积分运算更快。

通过优化算法而不是切换到整数运算,您可能能够获得更多性能提升。

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

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

关于c++ - 将所有 double 转换为整数以获得更好的性能,这只是谣言吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19300101/

相关文章:

c++ - 内存布局问题

performance - JMeter 不记录任何客户端服务器事件

java - 获取 360 到 1 之间的集合的平均角度方向

c++ - 如果 T 是一个函数,不要对 T 使用 sizeof

c++ - 在 Visual Studio 中从 1 个项目构建多个目标

performance - Entity Framework 5 和 Oracle : Expression with closure affecting performance when querying against a non-unique indexed field

php - 获取矩阵元素组合的最小总和

java - 如何使用 Canvas 进行缩放

c++ - C++ 二进制代码能否通过 native C 接口(interface)变得可移植?有什么限制?

mysql - 实现基于父ID关系的查询