Caching 一级缓存、二级缓存和三级缓存中的缓存命中数和缓存未命中数
以下代码将在具有以下缓存结构的CPU上运行:Caching 一级缓存、二级缓存和三级缓存中的缓存命中数和缓存未命中数,caching,cpu-architecture,cpu-cache,Caching,Cpu Architecture,Cpu Cache,以下代码将在具有以下缓存结构的CPU上运行: 一级缓存:1KB 二级缓存:8KB 三级缓存:64KB 块大小:16B unsigned int A[65536]; int i,j; for (i=0 ; i<65536-256 ; i++) for (j=1 ; j<128; j++) A[i]=A[i]+A[i+j]; 无符号整数A[65536]; int i,j; 对于(i=0;i假设unsigned int为4字节,数组大小为4*65536=256KB。三级缓存最
- 一级缓存:1KB
- 二级缓存:8KB
- 三级缓存:64KB
- 块大小:16B
unsigned int A[65536]; int i,j; for (i=0 ; i<65536-256 ; i++) for (j=1 ; j<128; j++) A[i]=A[i]+A[i+j];
无符号整数A[65536]; int i,j;
对于(i=0;i假设
为4字节,数组大小为4*65536=256KB。三级缓存最多只能容纳64KB 为了最小化惩罚,您应该做的第一件事是将循环分成4个子组,这样,一旦您将条目加载到L3,您应该在被逐出之前完全使用它unsigned int
unsigned int A[65536]; int i,j,k; for (k=0 ; k<65536-256; k+=16384) for (j=1 ; j<128; j++) for (i=k ; i<MIN(k+16384,65536-256) ; i++) //define a MIN function to return minimum A[i]=A[i]+A[i+j];
A模式持续到L1填充。交叉发布:,。请。每个社区都应该诚实地回答问题,不会浪费任何人的时间。您最近的编辑没有任何意义,除了使标题毫无意义和丢失一些信息外,缩小数组会使代码访问超出范围。请修复还是滚-back@Leeor很抱歉,发生了一些未删除的情况。我将其转换为起始版本。unsigned int A[65536]; int i,j,k; for (k=0 ; k<65536-256; k+=16384) for (j=1 ; j<128; j++) for (i=k ; i<MIN(k+16384,65536-256) ; i++) //define a MIN function to return minimum A[i]=A[i]+A[i+j];
First iteration A[i] - A[0] - Miss A[i+j] - A[1] - Hit Second Iteration A[i] - A[1] - Hit A[i+j] - A[2] - Hit Third Iteration A[i] - A[2] - Hit A[i+j] - A[3] - Hit Forth Iteration A[i] - A[3] - Hit A[i+j] - A[4] - Miss // This will cause to fetch A[4], A[5], A[6], A[7]