Interested Article - Размыкание цикла

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

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

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

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

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

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

Литература

  • Heiko Falk, Peter Marwedel. . — Springer, 2004. — P. 90. — 226 p.
Источник —

Same as Размыкание цикла