cs61c-lec2
Lec24 Caches I
Binary Prefix
![examplename](/2023/10/24/cs61c-lec2/Binary_prefix_02.png)
- 2^34 = 8(2^4) gibi(2^3)
Lec25 Caches II
Direct Mapped Caches
在直接映射缓存中,内存的每一地址都对应缓存中的某个block
Cache Location 0 can be occupied by data from: Memory location 0, 4, 8, …
Direct Mapped Caches with Tag
更改cache 的 block size = 2,使用Tag确定cache 中的某个block 对应memory 中的位置
Tag = Cache#
TIO
![examplename](/2023/10/24/cs61c-lec2/TIO_01.png)
Index 确定行位置
Offset 确定列位置
Tag IO确定后剩余位数,确定内存地址
example
![examplename](/2023/10/24/cs61c-lec2/TIO_03.png)
![examplename](/2023/10/24/cs61c-lec2/TIO_04.png)
![examplename](/2023/10/24/cs61c-lec2/TIO_05.png)
缓存对应内存位置 (TIO)
![examplename](/2023/10/24/cs61c-lec2/TIO_06.png)
缓存术语
cache hit
cache miss
cache miss, block replacement
hit rate
miss rate
miss penalty
hit time
Valid Bit
判断缓存中的条目是否有用的指标
16 KB Direct-Mapped Cache, 16B blocks -> 2^14 B Cache, 4*4Block
Lec 26 Cache III
Direct Mapped Caches 读取
读取过程 16KB of data, direct-mapped, 4 word blocks
address : 0x00000014
转换为 TIO (Tag, Index, Offset)
读取 0x00000014
- 按照 IVTO 的顺序
- 首先 Index 确定 行
- 其次 Valid 确定 cache 此位置的条目是否有效,
- 无效,正常进行
- 有效,比较Tag,相同时,cache hit
- Valid 无效 或者 Tag 不同时(cache miss),从内存中读取Block 大小的数据,就是一行数据,而不仅仅是一个字
- 根据offset 返回数据
直接映射缓存硬件实现
- address 的 Tag 与 Cache 的 Tag 比较,同时 Index Valid AND 比较结果,1 -> hit
- Cache 的 4 Block 通过 Mux (Block offset) 选择输出
![examplename](/2023/10/24/cs61c-lec2/DMC_hard_01.png)
Write-Back 处理 缓存中内存内容更新
- Wirte-through
- 同时更新 内存 和 缓存
- Write-back
- 更新缓存中的Block
- 内存中的数据可以保持“陈旧”
- 添加 “Dirty bit” 指标确认缓存中的数据是否改变
- 当Block 被替换时需要更新缓存到内存
- 操作系统在有I/O 时会提前刷新缓存到内存
更大的Block size
- Benefits
- 空间局部性:如果我们访问一个给定的字,我们很可能尽快访问其他附近的字
- 对连续的数组访问友好
- Drawbacks
- 更大的Block size 导致 更大的 miss penalty
- 每次miss,都要fecth 更多的数据到内存中
- 一定的cache size 下,更大的 block size 导致 更少的blocks,导致miss rate high
- 只有很少的block 导致缓存存不下什么东西,读取经常miss 经常刷新
- ping pong effect
- 更大的Block size 导致 更大的 miss penalty
![examplename](/2023/10/24/cs61c-lec2/Block_size_01.png)
3 Cache Misses
Compulsory Misses 强制性失误
- 由于Cache cold 时无有效内容导致的必然的misses
![examplename](/2023/10/24/cs61c-lec2/Cache_Misses_01.png)
Conflict Misses 冲突性失误
- 两个不同的内存条目映射到了相同的缓存地址
![examplename](/2023/10/24/cs61c-lec2/Cache_Misses_02.png)
Capacity Misses 容量不足
- 容量不足导致的Misses 主要见于全关联缓存,接下来详述
![examplename](/2023/10/24/cs61c-lec2/Cache_Misses_02.png)
Fully Associated Caches 全关联缓存
- 不设Index -> block 可以去cache 的任意行
![examplename](/2023/10/24/cs61c-lec2/Fully_Associative_Cache_01.png)
- hardware
![examplename](/2023/10/24/cs61c-lec2/Fully_Associative_Cache_02.png)
- Benefits
- 没有conflict misses
- Drawbacks
- 每个条目都需要硬件比较器:如果缓存中有 64KB 数据和 4B 条目,则需要 16K 比较器:infeasible
cs61c-lec2
https://2333monster.github.io/2023/10/24/cs61c-lec2/