Мощь и беспомощность автоматической оптимизации

Разворот циклов


Процессоры с конвейерной архитектурой (к которым относится и x86) плохо справляются с ветвлениями (а циклы как раз и представляют одну из разновидностей ветвлений), резко снижая свою производительность. Образно их можно сравнить с гоночной машиной, ползущей по петляющей дороге. И у машины, и у процессора максимальная скорость достигается только на участках свободных от ветвлений.

Компактные циклы вида for(a=0;a<n;a++)*dst++= *src++;

исполняются крайне медленно и должны быть развернуты (unrolled). Под "разворотом" в общем случае понимается многократное дублирование цикла, которое в классическом случае реализуется так:

for(i=1; i<n;i+)

      k += (n % i);



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