【问题标题】:When should I cache the result of a computation?我应该什么时候缓存计算结果?
【发布时间】:2014-07-03 03:41:11
【问题描述】:

有没有一种好方法来判断我是否应该缓存计算结果?或者换种说法,在什么情况下从内存中检索比重新计算慢?

我知道基准测试会给出明确的答案。但是,基准测试非常耗时,尤其是在需要测试许多小型计算时。我正在寻找一个可以遵循的好的经验法则,它在大多数情况下都可以很好地工作。

我认为这与 CPU 板载内存的大小有关。还有可能是 RAM 的缓存延迟......

【问题讨论】:

  • 这还取决于缓存结果是否意味着不必引用其他数据(假设允许丢弃或从缓存中删除此类数据不会损害性能)。处理器缓存的“负载因子”(不仅仅是绝对容量)很重要;如果缓存容量和带宽没有得到充分利用,那么操作的记忆成本会降低。重用的时间局部性也是一个因素。 (即使是可能的重用也可以被利用,尽管即使是不常见的分支错误预测的成本也会使这种成本更加昂贵。)
  • 一些软件缓存框架或许能帮到你,但硬件 CPU 缓存不会问你要缓存什么,也不能改变程序流程(包括跳过任何函数调用)跨度>

标签: caching cpu-cache


【解决方案1】:

有没有一个好方法来判断我是否应该缓存一个结果 计算?或者问不同,在什么条件下检索 从内存比重新计算慢?

我假设您问的是使用lookup-table (LUT)。 这取决于:

  1. 计算的复杂性
  2. LUT 的大小

如果您有许多简单计算的结果,那么重新计算可能会更快。 如果您将复杂操作的结果存储在适合较低缓存级别(L1、L2)的 LUT 中,则 LUT 可以加速您的代码。

但是,正如您所说,基准测试将给出明确的答案。 Here 您有一个 LUT 与计算比较的示例。

【讨论】:

    猜你喜欢
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    相关资源
    最近更新 更多