为什么循环平铺?

Why loop tiling?

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

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

“一维案例”不完整,只是用来描述阻塞的想法。没有"body"所以你无法分析。

阻塞在算法中多次使用相同数据的情况下很有用,阻塞可确保数据在您重复使用时一直在缓存中。

举个例子

for(i=0; i<N; ++i){
  // Processing 1
  ...
}
for(i=0; i<N; ++i){
  // Processing 2
  ...
}

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

会更有说服力