首页 > 试题广场 >

题目来源于王道论坛 有如下C语言程序段:

[单选题]
如下C语言程序段:
for(k=0; k<1000; k++)
 a[k] = a[k]+32;

若数组a及变量k均为int型,int型数据占4B,数据Cache采用直接映射方式,数据区大小为1KB、块大小为16B,该程序段执行前Cache为空,则该程序段执行过程中访问数组aCache缺失率约为 ()



  • 1.25%
  • 2.5%
  • 12.5%
  • 25%
推荐

解析:

分析语句“a[k]=a[k]+32”:首先读取a[k]需要访问一次a[k],之后将结果赋值给a[k]需要访问一次,共访问两次。第一次访问a[k]未命中,并将该字所在的主存块调入Cache对应的块中,对于该主存块中的4个整数的两次访问中只在访问第一次的第一个元素时发生缺失,其他的7次访问中全部命中,故该程序段执行过程中访问数组aCache缺失率约为1/8(即12.5%)。

发表于 2018-06-16 11:11:50 回复(2)
没看懂
发表于 2020-12-24 13:15:39 回复(0)
首先看数组共1000个int数据,就是4000B,需要占用的主存块数是4000B/16B = 250块。Cache大小是1024B,一块是16B,因此共有64块。问题简化为250块主存块映射到64块Cache的过程。主存与Cache块的交换单位是块,也就是4个int数据。a[k] = a[k]+32 右边是读取数据,左边是写回数据。也就是对一个数据两次操作。且第一个数据读取时不命中,写Cache命中。块中剩下的三个数读写都命中,也就是一块中的4个数据的8次操作,只有一次不命中!
发表于 2022-01-10 21:30:08 回复(2)
块大小为16B int数据4B 一次访问失败后 调入4块进入cache中 所以是1/8 = 12.5%
发表于 2020-06-04 15:47:20 回复(0)
取数组元素以后,还要写回,等于一个元素访问两次,所以一个Cache块四个元素,一共访存八次,缺失第一次。缺失率12.5%。(408真题)
发表于 2022-03-18 08:43:09 回复(4)
这是什么知识😰
发表于 2023-02-14 01:27:52 回复(1)
注意! 这里是 数组的每一个元素是访问两次, 一共访问了 2000次
一块是16B, 放4个元素, 采用直接映射, 
访问第一个元素0号时, 调入一块, 即连续的4个元素, 以此缺页
4个元素一共访问了 8次, 缺页率是 1/8
全体就是 250/2000, 也是1/8, 12.5%
发表于 2022-03-07 11:21:20 回复(1)
访问一次 写会一次 
4个元素 访问8次
一次缺失
发表于 2022-03-15 15:28:40 回复(0)