对高速缓存理解的一点问题

renbuliaole 2009-12-11 11:56:24
这是《深入理解计算机系统》书中一点不懂之处。
问题的前提条件是: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不从高速缓存中移出一样。疑惑中。
...全文
115 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixingjian4 2009-12-31
  • 打赏
  • 举报
回复
块大小是指一条cache line是32字节,不是整个cache。整个cache由很多条cache line。
所以B不会把A换出来。每次miss时读入cache line32字节,程序每次取8字节,所以miss率是25%
hallowwar 2009-12-25
  • 打赏
  • 举报
回复
没有必要一行一行的读入cache吧。

2,408

社区成员

发帖
与我相关
我的任务
社区描述
高性能计算
社区管理员
  • 高性能计算社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧