“Funnel Sort 是缓存无关模型中的比较排序。输入 (N) 个固定大小记录,慢存与快存之间每次搬运 (B) 个连续记录,快存容量为 (M);程序本身不读取这两个参数。”
理想缓存 ​
它沿用外存模型的缓存 (M) 与块 (B),再假设全相联和最优替换;算法代码不知道 (M,B),分析仍以二者计 cache misses。Tall-cache 如 (M=\Omega(B^2)) 是某些证明的额外条件。
递归矩阵转置是该模型上的一种构造策略,而不是模型定义的一部分:它不断把矩形切半;当子问题首次装入任一级缓存后,在内部复用连续块,因而同一代码适配多层尺度。这是“无参数但有局部性证明”,不是不考虑缓存。
失败边界 ​
任意递归并不自动最优:糟糕布局仍会逐元素跨块。现实组相联、TLB、预取和写回偏离 ideal cache,模型结论是传输上界而非精确计时。递归栈与基础阈值也有成本。
Cache-aware 算法显式按
最优替换是假想分析器,不是算法知道未来。Cache-oblivious 证明若依 ideal-cache 的包含性质,可逐层分析多级缓存;现实 conflict miss 仍可能改变常数。数据布局与递归访问顺序必须相配,仅有其中一项不保证局部性。
递归转置的状态演化 ​
对
朴素行主序矩阵按列扫描时,相邻访问相距整行,若行长大于缓存,每元素都可能 miss。二者 CPU 操作同为
Ideal-cache 假设的作用 ​
全相联与最优替换保证只要工作集不超过
Cache-aware blocking 直接选 tile 边长约
多级和失败边界 ​
Ideal-cache 的包含/最优性可让两级分析逐级应用到多层,但现实 set associativity 会产生 conflict misses。基础阈值、递归栈和并行 false sharing 也不在最简模型里,应作为实现边界而非否定渐近结论。
参考资料
- Frigo et al., “Cache-Oblivious Algorithms,” FOCS 1999.
- Harald Prokop, Cache-Oblivious Algorithms, MIT thesis, 1999.