根据维基百科(http://en.wikipedia.org/wiki/Loop_tiling)和许多其他来源,循环平铺是一种循环优化技术,有助于利用缓存(引用的位置)。迭代空间被划分为多个块,因此可以更好地利用缓存。
从上面的链接中,有人可以解释它对1D案例(概述部分)的不同之处吗?在我看来,两种情况都会发生相同数量的缓存未命中。
答案 0 :(得分:1)
" 1D案例"它是不完整的,它只是用来描述阻塞的想法。没有"身体"所以你无法分析。
在算法中多次使用相同数据的情况下,阻塞很有用,阻塞可确保数据在重复使用时直到缓存中。
像
这样的例子for(i=0; i<N; ++i){
// Processing 1
...
}
for(i=0; i<N; ++i){
// Processing 2
...
}
VS
for(j=0; j<N; j+=B){
for(i=j; i<min(N, j+B); ++i){
// Processing 1
....
for(i=j; i<min(N, j+B); ++i){
// Processing 2
....
}
}
会更有说服力。