有如下 C 语言程序段:
for (k = 0; k < 1000; k++) a[k] = a[k] + 32;
若数组 a 以及变量 k 均为 int 型,int 型数据占 4B,数据 Cache 采用直接映射方式,数据区大小是 1KB,块大小是 16B,该程序段执行前 Cache 为空,则该程序段执行过程中,访问数组 a 的 Cache 的缺失率是( )。
A. 1.25%
B. 2.5%
C. 12.5%
D. 25%
a[k]的访问步骤是:先访问cache,cache缺失,之后从主存中取出一个块(有4个int)调入cache,这个块中的后几个数据都是命中的,本题中一个数据占4B,一个块大小是16B,这说明一个块中有4个数据,关键是后面还有一次写,每个数据都有一次访问(数组)和一次写(赋值),这说明一次循环要2*4=8次访问cache,其中只有第一次访问(数组)是缺失的,后面七次都是命中的,所以缺失率是12.5%;
a[k]的访问步骤是:先访问cac...
用户登录可进行刷题及查看答案
a[k]的访问步骤是:先访问cache,cache缺失,之后从主存中取出一个块调入cache,这个块中的后几个数据都是命中的,本题中一个数据占4B,一个块大小是16B,这说明一个块中有4个数据,关键是后面还有一次写,这说明一次循环要八次访问cache,其中只有第一次是缺失的,后面七次都是命中的,所以缺失率是12.5%。
数据区大小是 1KB,块大小是 16B,Cache 有 1KB/16B = 64 行,每个块可以装 16B/4B = 4 个数组元素。
对于数组中任意一个元素 a[k],只有在 a[k] = a[k] + 32 这行代码中会对 a[k] 进行访问。其中包含读 a[k] 一次,做完加法后写 a[k] 一次。
每次调入块后加载连续的四个数组元素,a[4i]、a[4i + 1]、a[4i + 2]、a[4i + 3],其中 i 为整数,i = 0, 1, …, 249。
缺失率为 1/8 = 12.5%。
本题选C。
登录后提交答案