0 简介
cache是什么?
-
广义上:k是k+1的cache
-
狭义上:寄存器和内存之间的存储空间,由SRAM,处理逻辑地址
-
Cache size
-
Block size
-
Miss or hit
-
Pre-fetch or demand fetch
-
Placement
-
Replacement
FIFO
LRU最近用的最少的,淘汰最长时间没有被使用的页面
LFU最不经常使用,淘汰使用次数最少的 -
Write/update
Write through 直写:写入cache时,也写入内存
Write back 写回:写入cache后,当要被换掉才写入内存
1 缓存类型(根据实现分类)
映射方式
映射方式 | 映射特点 | 地址 | 对地址的描述 |
---|---|---|---|
直接映射Direct | 多个内存块对一个cache块 | 标记:指明当前 Cache 是主存中哪一块的副本,位数由地址位数减去另外两部分得到 Cache字块地址:由block数log2确定位数 字块内地址:由word大小确定位数log sizeof(word) |
|
全关联映射 full associative | 随意乱存 | 字块内地址:由word大小确定位数log sizeof(word) | |
组关联映射 set | 组间直接映射,组内随意 | ||
字块内地址:由word大小确定位数log sizeof(word) |
组关联的所以位置
- 将高位作为索引:内存相邻的块映射到同一个block(没有利用号空间局部性)
- 将低位作为索引:连续内存行,映射到不同的缓存行
有效访问时间:EAT
- 与命中率有关,是算术平均值
TLB:转址旁路缓存,存地址
2 编写缓存友好代码和缓存感知优化 Writing caching friendly code and cache-aware optimization
重点:局部性原理的使用
case | 类型 | 原本代码 | 修改后 | 解释 |
---|---|---|---|---|
1 | Instruction cache overflow | 大循环违背局部性原理 | ||
2 | Cache Collisions | |||
3 | Insufficient spatial locality | |||
4 | Insufficient temporal locality |
矩阵乘法