Техника оптимизации под линуха

   Ремонт стиральных машин Самара |     

Расщепление циклов


Расщепление циклов (loop distribution, loopfission, loop splitting…) прямо противоположно их объединению. К такому трюку прибегают в тех случаях, когда оптимизируемый цикл содержит слишком много данных. Ассоциативность кэш-памяти первого уровня у большинства x86-процессоров равна четырем, реже — восьми, а это значит, что каждая обрабатывая ячейка данных может претендовать лишь на одну из четырех (восьми) возможных кэш-линеек и если они к этому времени уже заняты ячейками остальных потоков, происходит их неизбежное вытеснение из кэша, многократно снижающее производительность.

Рассмотрим следующий пример:

for(j = 0; j < n; j++)

{

       c[j] = 0;

       for(i = 0; i<m; i++)

              a[j][i] = a[j][i] + b[j][i] * c[j];

}



Содержание раздела