问题:
L1 cache 中,为什么要区分 icache、dcache ?
为什么到了 L2 cache 就不区分了呢?
优点
- 让 icache 放置在靠近取指单元的位置,让 dcache 放置在靠近内存单元的位置,从而同时降低两者的延迟
- 这种分离式的设计,在物理位置上降低了时延。
- 独立的 icache 和 dcache 使得并行获取指令和数据成为可能
- 流水线中取指令和取数据属于不同的模块,硬件上可以并行
- 本质上拆分后的带宽是同一缓存的两倍
- 允许我们对指令缓存和数据缓存采用不同的替换策略
- icache 和 dcache 具有不同的访问模式
- icache 几乎不会被修改(甚至是只读的)
- 所有的 intel 奔腾处理器在 L1 icache 中使用 LRU 策略,在 L1 dcache 中使用 NRU 策略。
- 另外,奔腾9500往后,L1 ITLB使用NRU,L1 DTLB使用LRU。
缺点
- 拆分 相比于统一的 L1 cache 可能并未得到充分利用,拆分缓存并不允许一个缓存在需要时占用另一个缓存的空间,所以相比而言,同一的缓存具有更高的命中率。