内存缓存优化:组织、对齐与预取策略
1. 缓存组织
1.1 直接映射缓存
直接映射缓存的组织方式有助于快速访问数据。它包含 $2^m$ 个块,每个块容纳 $2^l$ 个 $2^w$ 字节的字,因此缓存总共可容纳 $2^{w + l + m}$ 字节的数据,这些数据以 Data[block][word][byte]
数组的形式排列。每个块是主存数据的副本,同时有一个标签数组用于指示当前内容来自主存的位置。
典型情况下,字大小 $2^w$ 可能为 4 字节,块大小 $2^{w + l}$ 可能为 32 字节,缓存大小 $2^{w + l + m}$ 可能小至 8 千字节,大至 2 兆字节。
给定地址 $x$,由 $n$ 位组成($x_{n - 1}x_{n - 2} \cdots x_2x_1x_0$),在直接映射缓存中,取中间位作为键($key = x_{w + l + m - 1}x_{w + l + m - 2} \cdots x_{w + l}$),并将 $x$ 的数据存储在 Data[key]
中。高位 $x_{n - 1}x_{n - 2} \cdots x_{w + l + m}$ 构成标签,如果 Tags[key]
与地址的标签字段不匹配,则发生缓存未命中,所需的字不在缓存中。此时, data[key]
的内容会被送回主存,地址 $x_{n - 1} \cdots x_{w + l}$ 处的主存内容会被提取到第 $k$ 个缓存块中,并发送给 CPU。由于主存访问时间远长于缓存访问时间,频繁的未命中是不可取的。