快速数字比较的最佳原始类型?

时间:2018-06-30 16:20:44

标签: java numbers comparison

我有一个函数可以进行数亿次迭代,试图找到给定可能性的最佳组合。我所有的数据都是预先计算的,几乎所有的算术运算都是对这些预先计算的值进行简单的>=<=比较。

我想知道在进行此简单比较时使用某些原始类型(intlongdouble)是否有优势。

我知道我可以去进行测试以查看哪个是“最佳”的,但了解潜在的推理也很重要。例如,int可能最容易比较,因为它占用较少的内存,或者double的浮点数更容易表明值的幂为10,在某些情况下可以加快比较。我有兴趣了解这些基础知识,而简单的测试不会告诉我。

1 个答案:

答案 0 :(得分:2)

这是过早的优化。您应该选择一种数据类型,基于该数据类型进行实现,并使用实际的实现方式运行性能基准测试,而不是一些比较特定类型的成千上万个随机值的组合测试。

使用特定实现进行测试的原因是,与原始比较的时间相比,有许多因素对速度的影响更大:

  • 缓存命中率-访问内存比访问缓存值要慢很多倍。在访问大量数据时重新构造循环可以在很大程度上改变程序的速度,而无需更改程序执行的原始比较的次数
  • 分支预测-保持CPU管道运行非常重要。如果循环和数据的结构可以优化正确的分支预测的数量,则代码的运行速度将比包含大量错误分支预测的代码快很多

在您实施了实际算法之前,无法测量任何这些指标。一旦优化了缓存和分支的实际实现,切换基础数据类型就变得相对容易了。

相关问题