在做cache lab时发现自己对cache的具体工作原理理解不深,网上也很少有这部分的具体讲解,故自己在此记录一下:
(牢牢抓住一点:cache是高速缓存!!缓存!!)
以一个简单的例子来说明矩阵转置时cache的具体工作情况。
假设我们现在有一个包含2组,每组1行,每行存8个int型数据的简单cache(S=2, E=1, B=32),现在要对一个4x4的矩阵进行转置。记原矩阵为A,转置后的矩阵为B。
则我们可以得知,矩阵中前2行元素与后2行元素分别存在cache的不同块中。
假设交换的函数如下:
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
tmp = A[i][j];
B[j][i] = tmp;
}
}
我们以示意图的方式来说明cache的工作情况(这里只列出了cache的数据块)
有上述简单分析,应该就能知道cache lab中不命中的原理了。