Computer Organization: Cache
/ 11 min read
Table of Contents
Course index · Previous: Datapath Control · Next: Virtual Memory
Memory Hierarchy
Caches always contain a copy of the lower levels

(缓存如何设计)
Direct-Mapped Cache
一般来说我们把缓存的宽度画成和memory一样
上图是 1byte wide,因为**1 Byte (8 bits)** 是 CPU 能够通过内存地址直接去读取或写入的最小数据块。
这里cache运用了取余数的思想,比如说memory address为0、4、8...会进入cache的0
- 但是我们需要更大width的缓存,如上图是2 bytes wide,我们可以把内存也切成一个个 2 Bytes 的块
- 还是利用取模,内存地址的二进制位的倒数第2,3位代表了在cache的位置(cache index),倒数第一位表示cache中的列
- Cache Index(缓存索引)就像是 Cache 内部的“房间号”或“槽位号(Slot),上图中是0、1、2、3
- 举个例子,memory address=6=0b0110,得到cache index=11, offset=0
- 当然我们需要tag,正因为这是一个“多对一”的映射关系(比如地址 0、8、10、18 都会被硬性分配到 Cache Index 0),所以当 CPU 去 Cache Index 0 找数据时,它怎么知道现在里面装的是地址 0 的数据,还是地址 8 的数据呢?
一行是一个cache block,并且他们共享tag值
:::
Direct-Mapped Cache Example
Directed Cache
Memory Access With Cache
Cache Terminology
Valid Bit不占据32位TIO中的一位!
Read Cache
read Cache的顺序:IVTO:index , Valid, Tag , Offset 当tag不匹配的时候,进行block replacement
Cache Write
Write-through和write-back现在都有在不同的地方应用
考虑一个 RISCV 处理器,总线传输一个缓存块需要 50 周期。L1 命中时间 2 周期。程序统计:
- 读操作占 50%,写操作占 50%
- 读缺失率 = 4%,写缺失率 = 2%
- 写命中时,写直达需额外 50 周期写回总线;写回仅标记脏位,替换时 30% 的块是脏的 问题: (1) 分别计算写直达与写回策略下的平均内存访问时间(AMAT)。 (2) 写回比写直达节省多少百分比的平均访问时间
(1) 写直达:AMAT=0.5 x (2 + 50 x 0.04) + 0.5 x (2 + 50 x 0.02 + 50) = 0.5 x 4 + 0.5 x 53 = 28.5 写回: AMAT=0.5x(2 + 50 x 0.04 + 50 x 0.04 x 0.3 ) + 0.5 x (2 + 50 x 0.02 + 50 x 0.02 x 0.3) = 3.95
Block Size Tradeoff
Types of Cache Misses
“Tag 不匹配”是硬件检测到缓存未命中的表象,但导致这个表象的原因并不只有 Conflict
Fully Associative Cache
难点主要是硬件实现很难
在 Fully Associative Cache(全相联缓存)中,绝对不存在 Conflict Miss(冲突缺失)。 并且Capacity Miss主要出现在 Fully Associative Cache
一开始考虑一个全相联、无限大的缓存,遇到的miss就是compulsory 接下去将这个cache变成全相联、有限大的缓存,遇到的miss除去之前的compulsory miss,就是capacity miss 最后将这个cache变成有限相联、有限大的缓存,遇到的miss除去之前的就是conflict miss
Set-Associative Caches
每个组包含很多blocks,同一个组内是全相联结构
虽然上图把一个set画在同一行里,但是一般缓存行等价于缓存块
某 RISC-V 处理器 L1 数据缓存:容量 = 64 KiB, 块大小 = 64 字节,2 路组相联 问题: (1) 求组数、每组块数、标记位数。 (2) 若每个缓存行需要 1 位有效位、1 位脏位,求标记存储总位数(只计标记、有效、脏)。 (3) 若改为 4 路组相联(容量不变),标记总位数如何变化?
(1)因为是2路组相连,每组块数就是2;那么一组2个clock,大小为 ,组数为 组。计算tag: (2)行数 x 每行总位数 : (3)每组块数改为4,每组的大小为 ,组数为 组,因此index需要的位数就是 ,计算tag:,由于行数(块数)不变,总位数 位,增加了1024位
:::
- 针对这种组相联的问题,首先offset位数是 block size(以B为单位)的 log2,因为计算机memory address是以字节为单位的,例如block size=64B,那么里面的编号肯定是0x0,0x1…0x3f,每个编号里面存一个字节的数据,因此offset需要定位,就需要表示0-63,因此取对数计算
- 其次,计算index位数,也就是组数的 ,因为同一组里是全相联查询,所以index的作用是定位到给出的memory address是在哪一个组。组数的计算方法就是直接
- 最后tag的位数
Block Replacement Policy & LRU
问题是:组相联的cache,当某一组已经放满了,又来了一个数据,应该替换掉哪一个呢
多路了LRU实现其实很困难,硬件难以知道那个才是最旧的数据,但是如果是2-way组相联,就很简单: 打一个lru label,代表最旧的数据,即要被替换的数据
Average Memory Access Time(AMAT)
为啥不把Hit Time拆分成Hit rate x hit time ? 因为无论是否hit都需要支付hit time
RISC‑V 处理器有 L1 和 L2 缓存:L1:命中时间 2 周期,缺失率 8%;L2:命中时间 12 周期,局部命中率 50%(即 L1 缺失中有一半在 L2 命中,另一半需访问主存);主存访问时间 200 周期 问题: (1) 计算全局 AMAT。 (2) 若将 L2 局部命中率提升至 85%,AMAT 降低多少?
(1)直接套用上图公式
(2)把上面公式的0.5改成0.15
:::
OS & Virtual Memory
Hierarchy(放过很多次了)
Course index · Previous: Datapath Control · Next: Virtual Memory