为什么循环平铺?

时间:2015-02-02 19:24:23

标签: loops caching optimization tiling

根据维基百科(http://en.wikipedia.org/wiki/Loop_tiling)和许多其他来源,循环平铺是一种循环优化技术,有助于利用缓存(引用的位置)。迭代空间被划分为多个块,因此可以更好地利用缓存。

从上面的链接中,有人可以解释它对1D案例(概述部分)的不同之处吗?在我看来,两种情况都会发生相同数量的缓存未命中。

1 个答案:

答案 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
    ....
  }
}

会更有说服力。