首页 > 试题广场 >

这道题测试你预测C语言代码的高速缓存行为的能力。对下面这段

[问答题]
 这道题测试你预测C语言代码的高速缓存行为的能力。对下面这段代码进行分析:
  int x[2] [128];
   int i
  int sum=0;
  for (1= 0; i< 128; i++) {
    sum += x[0][i] * x[1][i];
   }
      假设我们在下列条件下执行这段代码:
  • sizeof (int)==4。
  • 数组x从内存地址0x0开始,按照行优先顺序存储。
  • 在下面每种情况中,高速缓存最开始时都是空的。
  • 唯一的内存访问是对数组x的条目进行访问。其他所有的变量都存储在寄存器中。
给定这些假设,估计下列情况中的不命中率:
A情况1:假设高速缓存是512字节,直接映射,高速缓存块大小为16字节。不命中率是多少?
B.情况2;如果我们把高速缓存的大小翻倍到1024字节,不命中率是多少?
C.情况3:现在假设高速缓存是512字节,两路组相联,使用LRU替换策略,高速缓存块大小为16字节。不命中率是多少? 
D.对于情况3,更大的高速缓存大小会帮助降低不命中率吗?为什么能或者为什么不能?
E.对于情况3,更大的块大小会帮助降低不命中率吗?为什么能或者为什么不能?

这道题你会答吗?花几分钟告诉大家答案吧!