【发布时间】:2014-07-03 03:41:11
【问题描述】:
有没有一种好方法来判断我是否应该缓存计算结果?或者换种说法,在什么情况下从内存中检索比重新计算慢?
我知道基准测试会给出明确的答案。但是,基准测试非常耗时,尤其是在需要测试许多小型计算时。我正在寻找一个可以遵循的好的经验法则,它在大多数情况下都可以很好地工作。
我认为这与 CPU 板载内存的大小有关。还有可能是 RAM 的缓存延迟......
【问题讨论】:
-
这还取决于缓存结果是否意味着不必引用其他数据(假设允许丢弃或从缓存中删除此类数据不会损害性能)。处理器缓存的“负载因子”(不仅仅是绝对容量)很重要;如果缓存容量和带宽没有得到充分利用,那么操作的记忆成本会降低。重用的时间局部性也是一个因素。 (即使是可能的重用也可以被利用,尽管即使是不常见的分支错误预测的成本也会使这种成本更加昂贵。)
-
一些软件缓存框架或许能帮到你,但硬件 CPU 缓存不会问你要缓存什么,也不能改变程序流程(包括跳过任何函数调用)跨度>