用于快速数字比较的最佳基元类型?



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

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

我知道我可以去测试一下,看看哪个是"最好的",但了解潜在的原因也很重要。例如,也许int最容易比较,因为它占用的内存更少,或者double的浮点更容易告诉值的 10 的幂,这在某些情况下加快了比较速度。我很想知道这些基础知识,一个简单的测试不会告诉我。

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

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

  • 缓存命中率- 访问内存比访问缓存值慢数倍。在访问大型数据数组时重新构建循环可以大大加快程序速度,而不会更改程序执行的原始比较数量
  • 分支预测- 保持 CPU 管道运行非常重要。如果循环和数据的结构可以优化正确分支预测的数量,则代码的运行速度比具有大量错误分支预测的代码快得多

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

最新更新