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,更大的块大小会帮助降低不命中率吗?为什么能或者为什么不能?