Почему петлевая плитка?

согласно Википедии (http://en.wikipedia.org/wiki/Loop_tiling) и многим другим источников, мощение цикла — это метод оптимизации цикла, который помогает использовать преимущества кеша (локальности ссылки). Пространство итераций разделено на количество блоков, что позволяет лучше использовать кеш.

Из приведенной выше ссылки может кто-нибудь объяснить, в чем разница для случая 1D (раздел «Обзор»)? На мой взгляд, в обоих случаях будет одинаковое количество промахов кеша.


person Sergey    schedule 02.02.2015    source источник
comment
Я думаю, что это было просто для демонстрации техники. Фактическое использование для вложенных циклов, AFAIK.   -  person Zan Lynx    schedule 02.02.2015


Ответы (1)


«Одномерный случай» неполный, он просто служит для описания идеи блокировки. Нет никакого «тела», так что вы ничего не можете проанализировать.

Блокировка полезна в ситуациях, когда одни и те же данные используются в алгоритме несколько раз, и блокировка гарантирует, что данные останутся в кэше при повторном использовании.

Итак, пример вроде

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

было бы более убедительно.

person Yves Daoust    schedule 02.02.2015