Caching 要求CPU使用偏移量缓存数据(非等效)
我们都知道以下代码的性能很低,因为在每次迭代中,CPU都会从RAM加载新元素Caching 要求CPU使用偏移量缓存数据(非等效),caching,Caching,我们都知道以下代码的性能很低,因为在每次迭代中,CPU都会从RAM加载新元素s #define N a very large number struct{ float m; int x[N] } S; void main(){ struct S s[elements]; ... //working with data for (i=0; i<elements;i++){ total+=s[i].m; } ... }
s
#define N a very large number
struct{
float m;
int x[N]
} S;
void main(){
struct S s[elements];
...
//working with data
for (i=0; i<elements;i++){
total+=s[i].m;
}
...
}
#定义一个非常大的数字
结构{
浮动m;
整数x[N]
}S;
void main(){
结构[元素];
...
//处理数据
对于(i=0;i这是现代CPU能够识别的模式。请阅读:
硬件预取器:硬件预取器操作透明,无需程序员干预,将数据流和指令流从内存中提取到统一的二级缓存中。预取器能够向前或向后处理多个流。在连续缓存时触发未命中发生在最后一级缓存中,并且检测到访问模式中的跨步,例如在访问数组元素的循环迭代的情况下