Размотка цикла


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

Подобный вид оптимизации изучен в 1998 году[1], и показано, что совместно с расщеплением тела цикла при определённых условиях (в частности, при отсутствии зависимостей по данным между инструкциями в новом цикле) позволяет выполнять цикл на нескольких процессорах.

Известен также и альтернативный способ размотки цикла, называемый «устройством Даффа», — в этом способе используются малоизвестные и неочевидные возможности синтаксиса языка Си.

Одним из недостатков размотки при применении совместно с расщеплением тела цикла для дальнейшего распараллеливания является то, что выборка данных из памяти начинает производиться не по порядку следования данных, что может отрицательно сказаться на эффективности работы кэша. Кроме того, в ходе размотки цикла увеличивается число команд, выполняемых на каждой его итерации. Если данное число превысит ёмкость кэша команд, то вместо ожидаемого роста эффективности выполнения цикла возможно её существенное снижение.