Loop unswitching

Loop unswitching

Loop unswitching (размыкание цикла) состоит в вынесении условия за пределы цикла и дублирования тела цикла с помещением соответствующих вариантов в соответствующие ветви условия. Это позволяет улучшить производительность за счёт того, что современные процессоры могут выполнять векторные операции (данное оптимизирующее преобразование может быть выполнено совместно с loop unrolling, а результатом loop unrolling, в свою очередь, являются несколько операций в итерации, производимые над последовательными участками памяти, которые можно заменить одной векторной, если это позволяет архитектура; так, например, делается в ICC). Кроме того, это позволяет более эффективно выполнить цикл параллельно.

Пример преобразования

for (i = 0; i < 1000; i++)
{
    x[i] = x[i] + y[i];
 
    if (w)
    {
        y[i] = 0;
    }
}

Условие внутри тела цикла мешает его распараллеливанию. После размыкания оно принимает следующий вид:

if (w)
{
    for (i = 0; i < 1000; i++)
    {
        x[i] = x[i] + y[i];
        y[i] = 0;
    }
}
else
{
    for (i = 0; i < 1000; i++)
    {
        x[i] = x[i] + y[i];
    }
}

Каждый из полученных циклов может, в свою очередь, быть оптимизирован отдельно.

Данный метод оптимизации появился в gcc версии 3.4. [1]

См. также

  1. http://www.insidepro.com/kk/036r.shtml

Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Полезное


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

  • Loop unswitching — is a compiler optimization. It moves a conditional inside a loop outside of it by duplicating the loop s body, and placing a version of it inside each of the if and else clauses of the conditional. This can improve the parallelization of the loop …   Wikipedia

  • Loop optimization — In compiler theory, loop optimization plays an important role in improving cache performance, making effective use of parallel processing capabilities, and reducing overheads associated with executing loops. Most execution time of a scientific… …   Wikipedia

  • Loop-switch sequence — A loop switch sequence is a specific derivative of the spaghetti code programming antipattern where a clear set of steps is implemented as a byzantine switch within a loop. Also known as The FOR CASE paradigm… …   Wikipedia

  • Compiler optimization — is the process of tuning the output of a compiler to minimize or maximize some attributes of an executable computer program. The most common requirement is to minimize the time taken to execute a program; a less common one is to minimize the… …   Wikipedia

  • Цикл (программирование) — У этого термина существуют и другие значения, см. цикл. В данной статье или разделе имеется список источников или внешних …   Википедия

  • Цикл просмотра — Цикл  разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность… …   Википедия

  • Цикл Дейкстры — Цикл  разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность… …   Википедия

  • Цикл foreach — Цикл  разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность… …   Википедия

  • Цикл с постусловием — Цикл  разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность… …   Википедия

  • Цикл с предусловием — Цикл  разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность… …   Википедия


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

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