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米。