Размотка цикла: различия между версиями

[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
викификация, оформление
Строка 1:
__NOTOC__
 
В программировании, '''размотка цикла''' ({{lang-en|loop unwinding}}) или '''раскрутка цикла''' ({{lang-en|loop unrolling}}) — техника [[Оптимизация (информатика)|оптимизации]] [[компьютерная программа|компьютерных программ]],
состоящая в искусственном увеличении количества инструкций, исполняемых в течение одной итерации [[Цикл (программирование)|цикла]].
Строка 31 ⟶ 29 :
</source>
 
Подробно данный вид оптимизации рассмотрен, например, в Generalized Loop-Unrolling<ref>{{ref-en}} J. C. Huang, T. Leng, Generalized Loop-Unrolling: a Method for Program Speed-Up, 1998</ref>. Он (совместно с [[loopРасщепление fissionтела цикла|расщеплением тела цикла]]) при определённых условиях (отсутствии зависимостей по данным между инструкциями в новом цикле) позволяет выполнять цикл на нескольких [[Центральный процессор|процессорах]].
 
Известен также и необычный способ реализации размотки цикла, называемый «[[устройство Даффа|устройством Даффа]]», — в этой реализации используются малоизвестные и неочевидные возможности синтаксиса [[язык С|языка Си]].
 
== Недостатки ==
Одним из недостатков данного метода оптимизации при его применении совместно с loopрасщеплением fissionтела цикла для дальнейшего распараллеливания является то, что выборка данных из памяти начинает производиться не по порядку следования данных, что может отрицательно сказаться на эффективности работы кэша. Другим, более подходящим видом оптимизации, который позволяет лучше использовать кэш процессоров, является [[loop parallelization]].{{нет АИ|31|05|2010}}<!-- этого не было в оригинале, мистер Э-Сыр -->
 
Одним из недостатков данного метода оптимизации при его применении совместно с loop fission для дальнейшего распараллеливания является то, что выборка данных из памяти начинает производиться не по порядку следования данных, что может отрицательно сказаться на эффективности работы кэша. Другим, более подходящим видом оптимизации, который позволяет лучше использовать кэш процессоров, является [[loop parallelization]].{{нет АИ|31|05|2010}}<!-- этого не было в оригинале, мистер Э-Сыр -->
 
Кроме того, в ходе раскрутки цикла увеличивается число команд, выполняемых на каждой его итерации. Если данное число превысит ёмкость кэша команд, то вместо ожидаемого роста эффективности выполнения цикла возможно её существенное снижение.
Строка 48 ⟶ 45 :
# http://www.intel.com/cd/software/products/asmo-na/eng/compilers/277618.htm#hlo
 
__NOTOC__
[[Категория:Оптимизации компилятора]]
[[Категория:Оптимизирующие преобразования]]