2025-11-08
6.1 存储技术
SRAM:每个位存储在一个双稳态存储器单元,每个单元由六个晶体管电路组成.
DRAM:每个单位由一个电容和一个晶体管组成,会漏电且敏感,需要定期刷新.
SRAM 作为高速缓存存储器,DRAM 作为主存和帧缓存区.
传统 DRAM被分为 \(d\) 个 supercell,每个 supercell 有 \(w\) 个 DRAM 单位. 每个 DRAM 单位是一个方阵,\(d=rc\),读的时候先从 addr 引脚读行,将一个 supercell 存到内部行缓冲区,然后再读列,通过 data 引脚将 \(w\) 位传出去 / 传进来.
内存模块:有多个 DRAM,然后每次将地址转化为 \((i,j)\) 之后同步广播到每个 DRAM,然后这些 DRAM 的所有位合起来得到信息.
读:
- CPU 将地址放到 system bus 上,然后 IO bridge 将信号传递到 memory bus
- 主存感受到 memory bus 上的地址信号,读取,然后将数据写到 memory bus
- IO bridge 将 memory bus 的东西翻译成 system bus 信号
- CPU 感受到 system bus 的信号,进行读取
写:
- CPU 将地址放到 system bus 上,然后 IO bridge 将信号传递到 memory bus
- 主存感受到 memory bus 上的地址信号,等待写入
- CPU 将数据放到 system bus 上,然后 IO bridge 将信号传递到 memory bus
- 主存感受到 memory bus 上的数据信号,等待写入
磁盘容量:
- 每个磁盘的盘片数
- 每个盘面的表面数(2)
- 每个表面的磁道数(柱面数)
- 每个磁道的平均扇区数
- 每个扇区的字节数
计算存储速度太 trivial 了.
SSD:一个闪存由 \(B\) 个块组成,每个块由 \(P\) 页组成,每页存储若干数据.
数据以页为单位读写,但是一页所属的整个块被擦除了才能写一页. 很多很多次重复写在之后,块会磨损.
6.2 局部性
trivial.
6.3 Memory Hierachy
cold miss:空的缓存一定 miss.
conflict miss:缓存足够大,但是由于对象被映射到了同一个缓存块,miss.
capacity miss:不够大.
6.4 Cache
\((s,E,b,m)\):\(2^s\) 组,每组 \(E\) 行,每行 \(2^b\) 字节.
地址有 \(m\) 位,最高 \(t=m-s-b\) 为标记位,中间 \(s\) 位为组索引位,最低 \(b\) 位为块偏移位.
\(E\) 路组相连:\(E=E\).
LFU:替换策略为替换过去一段时间最少被使用的.
LRU:替换上一次使用最早的.
全相连:\(s=0\),\(E=C/B\).
直写:直接往下一路写下去写到内存;非写分配:写 miss 的时候直接写到更低的缓存.
写回:推迟更新,需要 dirty bit 存是否被修改过;写分配:写 miss 需要 load 到当前缓存.
L1 cache: 保存指令的缓存为 i-cache,保存数据的为 d-cache. L2 cache 则两者公用. L3 cache 则所有的 CPU 核共用.
卡 cache:卡车 lab 早就做过了.
6.6 Memory Mountain
read throughput: n/s.
stride=1 的时候平坦的原因:prefetching 机制,识别 stride=1 的模式进行 prefetch.
4 条山脊对应各个缓存/主存时间局部性;stride的影响则体现空间局部性.