(1)对于数据的访问,几乎没有时间局部性和空间局部性。
(2)对于数据的访问,有很好的时间局部性,但几乎没有空间局部性。 (3)对于数据的访问,有很好的空间局部性,但几乎没有时间局部性。 (4)对于数据的访问,空间局部性和时间局部性都好。 参考答案(略):
可以给出许多类似的示例。例如,对于按行优先存放在内存的多维数组,如果按列优先访问数组元素,则空间局部性就差,如果在一个循环体中某个数组元素只被访问一次,则时间局部性就差。 10. 假定某机主存空间大小1GB,按字节编址。cache的数据区(即不包括标记、有效位等存储区)有
64KB,块大小为128字节,采用直接映射和全写(write-through)方式。请问: (1)主存地址如何划分?要求说明每个字段的含义、位数和在主存地址中的位置。 (2)cache的总容量为多少位? 参考答案:
(1)主存空间大小为1GB,按字节编址,说明主存地址为30位。cache共有64KB/128B=512行,因
此,行索引(行号)为9位;块大小128字节,说明块内地址为7位。因此,30位主存地址中,高14位为标志(Tag);中间9位为行索引;低7位为块内地址。
(2)因为采用直接映射,所以cache中无需替换算法所需控制位,全写方式下也无需修改(dirty)位,
而标志位和有效位总是必须有的,所以,cache总容量为512×(128×8+14+1)=519.5K位。
11. 假定某计算机的cache共16行,开始为空,块大小为1个字,采用直接映射方式。CPU执行某程序时,
依次访问以下地址序列:2,3,11,16,21,13,64,48,19,11,3,22,4,27,6和11。要求: (1)说明每次访问是命中还是缺失,试计算访问上述地址序列的命中率。
(2)若cache数据区容量不变,而块大小改为4个字,则上述地址序列的命中情况又如何? 参考答案
(1) cache采用直接映射方式,其数据区容量为16行×1字/行=16字;主存被划分成1字/块,所以,
主存块号 = 字号。因此,映射公式为:cache行号 = 主存块号 mod 16 = 字号 mod 16。 开始cache为空,所以第一次都是miss,以下是映射关系(字号-cache行号)和命中情况。 2-2: miss,3-3: miss,11-11: miss,16-0: miss, 21-5: miss,13-13: miss,64-0: miss、replace, 48-0: miss、replace,19-3: miss、replace,11-11: hit, 3-3: miss、replace,22-6: miss, 4-4: miss,27-11: miss、replace,6-6: miss、replace,11-11: miss、replace。
只有一次命中!
(2)cache采用直接映射方式,数据区容量不变,为16个字,每块大小为4个字,所以,cache共有
4行;主存被划分为4个字/块,所以,主存块号 = [字号/4]。因此,映射公式为:cache行号 = 主存块号 mod 4 = [字号/4] mod 4。
以下是映射关系(字号-主存块号-cache行号)和命中情况。
2-0-0: miss,3-0-0: hit,11-2-2: miss,16-4-0: miss、replace,21-5-1、13-3-3: miss, 64-16-0、48-12-0、19-4-0: miss, replace,11-2-2: hit,3-0-0: miss、replace,
22-5-1: hit,4-1-1: miss、replace,27-6-2: miss、replace,6-1-1: hit,11-2-2: miss、replace。
命中4次。
由此可见,块变大后,能有效利用访问的空间局部性,从而使命中率提