题目
32. 设某机主存容量为 4MB,Cache 容量为 16KB,每字块有 8 个字,每字 32 位,设计一个四路组相联映射(即 Cache 每组内共有 4 个字块)的Cache 组织。(1)画出主存地址字段中各段的位数。(2)设 Cache 的初态为空,CPU 依次从主存第 0,1,2,…,89 号单元读出 90 个字(主存一次读出一个字),并重复按此次序读 8 次,问命中率是多少?(3)若 Cache 的速度是主存的 6 倍,试问有 Cache 和无 Cache 相比,速度约提高多少倍?
32. 设某机主存容量为 4MB,Cache 容量为 16KB,每字块有 8 个字,每字 32 位,设计一个四路组相联映射(即 Cache 每组内共有 4 个字块)的Cache 组织。(1)画出主存地址字段中各段的位数。(2)设 Cache 的初态为空,CPU 依次从主存第 0,1,2,…,89 号单元读出 90 个字(主存一次读出一个字),并重复按此次序读 8 次,问命中率是多少?(3)若 Cache 的速度是主存的 6 倍,试问有 Cache 和无 Cache 相比,速度约提高多少倍?
题目解答
答案
解:(1)根据每字块有 8 个字,每字 32 位(4 字节),得出主存地址字段中字块内地址为 3+2=5 位。根据 Cache 容量为 16KB=214B,字块大小为 8*32/8=32=25B,得 Cache 地址共 14 位,Cache 共有 214-5=29块。根据四路组相联映射,Cache 共分为 29/22=27组。根据主存容量为 4MB=222B,得主存地址共 22 位,主存字块标记为 22-7-5=10 位,故主存地址格式为:主存字块标记(10 位)组地址(7 位)字块内地址(5 位)(2)由于每个字块中有 8 个字,而且初态为空,因此 CPU 读第 0 号单元时,未命中,必须访问主存,同时将该字所在的主存块调入 Cache第 0 组中的任一块内,接着 CPU 读第 1~7 号单元时均命中。同理,CPU 读第 8,16,…,88 号时均未命中。可见,CPU 在连续读 90 个字中共有12 次未命中,而后 8 次循环读 90 个字全部命中,命中率为:(3)设 Cache 的周期为 t,则主存周期为 6t,没有 Cache 的访问时间为 6t*90*8,有 Cache 的访问时间为 t(90*8-12)+6t*12,则有 Cache和无 Cache 相比,速度提高的倍数为:
解析
步骤 1:确定主存地址字段中各段的位数
根据每字块有 8 个字,每字 32 位(4 字节),得出主存地址字段中字块内地址为 3+2=5 位。根据 Cache 容量为 16KB=2^14B,字块大小为 8*32/8=32=2^5B,得 Cache 地址共 14 位,Cache 共有 2^(14-5)=2^9块。根据四路组相联映射,Cache 共分为 2^9/2^2=2^7组。根据主存容量为 4MB=2^22B,得主存地址共 22 位,主存字块标记为 22-7-5=10 位,故主存地址格式为:主存字块标记(10 位)组地址(7 位)字块内地址(5 位)。
步骤 2:计算命中率
由于每个字块中有 8 个字,而且初态为空,因此 CPU 读第 0 号单元时,未命中,必须访问主存,同时将该字所在的主存块调入 Cache第 0 组中的任一块内,接着 CPU 读第 1~7 号单元时均命中。同理,CPU 读第 8,16,…,88 号时均未命中。可见,CPU 在连续读 90 个字中共有12 次未命中,而后 8 次循环读 90 个字全部命中,命中率为:(90*8-12)/(90*9)。
步骤 3:计算速度提高的倍数
设 Cache 的周期为 t,则主存周期为 6t,没有 Cache 的访问时间为 6t*90*8,有 Cache 的访问时间为 t(90*8-12)+6t*12,则有 Cache和无 Cache 相比,速度提高的倍数为:(6t*90*8)/[t(90*8-12)+6t*12]。
根据每字块有 8 个字,每字 32 位(4 字节),得出主存地址字段中字块内地址为 3+2=5 位。根据 Cache 容量为 16KB=2^14B,字块大小为 8*32/8=32=2^5B,得 Cache 地址共 14 位,Cache 共有 2^(14-5)=2^9块。根据四路组相联映射,Cache 共分为 2^9/2^2=2^7组。根据主存容量为 4MB=2^22B,得主存地址共 22 位,主存字块标记为 22-7-5=10 位,故主存地址格式为:主存字块标记(10 位)组地址(7 位)字块内地址(5 位)。
步骤 2:计算命中率
由于每个字块中有 8 个字,而且初态为空,因此 CPU 读第 0 号单元时,未命中,必须访问主存,同时将该字所在的主存块调入 Cache第 0 组中的任一块内,接着 CPU 读第 1~7 号单元时均命中。同理,CPU 读第 8,16,…,88 号时均未命中。可见,CPU 在连续读 90 个字中共有12 次未命中,而后 8 次循环读 90 个字全部命中,命中率为:(90*8-12)/(90*9)。
步骤 3:计算速度提高的倍数
设 Cache 的周期为 t,则主存周期为 6t,没有 Cache 的访问时间为 6t*90*8,有 Cache 的访问时间为 t(90*8-12)+6t*12,则有 Cache和无 Cache 相比,速度提高的倍数为:(6t*90*8)/[t(90*8-12)+6t*12]。