为何处理单个数组元素的处理器周期随工作集大小增长?
关于《What every programmer should know about memory》顺序读取测试结果的解读
工作集超L1d时的缓存访问逻辑:不是所有元素都从L2读取。顺序访问场景下CPU会启用缓存预取机制,当工作集超过16kB的L1d容量时,L1d会持续进行缓存行替换——当前访问的缓存行会留在L1d中,旧的、不再需要的缓存行会被淘汰。此时大部分数据是从L2加载到L1d后再访问,但因为预取的存在,不会出现所有数据都直接从L2读取的情况,只是L1d无法容纳全部工作集,导致频繁的L2到L1d的缓存行填充,最终平均单元素周期升到9。
测试数据是否为平均值:是的,论文里的这个数据是多次遍历数组后的稳态平均值。首元素从主存加载的冷启动延迟会被稀释,因为测试通常会循环执行多次访问操作,取稳定后的平均周期,这样能排除首次加载的极端情况,真实反映缓存系统在持续访问下的性能表现。
能否假设测试程序独占L1d缓存:可以近似认为独占。L1d是CPU核心私有的缓存,论文中的测试一般会在隔离环境下进行——比如绑定测试程序到单个核心,关闭其他无关进程,最大程度减少其他程序对该核心L1d的占用干扰。这种情况下,测试程序可以独占对应核心的16kB L1d缓存,测试结果的可信度很高。
总结:这个测试结果清晰展示了缓存容量对顺序访问性能的影响——工作集在L1d容量内时,全程L1d命中,延迟极低;超过L1d容量后,L1d进入持续替换状态,数据主要从L2获取,平均延迟上升,这完全符合L1、L2缓存的层级访问特性。
内容的提问来源于stack exchange,提问作者nartherion
相关产品推荐
相关产品推荐

