最近,我对以下问题感到最感兴趣:在存在不止一种类型的可用内存的情况下,优化内存使用的一般问题,并且在给定内存段的容量和访问它的速度之间要进行权衡。
熟悉的示例是一个程序,该程序决定何时从处理器高速缓存,RAM和硬盘驱动器(通过虚拟内存)进行读取 / 写入。
我对特殊情况特别感兴趣,在这种特殊情况下,需要加载的数据量(包括程序本身)大大超过了可用最快存储的容量(即,“仅加载所有内容”的简单解决方案不适用)。
我发现一个Wikipedia页面描述了一些常见的缓存算法,这几乎是我想要的。不幸的是,这些有点底层:
- 仅当您具有多次访问的子例程时,许多(例如LRU或MRU)才有意义。如果我有一个包含大量子例程的程序,其中某些子例程在给定的运行中从未访问过,而其中一些子例程则被访问过一两次,则此策略将永远无法工作,因为它无法在任何内容上建立足够的数据是常用的,不是。
- 其他的,例如CLOCK,似乎处理实现的特殊性,而不是真正地攻击问题的根源。
- 我知道有一种策略,其中一个方法是在测试运行期间首先配置程序,然后为操作系统提供配置文件以进行相应的优化。但是,我们仍然必须解决在构建概要文件时提供真正具有代表性的“示例用法”的问题。
我真正想了解的是:当我们抽象出硬件和软件的所有技术,并在纯理论上讲时,是否有可能以某种方式分析算法的结构,从而制定出一种有效的缓存策略来解决以下问题:它基于对算法正在执行的高级理解?
您可能对“访问图”模型感兴趣。
—
Neal Young