2015-02-02 3 views
0

в соответствии с Википедией (http://en.wikipedia.org/wiki/Loop_tiling) и многими другими источниками, loop tiling - это метод оптимизации цикла, который помогает использовать кеш (локальность ссылки). Итерационное пространство делится на количество блоков, и, следовательно, кеш лучше использовать.Зачем нужна петля?

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

+0

Я думаю, это было просто для демонстрации техники. Фактическое использование - для вложенных циклов AFAIK. –

ответ

1

«1D case» является неполным, он просто служит для описания идеи блокировки. Нет «тела», поэтому вы не можете анализировать.

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

Так пример, как

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

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

Смежные вопросы