eg:
(1)某计算机的cache块工16块,采用二路组相联映射方式,每个主存块大小为32字节,按照字节编制。则主存129号单元的主存块硬装如刀cache的组号是:(C)A、0
B、2 C、4 D、6
解:二路组相联,所以每组2块,共有16/2=8组,所以组号占3位。
每块32字节,所以块内地址占5位。
129转化为二进制:1000 0001:前3位为组号,100:=4
(2)假设用若干个2K4位的芯片组成一个8K8位的存储器,则地址0B1FH所在芯片的最小地址为:
解:用2片组成一行,共4行,所以片选地址占2位。片内地址有2k=\(2^{11}\),所以占11位
0B1FH:000|0 1|011 0001 1111 这三段为前缀,片选地址,片内地址。
该片芯片的最小地址是片内地址全0:000|0 1|000 0000 0000 = 0800H
(3)某计算机的主存地址空间大小为256MB,按字节编址,指令cache和数据cache分离,均有8个cache行,每行大小为64B,数据cache采用直接映射方式,现有两个程序A,B对数组int a[256][256]进行遍历,程序A按行遍历,程序B按列遍历。假定int类型数据用32位补码表示,数组a按行优先方式存储,其地址为320(十进制)。
问:(1) 若不考虑cache一致性维护和替换算法所需的控制位,则数据cache的总容量占多少?
(2) 数组元素a[0][31]和a[1][1]各自所在主存块对应的cache行号分别为多少(cache从0行开始)?
(3)程序A和B的数据访问命中率各自为多少?哪个程序的执行时间更短?
解:(1) 因为cache的总容量是cache每行的数据存储大小+tag位+数据是否有效位+其他一致性控制位。
主存地址空间256MB,占28位。直接映射方式,8行,行号占3位。每行64B,所以块内地址占6位,因此,tag占28-3-6=19位
每行有一个数据有效位。因此,cache共(19+1+648)8 = 532字节
(2) 因为int类型占32位,所以一个int占4B。a[0][31] = 320 + 314 = 444 a1 = 320 + 4(256+1) = 1348。
块内地址占6位,直接映射下行号占3位,因此444 = 110 | 111100,所以行号为6
1348 = 10 | 101 | 000100,所以行号为5
(3) 因为1行cache占64B,每个int数占4B,所以一行有16个数。第一个数会因cache缺失而不命中,然后调入cache。,使得后面的15个int访问全部命中。所以命中率为\(\frac{15}{16}\) 对于程序B,每次调入16个数,小于数组每行的128个元素,因此每次都不会命中,命中率为0