尽量提高程序的空间局部性和时间局部性
倾向于引用邻近时间内引用过的数据,或者邻近空间引用过的数据。
原理:
使用高速缓存来存储最近被引用的指令和数据----LRU。类似的,操作系统用主存缓存磁盘文件系统中最近被用到的磁盘块。
程序数据引用的局部性:
int sumarrayrows(int a[M][N]){
int i,j,sum=0;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
sum+=a[i][j];
}
这个是比较好的例子,因为二维数组在内存中是这样存储的:
A00 A01 A02 A10 A11 A12
而如果按照列来遍历,就不好了。
本文探讨了如何通过增强程序的时间局部性和空间局部性来提高效率。文章以一个具体的二维数组求和程序为例,说明了按行遍历能更好地利用内存局部性,从而提高缓存命中率。
1764

被折叠的 条评论
为什么被折叠?



