Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching 如何以更好的缓存行为编写循环?_Caching_Loops - Fatal编程技术网

Caching 如何以更好的缓存行为编写循环?

Caching 如何以更好的缓存行为编写循环?,caching,loops,Caching,Loops,我正在做这样一个循环: int arrA[BIG], arrB[BIG], arrC[BIG]; for(int = 0; i<BIG; i++){ do_operation(arrA[i], arrB[i], arrC[i]); } int-arrA[BIG]、arrB[BIG]、arrC[BIG]; 对于(int=0;i您正在线性访问每个阵列,这对于缓存使用(以及硬件预取器)来说基本上是最佳的 但是,如果数组的大小不合适(通常是2的大幂),则会受到冲击;arrA[i]、

我正在做这样一个循环:

int arrA[BIG], arrB[BIG], arrC[BIG];

for(int = 0; i<BIG; i++){
      do_operation(arrA[i], arrB[i], arrC[i]);
}
int-arrA[BIG]、arrB[BIG]、arrC[BIG];

对于(int=0;i您正在线性访问每个阵列,这对于缓存使用(以及硬件预取器)来说基本上是最佳的

但是,如果数组的大小不合适(通常是2的大幂),则会受到冲击;
arrA[i]
arrB[i]
arrC[i]
将全部映射到同一缓存线,并不断相互逐出。本质上,每次访问都会导致缓存未命中。为避免这种情况,您应该尝试稍微填充每个数组


请参见,例如……

它是多种多样的。通常约为1米。