字节块 例 全相关 字节块 并行比较所有 比较所有Tag – 并行比较所有 31 Tag (27 bits) Cache Tag = = : = = = : : : 4 Offset 0 Valid Cache Data B 31 B1 B 0 : 35 全相关Cache 好处 – 解决了冲突:同一内存单元可以进入任何 解决了冲突:同一内存单元可以进入任何Cache 块 坏处 – 每个 每个Cache块需要一个比较器 块需要一个比较器 – 每个周期要把所有 每个周期要把所有Cache单元的内容读出来 单元的内容读出来 所有 全相关Cache不能做得很大 不能做得很大 全相关 – 在不需要大容量 在不需要大容量Cache的情况使用 的情况使用 – 有最好的灵活性 36 第3类Cache未命中 因容量导致的未命中 – Cache容量比内存小,必然不可能把全部内容载 容量比内存小, 容量比内存小 入 – 如果增加 如果增加Cache容量,此类未命中率将下降 容量, 容量 – 全相关 全相关Cache的主要未命中类型 的主要未命中类型 如何既节约成本,又具有相关 的优点? 如何既节约成本,又具有相关Cache的优点? 的优点 37 N路集相关Cache 内存地址 – Tag:同以前 : – Offset :同以前 – Index:指向某 :指向某Cache“行”(集:set) 行 ) 区别何在? 区别何在? 多个Cache块 – 每个集包含多个 每个集包含多个 块 – 集内是全相关的,必须并行比较 集内是全相关 全相关的 必须并行比较Tag – 集间相当于直接映射 ? 直接映射到集,然后用全相关 直接映射到集, 38 Cache的替换策略 如果发生Cache未命中事件,必须从内存读取 未命中事件, 如果发生 未命中事件 数据, 存储到某个Cache块中 数据,并存储到某个 块中 究竟存储到哪个Cache块? 究竟存储到哪个 块 – 替换策略 直接映射Cache 直接映射 – 根据内存地址唯一确定 全相关/N路集相关 全相关 路集相关 – 有多个可选择的块:如何决策? 有多个可选择的块:如何决策? 39 Cache的替换策略 情况1 情况 – 如果有一可用 如果有一可用Cache块未占用(空:Valid=0) 块未占用( 块未占用 ) – 当然存储在此处 情况2 情况 – 如果所有可用 如果所有可用Cache块都已经占用? 块都已经占用? 块都已经占用 – 必须废弃一个,然后存储在此处 必须废弃一个, ? 替换、替换策略 替换、 40 Cache的替换策略 选择使用频率(访问次数) 选择使用频率(访问次数)最小的块 使用频率 – 实现非常困难 ? 需要统计访问次数 ? 需要对访问次数排序 – 在内存 在内存Cache层次一般不采用 层次一般不采用 选择最久 选择最久未使用的块 – 通常叫做:LRU(Least Recently Used) 通常叫做: ( ) ? 字面含义更象前一种算法 ? 但一般是这种含义 其它替换算法 41 Cache替换策略例 Cache参数 参数 – 2路集相关 路集相关 – 共4块 块 ? 块大小可以不考虑 – 访问顺序(内存块地址) 访问顺序(内存块地址) ? 0, 2, 0, 1, 4, 0, 2, 3, 5, 4 跟踪事件 – Hit Miss Miss w. Replace 42 地址0, 地址 2, 0, 1, 4, 0, ... ? 0: miss, 载入 载入(set0, loc 0) ? 2: miss, 载入 载入(set 0, loc 1) ? 0: hit loc 0 loc 1 lru set 0 0 0 set 1 set 0 lru set 1 set 0 lru 0 lru2 set 1 set 0 lru lru lru lru lru 2 0 ? 1: miss, 载入 载入(set 1, loc 0) set 1 1 set 0 lru0 ? 4: miss, 载入 载入(set 0, loc 1),替换 ,替换2 set 1 1 ? 0: hit 1 2 2 4 set 0 lru0 lru4 lru set 1 43 Cache的参数 Cache参数对未命中率的影响 参数对未命中率的影响 相关程度 2-way 4-way 8-way 替换算法 LRU Ran LRU Ran LRU Ran 16 KB 5.20% 5.70% 4.70% 5.30% 4.40% 5.00% 64 KB 1.90% 2.00% 1.50% 1.70% 1.40% 1.50% 256 KB 1.15% 1.17% 1.13% 1.13% 1.12% 1.12% 还有其它优化手段? 还有其它优化手段 – 减少未命中附加开销 ? 更大的内存带宽 ? 还有其它方法? 还有其它方法 44 Cache性能参数计算例 假设: 假设: Hit Time = 1,Miss Penalty = 10, , , Miss Rate = 5% – 在Cache采用初期的性能指标 采用初期的性能指标 平均访问时间=1+0.05×10=1.5 平均访问时间= + × 假设: 假设: Hit Time = 1,Miss Penalty = 100, , , Miss Rate = 5% – 现在的性能指标 平均访问时间= + 平均访问时间=1+0.05×100=6 × – 必须要作更多的优化 45 继续优化Cache性能 方案1: 方案 :增加容量 – 成本、技术 成本、 方案2: 方案 :L2 Cache 2 MEM DRAM Proc $ $2 20 100 46 Cache系统中的写操作 写通( 写通(Write Through) ) – 同时写到内存和 同时写到内存和Cache 写回( 写回(Write Back) ) – 临时写到 临时写到Cache,不马上写到内存 , – 需要标志 需要标志Cache是否已经被写过(Dirty) 是否已经被写过( 是否已经被写过 ) – 在进行 之前,OS要把 在进行IO之前 之前, 要把 要把Cache内容写到内存 内容写到内存 写合并(Write Combine) 写合并( ) – 暂存连续数次写操作,再一次写入内存 暂存连续数次写操作, – 用于多媒体程序:持续写一大块内存 用于多媒体程序: ? 视频解码等 47