缓存不命中率的计算 |
您所在的位置:网站首页 › 怎么求cache命中率 › 缓存不命中率的计算 |
缓存不命中率的计算
一台具有块大小为16字节,整个大小为1024字节的高速缓存: struct algea_position(){ int x; int y; }; struct algea_position grid[16][16]; int total_x=0, total_y=0; int i,j;Q u e s t i o n 1 Question\ 1 Question 1 for(i=0;i total_x += grid[i][j].x; total_y += grid[i][j].y; }不命中率? 书上的解释:这个循环有很好的步长为1的引用模式,因此所有的不命中都是最开始的冷不命中。 其实我对这个观点并不是特别的认同,由于高速缓存大小不够因此会出现不是冷不命中的情况(不然当你引用把之前所有的空的缓存全都占用了,下次还需要引用的时候还是覆盖空的?),所以还是去分析循环内部,画出块在引用后发生的变化: g r i d [ i ] [ j ] . x grid[i][j].x grid[i][j].x g r i d [ i ] [ j ] . y grid[i][j].y grid[i][j].y g r i d [ i ] [ j + 1 ] . x grid[i][j+1].x grid[i][j+1].x g r i d [ i ] [ j + 1 ] . y grid[i][j+1].y grid[i][j+1].y第一次引用 x x x的时候会发生缓存不命中,但第一次引用的 y y y,以及第二次引用的 x y x\ y x y都会命中,也就是每四次的引用都会发生一次的不命中,那么不命中率就是25% 总结:其实这个问题我觉得都可以通过画它的块结构在引用前后的变化以及分析若干次引用的不命中次数,这个不命中次数占引用次数的比值就是不命中率。 以上仅是个人理解,或许有失偏颇,欢迎品论下方讨论! |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |