Matrix 对于内存中超过缓存大小的矩阵,理论上如何计算缓存未命中数?

Matrix 对于内存中超过缓存大小的矩阵,理论上如何计算缓存未命中数?,matrix,cpu-cache,localityofreference,Matrix,Cpu Cache,Localityofreference,我目前正在考虑一个nxn矩阵m,它是以行主顺序存储在主存中的64位整数元素。我有一个16KB的L1数据缓存,分为64B块(没有L2或L3)。我的代码是要通过按行第一顺序或列第一顺序遍历矩阵,一次打印出数组的每个元素 在n=16(即16 x 16矩阵)的情况下,我使用行一阶和列一阶计算了0次缓存未命中,因为矩阵M完全适合16KB缓存(它永远不需要跳转到主内存来获取元素)。例如,我将如何处理n=256(256 x 256个64位整数的矩阵)的情况;i、 e.当M不能完全放入缓存时?我是否将所有不适合

我目前正在考虑一个nxn矩阵m,它是以行主顺序存储在主存中的64位整数元素。我有一个16KB的L1数据缓存,分为64B块(没有L2或L3)。我的代码是要通过按行第一顺序或列第一顺序遍历矩阵,一次打印出数组的每个元素

n=16(即16 x 16矩阵)的情况下,我使用行一阶和列一阶计算了0次缓存未命中,因为矩阵M完全适合16KB缓存(它永远不需要跳转到主内存来获取元素)。例如,我将如何处理n=256(256 x 256个64位整数的矩阵)的情况;i、 e.当M不能完全放入缓存时?我是否将所有不适合的整数都算作未命中,或者是否可以以某种方式利用空间局部性?假设缓存最初是空的。

0缓存未命中”似乎假设您从缓存中已经有M开始。这已经有点可疑了,但没关系


对于256x256情况,需要模拟缓存的行为。必须有缓存未命中才能引入丢失的条目。每次缓存未命中,不仅会带来请求的整数,还会带来7个相邻整数。

我看不到标题中的“文件”部分?“缓存”是一个通用概念-您的操作系统通常有一个磁盘上文件的内存缓存,但这不是一个分为64B块的16 kB缓存。@MSalters抱歉-我更改了“文件”以避免误导(希望现在更好?)。此外,我们应该假设缓存最初是空的-这会改变n=16的答案吗(即导致非零未命中)?假设一个空的catch意味着我将有一个未命中的块,我带入缓存,这不是32个未命中吗?如果缓存最初是空的,那么第一次访问必须是缓存未命中。因此答案不可能是零。还有多少,你得弄清楚。提示:不要只计算缓存未命中,还要计算缓存逐出。@MSalters非常感谢!我想我把它整理好了:)