Раскрутка цикла

Раскрутка цикла


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

Пример

for ( i = 1; i < n; i++)
{
    a[i] = (i % b[i]);
}

преобразуется в такой код:

for (i = 1; i < n - 3; i += 4)
{
    a[i] = (i % b[i]);
    a[i + 1] = ((i + 1) % b[i + 1]);
    a[i + 2] = ((i + 2) % b[i + 2]);
    a[i + 3] = ((i + 3) % b[i + 3]);
}
 
for (i = 4*(n/4); i < n; i++)  
{
    a[i] = (i % b[i]);
}

Подробно данный вид оптимизации рассмотрен, например, в Generalized Loop-Unrolling[1]. Он (совместно с loop fission) при определённых условиях (отсутствии зависимостей по данным между инструкциями в новом цикле) позволяет выполнять цикл на нескольких процессорах.

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

Недостатки

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

Примечания

  1. (англ.) J. C. Huang, T. Leng, Generalized Loop-Unrolling: a Method for Program Speed-Up, 1998

Ссылки

  1. http://www.insidepro.com/kk/036r.shtml
  2. http://www.intel.com/cd/software/products/asmo-na/eng/compilers/277618.htm#hlo

Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Полезное


Смотреть что такое "Раскрутка цикла" в других словарях:

  • Раскрутка — Раскрутка: Раскрутка фирмы Раскрутка сайта Раскрутка компилятора Раскрутка цикла Стимулирование сбыта …   Википедия

  • Размотка цикла — В программировании, размотка цикла (англ. loop unwinding) или раскрутка цикла (англ. loop unrolling) техника оптимизации компьютерных программ, состоящая в искусственном увеличении количества инструкций, исполняемых в течение одной… …   Википедия

  • Space-time tradeoff — Space time trade off («выбор оптимального соотношения „место время“ (англ. space time trade off)», или, иначе, «выбор оптимального соотношения „время память“» (англ. time memory trade off))  компромиссный подход к решению ряда задач в… …   Википедия

  • Matrix Template Library — Тип Математическое ПО Операционная система Linux, Unix, Mac OS X, Windows Языки интерфейса C++ Лицензия Boost Software License …   Википедия

  • Программная конвейеризация — циклов (англ. software pipelining)  это техника, используемая компиляторами, для оптимизации циклов, по аналогии с вычислительным конвейером в микропроцессорах. Является формой внеочередного исполнения с той разницей, что… …   Википедия

  • Своя игра — Логотип передачи «Своя игра» (2000 е) Жанр Телевикторина Режи …   Википедия

  • Кибернетическая физика — Кибернетическая физика  область науки на стыке кибернетики и физики, изучающая физические системы кибернетическими методами. Под кибернетическими методами понимаются методы решения задач управления, оценивания переменных и параметров… …   Википедия

  • РД-857 — Тип: ЖРД Топливо: Гептил (НДМГ) Окислитель: N2O4 (AT) Камер сгорания: 1 Страна: СССР Использование: Время эксплуатации: 1967 1969 годы …   Википедия

  • Р-14 — Индекс ГРАУ: 8К65 по классификации МО США и НАТО: SS 5 Skean …   Википедия

  • Битва экстрасенсов (Россия) — У этого термина существуют и другие значения, см. Битва экстрасенсов (значения). Битва экстрасенсов Жанр мистика, реалити шоу Возрастное ограничение 16+ Режиссёр(ы) Фёдор Торстенсен (1 5 й, 10 12 сезон) Ольга Шмид (1 5 й сезон) Олег Чаурс (6 9 й …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»