对高速缓存理解的一点问题
这是《深入理解计算机系统》书中一点不懂之处。
问题的前提条件是:1,只有一个高速缓存,块大小事32字节;2每个数组都是一个double类型的n*n数组,sizeof(double) = 8;3,n很大,以至于矩阵的一行不能完全装进L1高速缓存中。
那么对于下面这段代码
for(k = 0; k < n; k++)
sum += A[i][k] * B[k][j];
在高速缓存中读取了A[i][k]后,即需要读取B[k][j],这样B[k][j]就将高速缓存占据了,之前A的数据被驱逐。然后再回来读A时,A还要重新从存储器读入。这么看来,A的不命中率还是100%才对。可书中表述其只有25%。好像A不从高速缓存中移出一样。疑惑中。